Linuxログイン大全

2020-02-06 2020-05-28

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 {} ';'

https://unix.stackexchange.com/questions/589239/how-to-apply-group-change-via-the-dirs-setgid-bit-when-moving-files-with-mv/