我使用Linux命令useradd,我有问题。 我encryption的密码和添加用户,但不是把所有通过像:
密码:7856
encryption密码:$ 1 $ ky6XlX5g $ mu6Wva / vTJgZF9.p8tyAq /
示例: useradd -m -p '$1$ky6XlX5g$mu6Wva/vTJgZF9.p8tyAq/' username
我看影子文件,并不是所有的密码保存,只是一个encryption的密码片。
已保存的和平:/vTJgZF9.p8tyAq/
我需要完全的命令: useradd -m -p
这可能会解决你的问题…
#!/bin/bash # Script to add a user to Linux system if [ $(id -u) -eq 0 ]; then read -p "Enter username : " username read -s -p "Enter password : " password egrep "^$username" /etc/passwd >/dev/null if [ $? -eq 0 ]; then echo "$username exists!" exit 1 else pass=$(perl -e 'print crypt($ARGV[0], "password")' $password) useradd -m -p $pass $username [ $? -eq 0 ] && echo "User has been added to system!" || echo "Failed to add a user!" fi else echo "Only root may add a user to the system" exit 2 fi
你提到你正在使用PHP和SSH。 你确定你的系统没有试图评估$ky6XlX5g ,就像它是一个variables? PHP和Bash都使用这种语法,也许你没有正确地逃脱你通过SSH发送的命令。
我问这是因为我刚刚在我的本地系统上运行你的命令,它似乎工作完全一样。 我怀疑还有其他事情正在发生,而命令实际上没有正确传递。
root@hostname:# useradd -m -p '$1$ky6XlX5g$mu6Wva/vTJgZF9.p8tyAq/' username root@hostname:# grep username /etc/shadow username:$1$ky6XlX5g$mu6Wva/vTJgZF9.p8tyAq/:15206:0:99999:7::: root@hostname:~
我认为你必须在添加之前解密它。 也许你可以使用python脚本来做到这一点。 您可以用下面的压缩技术replace您的encryption技术:
import zlib import os def useradd(pass_string,username): password=zlib.decompress(pass_string) os.system('useradd -m -p'+password+' '+username) useradd('x\x9c3\xb705\x03\x00\x02(\x00\xdb',username)
你可以通过在命令行上inputpython来获得该分析string,并且在解释器中可以input
import zlib zlib.compress('7856')
这将输出
'x\x9c3\xb705\x03\x00\x02(\x00\xdb'
希望是明确的。 您可以用您的encryption技术replacezlib压缩。