在Linux系统中可以给所属者权限u或所属组权限g增加安全位,即u+s或g+s,并且安全位只能加给某个程序。安全位的作用是当用户运行该程序时,程序会以此文件的所属者或所属组设置的权限来运行,相对于运行程序时当前用户变成该文件所属者或所属组中的用户。
参考如下实验,以root用户在/mnt目录中创建f1空文件,将“aaaaaa”字符串添加到f1文件中,给cat命令的执行程序增加用户安全位,即chmod u+s /usr/bin/cat,用户zhang使用cat命令访问f1时,以f1的所属者身份访问,但是如果使用head、tail、more等命令读取f1时,f1仍拒绝被访问。相应操作步骤如下所示:
- [root@jump ~]# whoami
- root
- [root@jump ~]# cd /mnt
- [root@jump mnt]# touch f1
- [root@jump mnt]# echo aaaaaa>f1
- [root@jump mnt]# chmod 600 f1
- [root@jump mnt]# chmod u+s /usr/bin/cat
- [root@jump mnt]# su - zhang
- Last login: Mon Jan 18 09:54:30 CST 2021 on pts/0
- [zhang@jump ~]$ cat /mnt/f1
- aaaaaa
- [zhang@jump ~]$ head /mnt/f1
- head: cannot open ‘/mnt/f1’ for reading: Permission denied
- [zhang@jump ~]$ tail /mnt/f1
- tail: cannot open ‘/mnt/f1’ for reading: Permission denied
- [zhang@jump ~]$ more /mnt/f1
- /mnt/f1: Permission denied
再使用ll /usr/bin/cat命令查看cat命令的权限信息,会发现cat命令权限信息中的安全位“s”显示在原先x权限的位置,参见如下操作。通常x为大写则说明命令程序之前无x权限,为小写则说明该文件之前有x权限。
- [zhang@jump ~]$ ll /usr/bin/cat
- -rwsr-xr-x 1 root root 54080 Nov 17 06:24 /usr/bin/cat
- [zhang@jump ~]$
类似地,如果给cat命令的执行程序增加了组安全位,即chmod g+s /usr/bin/cat,则使用cat命令访问f1时,以f1的属组身份访问。
粘贴位又称粘连位。若以用户的身份进入系统,在某目录下创建了自己的目录和文件,则当其他用户也进入系统时,若权限允许,可以删除原先创建的文件,如下相关操作,root用户给予/mnt目录其他用户写权限,切换zhang用户在/mnt目录中创建f1文件和d1目录,然后切换到wang用户,发现其可以将zhang用户创建的f1文件和d1目录删掉。
- [root@jump ~]# whoami
- root
- [root@jump ~]# chmod o+w /mnt
- [root@jump ~]# ll -d /mnt
- drwxr-xrwx. 3 root root 28 Jan 18 09:51 /mnt
- [root@jump ~]# su - zhang
- Last login: Mon Jan 18 09:56:46 CST 2021 on pts/0
- [zhang@jump ~]$ cd /mnt
- [zhang@jump mnt]$ mkdir dd
- [zhang@jump mnt]$ touch f1
- [zhang@jump mnt]$ exit
- logout
- [root@jump ~]# su - wang
- [wang@jump ~]$ cd /mnt
- [wang@jump mnt]$ ls
- dd f1 hgfs
- [wang@jump mnt]$ rm -rf dd f1
- [wang@jump mnt]$ ls
- hgfs
因此为了保护用户的个人资料,可以使用增加目录粘贴位的方式加以保护,给其他用户权限o增加粘贴位,即o+t,增加了粘贴位的目录,内容只有创建者有权删除。
首先给/mnt的其他用户权限o增加了t权限,使用ll -d /mnt命令只显示/mnt目录的信息,不显示/mnt目录下内容的信息。再以用户zhang的身份进入/mnt中,创建目录和文件,此时切换到用户wang下,给/mnt增加了粘贴位后,用户zhang所创建的目录及文件,用户wang无权删除。相关操作如下所示:
- [root@jump ~]# chmod o+t /mnt
- [root@jump ~]# ll -d /mnt
- drwxr-xrwt. 3 root root 18 Jan 18 10:07 /mnt
- [root@jump ~]# su - zhang
- Last login: Mon Jan 18 10:18:21 CST 2021 on pts/0
- [zhang@jump ~]$ cd /mnt
- [zhang@jump mnt]$ touch f1
- [zhang@jump mnt]$ mkdir d1
- [zhang@jump mnt]$ exit
- logout
- [root@jump ~]# su - wang
- Last login: Mon Jan 18 10:18:32 CST 2021 on pts/0
- [wang@jump ~]$ cd /mnt
- [wang@jump mnt]$ rmdir d1
- rmdir: failed to remove ‘d1’: Operation not permitted
- [wang@jump mnt]$ rm -f f1
- rm: cannot remove ‘f1’: Operation not permitted
- [wang@jump mnt]$ ls -l
- total 0
- drwxrwxr-x 2 zhang zhang 6 Jan 18 10:20 d1
- -rw-rw-r-- 1 zhang zhang 0 Jan 18 10:20 f1
- drwxr-xr-x 2 root root 6 Dec 28 13:40 hgfs