我是目录 的所有者mydir
。
我没有 root 访问权限。
我该如何授予仅有的授予某人读取权限,以便他们可以创建本地副本mydir
?
编辑:ChatGPT 告诉我chmod -R o+r mydir
应该可以工作。这是正确的吗?
答案1
ChatGPT 是错误的,因为它无法理解单词对不同的人有不同的含义。
阅读的常识意义使用权与 read 的技术含义不同权限。
令人惊讶的是,访问目录取决于执行, 不是读, 权限。缺少目录读取权限只会阻止列出未知内容,而不会阻止访问这些内容。
因此,除了添加对文件和目录的读取权限之外,还需要添加大写字母以X
仅为目录(而不是文件)添加执行权限:
chmod -R go+rX mydir
办法-R
递归,它适用于其中的所有文件和目录。
添加go+
这些权限每一个用户(g
包括同一团体作为文件,以防万一)。
但这可能还不够。
要共享的目录的所有父目录也需要执行权限才能访问内部目录,在这种情况下,我假设该目录位于主目录中的某个位置。
如果不允许访问您的家(目录),则不能允许访问您的橱柜,尽管您可能已经允许这样做。
你能锁定所有其他门(文件和其他子目录的读取、写入和执行权限),然后你能把灯关掉(该目录的读写权限),但通过猜测文件名,即使人们无法偷看房间内部,他们仍然可以从不同的错误信息中摸索着走过走廊:
$ ls parent_dir
ls: cannot open directory 'parent_dir': Permission denied
$ cat parent_dir/exists
cat: parent_dir/exists: Permission denied
$ cat parent_dir/doesn\'t
cat: "parent_dir/doesn't": No such file or directory
即使你小心地锁上了所有内门,你稍后运行的程序也可能会创建新的未锁的门。
所以我不确定你是否想这么做,但要使内部目录可访问每一个用户:
chmod go+X mydir/..
chmod go+X mydir/../..
等等,直至包括/home/$USER
。
你可能想要什么
如果你现在可能只想信任特定用户而不是所有人,那么你可以使用 ACL 创建特殊情况:
setfacl -m OTHER_USERNAME:X mydir/..
setfacl -m OTHER_USERNAME:X mydir/../..
等等,再次直至并包括/home/$USER
。
您甚至可以在复制完成后立即删除它,方法是:
setfacl -x OTHER_USERNAME mydir/..
ETC。
但是如果你真的只是想允许某人对它进行一次性复制,并且目录不是太大,那么将它复制到/var/tmp
,运行chmod -R go+rX /var/tmp/mydir
,然后在其他用户完成复制后删除它会更容易。
答案2
您ls -l mydir
可以显示文件夹的当前权限设置。
第一列显示权限,看起来应该类似于drwxr-----
。
第一个d
表示它是一个目录。
接下来rwx
是所有者的权限。
之后是组,最后三个符号代表所有其他用户的权限。r
代表读取、w
写入和x
执行权限。
如果您现在想要删除写入和执行权限(如果存在)并为所有其他用户(不在您的组中)递归添加目录和所有子文件的读取权限,您可以执行chmod -R o=r mydir
。 如果您还希望您的组具有只读权限,请使用chmod -R g=r,o=r mydir
。