无需重启即可重新加载用户组,也无需在 Bash 脚本中使用丑陋的黑客手段

无需重启即可重新加载用户组,也无需在 Bash 脚本中使用丑陋的黑客手段

/etc/sudoers.d/user1文件包含:

%user1  ALL=(user1) NOPASSWD:ALL

使用该命令授予组( )sudo的所有用户登录用户()的权限,而无需密码。user1%user1user1ALL=(user1)

如果在将user1组添加到当前用户后myuser未执行重新启动,则使用 sudo 命令时,它会不断要求我输入密码才能登录用户,user1直到下次重新启动,因为用户组未重新加载。

事实上,如果我运行该groups myuser命令,我会得到:

myuser : myuser adm cdrom sudo dip plugdev lpadmin lxd sambashare user1

如果我运行该groups命令,我会得到:

myuser adm cdrom sudo dip plugdev lpadmin lxd sambashare

没有团体user1

如何在不重启的情况下重新加载用户组,并且不使用丑陋的黑客技术来使用 bash 脚本?

我已经厌烦地阅读了各种 StackExchange 链接提出的解决方案,但它们并不能让我满意,因为我想在重新加载期间保持在同一个 shell 会话中,或者临时打开一个新的会话并在命令结束时再次关闭它,这对于重新加载用户组很有用,因为所有内容都包含在一个巨大的脚本中。

我用Ubuntu 22.04 LTS Desktop 64-bit

答案1

我可能会引来一些不愉快的评论,但有一种方法——在努力用传统方法找到解决方案后,我询问了 ChatGPT。以下是在我 ubuntu 20.04 上有效的方法 @MarioPalumbo:

  • 尝试重新启动罪魁祸首 sudo.service,但sudo systemctl status sudo.service显示它已被屏蔽。file /lib/systemd/system/sudo.service答案/lib/systemd/system/sudo.service: symbolic link to /dev/null
  • 我删除了这个伪文件,sudo rm /lib/systemd/system/sudo.service
  • 然后创建一个/lib/systemd/system/sudo.service
[Unit]
Description=Sudo Service

[Service]
Type=forking
ExecStart=/usr/bin/sudo /usr/bin/sudo -i

[Install]
WantedBy=multi-user.target

然后期末考试结束后sudo systemctl restart sudo.service我可以跑sudo -i 从另一个新终端无需输入密码。

我结束了 a(可能没用)sudo systemctl stop /lib/systemd/system/sudo.service,然后结束了最后一次sudo rm /lib/systemd/system/sudo.service && sudo ln -s /dev/null /lib/systemd/system/sudo.service && sudo systemctl daemon-reload以正确重置一切。

我担心这不过,这是一个丑陋的黑客......?

相关内容