我编写了一个 shell 脚本.scripter.sh
,想模拟以另一个非 root 用户身份执行该脚本。我曾经sudo -u daemon bash .scripter.sh
这样做过,但它显示“没有权限”。然后我发现我无法以 daemon 用户身份读取任何文件,事实上
stefan@stefan-HP-Laptop:~$ touch file
stefan@stefan-HP-Laptop:~$ ll file
-rw-r--r-- 1 stefan stefan 0 Dez 4 19:01 file
stefan@stefan-HP-Laptop:~$ sudo -u daemon [ -r file ]; echo $?
1
stefan@stefan-HP-Laptop:~$
这表明用户没有读取权限,尽管权限-rw-r--r--
表明该文件可供任何人读取。我希望有人能解开这个谜团。谢谢
编辑:实际上,以下方法可行
stefan@stefan-HP-Laptop:~$ cd test/
stefan@stefan-HP-Laptop:~/test$ ll -d .
drwxr-xr-x 2 stefan stefan 4096 Dez 4 19:40 ./
stefan@stefan-HP-Laptop:~/test$ touch file
stefan@stefan-HP-Laptop:~/test$ sudo -u daemon [ -r file ]; echo $?
[sudo] Passwort für stefan:
0
正如steeldriver所写,这与文件父目录的执行权限有关。事实上,我的主目录没有授予除我之外的任何用户任何权限。
编辑2:似乎您需要对您和要读取的文件之间的每个目录(包括当前工作目录)具有执行权限。我无法~/test/file
从我的主文件夹以其他用户身份访问,但当我在目录中时,我可以以其他用户身份进行访问~/test
。这与这个答案
答案1
此行为可能是由于文件缺少执行权限父目录
例如给定
$ ls -ld tests/{,file}
drwxrwxr-x 2 steeldriver steeldriver 4096 Dec 4 13:46 tests/
-rw-rw-r-- 1 steeldriver steeldriver 322 Dec 4 13:33 tests/file
然后
$ sudo -u daemon [ -r tests/file ]; echo $?
0
但
$ chmod o-x tests
$ sudo -u daemon [ -r tests/file ]; echo $?
1
您可以将目录的执行权限视为打开和遍历目录内容的权限。