检查一个文件是否存在,使用另一个用户(sudo -u)

我想检查一个文件是否存在[ -f /path/to/file ]使用另一个用户。

所以,我补充说:

 USER1 ALL=(USER2) /bin/mkdir, /usr/bin/git, /bin/echo 

sudoers文件。

问题是,当我尝试执行

 USER1:~$ sudo -u USER2 [ -f /path/to/file ] && echo "1" 

我得到以下内容:

 Sorry, user USER1 is not allowed to execute '/usr/bin/[ -f /path/to/file ]' as USER2 on localhost. 

所以,这里的问题是:如何启用sudoers文件?


我添加了/usr/bin/test到sudoers文件,而不是这样做:

 USER1:~$ sudo -u USER2 [ -f /path/to/file ] && echo "1" 

我实际上使用了:

 USER1:~$ sudo -u USER2 /usr/bin/test -f /path/to/file && echo "1" 

你正试图执行/usr/bin/[但是没有给予用户许可。 有两种方法可以做到这一点。

首先是允许用户执行/usr/bin/[ (这是test程序)。 这将允许用户对任何文件执行任何types的testing。 你也可以使用test而不是[ ,这可能是更明显的发生了什么。

 USER1 ALL=(USER2) /bin/mkdir, /usr/bin/git, /bin/echo, /usr/bin/[, /usr/bin/test 

然后运行:

 sudo -u USER2 [ -f /path/to/file ] && echo "1" 

要么

 sudo -u USER2 test -f /path/to/file && echo "1" 

第二个select是编写一个包装脚本并允许用户执行该脚本。 例如,在/usr/local/bin/exists

 #!/bin/sh set -e [ -f "$1" ] 

而这在/etc/sudoers

 USER1 ALL=(USER2) /bin/mkdir, /usr/bin/git, /bin/echo, /usr/local/bin/exists 

用户可以运行:

 sudo -u USER2 /usr/local/bin/exists /path/to/file && echo "1"