From c8a9c1c2b834cb014aa45f944966874587f0100c Mon Sep 17 00:00:00 2001 From: Will Dietz Date: Sat, 30 Mar 2019 20:07:16 -0500 Subject: [PATCH] yubico-pam: add nixos integration --- nixos/modules/security/pam.nix | 60 ++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/nixos/modules/security/pam.nix b/nixos/modules/security/pam.nix index 03d2f899f2ab..46ce274a2a9a 100644 --- a/nixos/modules/security/pam.nix +++ b/nixos/modules/security/pam.nix @@ -48,6 +48,16 @@ let ''; }; + yubicoAuth = mkOption { + default = config.security.pam.yubico.enable; + type = types.bool; + description = '' + If set, users listed in + ~/.yubico/authorized_yubikeys + are able to log in with the asociated Yubikey tokens. + ''; + }; + googleAuthenticator = { enable = mkOption { default = false; @@ -340,6 +350,8 @@ let "auth sufficient ${pkgs.pam_usb}/lib/security/pam_usb.so"} ${let oath = config.security.pam.oath; in optionalString cfg.oathAuth "auth requisite ${pkgs.oathToolkit}/lib/security/pam_oath.so window=${toString oath.window} usersfile=${toString oath.usersFile} digits=${toString oath.digits}"} + ${let yubi = config.security.pam.yubico; in optionalString cfg.yubicoAuth + "auth ${yubi.control} ${pkgs.yubico-pam}/lib/security/pam_yubico.so id=${toString yubi.id} ${optionalString yubi.debug "debug"}"} '' + # Modules in this block require having the password set in PAM_AUTHTOK. # pam_unix is marked as 'sufficient' on NixOS which means nothing will run @@ -636,6 +648,54 @@ in }; }; + security.pam.yubico = { + enable = mkOption { + default = false; + type = types.bool; + description = '' + Enables Yubico PAM (yubico-pam) module. + + If set, users listed in + ~/.yubico/authorized_yubikeys + are able to log in with the associated Yubikey tokens. + + The file must have only one line: + username:yubikey_token_id1:yubikey_token_id2 + More information can be found here. + ''; + }; + control = mkOption { + default = "sufficient"; + type = types.enum [ "required" "requisite" "sufficient" "optional" ]; + description = '' + This option sets pam "control". + If you want to have multi factor authentication, use "required". + If you want to use Yubikey instead of regular password, use "sufficient". + + Read + + pam.conf + 5 + + for better understanding of this option. + ''; + }; + id = mkOption { + example = "42"; + type = types.string; + description = "client id"; + }; + + debug = mkOption { + default = false; + type = types.bool; + description = '' + Debug output to stderr. + ''; + }; + }; + security.pam.enableEcryptfs = mkOption { default = false; description = ''