Linux 加密密码

Linux 加密密码

我正在使用 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 压缩。

相关内容