我有两个用户,user1 和 user2。我还有一个文件在/path/to/file
. user1 应具有读写访问权限,而 user2 应仅具有读取访问权限。
我知道我可以将权限更改为chmod u=r /path/to/file
只读,但这会更改每个人的权限吗?当以 user1 身份执行命令时,user1 和 user2 的访问权限也会发生变化。我还没有找到指定用户的选项。这是我必须使用组的地方吗?或者chown
?我该怎么做呢?
对于充满文件的整个目录也可以这样做吗?如果有一个目录/path/to/dir
包含n个文件和m个子目录,要更改每个文件和子目录中每个文件的权限吗?
答案1
您可以使用下一个解决方案:
- 更改文件的所有权:
chown user1 /path/to/file
- 更改所有者、组和其他人的权限:
chmod 644 /path/to/file
这将rw
给予user1
和r
user2
对于目录,您必须添加x
以便为用户提供在此目录中更改的选项:
chmod 755 /path/to/directory
请小心,-R
因为这也会更改子目录
要自动化工作,您可以使用类似的东西。对起始目录要非常小心,因为这些命令可以更改您不想触及的文件的权限
find /path/to/file -type f -exec chmod 644 {} \;
对于文件
find /path/to/dir -type d -exec chmod 755 {} \;
对于目录
答案2
传统的Unix权限是相当粗粒度的,只区分所有者(用户)、组和其他,其中一个用户(更准确地说是一个进程)可以属于多个组。大多数当前的 Linux 安装都会为每个用户创建一个私有组,以便在用户之间进一步隔离(许多旧版 Unix 系统users
为所有用户都有一个包罗万象的组,因此,如果我将某些文件组设置为可读/可写,大家可以和他们一起度过一天)。
你可以设置一个仅属于的组user1
,user2
并使用组权限来获取一些你想要的东西,但这一点也不完美。
现代 Linux 内核/文件系统/工具处理访问控制列表 (ACL),请参阅acl(5)
。使用 ACL,您可以获得更细粒度的控制,即“user1
对对象具有确切的权限foo
”。