Я использую команду 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 своим методом шифрования.