Назад | Перейти на главную страницу

Зашифрованный пароль Linux

Я использую команду linux useradd, и у меня проблема. Я зашифровал пароль и добавил пользователя, но не пропустил все, например:

Пароль: 7856

Зашифрованный пароль: $ 1 $ ky6XlX5g $ mu6Wva / vTJgZF9.p8tyAq /

Пример: useradd -m -p '$1$ky6XlX5g$mu6Wva/vTJgZF9.p8tyAq/' username

Я смотрю на теневой файл, и не весь пароль сохранен, а только кусок зашифрованного пароля.

Спасенный мир: /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 как если бы это была переменная? И 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. Вы можете заменить метод сжатия ниже своим методом шифрования:

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 своим методом шифрования.