diff --git a/nixos/modules/security/pam.nix b/nixos/modules/security/pam.nix
index 812a71c68a3..b1a0eff98c2 100644
--- a/nixos/modules/security/pam.nix
+++ b/nixos/modules/security/pam.nix
@@ -77,6 +77,30 @@ let
'';
};
+ googleOsLoginAccountVerification = mkOption {
+ default = false;
+ type = types.bool;
+ description = ''
+ If set, will use the Google OS Login PAM modules
+ (pam_oslogin_login,
+ pam_oslogin_admin) to verify possible OS Login
+ users and set sudoers configuration accordingly.
+ This only makes sense to enable for the sshd PAM
+ service.
+ '';
+ };
+
+ googleOsLoginAuthentication = mkOption {
+ default = false;
+ type = types.bool;
+ description = ''
+ If set, will use the pam_oslogin_login's user
+ authentication methods to authenticate users using 2FA.
+ This only makes sense to enable for the sshd PAM
+ service.
+ '';
+ };
+
fprintAuth = mkOption {
default = config.services.fprintd.enable;
type = types.bool;
@@ -278,8 +302,14 @@ let
"account [default=bad success=ok user_unknown=ignore] ${pkgs.sssd}/lib/security/pam_sss.so"}
${optionalString config.krb5.enable
"account sufficient ${pam_krb5}/lib/security/pam_krb5.so"}
+ ${optionalString cfg.googleOsLoginAccountVerification ''
+ account [success=ok ignore=ignore default=die] ${pkgs.google-compute-engine-oslogin}/lib/pam_oslogin_login.so
+ account [success=ok default=ignore] ${pkgs.google-compute-engine-oslogin}/lib/pam_oslogin_admin.so
+ ''}
# Authentication management.
+ ${optionalString cfg.googleOsLoginAuthentication
+ "auth [success=done perm_denied=bad default=ignore] ${pkgs.google-compute-engine-oslogin}/lib/pam_oslogin_login.so"}
${optionalString cfg.rootOK
"auth sufficient pam_rootok.so"}
${optionalString cfg.requireWheel