-
发生时间:2022-10-14
-
问题描述:
- 我本地电脑的 Ubuntu 系统下有个 along 用户,它具有 sudo 权限。
along:~$ cat /etc/group | grep along sudo:x:27:along along:x:1000:- 为研究 Linux 文件权限问题,我新建了 pat 用户。
along:~$ sudo adduser pat Adding user `pat' ... Adding new group `pat' (1001) ... Adding new user `pat' (1001) with group `pat' ... Creating home directory `/home/pat' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for pat # 这里使用默认配置,为节省篇幅,省略后面的打印信息- 由于
/etc/adduser.conf配置了DIR_MODE=0750,pat 的 HOME 目录权限为750,所以其他用户(包括 along 用户)没有权限访问此目录。
along:~$ ls -al /home total 16 drwxr-xr-x 1 root root 4096 Oct 17 02:54 . drwxr-xr-x 1 root root 4096 Oct 17 02:50 .. drwxr-xr-x 2 along along 4096 Oct 17 02:52 along drwxr-x--- 2 pat pat 4096 Oct 17 02:54 pat along:~$ ls /home/pat ls: cannot open directory '/home/pat': Permission denied- 接着我将 along 用户添加到 pat 群组,但发现 along 用户依然没有权限访问 pat 的 HOME 目录。
along:~$ sudo usermod -G pat along along:~$ ls /home/pat 42 ls: cannot open directory '/home/pat': Permission denied- 然而更奇怪的是,我发现
/etc/group文件里 along 用户不再是 sudoer,但 along 用户依然具有 sudo 权限!
# sudo 群组的第四列为空,代表现在没有任何 sudoer along:~$ cat /etc/group | grep sudo sudo:x:27: # 但 along 用户依然可以使用 sudo along:~$ sudo whoami root- 最后,我重启电脑,发现这时候 along 用户不再具有 sudo 权限了!
along:~$ sudo whoami along is not in the sudoers file. This incident will be reported. -
问题类别:软件部署
-
原因分析:
- 由于这个问题比较诡异,我一下子没找到思路,就请教了软件组的林少彪——他负责我司 setup 服务器的维护,对账号管理比较了解。
- 他建议执行
history命令来查看历史命令,看看哪些命令比较可疑。 - 当看到
sudo usermod -G pat along这条命令时,由于他很少使用 usermod 命令,于是建议我查看一下 usermod 的 manpage。 - 在 usermod 的 manpage 中,我们发现了它的
-G选项中有以下描述:If the user is currently a member of a group which is not listed, the user will be removed from the group. - 也就是说,当我执行
sudo usermod -G pat along时,虽然把 along 用户加入到 pat 群组了,但也把 along 用户原有的群组都删除了! - 我之前是参考 How-To Geek 网站 的教程来使用这条命令的,于是重新查看该网站,发现自己看漏了还有一个
-a选项,正确命令为sudo usermod -a -G pat along。 - 林少彪建议以后使用
adduser user group来将用户添加到群组,这条命令使用起来更方便,也不容易出错。
-
解决方案:
- 参考 StackExchange 网站,重新给 along 用户添加 sudo 权限,主要步骤为:
- 重启电脑,在 grub 启动菜单中,选择
Advanced options for ubuntu,进入 recovery Menu。 - 在 Recovery Menu,选择
root,以 root 用户登录终端。 - 在终端中,输入
adduser along sudo,将 along 用户添加到 sudo 群组。 - 重启电脑。
- 重启电脑,在 grub 启动菜单中,选择
- 重启电脑后,改用
adduser user group命令将 along 用户添加到某些群组。
- 参考 StackExchange 网站,重新给 along 用户添加 sudo 权限,主要步骤为:
-
实施结果:
- along 用户重新获得了 sudo 权限,并且可以正常将 along 用户添加到目标群组了。
-
经验总结:
- 要将用户添加到群组,应该使用
adduser user group命令,尽量不要使用 usermod 命令(有点危险!)。 - 阅读文档要耐心、细心,否则可能由于看错文档而酿成意料之外的大错。
- 要将用户添加到群组,应该使用