我安装并尝试开始使用 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
应该可以解决问题。