文件或目录的特殊权限有三种:
一、 Suid:用字母 s 表示。使得可执行程序不管执行者是谁,都能够以其拥有者的身份去运行。(有安全隐患,慎用)占用属主权限部分的最后一位即x位,如果文件原来设有x位则加了suid后用小写的s表示,否则用S表示。注意:suid权限对目录无效。
例如:ls命令的原始权限是下面这样(属主有x权限)
-rwxr-xr-x 1 root root 81240 Oct 4 2006 ls
执行:# chmod u+s ls 后权限变成下面这样(小写s)
-rwsr-xr-x 1 root root 81240 Oct 4 2006 ls
如果像上面那样对ls命令加上了suid权限,带来的后果是普通用户可以使用ls命令查看任何目录的任何文件的信息。包括普通用户原来无法查看的/root目录。
如果对fdisk命令设置了suid权限将使所有用户都能对磁盘分区,如果对service命令设置了suid将使所有用户都能管理系统服务。慎用!
# ls -l |grep ^...s 该命令可以找出当前目录下所有被设置了suid的文件。
可以使用 $ chmod u+s /bin/ls 为可执行程序增加suid权限;也可以使用 $ chmod 4xxx 命令 其中x表示的是可执行程序的普通权限。
二、Sgid:使得程序不管理执行者是谁,都能够以其属组的身份去运行。如果SGID被设置在目录上,在该目录内新建的文件或目录的属组,将会是此目录的属组。 (不常用)占用属组权限的x位。
例如:
-rwxr-sr-x 1 root tty 10124 Apr 11 2007 /usr/bin/wall
wall 命令就是被设置的sgid的,这会使不管使用wall发信息的用户是谁,都将以tty组的权限发送。
可以使用 $ chmod g+s 命令给文件或目录加sgid权限。
也可以使用 $ chmod 2xxx 命令其中x表示的是文件或目录的普通权限。
三、Sticky:为了防止在一个完全开放权限的目录里用户之间相互删除对方完全开放权限的文件,可以对该目录设置sticky权限。注意:sticky权限只能对目录生效。
例如:当前用户是bjxh
$ cd /tmp
$ touch test
$ chmod 777 test
$ su - xhce //换成xhce用户
$ rm /tmp/test
rm: cannot remove `/tmp/aa': Operation not permitted
可以使用 $ chmod o+t /test 给test目录加上sticky权限
也可以使用 $ chmod 1xxx 命令 其中x表示的是目录的普通权限。
有的时候为了增加系统的安全性,会用到 chattr命令。
# chattr +i fileA //不允许文件被做任何改变,如改名,增加数据。
# chattr +a dir //只允许在目录里新加数据,不允许删除
查看用chattr设置的权限,要用 lsattr 命令,可以加上 -a
表示查看隐藏文件的设置; -R递归查看目录下所有文件的子目录设置。
更多用法参考 # man chattr。