我已经搜索了一些关于这个的暗示,但我很无能
我正在尝试使用perl将用户添加到linux机器 代码:
my $md5password = `openssl passwd -1 $password1`;
system("useradd -s /bin/bash -d /home/$username -p $md5password");
但结果是:
sh: 2: -p: not found
当我通过终端执行此命令时没有问题... arrr! 任何人吗?
更新
10x到@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岁......如果你们中的一些人愿意支持他,我会很高兴的。
答案 0 :(得分:1)
您应该检查shell元字符的用户名/密码,然后转义它们。 (否则这是一个等待发生的安全问题。)
您还应该查看Chef / Puppet / Salt / Ansible / ..等等,它们允许您在更高级别自动构建服务器。它们都是声明性的(并且是幂等的)所以不要担心icky细节。)
答案 1 :(得分: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
,否则你可能会遇到大麻烦。