secondid 2020-06-26
需求: /目录下面有一个public目录,每个系统的普通用户都可以往这个目录放东西,对在public目录下自己的文件有完全控制权,不能修改删除别人的文件,jack用户对此目录及目录下所有文件有完全控制权
思路:
1、每个用户都可以在public目录底下放文件,那么这个目录的权限就是 777,所有人可写可读可执行drwxrwxrwx
2、对自己的文件有完全控制权,对于一个普通用户来说,登陆自己的账号建立的文件默认权限应该是664或者775(/etc/profile里面普通用户的umask=002),属主属组都是自己,普通用户对自己的文件是有完全控制权的
3、粘滞位,public目录权限777规定了所有人对目录下的文件有删除剪切移动的权限,那么这里就有一个问题,tom在public底下建立的文件,lucy也是可以删除的,因为tom对于public这个目录是普通用户,lucy也是普通用户,我们权限都是7,一个普通用户可以删除大目录下所有人的文件,显然是不合理危险的,所以我需要对public这个目录在进行一些限制,public目录的权限改成1777,这个1就是粘滞位t,当目录被设置了粘滞位权限以后,即便用户对该目录有写入权限,也不能删除该用户中其他用户的文件数据,而是只有该文件的所有者和root用户才有权将其删除,说白了就是实现了public目录权限和底下文件权限的一个动态平衡。粘滞位只能对目录设置,权限中x会变成t。
验证:
当需要为用户提供一个开放目录而不希望造成管理混乱时,通过为目录设置粘滞位权限便可以解决
可是如何让jack用户对这个公共目录下的所有其它用户创建的文件有完全控制权呢,这个时候就需要超级管理员root 在/etc/sudoers配置文件授权jack用户chown命令,chown -R jack /public递归更改public目录及其下面子文件的属主为jack, 又因为chown只能针对已经存在的文件做属主更改,把这条命令chown -R jack /public加到jakc用户的系统环境.bashrc文件里,jack用户每次登陆系统对public里面文件刷一遍属主权限,此时实现jack用户对下面所有文件有完全控制权,可是有一个问题,当jack用户修改其他普通用户比如tom用户的文件时,属主会变更成jack,又因为对于普通用户的反其码umask=002,普通用户对自己的文件完全控制权通过属组来控制(属组中只有有自己一个人)
验证:
注意在root执行chown -R jack /public时候,tom2这个文件并不存在,所以属主属组默认都是自己
至此,就通过粘滞位Stickybit实现了公共目录的管理,同时通过root对jack的chown属主授权,更改jack的.bahsrc环境j,让jack成为公共目录的主人,但是jack此时存在chown权限过限的风险,jack对其他所有目录也有chown更改属主的权限,这是visudo授权无法避免出现的问题,只能通过法律与道德进行约束,也可以通过root更改目录属主为jack,不通过授权jack方式,然后通过脚本,检测只要jack一登录root就去执行,这样通过技术就可以解决权限过度问题。