Humanity

Edit the world by your favorite way

PAMのグローバルな設定ファイル(/etc/pam.d/common-*)を復旧させる方法

PAMの設定いじってたけど

  • よくわからなくなったので最初からやり直したい
  • ついでにログインできなくなった!

とかいう人のために。


バックアップファイルぐらい残しとけよ
とか
PAMの設定してる間は必ず1つはログインしっぱなしのセッション残すだろ
とか
普通設定ファイルは(etckeeperとかで)git管理してるよね?
とか
/etc/pam.d/common-*だけにしか使えないのかよ
とか

いろいろ言いたいことはあるでしょうが、書いておいて損はないと思うので一応書いておく。

復旧方法

pam-auth-update --force

curses UIで起動して全てのチェックボックスを外せば元通りになる。


そもそもなぜ元通りにできるかといえば
/usr/share/pam/以下にオリジナルの設定ファイルにpam-auth-update用のテンプレート変数を埋め込んだファイルがあるからで、
このファイルからテンプレート変数を削除しても同じことだったりする。

#
# /etc/pam.d/common-auth - authentication settings common to all services
#
# This file is included from other service-specific PAM config files,
# and should contain a list of the authentication modules that define
# the central authentication scheme for use on the system
# (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the
# traditional Unix authentication mechanisms.
#
# As of pam 1.0.1-6, this file is managed by pam-auth-update by default.
# To take advantage of this, it is recommended that you configure any
# local modules either before or after the default block, and use
# pam-auth-update to manage selection of other modules. See
# pam-auth-update(8) for details.

# here are the per-package modules (the "Primary" block)
$auth_primary (テンプレート変数)
# here's the fallback if no module succeeds
auth requisite pam_deny.so
# prime the stack with a positive return value if there isn't one already;
# this avoids us returning an error just because nothing sets a success code
# since the modules above will each just jump around
auth required pam_permit.so
# and here are more per-package modules (the "Additional" block)
$auth_additional (テンプレート変数)
# end of pam-auth-update config