不同系统账号之间相互共享数据
# 背景
如何实现多个系统账号之间想共享数据或者共享软件环境。
# 方法1:使用用户组进行设置
假设我们有2个账号,user1 和 user2,它们同属于一个用户组 user1。
我们先试用 id
命令查看一下,确认它们属于同一个用户组
$ id user1
uid=1001(user1) gid=1001(user1) groups=1001(user1)
$ id user2
uid=1002(user2) gid=1001(user1) groups=1001(user1)
2
3
4
5
然后我们尝试更改用户根目录的属性,就可以实现同一个用户组之间用户的相互访问。
# 登录 user1, 设置 user1 的根目录允许同组用户访问
$ chmod 750 ~
2
波浪线
~
表示当前登录账号的家目录。
此时,user2 就可以进入 user1 的根目录了。
同理,如果 user2 希望 user1 能够进入自己的根目录,则先登录 user2 ,然后执行 chmod 750 ~
即可。
需要注意的是:
1、通过这种方式,针对的是同一个用户组内的账号,当同一个用户组内有多个账号,那么设置该权限后,所有同组的成员均可访问了。
2、通过这种方式,改变的是用户根目录的访问权限,也就是同组其他用户能够进入该用户的根目录了。如果希望还能够进入其他的文件夹,或者打开其他的文件,需要再次进行设置,保证希望给同组成员访问的文件夹/文件,是 750
权限。
3、某些集群为了安全,可能设置了用户根目录限制,通过此方法无法实现组内共享,可以参考方法2。
# 方法2:使用 setfacl 进行权限设置
我们先查看一下 user1 的根目录的 acl 权限
$ getfacl ~
getfacl: Removing leading '/' from absolute path names
# file: home/user1
# owner: user1
# group: user1
user::rwx
group::r-x
other::---
2
3
4
5
6
7
8
可以看到该文件夹名称为 /home/user1
,属于用户 user1,用户组 user1。用户的权限是 rwx (r 可读 w 可写 x 可执行),用户组是 r-x ( r 可读 - 不可写 x 可执行),其他人 --- (什么权限都没有)。
然后,我们使用 setfacl
命令,把用户 user1 的家目录 /home/user
也赋予 user2 一定的权限,比如 r-x
权限,语法格式为:
# 配置权限
$ setfacl -m u:user2:r-x ~
# 再查一次
$ getfacl ~
getfacl: Removing leading '/' from absolute path names
# file: home/user1
# owner: user1
# group: user1
user::rwx
user:user2:r-x
group::r-x
mask::r-x
other::---
2
3
4
5
6
7
8
9
10
11
12
13
14
这一次,我们发现在文件属于的 user 中,增加了一个 user:user2:r-x
,它表示的是 user2 用户对该文件夹拥有(r 可读 - 不可写 x 可执行)的权限。
这样, user1 就可以根据自己的自身需求,实现对指定文件夹,指定用户的访问权限控制了。
# 补充说明
关于 chmod
命令,文件权限 rwx
, 以及 setfacl
等命令的进一步使用,就需要大家学习别的文章啦。