有三种:SUID,SGID,Sticky
SUID :运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者。
当我们希望某个普通用户能够运行管理员能运行的命令时,可以给该命令SUID权限,危险的权限,不要乱给。
给文件SUID权限:
[[email protected] ~]# chmod u+s /bin/cat
[[email protected] ~]# chmod u-s /bin/cat
如果文件本身原来就有执行权限,则SUID显示为s(小s),否则显示S(大S)。
例如:文件权限如下:
[[email protected] ~]# ll /bin/cat
-rwxr-xr-x. 1 root root 48568 Nov 22 2013 /bin/cat
[[email protected] ~]# ll /etc/shadow
----------. 1 root root 1532 Nov 18 17:32 /etc/shadow
当某个普通用户执行cat /etc/shadow命令时,结果如下:
[[email protected] ~]$ cat /etc/shadow
cat: /etc/shadow: Permission denied (没有权限)
[[email protected] ~]# chmod u+s /bin/cat (给cat特殊权限)
[[email protected] ~]# ll /bin/cat
-rwsr-xr-x. 1 root root 48568 Nov 22 2013 /bin/cat
[[email protected] ~]$ cat /etc/shadow (可以执行该命令了)
root:$6$ywmofjJsEJYHh7xr$fbqAyFiYzlrEeZpAnH5QXN63zuOPd3NW9ZUDzOwqalm7Mg5Fg0rStYBnoiVbuLmCAnOAYZLEhiMN.kG7IAiJj.:16324:0:99999:7:::
bin:*:15980:0:99999:7:::
由于passwd需要普通用户执行,所以默认具有s权限:
[[email protected] ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 30768 Feb 22 2012 /usr/bin/passwd
SGID : 运行某程序时,相应进程的属组是程序文件自身的属主,而不是启动者。
[[email protected] ~]# chmod g+s pjort
[[email protected] ~]# chmod g-s pjort
当我们有个目录,需要让一个组用户在这里随意编写各自创建的文件,给这个目录SGID权限,用户所创建的文件属组会和目录一样:
[[email protected] ~]# grep "it" /etc/group
rtkit:x:497:
it:x:505:zhang2,dwzhang,zhang1 (it组有dwzhang和zhang1,zang2)
[[email protected] ~]# chown -R :it pjort/
[[email protected] ~]# ll -d pjort/
drwxr-xr-x. 2 root it 4096 Nov 20 10:01 pjort/ (文件属组为it)
此时普通用户执行:
[[email protected] ~]$ touch a.txt
touch: cannot touch `a.txt‘: Permission denied (没有权限)
在这时。如果我们给pjort文件属组w权限:
[[email protected] ~]# chmod g+w pjort/
[[email protected] ~]# ll -d pjort/
drwxrwxr-x. 2 root it 4096 Nov 20 10:01 pjort/ (组给个w权限)
此时普通用户执行:
[[email protected] ~]$ cd /tmp/pjort/
[[email protected] ~]$ touch dwzhang
[[email protected] ~]$ ll
total 0
-rw-rw-r--. 1 dwzhang dwzhang 0 Nov 20 10:08 dwzhang (此时可以有权限创建)
但是在这里文件属性是自己,别人不能够编辑另一个人创建的文件:
[[email protected] ~]$ ll
total 4
-rw-rw-r--. 1 dwzhang dwzhang 0 Nov 20 10:08 dwzhang
drwxrwxr-x. 2 zhang1 zhang1 4096 Nov 20 10:14 erp
-rw-rw-r--. 1 zhang1 zhang1 0 Nov 20 10:10 zhang1
[[email protected] ~]$ echo "i am dwzhang" >> zhang1
-bash: zhang1: Permission denied (没有权限)
在这时,可以给pjort这个目录特殊权限g:
[[email protected] ~]# chmod g+s pjort/
[[email protected] ~]# ll -d pjort/
drwxrwsr-x. 3 root it 4096 Nov 20 10:14 pjort/
在用普通用户试试: (在新建个文件测试)
[[email protected] ~]$ ll
total 0
-rw-rw-r--. 1 dwzhang dwzhang 0 Nov 20 10:08 dwzhang
-rw-rw-r--. 1 zhang1 it 0 Nov 20 10:17 erp (新建的文件属组会是it)
-rw-rw-r--. 1 zhang1 zhang1 0 Nov 20 10:10 zhang1
[[email protected] ~]$ echo "i am dwzhang" >> erp (有了写权限)
[[email protected] ~]$ cat erp
i am dwzhang
注意:此时用户会具有编辑,查看,删除权限。
如果想这些用户不能够有删除权限就需要Sticky特殊权限了。
Sticky :在一个公共目录,每个用户都可以创建文件,删除自己的文件,但是不能够删除别人的文件。
[[email protected] ~]# chmod o+t pjort/
[[email protected] ~]# chmod o-t pjort/
接上面,自己可以删除自己的,不能删除别人的:
[[email protected] ~]# chmod o+t pjort/
[[email protected] ~]# ll -d pjort/
drwxrwsr-t. 2 root it 4096 Nov 20 10:17 pjort/
普通用户执行:
[[email protected] ~]$ rm erp
rm: cannot remove `erp‘: Operation not permitted (没有权限)
数字表示:
1 :Sticky
chmod 1755 /test
3 :SGID
chmod 3755 /test
5 :SUID
chmod 5755 /test
这就是为什么umask是4位了:
[[email protected] ~]# umask
0022