为什么我不能用 sudo 以其他用户身份读取文件

为什么我不能用 sudo 以其他用户身份读取文件

我编写了一个 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

您可以将目录的执行权限视为打开和遍历目录内容的权限。

相关内容