特殊权限SGID有两个作用域,文件和目录:
当作用于文件时,继承二进制程序所有组的权限,这种权限相当危险,一定要慎用。如给/bin/vim加SGID权限,普通用户可以直接修改/etc/shadow,更新所有用户包括root的密码。例子如下:
- 查看/bin/vim默认权限ll /bin/vim;-rwxr-xr-x. 1 root root 2289640 Aug 2 2017 /bin/vim
- 切换到普通用户,执行vim /etc/shadow;无法显示文件内容,并且有告警信息[Permission Denied]
- 给/bin/vim加SGID权限,chmod g+s /bin/vim
- 查看/bin/vim权限,-rwxr-sr-x. 1 root root 2289640 Aug 2 2017 /bin/vim
- 再次切换到普通用户,执行vim /etc/shadow,可以更改文件内容。
当作用于目录时,此目录新建的文件继承目录的所属组,可以用于创建一个协作组,配合sticky权限(具有写权限的目录,只有文件的所有者或root可以删除该文件。
需求:operation部门的所有员工能访问并修改彼此的文件,但是只能删除自已创建的文件
具体实现步骤:(前提root umask为0022,普通用户为0002)
- 用root创建operation组:groupadd operation
- 用root创建部门员工如: useradd user1; useradd user2并设置user1和user2的登陆密码
- 用root在/home下创建目录oper: mkdir operation
- 用root给oper目录加SGID和sticky权限,chmod 3777 operation
- 更改用户user1和user2的辅助组为operation
groupmems -a user1 -g operation
groupmems -a user2 -g operation
- 切换到user1用户,进入/home/oper目录,创建文件user1_file1,查看文件属性
-rw-rw-r–. 1 user1 operation 12 Apr 5 11:56 user1_file1
- 切换到user2用户,进入/home/oper目录,创建文件user2_file1,查看文件属性
-rw-rw-r–. 1 user2 operation 0 Apr 5 12:16 user2_file1
- 在user2用户登陆下,用vim更改用户user1创建的文件user1_file1,添加新的内容成功
- 在user2用户登陆下,删除用户user1创建的文件user1_file1, rm -f user1_file1失败并提示操作不允许
rm: cannot remove ‘user1_file1’: Operation not permitted
- 同样用user1登陆去操作user2创建的文件user2_file1,结果和上述相同
上述的管理可以进一步优化,思路:operation部门下的所有员工可以在/home/oper下建立各自以用户名命名的文件夹,所有的文件夹会继承oper目录的属组即operation组:
- 以user1用户登陆下,创建user1目录在/home/oper下,mkdir user1,查看目录user1的性,所属组是operation
drwxrwsr-x. 2 user1 operation 6 Apr 5 13:43 user1
- 以user1用户登陆下,在/home/oper/user1目录下创建文件user1_file2
- 以user2登陆,进入/home/oper/user1目录,修改user1创建的文件user1_file2成功,但是由于目录user1是无法继承oper的sticky位特殊权限,所以user2是可以删除user1目录下的user1_file2文件。解决方案,在root下把sticky位权限赋予user1目录,chmod o+t user1,检查user1的属性
drwxrwsr-t. 2 user1 operation 25 Apr 5 13:47 user1
此时以user2登陆删除user1目录下以user1用户创建的文件是无法删除的
rm -f user1_file2
rm: cannot remove ‘user1_file2’: Operation not permitted
同理,以user2登陆也无法删除user1文件夹。
最终,通过特殊权限SGID和sticky配合使用,实现了需求:operation部门的所有员工能访问并修改彼此的文件,但是只能删除自已创建的文件,同时引入每个员工创建一个目录,并赋予这些目录是sticky位的特殊权限,实现了更清晰的结构化管理。
总结,三种特殊权限SUID、SGID以及sticky位权限虽然在实际工作中并不经常用到,但是深入理解它的工作原理对我们处理其它程序或应用中的权限管理提供一种思路,毕竟Linux是一切程序和应用运行的基础。
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95546