home-lab/modules/users/sma.nix
Geir Okkenhaug Jerstad 77e6b9a501 feat: Implement two-key SSH management strategy
- Add modules/security/ssh-keys.nix for centralized SSH key management
- Generate role-specific SSH keys with geir@geokkjer.eu email:
  - Admin key (geir@geokkjer.eu-admin) for sma user server access
  - Development key (geir@geokkjer.eu-dev) for geir user and git services
- Update SSH client config with role-based host patterns
- Configure users/geir.nix and users/sma.nix with appropriate key access
- Add SSH key setup to both machine configurations
- Create scripts/setup-ssh-keys.sh for key generation automation
- Update plan.md with completed SSH security implementation

Security benefits:
- Principle of least privilege (separate admin vs dev access)
- Limited blast radius if keys are compromised
- Clear usage patterns: ssh admin-sleeper vs ssh geir@sleeper-service.home
- Maintains compatibility with existing services during transition
2025-06-05 16:25:33 +02:00

133 lines
3.1 KiB
Nix

# Admin User Configuration - sma
# Named after Diziet Sma, pragmatic Special Circumstances agent
# Role: System administration, security oversight, maintenance
{ config, pkgs, ... }:
{
users.users.sma = {
description = "Diziet Sma - System Administrator";
isNormalUser = true;
# Admin privileges
extraGroups = [
"wheel" # sudo access
"networkmanager" # network management
"libvirt" # virtualization management
"incus-admin" # container management
"podman" # container runtime
"docker" # docker compatibility (if needed)
];
# Security-focused shell setup
shell = pkgs.zsh;
# SSH key-based authentication only (no password login)
openssh.authorizedKeys.keys = config.security.ssh-keys.admin or [
# Admin keys will be populated from security module
];
# Essential admin packages
packages = with pkgs; [
# System monitoring and diagnostics
htop
iotop
nethogs
lsof
strace
# Network tools
nmap
tcpdump
wireshark-cli
curl
wget
# File and disk utilities
tree
fd
ripgrep
fzf
ncdu
# Text processing
jq
yq
# Version control (for system configs)
git
# Container management
podman-compose
# Backup and sync
rsync
rclone
# Security tools
age
sops
# NixOS specific tools
nixos-rebuild
nix-tree
nix-diff
];
};
# Admin-specific shell configuration
programs.zsh = {
enable = true;
autosuggestions.enable = true;
syntaxHighlighting.enable = true;
# Admin-focused aliases
shellAliases = {
# System management
"rebuild" = "sudo nixos-rebuild switch --flake /home/geir/Home-lab";
"rebuild-test" = "sudo nixos-rebuild test --flake /home/geir/Home-lab";
"rebuild-boot" = "sudo nixos-rebuild boot --flake /home/geir/Home-lab";
# Container management
"pods" = "podman ps -a";
"images" = "podman images";
"logs" = "podman logs";
# System monitoring
"disk-usage" = "df -h";
"mem-usage" = "free -h";
"processes" = "ps aux | head -20";
# Network
"ports" = "ss -tulpn";
"connections" = "ss -tuln";
# Git for infrastructure
"lab" = "cd /home/geir/Home-lab";
"lab-status" = "cd /home/geir/Home-lab && git status";
"lab-pull" = "cd /home/geir/Home-lab && git pull";
# Security
"audit-users" = "cat /etc/passwd | grep -E '/bin/(bash|zsh|fish)'";
"audit-sudo" = "cat /etc/sudoers.d/*";
};
};
# Sudo configuration for admin user
security.sudo.extraRules = [
{
users = [ "sma" ];
commands = [
{
command = "ALL";
options = [ "NOPASSWD" ]; # Allow passwordless sudo for admin tasks
}
];
}
];
# Admin user home directory permissions
systemd.tmpfiles.rules = [
"d /home/sma 0755 sma users -"
"d /home/sma/.ssh 0700 sma users -"
];
}