我正在使用 Linux 命令 useradd,但遇到了问题。我加密了密码并添加了用户,但没有输入所有密码,如下所示:
密码:7856
加密密码:$1$ky6XlX5g$mu6Wva/vTJgZF9.p8tyAq/
例子:
useradd -m -p '$1$ky6XlX5g$mu6Wva/vTJgZF9.p8tyAq/' username
我查看了影子文件,发现并非所有密码都保存了,只有一部分加密密码。
挽救和平:/vTJgZF9.p8tyAq/
我需要的正是命令:useradd -m -p
答案1
这可能会解决您的特定问题......
#!/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
答案2
您提到您正在使用 PHP 和 SSH。您确定您的系统没有尝试将$ky6XlX5g
其作为变量进行评估吗?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:~
答案3
我认为您必须在添加之前对其进行解密。也许您可以使用 Python 脚本来执行此操作。您可以用加密技术替换下面的压缩技术:
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)
您只需在命令行中输入 python 即可获得该解析字符串,然后在解释器中输入
import zlib
zlib.compress('7856')
这将输出
'x\x9c3\xb705\x03\x00\x02(\x00\xdb'
希望说得清楚。你可以用你的加密技术代替 zlib 压缩。