强制位
suid 意味着如果某个用户对属于自己的程序设置了这种权限,那么其他用户在执行这程序时也会具有其文件拥有者相应权限。于是,如果超级用户( root )的某一程序设置了这样的权限,那么其他普通用户在执行它的期间也同样具有超级用户的权限。同样的原则也适用于sguid,执
行相应程序的用户将具有该文件所属用户组的权限。
为什么要使用suid/guid
为什么要使用这种类型的脚本?这里有一个很好的例子。你管理着几个大型的数据库系统,而对它们进行备份需要有系统管理权限。你写了几个脚本,并设置了它们的suid,这样你指定的一些用户只要执行这些脚本就能够完成相应的工作,而无须以数据库管理员的身份登录,以免不小心破坏了数据库服务器。通过执行这些脚本,他们可以完成数据库备份及其他管理任务,而且在这些脚本运行结束之后,他们就又回复到他们作为普通用户的权限。另一个例子是/bin/passwd ,要读写/etc/passwd文件需要超级用户权限,但一般用户也需要随时可以改变自己的密码,所以/bin/passwd就设置了suid,当用户该自己密码的时侯就拥有了超级用户权限。
•默认情况下,用户建立的文件属于用户当前所在的组。
•目录上设置了setgid,表示在此目录中,任何人建立的文件,都会属于目录所属的组。
默认情况下,如果一个目录上有w和x权限,则任何人可以在此目录中建立与删除文件。
一旦目录上设置了冒险位,则表示在此目录中,只有文件的拥有者、目录的拥有者与系统管理员可以删除文件。
在可执行文件上,用户可以添加set uid和set gid。
默认情况下,用户执行一个指令,会以该用户的身份来运行进程。
指令文件上的强制位,可以让用户执行的指令,以指令文件的拥有者或所属组的身份运行进程。
设置s u i d
/
g u i d
命令
结果
含义
chmod 4755
-rwsr-xr-x
suid、文件属主具有读、写和执行的权限,所有其他用户具有读和执行的权限
chmod 6711
-rws--s--x
suid、sgid、文件属主具有读、写和执行的权限,所有其他用户具有执行的权限
chmod 4511
-rwS--x--x
suid、文件属主具有读、写的权限,所有其他用户具有执行的权限
上面的表中有具有这样权限的文件:rwS --x -- x,其中S为大写。它表示相应的执行权限位并未被设置,这是一种没有什么用处的suid设置可以忽略它的存在。
注意,chmod命令不进行必要的完整性检查,可以给某一个没用的文件赋予任何权限,但 chmod 命令并不会对所设置的权限组合做什么检查。因此,不要看到一个文件具有执行权限,就认为它一定是一个程序或脚本。
umask
当你最初登录到系统中时, umask 命令确定了你创建文件的缺省模式。这一命令实际上和chmod命令正好相反。你的系统在安装时为你设置一个合理的umask值,以确保你创建的文件具有所希望的缺省权限,防止其他非同组用户对你的文件具有写权限。在已经登录之后,可以按照个人的偏好使用umask命令来改变文件创建的缺省权限。相应的改变直到退出该shell或使用另外的umask命令之前一直有效。一般来说,umask命令是在 /etc/profile 文件中设置的,每个用户在登录时都会引用这个文件,所以如果希望改变所有用户的umask,可以在该文件中加入相应的条目。如果希望永久性地设置自己的umask值,那么就把它放在自己 $HOME 目录下的 .profile 或 .bash_profile 文件中。这些我们将在“用户”一章中作具体介绍。
在shell下直接输入umask,显示的是当前umask值。umask 022,则表示把umask值改为022,只在此次登录中生效。
计算 umask 值
umask 命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的 umask 值中的数字。对于文件来说,这一数字的最大值分别是6。系统不允许你在创建一个文本文件时就赋予它执行权限,必须在创建后用chmod命令增加这一权限。目录则允许设置执行权限,这样针对目录来说, umask 中各个数字最大可以到7。
对普通用户而言,其umask值为002,即其建立起来的普通文件默认权限为664,目录权限为775。超级用户的umask值为022,即建立普通文件默认权限为644,目录权限为755。