Как получить состояние аутентификации от последнего выполненного модуля PAM

По умолчанию удаленные пути scp интерпретируются относительно домашнего каталога, поэтому вам вообще не нужен ~ :

scp user@remote.host.com:some/file/name filename

загрузит some / file / name из домашнего каталога пользователя и сохраните его как filename локально. Если вы хотите использовать абсолютный путь к файлу на удаленном сервере, запустите его с / : scp host: / etc / passwd passwd .

Строго говоря, возможно, что ваш сервер интерпретирует вещи по-другому. В этом случае вы можете поместить ~ в свой сценарий, вместо того, чтобы каждый раз повторять его в командной строке (будь ленив, насколько хотите!):

scp user@remote.host.com:~/"$location" "$name"

Таким образом, ваша оболочка никогда не получит шанс интерпретировать это. (Также можно указать ~ в командной строке: \ ~ или '~' , но это больше работы, чем необходимо.) Я представляю себе первое. подход, описанный выше, тем не менее, будет работать.


Еще одно примечание о переменной name . Вы говорите, что хотите, чтобы это было просто базовое имя файла. Для этой цели существует команда basename command :

name="$(basename "$location")"

Это проще, чем запускать все через sed .

1
08.04.2014, 01:24
1 ответ

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

auth [success=1] default_pam.so
auth [success=done default=die] my_custom_pam.so default_failed
auth requisite my_custom_pam.so

Эта цепочка имеет следующую логику:

  • Если модуль по умолчанию успешен, отметьте его как проверенный (подразумевается success = 1 ) и пропустите модуль 1. Цепочка достигает моего _ пользовательского _ pam , вызываемого без аргументов, которые должны быть успешными ( requite ).
  • При сбое модуля по умолчанию ничего не пропускайте. Цепочка достигает моей _ пользовательской _ pam , вызываемой с аргументом, default _ failed . Цепочка остановится после этого модуля ( выполнено или выполнено ) и определит общий результат.

Здесь ключевым элементом является аргумент, переданный my _ custom _ pam . Проверяя argc и argv в подпрограмме pam _ sm _ authenticate , можно адаптировать логику в соответствии с текущим состоянием цепочки.

1
27.01.2020, 23:52

Теги

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