我想检查一个文件是否存在[ -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"