目录
特殊权限
概述
Linux系统共12位权限位,基本权限位有9位,但还有3位特殊权限位,
基本权限:UGO上的读写执行权限
[root@cys ~]# ll test.txt
-rwxrwxrwx. 1 root root 206 9月 28 15:18 test.txt
特殊权限:UGO上的特殊权限
- 当UGO对文件具有执行权限时
[root@cys ~]# ll test.txt
-rwsrwsrwt. 1 root root 206 9月 28 15:18 test.txt
#UGO对象的执行权限位上分别为s、s、t
- 当UGO对文件具没有有执行权限时
[root@cys ~]# ll test.txt
-rwSrwSrwT. 1 root root 206 9月 28 15:18 test.txt
#UGO对象的执行权限位上分别为S、S、T
取值
- r:读=4
- w:写=2
- x:执行=1
- SUID:4000
- SGID:2000
- SBIT:1000
作用
SUID 用户设置位 配置在u位
SGID 组设置位 配置在g位
SBIT 粘滞位 配置在o位
-
SUID
主要是对命令,或者二进制文件,以该二进制文件的属主权限来执行该文件 命令:passwd -
SGID
主要是针对目录进行授权,共享目录 -
SBIT
粘滞位,即便是该目录拥有w权限,但是除了root用户,其他用户只能对自己的文件进行删除、移动操作
SUID
概述
在Linux系统中,每个普通用户都可以更改自己的密码,这是合理的设置,问题是,普通用户的信息保存在 /etc/passwd文件中,用户的密码在 /etc/shadow 文件中,也就是说,普通用户在更改自己密码时,修改了 /etc/shadow 文件中的加密密码,但是文件权限显示。普通用户对这两个文件都没有写权限。
[root@cys ~]# ll /etc/passwd
-rw-r--r--. 1 root root 1541 9月 28 17:45 /etc/passwd
[root@cys ~]# ll /etc/shadow
----------. 1 root root 1705 9月 28 17:45 /etc/shadow
问题:为什么普通用户对该文件没有却还能修改该文件的内容?
其实,普通用户可以修改自己的密码在于 passwd 命令。该命令拥有特殊权限 SetUID,也就是在属主的权限位的执行权限上是 s。
可以这样来理解它:当一个具有执行权限的文件设置 SetUID 权限后,用户在执行这个文件时将以文件所有者的身份来执行。
当普通用户使用 passwd 命令更改自己的密码时,实际上是在用 passwd 命令所有者 root 的身份在执行 passwd 命令,root 当然可以将密码写入 /etc/shadow 文件,所以普通用户也可以修改/etc/shadow 文件,命令执行完成后,该身份也随之消失
[root@cys ~]# which passwd
/usr/bin/passwd
[root@cys ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
授权方式
suid 4000 权限字符s(S),用户位置上的x位上设置。
用户位置上有x(执行权限)是s为小写,反之S为大写
授权方法:chmod 4755 filename
chmod u+s filename
测试案例
#1.修改passwd文件权限,匿名用户没有权限查看
# chmod 640 /etc/passwd
# ll /etc/passwd
-rw-r-----. 1 root root 1548 Dec 9 18:45 /etc/passwd
#2.使用普通用户无法查看
# su - user
$ cat /etc/passwd
cat: /etc/passwd: Permission denied
#3.给cat命令赋予suid
# chmod u+s /usr/bin/cat
或 chmod 4755 /usr/bin/cat
# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 48568 Mar 23 2017 /usr/bin/cat
#4.再次使用普通用户查看
# su - test
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
SUID总结
1.让普通用户对可执行的二进制文件,临时拥有二进制文件的所属主权限。
2.如果设置的二进制文件没有执行权限,那么SUID的权限显示就是大S。
3.特殊权限SUID仅对二进制可执行程序有效,其他文件或目录则无效。
注意: SUID极度危险,不信可以尝试对vim或rm进行设定SUID。
SGID
概述
与SGID类似
1.文件的有效执行组身份为文件的拥有组,而不是执行者的组身份
2…当目录拥有SGID权限,目录里新建的文件的拥有组会自动继承目录的拥有组身份
授权方式
suid 2000 权限字符s(S),用户位置上的x位上设置。
用户组位置上有x(执行权限)是s为小写,反之S为大写
授权方法:chmod 2755 directory
chmod g+s directory
测试案例
#1.建立测试目录
# mkdir /test/
#2.给测试目录赋予SetGID权限,检查SetGID是否生效
# chmod 777 /test
# chmod g+s /test
或 chmod 2777 /test
# ll -d /test/
drwxrwsrwx. 2 root root 6 Apr 13 05:21 /test/
#3.切换成普通用户user,并进入该目录,创建文件或目录,检查文件的信息
# su - user
$ cd /test/
$ touch guid_test
$ ll
-rw-rw-r--. 1 user root 0 Apr 13 05:21 guid_test
drw-rw-r--. 2 user root 0 Apr 13 05:21 guid_test_dir
SUID总结
1.针对用户组权限位修改,用户创建的目录或文件所属组和该目录的所属组一致。
2.当某个目录设置了SGID后,在该目录中新建的文件不再是创建该文件的默认所属组
3.使用SGID可以使得多个用户之间共享一个目录的所有文件变得简单。
SBIT(sticky)
概述
当用户对目录拥有w和x权限,即用户可以在此目录中拥有写入权限,如果没有粘滞位,那么普通用户拥有w权限,就可以删除此目录下的所有文件,包括其他用户建立的文件。但是一旦被赋予了粘滞位,除了root可以删除所有文件,普通用户就算有w权限也只能删除自己建立的文件,而不能删除其他用户建立的文件。
/tmp目录是经典的粘滞位目录,谁都有写权限,因此安全成问题,常常是木马第一手跳板。
授权方式
SBIT 1000 权限字符t(T),其他用户位的x位上设置。
其他人位置上有x(执行权限)是t为小写,反之T为大写
授权方法:
chmod 1755 directory
chmod o+t directory
测试案例
#1.直接使用/tmp作为测试目录,查看/tmp目录属性
# ll -d /tmp
drwxrwxrwt. 12 root root 4096 Apr 13 05:32 /tmp/
#2.分别切换普通用户user1和user2,在/tmp目录里创建测试文件
# su - user1
$ touch /tmp/user1.txt
# su - user2
$ touch /tmp/user2.txt
#3.使用user1和user2互相修改、删除对方在/tmp下创建的文件
结果,都无效
SUID总结
1.多个用户都具有写权限的目录,让每个用户只能删自己的文件。
2.特殊sticky目录表现在others的x位,用小t表示,如果没有执行权限是T
3.一个目录即使它的权限为"777"如果是设置了粘滞位,除了目录的属主和"root"用户有权限删除,除此之外其他用户都不允许删除该目录
权限属性
概述
只有root用户可以使用,用来修改文件系统的权限属性,凌驾于r、w、x、SUID、SGID、SBIT之上的权限
设置文件属性(权限),无法设置目录。针对所有用户,包括 root,无法设置目录
lsattr、chattr
lsattr:查看特殊权限
语法:lscattr 文件
chattr:设置特殊权限
i:锁定文件,不能编辑,不能修改,不能删除,不能移动,可以执行
a:仅可以追加文件,不能编辑,不能删除,不能移动,可以执行
语法: chattr [+-=][选项] 文件或目录名
//创建文件并设置属性
# touch file_a file_i
# lsattr file_a file_i
---------------- file_a
---------------- file_i
//设置属性
# chattr +a file_a
# chattr +i file_i
# lsattr file_a file_i
-----a---------- file_a
----i----------- file_i
//a权限, 无法覆盖写入和删除文件
# echo "aa" > file_a
bash: file_a: Operation not permitted
# rm -f file_a
rm: cannot remove ‘file_a’: Operation not permitted
//a权限, 只能追加, 适用于日志文件
# echo "aa" >> file_a
//i权限, 无法写入, 无法删除
# echo "i" > file_i
bash: file_i: Permission denied
# echo "i" >> file_i
bash: file_i: Permission denied
# rm -f file_i
rm: cannot remove ‘file_i’: Operation not permitted
//解除限制
# chattr -a file_a
# chattr -i file_i
权限掩码umask
概述
- 什么是umask
当我们登录系统之后,创建一个文件总是有一个默认权限,比如:
目录默认权限:755
文件默认权限:644是umask设置了用户创建文件的默认权限
- umask是如何改变新文件的权限
系统默认umask为022,那么当我们创建一个目录时,正常情况下目录的权限应该是777,但是umask表示要减去的值,
所以新目录文件的权限应该是777-022=755。
至于文件的权限也依次类推:666-022=644
- umask涉及哪些配置文件
umask涉及到的相关文件/etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile
shell (vim,touch) :如果修改umask–> 会影响创建的新文件或目录权限
useradd:如果修改umask–> 会影响用户HOME家目录权限
vsftpd:服务如果修改–umask–> 会影响ftp服务中新创建文件或创建目录权限
umask计算
1.计算方式
- 目录:777-umask
- 文件分奇数和偶数
- 奇数:用7减,当umask的值为奇数,用7减去这个位置的umask值
- 偶数:用6减,当umask的值为偶数,用6减去这个位置的umask值
# umask 023 //临时修改umask,重启后会恢复为0022,第一个0为特殊权限
# mkdir d023 //此时目录权限为777-023=754
# touch f023 //此时文件权限为667-023=644
# ll -d d023
drwxr-xr--. 2 root root 6 3月 7 10:43 d023
# ll f023
-rw-r--r--. 1 root root 0 3月 7 10:44 f023
修改umask值
- 临时修改:使用umask命令
[root@cys ~]# umask
0022
[root@cys ~]# umask 023
[root@cys ~]# umask
0023
- 永久修改:修改文件 /etc/bashrc,/etc/profile,~/.bashrc,~/.bash_profile(不建议)
# vim /etc/login.defs
UMASK 077
# useradd dba
# ll -d /home/dba/
drwx------. 4 dba dba 4096 3 月 11 19:50 /home/dba/
# vim /etc/login.defs
UMASK 000
# useradd sa
# ll -d /home/sa/
drwxrwxrwx. 4 sa sa 4096 3 月 11 19:53 /home/sa/