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

使用另一个用户检查文件是否存在(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"

答案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"

相关内容