我有一个由 HTTP 调用的 PHP 脚本,而不是作为命令行脚本。此脚本应以当前网络服务器用户 www-data 以外的其他用户身份调用 shell 命令。
例子:
<?php
echo shell_exec('sudo -u myusername -S /usr/bin/whoami'); // returns nothing :(
echo shell_exec('whoami'); // returns www-data
Run Code Online (Sandbox Code Playgroud)
当调用这 2 个命令sudo -u myusername -S /usr/bin/whoami
并whoami
直接在命令行上它们返回时
myusername
www-data
Run Code Online (Sandbox Code Playgroud)
也没有结果:
<?php
echo shell_exec('echo "mypass" | sudo -u myusername -S /usr/bin/whoami');
Run Code Online (Sandbox Code Playgroud)
对我来说,sudo 似乎根本无法与 PHP 的 shell_exec() 一起使用。
我想要~/.bashrc
将是source
每当改变其内容。我用这样的东西创建了一个 bashrc 类:
file { "/root/.bashrc":
ensure => present,
owner => root,
group => root,
mode => 0644,
source => "puppet:///bashrc/root/.bashrc"
}
exec { "root_bashrc":
command => "source /root/.bashrc",
subscribe => File["/root/.bashrc"],
}
Run Code Online (Sandbox Code Playgroud)
但如您所知,它source
是一个 shell 内置命令,因此在运行代理时出现以下错误:
# puppet agent --no-daemonize --verbose
notice: Starting Puppet client version 2.7.1
info: Caching catalog for svr051-4170
info: Applying configuration version '1311563901'
err: /Stage[main]/Bashrc/Exec[root_bashrc]/returns: change from notrun to 0 failed: Could not find command 'source'
notice: Finished catalog run …
Run Code Online (Sandbox Code Playgroud) 在任何 ssh 登录/连接(任何人通过 ssh 登录)时,有没有办法执行脚本?使用 OpenSSH 服务器。
当然,任何用户都不应该修改该脚本,因此这应该是一个系统范围的脚本。
谢谢!