似乎无法让 sudo 在 NixOS 下工作

Can't seem to get sudo working under NixOS

标题(令人尴尬)说明了一切。首先是一些上下文:

我是 运行 NixOS,在 Vultr 上使用自定义 ISO。

尝试时间范围:

[root@nixos:/home/agam]# chmod 4755 /nix/var/nix/profiles/default/bin/sudo
chmod: changing permissions of '/nix/var/nix/profiles/default/bin/sudo': Read-only file system

这里有什么线索吗?

我在这里看到的一些可能的选项是: 1. Vultr 提供的自定义 ISO 是......缺少一些东西 2. sudo 在 NixOS 中的一些根本不同的工作方式 3. 我遗漏了一些关于如何使用 Nix 的非常基本的东西(很有可能!)

一些细节:

[agam@nixos:~]$ nixos-version
18.09.1534.d45a0d7a4f5 (Jellyfish)

[agam@nixos:~]$ which sudo
/nix/var/nix/profiles/default/bin/sudo

[agam@nixos:~]$ nix-channel --list
nixos https://nixos.org/channels/nixos-18.09

编辑:最后一组有效的步骤:

  1. 按照答案中的建议,启用 sudo 首先:
security.sudo.enable =  true;
  1. 将 sudoers 部分添加到 /etc/nixos/configuration.nix:
  # Allow members of the "wheel" group to sudo:
  security.sudo.configFile = ''
    %wheel ALL=(ALL) ALL
  '';
  1. 将自己添加到 wheel:
usermod -a -G wheel agam

在 NixOS 上安装 sudo 的方法是添加到 configuration.nix:

security.sudo.enable = true;

Nix 本身无法像 sudo 那样创建 setuid 二进制文件。否则它不可能是 "safe and policy free" - 没有多用户支持。 nix/nix-* 工具旨在执行安全存储操作,不允许提升权限。

为了支持像 sudo 这样的 setuid 二进制文件,NixOS 在 /run/wrappers 中的 Nix 存储外部维护了一个 setuid 包装器目录。这是唯一可能的,因为 NixOS started/switched/activated 具有 root 权限。