我有一个 PHP 脚本需要调用 python 脚本。但是,我不希望 python 脚本作为 www-data (php 用户)执行,而是作为 pycert 执行。因此,我尝试允许 www-data 执行 sudoers 文件中的脚本,但这似乎不起作用。 PHP代码:
exec("timeout --preserve-status -k 10 15s sudo -u pycert /bin/python /var/www/files/certs/creation/cert.py $file", $resulta, $result);
维苏多文件:
www-data ALL=(pycert:pycert) NOPASSWD:/bin/python /var/www/files/certs/creation/cert.py /var/www/files/certs/creation/cert-[0-9a-ZA-Z]+
这是 auth.log :
sudo: www-data : command not allowed ; TTY=pts/1 ; PWD=/var/www/files.git ; USER=pycert ; GROUP=pycert ; COMMAND=/bin/python /var/www/files/certs/creation/cert.py /var/www/files/certs/creation/cert-Wi1S9a
我错了什么?
答案1
首先,不存在“visudo 文件”这样的东西。 Visudo 是一个用于更改 sudoers 文件的编辑器。
其次,您省略了提及这是什么 Linux 发行版 - 这可能为我们提供了一些关于是否存在强制访问控制系统的线索。
第三,您尝试构建最终结果,而不是将问题分解为可以根据需要轻松重现的任务,即尝试使用普通的交互式用户帐户实现 sudo 操作。
第四,你没有看说明书。特别是“请注意,这些不是正则表达式”的部分。[0-9a-ZA-Z]+
不匹配一组重复的字母字符和数字,它匹配单个 aplpha 字符或数字后跟文字“+”。
尝试...
user ALL=(pycert:pycert) NOPASSWD:/bin/python /var/www/files/certs/creation/cert.py /var/www/files/certs/creation/cert-*