cockpit は PAM(8) を使ってローカルユーザの認証を行っています。
PAM は access.conf(5) でユーザ/グループ/IP 制限がかけられるのでこれを利用することで cockpit にログインできるユーザを制限することができます。
PAM の設定
インストールすると /etc/pam.d/cockpit
ができているので
適当なエディタで編集してpam_access.so の行を追加します.
accessfile=path/to/access.config
はなくてもかまいません。指定しなければ /etc/security/access.conf
が利用されます。
#%PAM-1.0
# this MUST be first in the "auth" stack as it sets PAM_USER
# user_unknown is definitive, so die instead of ignore to avoid subsequent modules mess up the error code
-auth [success=done new_authtok_reqd=done user_unknown=die default=ignore] pam_cockpit_cert.so
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
auth optional pam_ssh_add.so
account required pam_nologin.so
account required pam_access.so accessfile=/etc/security/cockpit_access.conf ★この行を追加
account include password-auth
password include password-auth
# pam_selinux.so close should be the first session rule
session required pam_selinux.so close
session required pam_loginuid.so
# pam_selinux.so open should only be followed by sessions to be executed in the user context
session required pam_selinux.so open env_params
session optional pam_keyinit.so force revoke
session optional pam_ssh_add.so
session include password-auth
session include postlogin
追加する箇所は account include password-auth
より前にする必要があります。
この順序を逆にすると、account include password-auth
で読み込まれている password-auth に sufficient 行が含まれているため、そこで認証に成功しているとそのあとに書いた制限が評価されません。
access.conf の設定
accessfile に指定したパスに access.conf(5) の書式でファイルを用意します。
例えば、 cockpit グループを作ってそのグループに入っているユーザのみログインできるようにする場合は以下のようにします。
-:ALL EXCEPT (cockpit):LOCAL
書き方は <permission>:<user or group>:<access>
で
-
<permission>
は '-' (許可) または-
(拒否) のどちらか - user または group 名、ALL は全ユーザまたは全グループにを表していて、 EXCEPT は続くユーザ・グループの除外を指定します
- group の時は
()
をつけたほうがいいらしい? -
ALL EXCEPT (cockpit)
は cockpit に属するユーザを除く全ユーザが対象
- group の時は
-
<from>
はアクセス元- cockpit の場合は LOCALのみ利用している(?)