有一个文件夹归用户 tomcat6 所有:
drwxr-xr-x 2 tomcat6 tomcat6 69632 2011-05-06 03:43 document
我想允许另一个用户 (ruser) 对文档文件夹具有写入权限。这两个用户 (tomcat6 和 ruser) 不属于同一组。我尝试使用setfacl
:
sudo setfacl -m u:ruser:rwx document
但这给了我setfacl: document: Operation not supported
错误。请帮助我。
答案1
有两种方法可以做到这一点:将目录设置为“world”可写,或者为两个用户创建一个新组,并使该目录对该组可写入。
显然,使其全世界可写是一件坏事,因此第二种选择是更好的选择。
Linux 中的用户可以属于多个组。在这种情况下,你想创建一个全新的组,我们称之为tomandruser
:
sudo groupadd tomandruser
现在该组已存在,请向其中添加两个用户:
sudo usermod -a -G tomandruser tomcat6
sudo usermod -a -G tomandruser ruser
现在剩下的就是设置目录的权限:
sudo chgrp -R tomandruser /path/to/the/directory
sudo chmod -R 770 /path/to/the/directory
现在只有 tomandruser 组的成员可以读取、写入或执行目录中的任何内容。请注意 chmod 和 chgrp 命令的 -R 参数:这告诉它们递归到目标目录的每个子目录并修改它找到的每个文件和目录。
您可能还想将 770 更改为类似的内容,774
如果您希望其他人能够读取文件,775
如果您希望其他人读取和执行文件等。组分配更改只有在用户注销并重新登录后才会生效。
如果你还希望(你可能确实希望)某个用户在目录内创建的新文件能够自动被组中的其他用户写入,那么请参见这里。
答案2
以下脚本显示了为和授予r (read) / w (write) / x (execute)
给定文件夹路径权限的示例。如果您只想授予写入权限,请将其替换为。/path/to/the/directory
USER1
USER2
rwx
w
#!/bin/bash
# Block others and people in the same group to do `r/w/x` on the give folder:
sudo chmod 700 /path/to/the/directory
# Give read/write/execute access to USER1 on give folder:
sudo setfacl -R -m user:USER1:rwx /path/to/the/directory
# Give read/write/execute access to USER2 on give folder:
sudo setfacl -R -m user:USER2:rwx /path/to/the/directory
答案3
主观回答:
- 我喜欢将共享文件夹放在中心位置。不是放在别人的主文件夹中,而是
/srv/common
放在(对于非常短的路径...)/repo
或类似位置。 - 定义一个新组(通常针对您想要加入的所有本地用户。但是,
wwwuser
除非有正当理由,否则不包括某些技术用户) root
作为成员,拥有该共享文件夹的中立所有者是件好事- 设置Gid非常重要,这样新文件才能成为共同的组成员,因此
frank:common
,frank:frank
sudo groupadd -f common
usermod -aG common root
usermod -aG common frank
usermod -aG common mike
# sort of hack for instant group refresh w/o logout
# superuser.com/a/345051
su - frank
# sanity test1:
cat etc/group | grep common
common:x:1008:root,frank,mike
# sanity test2:
groups
frank adm cdrom ... common
sudo chown root:common /repo
# (if you have shareable stuff setting somewhere else,
# copy it to here now)
# no right to the world, the right rights to user and group
chmod -R ug+rwXs,o-rwx $dest
# why uppercase X ? → unix.stackexchange.com/a/416885
# why s ? → superuser.com/a/277785
# as there is no such thing as an uppercase S (directories only)
# settings the s attribute on preexisting content would have to happen
# like so:
# find /repo -type d -exec chmod g+s {} \\\;