Основной Perl / Shellscripting вопрос с использованием crypt - PullRequest
0 голосов
/ 13 ноября 2018

В настоящее время я изучаю, как использовать Perl и как начать писать скрипт.Я пытаюсь отправить через эхо фрагмент кода в другой сценарий оболочки, который шифрует пароль, чтобы затем использовать его для добавления нового пользователя в Linux.Фрагмент:

echo "pass=\$(perl -e 'print crypt(\"password\", \"password\")' $password)" >> /home/testscript.sh

, который будет использовать следующую команду для добавления нового пользователя:

/usr/sbin/useradd -m -p \$pass testuser

Мой вопрос: почему все обратные косые черты?Как \&(perl, \"password\" и \$pass в добавленном коде пользователя?Они нужны?Или я мог просто иметь:

echo "pass=$(perl -e 'print crypt("password", "password")' $password)" 
/usr/sbin/useradd -m -p &pass testuser 

1 Ответ

0 голосов
/ 13 ноября 2018

Один из размещенных вами вкладышей довольно сложный, в него вложено множество команд, это вложение приводит ко всем обратным слешам.

Если разбить его, это, вероятно, прояснит для вас.

Из Bash (или аналогичного) у вас есть

$password = 'ABC123'; # set somewhere, using a constant for clarity
echo "pass=\$(perl -e 'print crypt(\"password\", \"password\")' $password)" >> /home/testscript.sh

Это добавляет следующую строку в testscript.sh, возможно, скрипт оболочки bash

pass=$(perl -e 'print crypt("password", "password")' ABC123)

Обратите внимание, что мы удалили все косые черты и пароль был введен.

Первая половина этого может быть выполнена в виде однострочного сценария Perl.

print crypt("password", "password")

При этом используется криптографическая функция библиотеки C для вычисления хэша пароля с использованием соли-пароля.

Таким образом, все косые черты необходимы для предотвращения распространения элементов, таких как кавычки и знаки доллара, дальше по пути выполнения.


Обратите внимание, что этот код на самом деле бесполезен, крипта шифрует константу, я бы предположил, что $password должен был быть передан внутри вызова функции, он не кажется полезным в текущем местоположении.

Также наличие сценария создает сценарий, который вызывает perl ... он выглядит не очень красиво. Я не знаю полного контекста, но мне трудно поверить, что это лучший способ. Лично я бы избегал игр и просто писал бы один Perl-скрипт. Мое эмпирическое правило заключается в том, что любой bash-скрипт, который становится сложным или превышает 50 строк, выполняется на Perl, но это сильно зависит от того факта, что я не лажу и не наслаждаюсь bash.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...