如何:sudo -u <username> 在 sudoer 中?

How to: sudo -u <username> in sudoer?

我需要从 php 文件(用户:www-data)中以用户 www-data:

的身份明确启动具有 sudo 权限的命令
<?php
    $command = 'sudo -u www-data /usr/bin/python3 /var/www/html/script.py';
    shell_exec($command);
?>

为了能够对 www-data 使用 sudo 我想将命令放在 sudoers (sudo visudo) 中,例如:

www-data ALL=NOPASSWD: sudo -u www-data /usr/bin/python3 /var/www/html/script.py

www-data ALL=NOPASSWD: -u www-data /usr/bin/python3 /var/www/html/script.py

但语法错误(来自 visudo 的错误消息)。 以下是使用 sudoers(正确的语法)

www-data ALL=NOPASSWD: /usr/bin/python3 /var/www/html/script.py

但不适用于我的脚本(日志文件中的 Apache 错误):

Sorry, user www-data is not allowed to execute '/usr/bin/python3 /var/www/html/script.py' as www-data on raspberrypi.

看来需要sudo -u www-data。我该如何解决这个问题?

使用 sudo 允许 www-data 到 运行 命令作为 www-data 是没有意义的,但您可以轻松地这样做:

www-data ALL=(www-data) NOPASSWD: /usr/bin/python3 /var/www/html/script.py

您的方法的问题是您尝试将命令 sudo -u www-data .. 添加到 sudoers,这对应于双 sudo sudo sudo -u www-data ..