SGID权限测试
问题
- 将mkdir命令程序复制为/bin/mymd2,为其添加SGID权限,并完成下列操作。
- 以用户lisi登入,使用mkdir创建子目录snew01、使用mymd2创建子目录snew02,查看子目录snew01、snew02的权限及归属。
- 创建/nsdpublic目录,将属组改为tarena。
- 新建子目录nsd01、子文件test01.txt,查看两者的权限及归属。
- 为此目录添加SGID权限,再新建子目录nsd02、子文件test02.txt。
- 查看上述子目录及文件的权限及归属。
方案
SGID是Linux特殊权限的一种,其作用主要体现如下:
1)能够传递可执行程序所属组的身份及具备所属组的权限。
2) 在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份。
注意事项:对可执行的程序/目录有效、可执行程序所属组必须具备可执行权限、显示占用的是所属组的x位置。
步骤
实现此案例需要按照如下步骤进行。
步骤一:将mkdir命令程序复制为/bin/mymd2,为其添加SGID权限
命令操作如下所示:
[root@localhost ~]# which mkdir //利用which查看mkdir命令的绝对路径
/bin/mkdir
[root@localhost ~]# cp /bin/mkdir /bin/mymd2 //复制并改名
[root@localhost ~]# ls -l /bin/mymd2 //查看是否生成mymd2
-rwxr-xr-x. 1 root root 49384 2月 27 11:06 /bin/mymd2
[root@localhost ~]# chmod g+s /bin/mymd2 //添加SGID权限
[root@localhost ~]# ls -l /bin/mymd2 //查看是否设置成功
-rwxr-sr-x. 1 root root 49384 2月 27 11:06 /bin/mymd2
步骤二:以用户lisi登入,使用mkdir创建子目录snew01、使用mymd2创建子目录snew02,查看子目录snew01、snew02的权限及归属
命令操作如下所示:
[root@localhost ~]# id lisi //查看lisi是否存在
id: lisi:无此用户
[root@localhost ~]# useradd lisi //创建用户
[root@localhost ~]# su – lisi //切换用户身份
[lisi@localhost ~]$ ls -l /bin/mkdir //查看mkdir命令权限,没有SGID
-rwxr-xr-x. 1 root root 49384 10月 17 2013 /bin/mkdir
[lisi@localhost ~]$ mkdir snew01 //创建测试目录snew01
[lisi@localhost ~]$ ls -ld snew01/ //查看权限及归属关系,属主与属组均是lisi
drwxrwxr-x. 2 lisi lisi 4096 2月 27 11:16 snew01/
[lisi@localhost ~]$ ls -l /bin/mymd2 //查看mkdir命令权限,具备SGID权限
-rwxr-sr-x. 1 root root 49384 2月 27 11:06 /bin/mymd2
[lisi@localhost ~]$ mymd2 snew02 //创建测试目录snew02
[lisi@localhost ~]$ ls -ld snew02/ //查看权限及归属关系,属组继承为root组
drwxrwxr-x. 2 lisi root 4096 2月 27 11:20 snew02/
步骤三:创建/nsdpublic目录,将属组改为tarena
命令操作如下所示:
[root@localhost ~]# mkdir /nsdpublic //创建测试目录
[root@localhost ~]# ls -ld /nsdpublic/ //查看权限及归属关系
drwxr-xr-x. 2 root root 4096 2月 27 11:27 /nsdpublic/
[root@localhost ~]# grep tarena /etc/group //查看tarena组是否存在
tarena❌502:gelin02,gelin01
[root@localhost ~]# chown :tarena /nsdpublic/ //更改目录所属组为tarena组
[root@localhost ~]# ls -ld /nsdpublic/ //查看是否修改成功
drwxr-xr-x. 2 root tarena 4096 2月 27 11:27 /nsdpublic/
步骤四:新建子目录nsd01、子文件test01.txt,查看两者的权限及归属
命令操作如下所示:
[root@localhost ~]# mkdir /nsdpublic/nsd01 //在nsdpublic目录下创建nsd01目录
[root@localhost ~]# touch /nsdpublic/test01.txt //在nsdpublic目录下创建测试文件
[root@localhost ~]# ls -l /nsdpublic/ //查看归属关系其属组均为root组
总用量 4
drwxr-xr-x. 2 root root 4096 2月 27 11:49 nsd01
-rw-r–r--. 1 root root 0 2月 27 11:50 test01.txt
步骤五:为此目录添加SGID权限,再新建子目录nsd02、子文件test02.txt
命令操作如下所示:
[root@localhost ~]# chmod g+s /nsdpublic/ //为nsdpublic添加SGID权限
[root@localhost ~]# ls -ld /nsdpublic/ //查看设置成功
drwxr-sr-x. 3 root tarena 4096 2月 27 11:50 /nsdpublic/
[root@localhost ~]# mkdir /nsdpublic/nsd02
[root@localhost ~]# touch /nsdpublic/test02.txt
[root@localhost ~]# ls -l /nsdpublic/
总用量 8
drwxr-xr-x. 2 root root 4096 2月 27 11:49 nsd01
drwxr-sr-x. 2 root tarena 4096 2月 27 11:57 nsd02
-rw-r–r--. 1 root root 0 2月 27 11:50 test01.txt
-rw-r–r--. 1 root tarena 0 2月 27 11:57 test02.txt
分析: 可以看到当nsdpublic目录具备SGID权限时,之前创建的nsd01与test01.txt其所属组均为发生变化,但新创建的nsd02与test02.txt两者都继承的所属组身份及权限,其中还需注意的一点是我们也可以看到nsd02子目录也同样继承了SGID权限。