Linux权限管理

Linux权限管理

什么是权限

我们可以把他理解为操作系统对用户能够执行的功能所设立的限制,主要用于约束用户能对系统所做的操作,以及内容访问的范围,或者说,权限是指某个特定的用户具有特定的系统资源使用权利。


为什么要有权限

因为在公司中,服务器可能就那么几台,但是运维可能有多个,我们多个运维要登录同一台服务器,那么不可能只有一个root用户,我们需要根据运维的等级,来分配用户权限。


权限与用户的关系

Linux中的文件或目录的权限和用户及用户组关联很大,Linux中每个文件或目录都有一组共9个基础权限位,每三个字符被分为一组,他们分别是属主权限位(占三个字符)、属组权限位(占三个字符)、其他用户权限位(占三个字符)
比如rwxr-xr-x linux中正是这9个权限位来控制文件属主(User)、属组(Group)、其他用户(Other)基础权限。

每种身份,又对应了3种权限:r(readable)、w(writeable)、x(excutable)

权限中的rwx分别代表什么含义

权限作用代表数字
r(read)可读4
w(write)可写2
x(execute)可执行1
-(没有权限)该权限位上没有权限0

文件权限示例:

[root@oldboy ~]# $ ll test.txt 
-rw-r--r--. 1 root root 799 Jun  9 15:06 test.txt

# 以数字的方式查看权限
[root@oldboy /tmp/oldboy]# $ stat /tmp/pass.txt -c %a
644

权限修改命令chmod

ugo方式

# ugo方式
+	增加权限
-	删除权限
=	设置权限
chmod -R(递归修改)
[root@oldboy ~]# $ chmod g+r /tmp/file01
[root@oldboy ~]# $ chmod o+w /tmp/file01
[root@oldboy ~]# $ chmod u-x /tmp/file01
[root@oldboy ~]# $ chmod u-x,g+rw,o+rx /tmp/file01
[root@oldboy ~]# $ chmod u=x,g+rw,o-rx /tmp/file01
# ugo a=all
# 所有权限位都 +w权限
[root@oldboy ~]# $ chmod a+w /tmp/file01
# 简写
[root@oldboy ~]# $ chmod +w /tmp/file01

number

# number方式
mkdir dir       //建立目录
touch dir/file  //建立文件

示例1:
chmod 777 dir/   //修改dir目录权限为777
chmod u+rwx,g+rwx,o+rwx 

示例2:
chmod 666 dir/file     //修改file文件权限为666
chmod u+rw,g+rw,o+rw 

示例3:

chmod -R 766 dir/  //修改目录及子目录权限

rwx对文件的影响

W:可写但是不能读取和执行
r:可读但是不能写入
x:什么也不能干

执行(x)权限必须配合可读(r)权限,因为只有读取了里面的内容才可以执行

rwx对目录的影响

r:只能查看目录下的文件名,无法看到详细属性,不能创建文件
w:什么也不能干
x:什么也不能干
# 目录权限必须组合才能使用
rw:可以查看文件名和只有一个 r 效果一样,要想发挥它本身的作用必须和 x 组合使用
wx:组合权限,可以创建文件,但是不能查看
rx:组合权限,可以查看目录下文件的详细属性,但是不能创建
[ld@oldboy oldboy]$ ll
ls: cannot open directory .: Permission denied

[ld@oldboy oldboy]$ ll /tmp/oldboy/
ls: cannot access /tmp/oldboy/file01: Permission denied
ls: cannot access /tmp/oldboy/file02: Permission denied
total 0
-????????? ? ? ? ?            ? file01
-????????? ? ? ? ?            ? file02

[ld@oldboy oldboy]$ ls /tmp/oldboy/
ls: cannot access /tmp/oldboy/file01: Permission denied
ls: cannot access /tmp/oldboy/file02: Permission denied
file01  file02

属主属组的修改命令chown

chown
change owner
-R:递归修改这个目录及目录下的文件和子目录
[root@oldboy /tmp/oldboy]# $ chown ld:ld /tmp/oldboy/*
[root@oldboy /tmp/oldboy]# $ chown ld.ld /tmp/oldboy/
[root@oldboy /tmp/oldboy]# $ chown -R ld.ld /tmp/oldboy/

特殊权限

  • 普通用户可以修改密码吗?

    可以修改密码,但是只能修改自己的密码
    
  • 修改密码的相关文件在哪里?

    /etc/shadow
    
  • 密码相关文件的权限是什么?

    [root@oldboy ~]# $ ll -d /etc/shadow
    ----------. 1 root root 1758 Jun 15 19:28 /etc/shadow
    
  • 普通用户没有权限操作/etc/shadow文件,为什么还能修改密码?

    setuid权限

    作用:将文件设置为SUID后,执行此文件的用户以此文件的属主权限来执行

    [root@oldboy ~]# $ ll /usr/bin/passwd
    -rwsr-xr-x. 1 root root 27856 Apr  1  2020 /usr/bin/passwd
    
    1.让普通用户对可执行的文件,临时拥有二进制文件的属主权限
    2.s是一个特殊权限,执行此文件的用户以此文件的属主权限来执行
    3.特殊权限suid对可执行文件有效,其他文件或目录无效
    4.s是特殊权限,数字是4000,占属主权限上的x位置,
    5.如果是小s,说明该文件原属主权限位上有x权限,如果是大S,说明该原件原属主权限位上没有x权限。
    
    ## 授权方法:
    chmod u+s
    s 4000
    [root@oldboy ~]# $ chmod u+s /bin/cat
    [root@oldboy ~]# $ ll /bin/cat
    -rwsr-xr-x. 1 root root 54080 Aug 20  2019 /bin/cat
    
    [ld@oldboy ~]$ cat /etc/shadow
    

    setgid权限

    作用:将目录设置为SGID后,如果在该目录下创建文件,都将与该目录的所属组保持一致

    1.针对用户组权限位修改,用户此目录下创建文件或目录的所属组和该目录的所属组一致。
    2.当某个目录设置了sgid后,在该目录中新建的文件不再是创建该文件的默认所属组
    3.使用sgid可以使得多个用户之间共享一个目录的所有文件变得简单。
    
    [root@oldboy ~]# $ ll /usr/bin/write 
    -rwxr-sr-x. 1 root tty 19544 Oct  1  2020 /usr/bin/write
    ## 授权方法:
    chmod g+s
    s: 2000
    # 创建一个目录
    [root@oldboy /tmp]# $ mkdir test
    # 设置sgid权限
    [root@oldboy /tmp]# $ chmod g+s /tmp/test
    [root@oldboy /tmp]# $ ll -d test
    drwxr-sr-x. 2 root root 6 Jun 16 14:59 test
    # 给其他用户权限位增加W权限
    [root@oldboy /tmp]# $ chmod o+w /tmp/test/
    [root@oldboy /tmp]# $ ll -d /tmp/test
    drwxr-srwx. 2 root root 20 Jun 16 15:02 /tmp/test
    # 用其他用户在/tmp/test/下创建文件
    [ld@oldboy ~]$ touch /tmp/test/file02
    [ld@oldboy ~]$ ll /tmp/test/file02
    -rw-rw-r--. 1 ld root 0 Jun 16 15:07 /tmp/test/file02
    

    sbit粘滞位权限

    普通用户对该目录拥有w和x权限,即普通用户可以在此目录中拥有写入和删除权限,如果没有粘滞位,那么普通用户拥有w权限,就可以删除此目录下的所有文件,包括其他用户建立的文件。但是一旦被赋予了粘滞位,除了root可以删除所有文件,普通用户就算有w权限也只能删除自己建立的文件,而不能删除其他用户建立的文件。
    
    系统中存在的/tmp目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板。
    
    1.让多个用户都具有写权限的目录,并让每个用户只能删自己的文件。
    2.特殊sticky目录表现在others的x位,用小t表示,如果没有执行权限是T
    3.一个目录即使它的权限为"777"如果是设置了粘滞位,除了目录的属主和"root"用户有权限删除,除此之外其他用户都不允许删除该目录。
    [root@oldboy ~]# $ ll -d /tmp/
    drwxrwxrwt. 8 root root 268 Jun 16 11:58 /tmp/
    
    [root@oldboy ~]# $ stat /tmp -c %a
    1777
    
    # 授权方式:
    chmod o+t
    t:1000
    
    

Linux权限属性chattr

chattr:只有root用户可以使用,用来修改文件系统的权限属性,建立凌驾于rwx基础权限之上的授权
chattr命令格式:[root@oldboy ~]# $ chattr [+-=][选项] 文件名或目录名
设置文件属性(权限),针对所有用户,包括root
选项:+增加权限 -减少权限 =等于某个权限
i:不能移动,不能删除,不能修改内容,只能拷贝
a:只能追加内容,和拷贝
lsattr:查看chattr设置的特殊权限

# 创建文件并查看属性
[root@oldboy /tmp]# $ touch file-a file-i
[root@oldboy /tmp/test]# $ lsattr file-a file-i
---------------- file-a
---------------- file-i
# 设置属性
[root@oldboy /tmp/test]# chattr +a file-a
[root@oldboy /tmp/test]# chattr +i file-i
[root@oldboy /tmp/test]# lsattr file-a file-i
-----a---------- file-a
----i----------- file-i
# a权限,无法覆盖和删除文件,只能追加,适用于日志文件
[root@oldboy /tmp/test]# echo '123' > file-a
-bash: file-a: Operation not permitted

[root@oldboy /tmp/test]# rm -f file-a
rm: cannot remove ‘file-a’: Operation not permitted

[root@oldboy /tmp/test]# echo '123' >> file-a

# i:不能移动,不能删除,不能修改内容,只能拷贝
[root@oldboy /tmp/test]# mv file-i /tmp/
mv: cannot move ‘file-i’ to ‘/tmp/file-i’: Operation not permitte

[root@oldboy /tmp/test]# rm -f file-i
rm: cannot remove ‘file-i’: Operation not permitted

[root@oldboy /tmp/test]# cp file-i /tmp/

# 解除限制
[root@oldboy /tmp/test]# chattr -a file-a
[root@oldboy /tmp/test]# chattr -i file-i

进程掩码umask

什么是umask

当我们登录系统之后,创建一个文件总是有一个默认权限,比如:
目录默认权限:755
文件默认权限:644
那么这个权限是怎么来的呢?	就是umask控制的,umask设置了用户创建文件的默认权限

umask是如何改变新文件的权限

系统默认umask为022,那么当我们创建一个目录时,正常情况下目录的权限应该是777,但是umask表示要减去的值,所以新目录文件的权限应该是777-022=755。至于文件的权限也依次类推:666-022=644

# 查看系统的进程掩码
[root@oldboy ~]# $ umask
0022

umask涉及到的配置文件

umask涉及到的相关文件/etc/bashrc  /etc/profile  ~/.bashrc  ~/.bash_profile

注意umask影响的范围
shell (vim,touch) --umask--> 新文件或目录权限
vsftpd --umask--> 新文件或目录权限
samba --umask--> 新文件或目录权限
useradd --umask--> 用户 HOME

1.假设umask值为:022(所有位为偶数)
//文件的起始权限值
6 6 6  -  0 2 2  = 6 4 4 

2.假设umask值为:045(其他用户组位为奇数)
//计算出来的权限。由于umask的最后一位数字是5,所以,在其他用户组位再加1。
6 6 6  -   0 4 5 = 6 2 1+1

3.默认目录权限计算方法
7 7 7  -  0 2 2 = 7 5 5
 
umask 044    //umask所有位全为偶数时
示例:mkdir d044   //目录733
示例:touch f044   //文件622

umask 023    //umask值的部分或全部位为奇数时
示例:mkdir d023   //目录754
示例:touch f023   //文件644

umask 035    //umask值的所有位为奇数时
示例:mkdir d035   //目录742
示例:touch f035   //文件642

示例1:在shell进程中创建文件

# 查看当前用户的umask权限
[root@oldboy /tmp/test]# umask
0022

[root@oldboy /tmp/test]# touch file01
[root@oldboy /tmp/test]# mkdir test01
[root@oldboy /tmp/test]# ll -d file01 test01
-rw-r--r--. 1 root root 0 Jun 16 16:10 file01
drwxr-xr-x. 2 root root 6 Jun 16 16:12 test01

示例2:修改shell umask值(临时生效)

[root@oldboy /tmp/test]# umask 000
[root@oldboy /tmp/test]# touch file000
[root@oldboy /tmp/test]# mkdir dir000
[root@oldboy /tmp/test]# ll -d file000 dir000/
drwxrwxrwx. 2 root root 6 Jun 16 16:15 dir000/
-rw-rw-rw-. 1 root root 0 Jun 16 16:15 file000

示例3: 修改shell umask值(永久生效, 强烈不建议修改)

[root@oldboy /tmp/test]# vim /etc/profile
if [ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ]; then 
umask 002
else
umask 022
fi

# 立即生效
[root@oldboy /tmp/test]# source /etc/profile

示例4: 通过umask决定新建用户HOME目录的权限

[root@oldboy ~]# vim /etc/login.defs
UMASK 077
[root@oldboy ~]# useradd dev
[root@oldboy ~]# ll -d /home/dev/
drwx------. 4 dev dev 4096 311 19:50 /home/dev/

[root@oldboy ~]# vim /etc/login.defs
UMASK 000
[root@oldboy ~]# useradd sa
[root@oldboy ~]# ll -d /home/sa/
drwxrwxrwx. 4 sa sa 4096 311 19:53 /home/sa/
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值