Как я могу закомментировать или удалить строку «@include common-auth» в /etc/pam.d/sshd? Содержание по умолчанию:
... # Standard Un*x authentication. @include common-auth ...
В документация на объектив не все так полезно. Я новичок в Augeas и еще не совсем понимаю, как работают выражения пути.
Я пытаюсь сделать это с помощью augtool как части Dockerfile, если быть конкретным. Я наивно попробовал следующую команду, но она не сработала:
augtool --autosave 'rm /files/etc/pam.d/sshd/@include common-auth'
Я прибегал к этому с sed
, и следующее помогло мне:
sed -i 's/@include common-auth/#@include common-auth/' /etc/pam.d/sshd
Но я все еще пытаюсь выяснить, есть ли способ сделать это с помощью augtool, потому что все остальные изменения конфигурации в моем Dockerfile я делаю с помощью augtool, и единообразие было бы неплохо.
Самое важное, что нужно сделать при попытке решить, какой узел редактировать / удалить, - это посмотреть на ток дерево с помощью augtool's print
команда:
$ augtool
augtool> print /files/etc/pam.d/sshd
/files/etc/pam.d/sshd
/files/etc/pam.d/sshd/#comment[1] = "PAM configuration for the Secure Shell service"
/files/etc/pam.d/sshd/#comment[2] = "Standard Un*x authentication."
/files/etc/pam.d/sshd/include[1] = "common-auth"
/files/etc/pam.d/sshd/#comment[3] = "Disallow non-root logins when /etc/nologin exists."
/files/etc/pam.d/sshd/1
/files/etc/pam.d/sshd/1/type = "account"
[..]
Это показывает, что @include common-auth
линия имеет путь /files/etc/pam.d/ssh/include[1]
, так что это удалит его:
augtool -s 'rm /files/etc/pam.d/sshd/include[1]'
Вместо жесткого кодирования индекса (1) вы можете использовать выражение пути для соответствия значению «common-auth», гарантируя, что вы удалите правильный @include
запись, если она существует.
augtool -s 'rm /files/etc/pam.d/sshd/include[. = "common-auth"]'
В .
означает стоимость узла (правая часть print
вывод). Что-нибудь в пределах []
является выражением пути. В Авгий вики есть много дополнительной информации о выражениях пути.