该/etc/sudoers.d/user1
文件包含:
%user1 ALL=(user1) NOPASSWD:ALL
使用该命令授予组( )sudo
的所有用户登录用户()的权限,而无需密码。user1
%user1
user1
ALL=(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
以正确重置一切。
我担心这是不过,这是一个丑陋的黑客......?