mirror of https://gitlab.com/curben/blog
post(nixos): enable totp for ssh
This commit is contained in:
parent
1ec281168b
commit
df9009f987
|
@ -2,7 +2,7 @@
|
||||||
title: "Setup Caddy as a reverse proxy on NixOS (Part 2: Hardening)"
|
title: "Setup Caddy as a reverse proxy on NixOS (Part 2: Hardening)"
|
||||||
excerpt: "Part 2: Securing NixOS"
|
excerpt: "Part 2: Securing NixOS"
|
||||||
date: 2020-03-04
|
date: 2020-03-04
|
||||||
updated: 2022-12-03
|
updated: 2024-07-25
|
||||||
tags:
|
tags:
|
||||||
- server
|
- server
|
||||||
- linux
|
- linux
|
||||||
|
@ -163,7 +163,7 @@ $ google-authenticator
|
||||||
```
|
```
|
||||||
|
|
||||||
1. Yes to time-based
|
1. Yes to time-based
|
||||||
2. Import the generated QR code or secret key to OTP app (recommends Aegis for Android)
|
2. Import the generated QR code or secret key to an OTP app or password manager.
|
||||||
3. Enter OTP
|
3. Enter OTP
|
||||||
4. Backup scratch codes
|
4. Backup scratch codes
|
||||||
5. Yes to saving the key to ~/.google_authenticator
|
5. Yes to saving the key to ~/.google_authenticator
|
||||||
|
@ -171,13 +171,34 @@ $ google-authenticator
|
||||||
7. No to increasing window
|
7. No to increasing window
|
||||||
8. Yes to rate-limiting login attempts
|
8. Yes to rate-limiting login attempts
|
||||||
|
|
||||||
Once the secret is generated, TOTP can be enabled using the following config. I configured it to require OTP when login and sudo, in addition to password.
|
Once the secret is generated, TOTP can be enabled using the following config. I configured it to require OTP as the second-factor authentication when login and ssh. There is no security benefit of enabling it on sudo because the secret key is stored in the home folder (`$HOME/.google_authenticator`) that the user can write to.
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
## Requires OTP to login & sudo
|
services.openssh = {
|
||||||
security.pam = {
|
settings = {
|
||||||
services.login.googleAuthenticator.enable = true;
|
PermitRootLogin = "no";
|
||||||
services.sudo.googleAuthenticator.enable = true;
|
PasswordAuthentication = false;
|
||||||
|
KbdInteractiveAuthentication = true;
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/115044#issuecomment-2244953944
|
||||||
|
AuthenticationMethods = "publickey,keyboard-interactive:pam";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
## Requires OTP to login & ssh
|
||||||
|
security.pam.services = {
|
||||||
|
login.googleAuthenticator.enable = true;
|
||||||
|
# https://github.com/NixOS/nixpkgs/issues/115044#issuecomment-2065409087
|
||||||
|
sshd.text = ''
|
||||||
|
account required pam_unix.so # unix (order 10900)
|
||||||
|
|
||||||
|
auth required ${pkgs.google-authenticator}/lib/security/pam_google_authenticator.so nullok no_increment_hotp # google_authenticator (order 12500)
|
||||||
|
auth sufficient pam_permit.so
|
||||||
|
|
||||||
|
session required pam_env.so conffile=/etc/pam/environment readenv=0 # env (order 10100)
|
||||||
|
session required pam_unix.so # unix (order 10200)
|
||||||
|
session required pam_loginuid.so # loginuid (order 10300)
|
||||||
|
session optional ${pkgs.systemd}/lib/security/pam_systemd.so # systemd (order 12000)
|
||||||
|
'';
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue