在上一篇文章中,你了解到文件有三个不一样的权限集。拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,而后最终一个集合适用于其余全部人。在长列表(ls -l)中这些权限使用符号模式显示在屏幕上。html
每一个集合都有 r、w 和 x 条目,表示特定用户(全部者、组成员或其余)是否能够读取、写入或执行该文件。可是还有另外一种表达这些权限的方法:八进制模式。linux
你已经习惯了十进制编号系统,它有十个不一样的值(0 到 9)。另外一方面,八进制系统有八个不一样的值(0 到 7)。在表示权限时,八进制用做速记来显示 r、w 和 x 字段的值。将每一个字段视为具备以下值:ide
r = 4 w = 2 x = 1
如今,你可使用单个八进制值表达任何组合。例如,读取和写入权限(但没有执行权限)的值为 6。读取和执行权限的值仅为 5。文件的 rwxr-xr-x 符号权限的八进制值为 755。ui
与符号值相似,你可使用八进制值使用 chmod 命令设置文件权限。如下两个命令对文件设置相同的权限:spa
chmod u=rw,g=r,o=r myfile1 chmod 644 myfile1
特殊权限位.net
文件上还有几个特殊权限位。这些被称为 setuid(或 suid)、setgid(或 sgid),以及粘滞位sticky bit(或阻止删除位delete inhibit)。 将此视为另外一组八进制值:orm
setuid = 4 setgid = 2 sticky = 1 除非该文件是可执行的,不然 setuid 位是被忽略的。若是是可执行的这种状况,则该文件(多是应用程序或脚本)的运行就像拥有该文件的用户启动的同样。setuid 的一个很好的例子是 /bin/passwd 实用程序,它容许用户设置或更改密码。此实用程序必须可以写入到不容许普通用户更改的文件中(LCTT 译注:此处是指 /etc/passwd 和 /etc/shadow)。所以它须要精心编写,由 root 用户拥有,并具备 setuid 位,以便它能够更改密码相关文件。
setgid 位对于可执行文件的工做方式相似。该文件将使用拥有它的组的权限运行。可是,setgid 对于目录还有一个额外的用途。若是在具备 setgid 权限的目录中建立文件,则该文件的组全部者将设置为该目录的组全部者。htm
最后,虽然文件粘滞位没有意义会被忽略,但它对目录颇有用。在目录上设置的粘滞位将阻止用户删除其余用户拥有的该目录中的文件。get
在八进制模式下使用 chmod 设置这些位的方法是添加一个值前缀,例如 4755,能够将 setuid 添加到可执行文件中。在符号模式下,u 和 g 也可用于设置或删除 setuid 和 setgid,例如 u+s,g+s。粘滞位使用 o+t 设置。(其余的组合,如 o+s 或 u+t,是没有意义的,会被忽略。)it
http://www.51cto.com/it/news/2019/1014/15367.html
https://article.pchome.net/content-2101735.html
http://www.pcpop.com/article/6067769.shtml
共享与特殊权限
回想一下前一篇文章中关于须要共享文件的财务团队的示例。能够想象,特殊权限位有助于更有效地解决问题。原来的解决方案只是建立了一个整个组能够写入的目录:
drwxrwx---. 2 root finance 4096 Jul 6 15:35 finance 此目录的一个问题是,finance 组成员的用户 dwayne 和 jill 能够删除彼此的文件。这对于共享空间来讲不是最佳选择。它在某些状况下可能有用,但在处理财务记录时可能不会!
另外一个问题是此目录中的文件可能没法真正共享,由于它们将由 dwayne 和 jill 的默认组拥有 - 极可能用户私有组也命名为 dwayne 和 jill,而不是 finance。
解决此问题的更好方法是在文件夹上设置 setgid 和粘滞位。这将作两件事:使文件夹中建立的文件自动归 finance 组全部,并防止 dwayne 和 jill 删除彼此的文件。下面这些命令中的任何一个均可以工做:
sudo chmod 3770 finance sudo chmod u+rwx,g+rwxs,o+t finance 该文件的长列表如今显示了所应用的新特殊权限。粘滞位显示为 T 而不是 t,由于 finance 组以外的用户没法搜索该文件夹。
drwxrws--T. 2 root finance 4096 Jul 6 15:35 finance