似乎无法让 sudo 在 NixOS 下工作
Can't seem to get sudo working under NixOS
标题(令人尴尬)说明了一切。首先是一些上下文:
我是 运行 NixOS,在 Vultr 上使用自定义 ISO。
尝试时间范围:
which sudo
显示没有 sudo
- 安装
sudo
使用 nix-env -i sudo
- 然后,当我尝试
sudo ...
时,我看到 sudo: /home/agam/.nix-profile/bin/sudo must be owned by uid 0 and have the setuid bit set
sudo su
由于同样的原因没有工作
- 好的,我卸载了它(
nix-env --uninstall sudo
)
- 我想嗯,也许我应该以 root 身份安装它?
- 所以,
su
然后重复安装
- 现在当我尝试
sudo ...
时,我看到 sudo: /nix/var/nix/profiles/default/bin/sudo must be owned by uid 0 and have the setuid bit set
(所以和以前一样的错误,不同的路径)
- 作为最后的手段,试试锤子,感谢 NixOS 阻止了我:
[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
编辑:最后一组有效的步骤:
- 按照答案中的建议,启用 sudo 首先:
security.sudo.enable = true;
- 将 sudoers 部分添加到
/etc/nixos/configuration.nix
:
# Allow members of the "wheel" group to sudo:
security.sudo.configFile = ''
%wheel ALL=(ALL) ALL
'';
- 将自己添加到
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 权限。
标题(令人尴尬)说明了一切。首先是一些上下文:
我是 运行 NixOS,在 Vultr 上使用自定义 ISO。
尝试时间范围:
which sudo
显示没有 sudo- 安装
sudo
使用nix-env -i sudo
- 然后,当我尝试
sudo ...
时,我看到sudo: /home/agam/.nix-profile/bin/sudo must be owned by uid 0 and have the setuid bit set
sudo su
由于同样的原因没有工作- 好的,我卸载了它(
nix-env --uninstall sudo
) - 我想嗯,也许我应该以 root 身份安装它?
- 所以,
su
然后重复安装 - 现在当我尝试
sudo ...
时,我看到sudo: /nix/var/nix/profiles/default/bin/sudo must be owned by uid 0 and have the setuid bit set
(所以和以前一样的错误,不同的路径) - 作为最后的手段,试试锤子,感谢 NixOS 阻止了我:
[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
编辑:最后一组有效的步骤:
- 按照答案中的建议,启用 sudo 首先:
security.sudo.enable = true;
- 将 sudoers 部分添加到
/etc/nixos/configuration.nix
:
# Allow members of the "wheel" group to sudo:
security.sudo.configFile = ''
%wheel ALL=(ALL) ALL
'';
- 将自己添加到
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 权限。