2

我已经搜索过关于这个的一些提示,但我一无所知

我正在尝试使用 perl 代码将用户添加到 linux 机器:

my $md5password = `openssl passwd -1 $password1`;
system("useradd -s /bin/bash -d /home/$username -p $md5password");

但这导致: sh: 2: -p: not found

当我通过终端执行此命令时,没有问题... arrr!任何人?

更新:

10 倍于 @BraveNewCurrency 建议它有效:)

代码:

if(($password1 eq $password2) && length($password1) > 0)
{
    $valid = 1;
    my $md5password = `openssl passwd -1 $password1`;
    chomp($md5password);
    system("useradd -s /bin/bash -d /home/$username -p \'$md5password\' $username");

稍后我会更多地研究消毒$username

我不能支持@BraveNewCurrency,因为我的代表未满 15 岁……如果你们中的一些人支持他,我会很高兴。

4

2 回答 2

1

您应该检查您的用户名/密码是否有 shell 元字符,并转义它们。(否则这是一个等待发生的安全问题。)

您还应该研究 Chef/Puppet/Salt/Ansible/.. 等,它们允许您在更高级别上自动构建服务器。它们都是声明性的(并且是幂等的),所以不要担心讨厌的细节。)

于 2013-04-29T02:55:56.437 回答
0

据我所知,该system命令使用参数列表,而不是字符串。
您还应该明确说明您尝试执行的命令的路径。

你有没有尝试过:

@args = (  
          '/usr/sbin/useradd', 
          '-s', '/bin/bash', 
          '-d', "/home/$username", 
          '-p', $md5password
         );
system(@args) == 0
    or die "Failed adding user: @args failed: $?"

正如其他人所说,您应该确保$username在创建用户之前对其进行清理,否则您可能会遇到大麻烦。

于 2013-04-29T03:25:27.687 回答