Linuxログイン大全
Linuxインスタンスで設定できるログイン方法を全て列挙することを目標とした記事です.
認証方法
パスワード認証
普通にLinuxをインストールすると設定されるログイン方法. 文字列を記憶して,プロンプト上などに直接入力する. ホストはハッシュ値を記憶しておき,入力文字列のハッシュ値と比較する.
ユーザー情報が/etc/passwd
,パスワードが/etc/shadow
に格納される.
OTP認証
One-Time Password,ワンタイムパスワード認証のこと. 2fa(two-factor authentication),mfa(multi-factor authentication)とも. カウンタベースのOTPであるHOTP(Hash-based OTP)がRFC4226で, タイマーベースのOTPであるTOTP(Time-based OTP)がRFC6238で オープンに策定されている. 認証はスマホアプリに表示されるコードを入力することで行うが, アプリは上記の仕様を実装しているだけである.
Linuxだとpam-google-authenticatorという名前で提供されている. アプリはandOTPとかFreeOTPとか色々あります.
トークン認証
yubikeyとか.
ログイン共通化
NIS
めっちゃ古いログイン共通化. マスターの/etc/passwd
を参照する. /etc/passwd
を更新する度にmake
が必要だったり.
LDAP
これも実はそこそこ古いログイン共通化. Windows界隈だとActive Directoryの別名で呼ばれる.
OpenLDAP2.4でslapd.conf
による方式から, 設定まで含めた全てをLDAPのエントリとして管理する方式に変更された.
IAM
PAMモジュールを提供しているという1点だけでGoogle OS Loginの採用が確定する.
https://cloud.google.com/compute/docs/oslogin?hl=ja
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Connect-using-EC2-Instance-Connect.html
元ネタ
https://github.com/NixOS/nixpkgs/blob/master/nixos/modules/security/pam.nix
サービスごとに各PAMモジュールのon/offを設定できる.
security.pam.services.gdm.googleAuthenticator.enable = true; security.pam.services.lightdm.googleAuthenticator.enable = true; security.pam.services.kdm.googleAuthenticator.enable = true; security.pam.services.sddm.googleAuthenticator.enable = true;
$ nixos-option security.pam.services Value: { chfn = { ... }; chpasswd = { ... }; ... }
複数ユーザ切り替えを容易にする
その日の気分によってログインユーザを切り替えたい場合の設定について.
まず,パスにおけるチルダ~
の変換は,直後にユーザ名を持って来ることができる.
~ -> $HOME ~gtgteq -> /home/gtgteq ~u -> /home/u
切り替えたいユーザ全員をu
グループに所属させて,/home/u
以下に共有ファイルを置けば良い.
例えばdotfilesを/home/u
に移して,/home/gtgteq/.dotfiles
は/home/u/.dotfiles
へのsymlinkにする.
Haskell使いの~/.stack
など,言語ごとのキャッシュも多分移せる.
その他の設定など.
git config --local core.sharedRepository group
mv src dest chown "$USER":u -R dest chmod g+rw -R dest find dest -type d -exec chmod g+xs {} ';' -exec setfacl -d -m g::rwx {} ';'