如何让用户在 sudoers 中执行包含引号的命令?

tij*_*agi 7 linux sudo

我有这个命令

chroot /chroots/box /bin/bash -c 'cd /repos/system && git pull'
Run Code Online (Sandbox Code Playgroud)

我试着写在 /etc/sudoers

user ALL = (root) NOPASSWD: chroot /chroots/box /bin/bash -c 'cd /repos/system && git pull'
Run Code Online (Sandbox Code Playgroud)

但这没有用。在我见过的日志中

sudo:      user : command not allowed ; TTY=pts/7 ; PWD=/home/user ; USER=root ; COMMAND=chroot /chroots/box /bin/bash -c cd /repos/system && git pull
Run Code Online (Sandbox Code Playgroud)

我还尝试在 sudo 调用中转义引号,例如\',并且它们出现在具有相同错误的日志文件中。

这个 repo 影响了 chroot 的根文件系统,所以我不能从外面调用 git pull 。

use*_*517 7

简单的解决方案是将您的命令放在一个脚本中,然后让您的用户通过 sudo 访问该脚本。

user ALL = (root) NOPASSWD: /path/to/yourscript
Run Code Online (Sandbox Code Playgroud)

然后

#/bin/bash
chroot /chroots/box /bin/bash -c 'cd /repos/system && git pull'
Run Code Online (Sandbox Code Playgroud)

确保您的用户对您的脚本没有写权限。