配置 linux 权限是熟悉 linux 所必须的。各大linux发行版的默认软件仓库对各软件包配置了详细而严格的权限限制。如果不能熟悉 linux 的权限控制,就会因此出现很多问题。
直接使用 root 用户管理系统是非常方便的,但也是非常危险的。标准的做法是使用具有 sudo 权限的普通用户管理系统。这里记录一下在 Debian 10 系统下手动配置一个具有 sudo 权限的linux 普通用户的过程。
sudo 是较为通用的软件包,其他的 linux 发行版与 Debian 基本相同,甚至没有任何区别。可以直接参考本文
原文链接: http://blog.ryjer.com/posts/a158220239.html
1、准备工作——安装sudo
sudo 是 super user do 的意思,表示临时借用超级用户(super user)的权限执行(do)一次命令。
但官方的 debian 系统可能默认没有安装 sudo 软件,因而也没有sudo命令的配置文件 /etc/sudoers。其他发行版一般都会默认安装sudo。
Debian 需要切换到 root 用户后用apt-get
手动安装 sudo 软件。
1 | apt install sudo |
RHEL 系的发行版(CentOS Rocky)则需要切换到 root 用户后用dnf
手动安装 sudo
,但通常 RHEL系会预装 sudo
1 | dnf install sudo |
接下来,其他用户就可以使用 sudo 命令了。
2、原理
2.1 sudo配置文件—debian10
sudo 命令使用 /etc/sudoers
配置文件管理 用户 和 用户组 的sudo权限。Debian 10 中 sudo 默认的配置文件内容如下:
1 | # |
其中,第20行开始为 用户sudo权限 ,这里为root用户提供了sudo权限(虽然root用户并不需要)。第23行以 %
开始的为 用户组权限,这里创建了 sudo 用户组,该组中的用户将拥有sudo权限。
为了方便管理,我们可以将普通用户添加 sudo 附加用户组,便可以使其拥有 sudo 权限。如果单独为一个个用户添加 sudo 权限会非常难以管理。
2.2 sudo配置文件—Rocky8
rocky8 的sudo是默认安装的,其配置文件与 debian10 有所不同,我刚装完一个rocky8后的配置文件如下
1 | ## Sudoers allows particular users to run various commands as |
从 107 行可看出,其默认sudo用户组为 wheel
而不是 debian 10中的 sudo
,而且格式也不相同
查看一下拥有sudo权限的用户 me
的群组看看
1 | ~# groups me |
可见确实是 wheel 群组授予了其 sudo 权限
3、添加用户—useradd命令
可以使用 useradd 命令创建新用户,系统会自动创建一个同名组(me用户组)。其格式如下:
1 | useradd 选项 用户名 |
常用参数:
- -s 指定用户登录 shell,这里指定为 bash
- -d 指定一个已经存在的目录为主目录
- -m 指定并创建主目录(main),这里指定为 /home/me
- -g 指定用户所属用户组(group)。
- -G 指定附加用户组
1 | # 添加新用户 me,指定登录shell为 /bin/bash,主目录为 /home/me |
如果你想同时指定不同命的用户组和附加组,可以这样。
1 | useradd -s /bin/bash -g we –G adm,root me |
该命令创建了用户 me 。使用 -s 参数指定了其登录 shell 为 /bin/bash;使用 -g 参数指定属于不同名的 we 用户组;并用 -G 参数指定了两个附加组 adm 和 root,指定多个附加组时用逗号 “,” 分割各个附加组名。
如果你想偷下懒,可以使用adduser命令,该命令是useradd的简化版(但可以满足90%的需求)。该命令会自动配置 /home 下的用户同名主目录和默认 shell
1 | adduser me |
执行完该命令后,会在配置文件 /etc/passwd 中添加me用户的记录。并在 /etc/group 配置文件中添加一个me用户组记录。在 /etc/shadow 配置文件中记录加密密码(说是密码不太准确)。
4、 修改密码—passwd命令
刚刚创建的新用户没有密码,不太安全。可以使用passwd 命令为其修改密码。以下为修改用户 me
的密码:
1 | passwd me |
然后就会提示你输入密码进行修改了
5、 修改账号—usermod命令
添加附加用户组,授予 sudo 权限
修改用户账号就是更改用户的有关属性记录,如用户号、主目录、用户组、登录Shell等。这些记录信息分散在各个配置文件中(/etc/passwd 用户信息, /etc/shadow 加密密码信息, /etc/group 用户组信息),使用usermod 可以统一管理修改这几个配置文件。usermod 命令格式如下:
1 | usermod 选项 用户名 |
其常用选项参数与 useradd 相同,有些版本的usermod命令还会提供额外功能选项(如修改用户名等):
- -s 指定用户登录 shell,这里指定为 bash
- -d 指定一个已经存在的目录为主目录
- -m 指定并创建主目录(main),这里指定为 /home/me
- -g 指定用户所属用户组(group)。
- -a 把用户追加(append)到某些组中,仅与-G选项一起使用
- -G 指定附加用户组(Group)
注意,usermod 修改用户账户前。需保证该用户下没有任何进程执行,特别注意shell进程(这意味着对应用户需要退出所有登录)。
为普通用户添加 sudo 权限可以通过将对应用户添加到拥有sudo权限的用户组中实现,比如在debian10 中的 sudo 用户组:
1 | # 将me用户 添加到 sudo 用户组 |
或者说 rocky8 中的 wheel 群组
1 | # 将me用户 添加到 wheel 用户组 |
执行完后,使用 groups命令检查
1 | groups me |
该命令会显示 me 用户所属的多个用户组(可能有很多),debian10中应该有 sudo 和 adm,rocky8中应该有 wheel
6、删除用户——userdel命令
与 useradd 命令向对应,有一个 userdel 命令用于删除用户。其使用格式如下:
1 | userdel 选项 用户名 |
常用的选项参数是 -r ,这是递归的意思。表示将该用户的所有的配置信息(主要是/etc/passwd, /etc/shadow, /etc/group等)以及用户主目录全部删除。这基本上已经是算是清除干净了。