Могу ли я активировать обратную связь паролем на TTY?

Я на самом деле подозреваю, что вас укусила широко обсуждаемая ошибка повреждения ext4 в ядре 3 и 4. Посмотрите на этот поток,

http://bugzilla.kernel.org/show_bug.cgi?id=89621 .

Существует больше потоков об ошибке, я только что нашел это еще интереснее.

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

-121--145200-

Поскольку оболочка запускается без hup , она получает сигнал SIGHUP при закрытии сеанса и отправляет его всем процессам в конвейере. Поскольку вторая команда mysql снова выполняется без nohup , она прекращает работу и отправляет SIGPIPE в nohup mysqldump , что, в свою очередь, заканчивается.

Попробуйте

nohup sh -c 'mysqldump -hxxx -Pxxx -uxxx -pxxx --dump-slave --include-master-host-port --apply-slave-statements -f -q -A -E -R | mysql -hxxxx -Pxxxx -uxxxx -pxxxx' &

-121--166105-

Отличие состоит в том, что один из них является списком, а другой - последовательностью. {1,2,3} расширяется до трех конкретных элементов: 1 , 2 и 3 . {1.. 3} расширяется до списка чисел от одного до трех. В этом конкретном случае они одинаковы и можно использовать одно из двух. Файл . * будет расширен до всех файлов и каталогов в текущем каталоге, имя которого начинается с файла . . Если имеется только файл .1 , file.2 и file.3 , то это также эквивалентно двум другим.

Что касается проблем, то я не понимаю, почему. Вы можете думать о

$ cat file.* > file.txt
cat: file.txt: input file is output file

Это, однако, совершенно другой вопрос. Единственная другая проблема, о которой я могу думать, это то, что ваша оболочка может не перечислить файлы в правильном порядке. Например:

$ touch file1 file11 file2
$ echo file*
file1 file11 file2

Для решения этой проблемы можно использовать zsh вместо bash (подробнее см. здесь ):

% echo f*(n)
file1 file2 file11

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

3
30.08.2018, 19:20
1 ответ

Ладно, переходим к исходному коду!

Программа

util-linuxпользователя loginуже занята к моменту появления приглашения для входа в систему. Начнем там , точнее в файле login-utils/login.c.

Теперь loginотвечает за подсказку login, поскольку она генерируется вloginpam_get_promptи регистрируется в PAM вinit_loginpam. Затем функцияloginpam_authвступает во владение, и управление переходит к функцииpam_authenticatePAM. Это означает, что loginпросто определяет подсказку для имени пользователя и все.

Для PAM тогда :то, что нас интересует, явно происходит вpam_authenticate:

The pam_authenticate function is used to authenticate the user. The user is required to provide an authentication token depending upon the authentication service, usually this is a password, but could also be a finger print.

Теперь теневая -аутентификация (/etc/passwd,/etc/shadow)обрабатывается модулем pam_unix. Мой дистрибутив (Arch )предоставляет PAM через пакет pam, что означает, что наше путешествие продолжается к linux -pam.org и его исходному коду .modules/pam_unix/pam_unix_auth.cкажется хорошим местом для начала. Модули PAM предоставляют свой механизм аутентификации через функцию pam_sm_authenticate, которую мы находим здесь . Пароль (или «токен аутентификации», см. выше ), извлекается с помощью вызова функции PAM pam_get_authtok. Он объявлен в заголовочном файле security/pam_ext.h, так что мы идем дальше.

extern int PAM_NONNULL((1,3)) 
pam_get_authtok (pam_handle_t *pamh, 
                 int item, 
                 const char **authtok, 
                 const char *prompt);

В этих рассуждениях нет ничего многообещающего, но хорошо... Давайте посмотрим определение . pam_unixпередал NULLвместо аргумента promptи PAM_AUTHTOKвместо item, так что мы получаем здесь . Теперь этот жестко закодированный PAM_PROMPT_ECHO_OFF, переданный pam_prompt, просто не выглядит хорошо для меня...

retval = pam_prompt (pamh, PAM_PROMPT_ECHO_OFF, &resp[0], "%s", PROMPT);

Кстати, пароль PROMPTтакже жестко запрограммирован(здесь ), так что моя мечта о более экзотическом запросе пароля исчезает... Впрочем, давайте перейдем к функции pam_prompt. Фактическое приглашение происходит здесь , где PAM вызывает функцию диалога, выбранную несколькими строками выше . Беглый взгляд на функции pam_get_itemиpam_set_itemзнакомит нас со структурой pam_conv, определенной здесь .

Теперь найти информацию о функции диалога PAM по умолчанию было намного сложнее, чем следовало бы (Я думаю ). Куда бы я ни посмотрел, структура оставалась неинициализированной и pam_unix, похоже, не определяет свою собственную. Однако мне удалось найти общую функцию misc_conv, которая передает PAM_PROMPT_ECHO_OFFнаread_stringи... здесь , где PAM деактивирует входную обратную связь.

Заключение:отсутствие обратной связи по паролю жестко запрограммировано. Очень жаль. Немного покопавшись, я нашел эту проблему на GitHub и эту ветку Arch BBS . Судя по всему, эта функция была доступна еще тогда, когда PAM не был стандартом для аутентификации. Я предполагаю, что имеет смысл не реализовывать это снова -безопасность и все -, но вы знаете, вариант был бы хорош.

В общем, я только что заказал себе новую клавиатуру.

3
27.01.2020, 21:25

Теги

Похожие вопросы