目录
一, Linux 系统特殊权限概述
二, 特殊权限 suid 介绍
三, 特殊权限 sgid 介绍
四, 特殊权限 sbit 介绍
五, 特殊权限总结:
六, Linux 权限属性 chattr 概述
七, Linux 进程掩码 umask
一, Linux 系统特殊权限概述
除了 r(读), w(写), x(执行) 这三种普通权限外, 在查询系统文件权限时会发现还有其他的权限字母.
例如:
- [[email protected] ~]# ll /usr/bin/passwd
- -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
- [r[email protected] ~]# ll /usr/bin/write
- -rwxr-sr-x. 1 root tty 19624 Oct 31 2018 /usr/bin/write
- [[email protected] ~]# ll /tmp/ -d
- drwxrwxrwt. 7 root root 145 Jul 2 20:18 /tmp/
二, 特殊权限 suid 介绍
1.SUID 权限 (4000)
在 Linux 系统中, 每个普通用户都可以更改自己的密码, 这是合理的设置, 问题是, 普通用户的信息保存在 /etc/passwd 文件中, 用户的密码在 /etc/shadow 文件中, 也就是说, 普通用户在更改自己密码时, 修改了 /etc/shadow 文件中的加密密码, 但是文件权限显示. 普通用户对这两个文件都没有写权限.
- [[email protected] ~]# ll /etc/passwd /etc/shadow
- -rw-r--r--. 1 root root 997 Jul 2 10:28 /etc/passwd
- ----------. 1 root root 1084 Jul 2 10:28 /etc/shadow
因为 passwd 命令有 SetUID 权限, 所以不能查看 / etc/shadow 文件内容, 因为查看文件的命令, 例如, cat, 没有 SetUID 权限:
示例:
- # 创建 lamp 用户
- [[email protected] ~]# useradd lamp
- # 给密码 1
- [[email protected] ~]# echo 1 |passwd --stdin lamp
- Changing password for user lamp. #更改用户 lamp 的密码
- passwd: all authentication tokens updated successfully. #所有的身份验证令牌已经成功更新.
- # 切换 lamp 用户
- [[email protected] ~]# su - lamp
- # 修改密码, 至少 8 位
- [[email protected] ~]$ passwd
- # 查看 / etc/shadow
- [[email protected] ~]$ cat /etc/shadow
- cat: /etc/shadow: Permission denied #没有权限
- # 给 cat 命令授权 SetUID 权限
- [[email protected] ~]# chmod 4755 /bin/cat
- # 查看 cat 权限
- [[email protected] ~]# ll /bin/cat
-rwsr-xr-x. 1 root root 48568 11 月 22 2013 /bin/cat
- # 切换用户
- [[email protected] ~]# su - lamp
- # 再次查看 / etc/shadow
- [[email protected] ~]$ cat /etc/shadow
- root:$6$TBgaEEzA$TZLUb9QLtM26nvQwjfALLeubnlg1Y1TJLiwcfYxzsZthSmTZmCkg3osOJn1rAAmTVuWsI0H.OTLVanAej2Jdl0:18067:0:99999:7:::
2. 授权 SUID
SUID(4000): 会在属主权限位的执行权限上写个 s
如果该属主权限位上有执行权限, 则: s
如果该属主权限位上没有执行权限, 则: S
授权方式:
- chmod u+s filename
- chmod 4755 filename
示例:
- [[email protected] ~]# touch filename #创建文件
- [[email protected] ~]# ll filename #查看文件
- -rw-r--r--. 1 root root 0 Jul 2 23:02 filename
- [[email protected] ~]# chmod u+s filename #授权权限
- [[email protected] ~]# ll filename #查看文件
- -rwSr--r--. 1 root root 0 Jul 2 23:02 filename
3.SUID 总结:
1. 让普通用户对可执行的二进制文件, 临时拥有二进制文件的属主权限
2. 如果设置的二进制文件没有执行权限, 那么 suid 的权限显示就是 S
3. 特殊权限 suid 仅对二进制可执行程序有效, 其他文件或目录则无效
注意: suid 极其危险, 不信可以尝试对 VIM 或者 rm 命令进行设定 suid
三, 特殊权限 sgid 介绍
1.SGID 权限 (2000)
将目录设置为 SGID 后, 如果在该目录下创建文件, 都将与该目录的所属组保持一致
- [[email protected] ~]# ll /bin/write
- -rwxr-sr-x. 1 root tty 19624 Oct 31 2018 /bin/write
2.sgid 权限设置
如果该属组权限位上有执行权限, 则: s
如果该属组权限位上没有执行权限, 则: S
- [[email protected] ~]# chmod 2755 /tmp/test/
- [[email protected] ~]# chmod g+s /tmp/test/
- [[email protected] ~]# mkdir /tmp/test/ #创建目录
- [[email protected] ~]# ll /tmp/ #查看目录
- drwxr-xr-x. 2 root root 6 Jul 2 23:11 test
- [[email protected] ~]# chmod 2755 /tmp/test/ #权限设置
- [[email protected] ~]# ll /tmp/ #查看目录
- drwxr-sr-x. 2 root root 6 Jul 2 23:11 test
3.sgid 作用:
SetGID 的作用
1. 针对用户组权限位修改, 用户创建的目录或文件所属组和该目录的所属组一致.
2. 当某个目录设置了 sgid 后, 在该目录中新建的文件不在是创建该文件的默认所属组
3. 使用 sgid 可以使得多个用户之间共享一个目录的所有文件变得简单.
四, 特殊权限 sbit 介绍
sticky(SI TI KI) 粘滞, 目前只对目录有效, 作用如下:
普通用户对该目录拥有 w 和 x 权限, 即普通用户可以在此目录中拥有写入权限, 如果没有粘滞位, 那么普通用户拥有 w 权限, 就可以删除此目录下的所有文件, 包括其他用户简历的文件. 但是一旦被赋予了粘滞位, 除了 root 可以删除所有文件, 普通用户就算有 w 权限也只能删除自己建立的文件, 而不能删除其他用户简历的文件.
系统中存在的 / tmp 目录是经典的粘滞位目录, 谁都有写权限, 因此安全成问题, 常常是木马第一手跳板
1.sticky 授权方法
粘滞位:
- [[email protected] ~]# ll -d /tmp/
- drwxrwxrwt. 8 root root 105 Jul 2 10:15 /tmp/
如果该其他用户权限位上有执行权限, 则: t
如果该其它用户权限位上没有执行权限, 则: T
授权方式:
- [[email protected] ~]# chmod 1755 /opt
- [[email protected] ~]# chmod o+t /opt
2.sticky 的作用:
1. 让多个用户都具有写权限的目录, 并让每个用户只能删自己的文件.
2. 特殊 sticky 目录表现在 others 的 x 位, 用小 t 表示, 如果没有执行权限是 T
3. 一个目录即使它的权限为 "777" 如果是设置了粘滞位, 除了目录的属主和 "root" 用户有权限删除, 除此之外其他用户都不允许删除该目录.
五, 特殊权限总结:
1.SUID
主要是对命令, 或者二进制文件, 以该二进制文件的属主权限来执行该文件 命令: passwd
2.SGID
主要是针对目录进行授权, 共享目录
3.SBIT
粘滞位, 即便是该目录拥有 w 权限, 但是除了 root 用户, 其他用户只能对自己的文件进行删除, 移动操作
一个普通用户: zls 属于 oldboyedu 这个组
一个文件权限: rwxrw-r-x root.oldboyedu filename1
r: 读 4
w: 写 2
x: 执行 1
- suid:4000
- sgid:2000
- t:1000
六, Linux 权限属性 chattr 概述
1.chattr:
只有 root 用户可以使用, 用来修改文件系统的权限属性, 凌驾于 r w x suid sgid t 之上的权限
chattr 命令格式:[[email protected] ~]# #chattr [+-=][选项] 文件名或目录名
设置文件属性 (权限), 针对所有用户, 包括 root
lsattr:
查看特殊权限
chattr:
设置特殊权限
i: 锁定文件, 不能编辑, 不能修改, 不能删除, 不能移动, 可以执行
a: 仅可以追加文件, 不能编辑, 不能删除, 不能移动, 可以执行
- #+ 增加选项 - 减少选项 = 等于某个权限
- # 创建文件并设置属性
- [[email protected] ~]# touch file_a file_i
- [[email protected] ~]# lsattr file_a file_i
- ---------------- file_a
- ---------------- file_i
- # 设置属性
- [[email protected] ~]# chattr +a file_a
- [[email protected] ~]# chattr +i file_i
- [[email protected] ~]# lsattr file_a file_i
- -----a---------- file_a
- ----i----------- file_i
- #a 权限, 无法覆盖写入和删除文件
- [[email protected] ~]# echo 111> file_a
- -bash: file_a: Operation not permitted
- [[email protected] ~]# rm -f file_a
- rm: cannot remove 'file_a': Operation not permitted
- #a 权限, 只能追加, 适用于日志文件
- [[email protected] ~]# echo 111>> file_a
- [[email protected] ~]# cat file_a
- 111
- # i 权限, 无法写入, 无法删除
- [[email protected] ~]# echo 111> file_i
- -bash: file_i: Permission denied
- [[email protected] ~]# echo 111>> file_i
- -bash: file_i: Permission denied
- [[email protected] ~]# rm -f file_i
- rm: cannot remove 'file_i': Operation not permitted
- [[email protected] ~]# chattr -a file100
- chattr: No such file or directory while trying to stat file100
- # 解除限制
- [[email protected] ~]# chattr -a file_a
- [[email protected] ~]# chattr -i file_i
- # 再次查看文件及属性
- [[email protected] ~]# lsattr file_a file_i
- ---------------- file_a
- ---------------- file_i
七, Linux 进程掩码 umask
1. 什么是 umask
当我们登录系统之后, 创建一个文件总是有一个默认权限, 比如:
目录默认权限: 755
文件默认权限: 644
是 umask 设置了用户创建文件的默认权限
2.umask 是如何改变新文件的权限
系统默认 umask 为 022, 那么当我们创建一个目录时, 正常情况下目录的权限应该是 777, 但是 umask 表示要减去的值, 所以新目录文件的权限应该是 777-022=755. 至于文件的权限也依次类推: 666-022=644
3.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 值为: 035(其他用户组位为奇数)
- // 计算出来的权限.
- 6 6 6 - 0 3 5 = 6 3 1 ,
如果结果是奇数, 需加 1, 实为 642
所以, 在其他用户组位再加 1.
3. 默认目录权限计算方法
7 7 7 - 0 2 2 = 7 5 5
在 shell 进程中创建文件
- # 查看当前用户的 umask 权限
- [[email protected] ~]# umask
- 0022
- [[email protected] ~]# touch file0022
- [[email protected] ~]# mkdir dir0022
- [[email protected] ~]# ll -d file0022 dir0022/
- drwxr-xr-x 2 root root 6 Jan 24 09:02 dir0022/
- -rw-r--r-- 1 root root 0 Jan 24 09:02 file0022
修改 umask 值, 临时生效, 再开机会回到默认值
- [[email protected] ~]# umask 000
- [[email protected] ~]# mkdir dir000
- [[email protected] ~]# touch file000
- [[email protected] ~]# ll -d dir000 file000
- drwxrwxrwx 2 root root 6 Jan 24 09:04 dir000
- -rw-rw-rw- 1 root root 0 Jan 24 09:04 file000
来源: http://www.bubuko.com/infodetail-3111496.html