共计 1230 个字符,预计需要花费 4 分钟才能阅读完成。
一般来说,使用过 Linux 的同学都知道,Linux 文件的权限有 rwx,所有者、所有组、其它用户的 rwx 权限是彼此独立的。为此,经常会听到如果某个 web 文件需要被修改的话,需要加上 777 的权限,这就是让所有用户可写。
但仔细一想,这样的权限未免有些想得比较天真,没有考滤特殊情况。例如 /tmp 目录默认权限是 777,而且有些文件也是允许所有用户访问修改的,那么是不
是任何一个用户都可以将这些删除呢?再如 /etc/shadow 保存的是用户密码文件,默认情况下它的权限是 640,那么只有 shadow 的
owner(root) 才能修改它,按照常规理解,这是不可理解的,因为每个用户都可能修改密码,也就是会修改这个文件。
为了把这些情况解释清楚,需要引入 Linux 特殊文件权限的概念。Linux 特殊文件权限有三个玩意:sticky bit、SGID、SUID,以下一一道来。
sticky bit
sticky bit 只对目录有效,使目录下的文件,只有文件拥有者才能删除(如果他不属于 owner,仅属于 group 或者 other,就算他有 w 权限,也不能删除文件)。
加 sticky bit 的方法:
chmod o+t /tmp 或者
chmod 1777 /tmp
查看是否加了 sticky bit,用 ls -l,可以看到有类似这样的权限:“-rwxrwxrwt”,t 就代表已经加上了 sticky
bit,而且生效了,如果显示的是“-rwxrwxrwT”,说明也已经加上了 sticky bit,但没有生效(因为本来 other 就没有写的权限)。
看看 /tmp 目录的权限,就是 drwxrwxrwt 吧
SGID(The Set GroupID)
加上 SGID 的文件,表示运行这个程序时,是临时以这个文件的拥有组的身份运行的;加上 SGID 的文件夹,表示在这个目录下创建的文件属于目录所有的组,而不是创建人所在的组,在这个目录下创建的目录继承本目录的 SGID。
加 SGID 的方法:
chmod g+s /tmp 或
chmod 2777 /tmp
查看是否加了 SGID,用 ls -l,可以看到类似这样的权限“drwxrwsrwx”,s 就代表已经加上了 SGID,而且生效,如果显示“drwxrwSrwx”,说明已经加上了 SGID,但没有生效(因为本来 group 就没有执行的权限)。
SUID(The Set UserID)
SUID 与 SGID 是一样的,惟一不同的是,运行时是以这个文件的拥有者身份来运行。
加 SUID 的方法:
chmod o+s /tmp 或
chmod 4777 /tmp
同样的,加了 SUID 的文件权限有这类似这两种:“drwsrwxrwx”、“drwSrwxrwx”。
看看 passwd 命令的权限:ll /usr/bin/passwd,是 "-rwsr-x-rx",终于知道为什么执行 passwd 时,可以修改 /etc/shadow 文件了吧
