我想授予对c
“a”受到限制的访问权限。
原因是我想通过a
.
a <- drwx------
└ b <- drwxr-xr-x
└ c <- drwxr-xr-x
ln -s ../a/b/c/some_files ../a/
我明白我需要一切a
,b
并且c
+x
和c
+r
但事实并非如此。现在 a 是 drwx--x--x
我如何实现我的目标?谢谢你!
答案1
出于您的意图和目的,您尝试执行的操作在当前权限和所有权下是不可能的。可以通过绑定安装来完成,但符号链接将不起作用。
正如您所知,a
除了所有者(和根)之外,任何人都不能遍历,这意味着其他人b
也c
不能访问它们,因此每个人都可以读取和遍历它们并不重要。
您唯一可以做的就是更改 的权限,a
或者755
如果您不想向所有人授予访问权限,请创建一个组并仅添加您想要访问的人员,将其设置为 的组a
,然后将权限更改a
为750
。
答案2
是的,可能:您需要创建一个硬链接到a/b/c/some_files
。然后您可以o
从干预目录中删除绝对所有“”权限!
顺便说一句,指定是最安全的绝对创建链接时的路径。
演示:准备
# whoami
root
# mkdir -p /a/b/c
# touch /a/b/c/d
# chmod o= /a/
# chmod o= /a/b/
# chmod o= /a/b/c/
# ls -ld /a/
drwxr-x--- 3 root root 15 Dec 23 20:45 /a/
# ls -ld /a/b/
drwxr-x--- 3 root root 15 Dec 23 20:45 /a/b/
# ls -ld /a/b/c/
drwxr-x--- 2 root root 15 Dec 23 20:45 /a/b/c/
# ls -l /a/b/c/d
-rw-rw-rw- 1 root root 0 Dec 23 20:46 /a/b/c/d
# ln -s /a/b/c/d /softlink-to-d
# ls -l /softlink-to-d
lrwxrwxrwx 1 root root 8 Dec 23 20:47 /softlink-to-d -> /a/b/c/d
# ln /a/b/c/d /hardlink-to-d
# ls -l /hardlink-to-d
-rw-rw-rw- 2 root root 0 Dec 23 21:09 /hardlink-to-d
演示:证明
# su - postgres -c 'touch /a/b/c/d'
touch: cannot touch ‘/a/b/c/d’: Permission denied
# su - postgres -c 'touch /softlink-to-d'
touch: cannot touch ‘/softlink-to-d’: Permission denied
# ls -l /a/b/c/d
-rw-rw-rw- 2 root root 0 Dec 23 20:46 /a/b/c/d
### Note, mtime still unchanged...
# su - postgres -c 'touch /hardlink-to-d'
# ls -l /a/b/c/d
-rw-rw-rw- 2 root root 0 Dec 23 21:13 /a/b/c/d
### ...finally, mtime changed.