linux下如何实现不同的用户对同一文件都有写权限
问题产生原因:
用户在创建文件时候,其创建的文件的属主和属组都是用户本身,所以让组具有写权限并不意味着其他用户具有写权限
解决方案:
给共同访问的目录添加SGID权限
解决过程:
场景举例:比如一个公司的开发团队有三个用户:Hadoop、habase、hive 有一个文件目录tmp/project供他们开发,如何实现让这三个用户都对其具有写权限
【方法1:】
第一步:
修改三个用户的附加组都为 developteam
$ adduser hadoop
$ adduser hbase
$ adduser hive
$ groupadd developteam
$ chown -R :developteam /tmp/project/
$ usermod -a -G developteam hadoop
$ usermod -a -G developteam hbase
$ usermod -a -G developteam hive
切换到不同用户下面查看用户是否有写权限
第二步:给属组添加写权限
$ chmod -R g+w /tmp/project/
查看用户此时拥有写权限否?
[hadoop@git3 git]$ touch a
[hbase@git3 git]$ echo 333 > a
bash: b.test: Permission denied
查看用户创建的文件的属组,给附加组添加写权限之后,用户的属主属组还是创建文件的用户,其他用户还是不能够进行写操作。
第三步:给文件SGID
$ chmod -R g+s /tmp/project/
给文件添加了SGID之后文件的属组变成了文件本身的属组,而不是文件的创建者
其他用户可以对文件进行操作:
为防止其他用户的删除操作,对文件添加stick权限 【慎重使用,在git等操作中不要用这个】
$ chmod -R o+t /tmp/project/
给文件添加SGID 和stick之后其他用户可以对文件目录都有写的权限但是不能删除其他用户创建的文件。
第四:给创建的文件的属主,属组权限一样。
umask值用于设置用户在创建文件时的默认权限,当我们在系统中创建目录或文件时,目录或文件所具有的默认权限就是由umask值决定的。
对于root用户,系统默认的umask值是0022;对于普通用户,系统默认的 umask 值是0002。执行 umask 命令可以查看当前用户的umask值。
umask值一共有4组数字,其中第1组数字用于定义特殊权限,我们一般不予考虑。
与一般权限有关的是后3组数字: 属主,属组,其他
常用的umask值
umask值 目录 文件
022 755 644
027 750 640
002 775 664
006 771 660
007 770 660
开始设置创建的文件的属主,属组权限一样。最好将root用户也设置一下。
[hadoop@git3 git]$ umask
0022
[hadoop@git3 git]$ umask 002
[hadoop@git3 git]$ umask
0002
要想永久生效:
[hadoop@git3 git]$ echo "umask 002" >> vim ~/.bashrc
1,先创建用户zou,并设置密码
adduser zou
passwd zou
2,给zou添加sudo权限
vim /etc/sudoers
添加
zou ALL=(ALL:ALL) ALL
这样的话,用zou用户登录后,可以直接
用sudo su快速切换到root用户
3,把zou加入web服务器组,也就是拥有www-data的权限
usermod -a -G www-data zou
groups zou
systemctl restart nginx
4,设置项目文件的所有权
root下执行
记得把里面的zou改成你自己创建的普通用户
chown zou:www-data . -hR
chmod -R g+rwxs .