[ -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"
答案1
您正在尝试执行/usr/bin/[
但尚未授予用户权限。有两种方法可以执行此操作。
第一个是允许用户执行/usr/bin/[
(这是test
程序)。这将允许用户对任何文件执行任何类型的测试。您也可以使用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"
第二种选择是编写包装器脚本并允许用户执行该脚本。例如,在 中执行以下内容/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"