【问题标题】:Use a linux command in a Perl programm, and use Perl through php exec()在 Perl 程序中使用 linux 命令,通过 php exec() 使用 Perl
【发布时间】:2012-06-07 10:59:13
【问题描述】:

我正在创建一个系统,允许我在题字后自动创建用户。这样,我制作了一个生成随机密码的 Perl 脚本,使用“mkpasswd”对其进行加密,然后使用“useradd”创建一个用户,然后将用户信息发送到数据库。

我搜索了文档,并尝试使用 php exec 函数来调用 Perl 程序。

$command = "/server/backoffice/scripts/usercreation.pl $username";
exec($command, $result);
print_r($result);

usercreation.pl 脚本在终端中运行良好,但由于未知原因,它无法在 php 中运行,没有任何反应,我知道问题来自 useradd 语法,或者如果不是来自 useradd 命令。返回的错误值为 255 0xff -1 .

我认为问题来自 useradd 的 --password 选项,事实上,这个选项使用 mkpasswd 并且可能会干扰 shell 或类似的东西:p

Perl 程序使用的完整 useradd 命令:

system("/usr/sbin/useradd $username -m -d $home --expiredate $expire --shell $shell --gid $gid --password $c_password");

编辑: pastebin 上的 usercreation.pl 文件(已被截断为我们正在调查的部分): http://pastebin.com/DgFdndXf

php 一: http://pastebin.com/pQhADNzg

使用的网络服务器是 nginx/0.7.65。

使用的php版本是PHP 5.3.3-1。

uname -a

Linux openco 2.6.35-32-generic #67-Ubuntu SMP Mon Mar 5 19:35:26 UTC 2012 i686 GNU/Linux

谢谢大家!

【问题讨论】:

  • PHP 是否从 Web 服务器运行?
  • 请参阅this question,了解从 PHP 中调试 perl 脚本执行的方法。
  • 错误不是来自Perl,而是来自...的PHP解释
  • @torr 您是否在 shell 中使用与运行 PHP 脚本相同的用户来运行 perl 脚本?

标签: php linux perl system exec


【解决方案1】:

useradd 必须以 root 身份运行,因此您需要 sudo 指定 nginx 可以以 root 身份运行您的脚本。

对这些东西要格外小心;确保您使用escapeshellarg() 清理用户名并正确转义您的命令。

【讨论】:

  • 那么,如果我在 /etc/sudoers 中添加 www-data ALL= NOPASSWD: /usr/sbin/useradd 并且如果我将 $command 更改为 "sudo ".$command ,它会起作用吗?
  • 现在,返回的错误是127 0x7f,我还把Perl程序中的$command改成了sudo useradd [...]
  • @DaveNull 实际上...sudoers 文件应该允许以 root 身份运行 Perl 脚本,而不是 useradd 本身。
  • 我已经进行了更改,exec("sudo ".$command, $result),useradd 在没有 sudo 的情况下被调用。 www-data 不允许以 root 身份执行 Perl 脚本。但是,它不会改变返回的错误。
  • 好吧,恐怕我没有主意了:-/
猜你喜欢
  • 2012-07-28
  • 2011-08-26
  • 1970-01-01
  • 2011-02-18
  • 2014-03-21
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多