0x00 前言
Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功。这也是Linux有别于Windows的机制,也是基于这个权限机制,Linux可以有效防止病毒自我运行,因为运行的条件是必须要有运行的权限,而这个权限在Linux是用户所赋予的,通常使用chmod
命令来修改文件权限。
0x01 数字法
-
使用数字代替
r、w、x
,r
等同于4,w
等同于2,x
等同于1,-
等同于0 -
权限组合使用那个数字的和来表示,例如
r-w
(5)、rw-
(6)、rwx
(7) -
使用三个数字来表示文件对拥有者、所属组、和其他三种角色的权限设定
-
$chmod 700 cat #cat的权限为
-rwx------
0x02 文字法
- 引入u、g、o、a分别代表拥有者、所属组、其他和全部
- 引入三个操作符+、-、=分别代表增加、减去、设定
- "u+w"表示给拥有者增加w权限
- "u=rwx,go=rx"给拥有者设定rwx权限,给所属组和其他设定rx权限
- chmod a-x cat #去除cat文件的执行权限
0x03 文件权限 SetUID
文件权限中不仅有rwx
,还有s
和t
,s
可以出现在文件拥有者的x
权位上,称为Set UID
。
ls -l /bin/su
查看su这个命令的权限是-rwsr-xr-x 1 root root 32184 Apr 11 14:50 /bin/su
,可以看出s
占用了x
的权位。
注意
- SUID仅对二进制程序有效
- 执行者对该程序具有x的可执行权限
- 执行权限仅在执行该程序的过程中有效
- 执行者将具有该程序拥有者的权限
例子
- 执行su,任何用户都会获得root权限,因为su的拥有者是root
- 该权限仅在执行的su命令中有效,su能够切换用户权限的原理
- u+s设置SUID权限
- 需要提供给普通用户,但是又需要root权限才能正确执行的程序都拥有SUID
- SUID是实际用户和有效用户发生不一致的触发条件
- chmod u+s /bin/kill #现在当普通用户执行kill时,因为kill被授予了SetUID权限,在执行的一瞬间具有了root权限,用户想关闭任何服务都可以
还有就是sudo
假借root权限也是如此,普通用户在使用sudo
执行命令的过程中拥有root权限,但是命令结束后还是普通用户的权限,但是需要注意的是,Linux下如果sudo
命令有效配置服务器时方便,但也是危险的。sudo su -
可以让普通用户用自己的密码就能登录到root
用户,所以有时候Set UID
也很危险。
禁用sudo(test用户为例)–/etc/sudoers
$ groups #查看当前用户所属用户组,如果有sudo用户组,则删除
$ sudo gpasswd -d test sudo #将test从sudo组中删除
重启发现没有test用户没有sudo了