我想以其他用户的身份使用sudo运行命令,然后以该用户的身份重定向该命令的输出。例如,如果我运行:
touch some-file
在用户simon下,某些文件将由用户simon拥有。如果我运行:
sudo -u ernesto touch some-file
那么某些文件由用户ernesto拥有,因为我指定我要以ernesto身份运行touch命令。最后,如果我运行:
sudo -u ernesto ls /some-folder/ > some-file
某些文件再次由用户simon拥有,因为>运算符会将>之前的整个命令的输出重定向到某个文件(实际上是由用户simon运行的)。我需要获取将目录列出为ernesto的输出,但是使用sudo作为我要列出的目录,该目录归ernesto所有,并且我无法使用simon列出目录。
它必须使用sudo,因为ernesto用户允许我在不使用密码的情况下运行sudo命令。
我试过了
sudo -u ernesto $(ls /some-folder/ > some-file)
sudo -u ernesto `ls /some-folder/ > some-file`
sudo -u ernesto 'ls /some-folder/ > some-file'
sudo -u ernesto eval(ls /some-folder/ > some-file)
sudo -u ernesto exec(ls /some-folder/ > some-file)
希望这种方法能够奏效,但仍然没有运气。
你可以使用tee
直通sudo
作为另一个用户写入文件。
在编写目录列表的用例中,它变得很简单
sudo -u ernesto ls some-directory | sudo -u ernesto tee some-file
或者,您可以使用选项“ -s”启动一个新的Shell,并使用“ -c”作为字符串传递多个命令。例子:
sudo -u foo -s bash -c 'echo "USER=$USER and SUDO_USER=$SUDO_USER" > /tmp/textfoo'