在NixOS中,如何将用户添加到sudoers文件中?

在NixOS中,如何将用户添加到sudoers文件中?

我安装并尝试开始使用 NixOS,并尝试将我的用户添加到 sudoers 文件中。

这样我就不会以 root 身份运行所有命令,我创建了一个用户第 7 章 用户管理NixOS 手册。也就是说,我跑了

# useradd -m matthew
# su - matthew -c "true"
# passwd matthew
Enter new UNIX password: ***
Retype new UNIX password: ***

我还添加了

users.extraUsers.matthew = {
    isNormalUser = true;
    home = "/home/matthew";
    extragroups = [ "wheel" "networkmanager" ];
}

/etc/nixos/configuration.nix。但我仍然无法sudo运行matthew。例如,当我尝试使用 sudo 打开 sudo 的手册页时,出现错误matthew is not in the sudoers file

$ sudo man sudo
[sudo] password for matthew:
matthew is not in the sudoers file. This incident will be reported.

然后我尝试以下建议关于如何将用户添加到其他发行版中的 sudoers 文件,即使用$ visudo.但是当我运行它时,nixos 告诉我不要编辑该文件。也就是说,运行

$ visudo

/etc/sudoers.tmp以第一行阅读开始

# Don't edit this file. Set the NixOS option ‘security.sudo.configFile’ instead.

如何设置 NixOS 选项“security.sudo.configFile”?

答案1

将用户添加到wheel组就足以获得 sudo 权限。

users.extraUsers.matthew = {
    isNormalUser = true;
    home = "/home/matthew";
    extraGroups = [ "wheel" ];
}

您已将用户添加到新的 linux 组,您需要注销并登录这些用户,使这些更改生效(新组)。

编辑:正如上述问题下的评论所建议的那样,它应该extraGroups不是extragroups

答案2

首先,添加用户useradd和编辑users.extraUsers是多余的。我从来没有useradd在 NixOS 上烦恼过。

至于 sudo 配置,您所做的就是设置security.sudo.configFile一个字符串,其中包含您通常放入 sudoers 的内容:

security.sudo.configFile = ''
   Sudoers config goes here
''

答案3

我的猜测是,在您的情况下,问题来自于您以命令式(使用useradd)和声明式(在configuration.nix)创建相同的用户这一事实。

首先,确保nixos-rebuild switch每次更改后都运行/etc/nixos/configuration.nix。其次,如果这还不够,那么考虑到用户已经创建,您可能无法使用以声明方式传递的选项。在这种情况下,首先删除用户然后运行nixos-rebuild switch应该可以解决问题。

相关内容