管理用户、组和权限是 Ubuntu Server 管理员的基础任务之一。无论你是设置多用户环境还是保护服务器,了解如何创建、修改和管理用户帐户、组和权限都至关重要。本指南深入介绍了用户和权限管理,并附有真实示例、命令输出和最佳实践。
上一篇文章:
01. Ubuntu Server 简介 – SysOSX: AI & Cloud
02. 如何搭建你的第一台 Ubuntu Server:初学者指南 – SysOSX: AI & Cloud
03. 掌握 Ubuntu Server 的 Linux 命令行
简介
Ubuntu Server 是一个功能强大的平台,可用于托管应用程序、管理服务和实现多用户环境。通过掌握用户和权限管理,你可以保护服务器、有效控制访问并防止未经授权的操作。本指南将涵盖从基本的用户帐户创建到高级权限设置的全部内容,并附有详细示例。
创建和管理用户帐户
创建用户
要在 Ubuntu Server 上创建用户帐户,请使用adduser命令。此命令是交互式的,会提示你提供有关用户的其他信息。
示例命令:
sudo adduser john
示例输出:
Adding user `john' ...
Adding new group `john' (1001) ...
Adding new user `john' (1001) with group `john' ...
Creating home directory `/home/john' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for john
Enter the new value, or press ENTER for the default
Full Name []: John Doe
Room Number []: 101
Work Phone []: 555-1234
Home Phone []: 555-5678
Other []:
Is the information correct? [Y/n] Y
这会创建一个名为john的用户,其主目录位于/home/john,并为其分配唯一的用户 ID(UID)。
修改用户
usermod命令可用于修改用户帐户。例如,你可以更改用户的主目录、shell 或组成员身份。
更改主目录:
sudo usermod -d /home/new_john john
sudo mv /home/john /home/new_john
锁定或解锁用户帐户:
- 锁定帐户:
sudo passwd -l john - 解锁帐户:
sudo passwd -u john
示例输出(锁定帐户):
passwd: password expiry information changed.
删除用户
要删除用户,请使用deluser命令。你还可以删除其主目录和关联文件。
示例命令:
sudo deluser --remove-home john
示例输出:
Looking for files to backup/remove ...
Removing files ...
Removing user `john' ...
Warning: group `john' has no more members.
Done.
管理组
组是组织用户和分配集体权限的一种方式。每个用户可以属于多个组。
创建和管理组
要创建新组,请使用addgroup命令。
示例命令:
sudo addgroup developers
示例输出:
Adding group `developers' (GID 1002) ...
Done.
要删除组:
sudo delgroup developers
将用户添加到组
要将用户添加到组,请使用usermod命令的-aG选项。
示例命令:
sudo usermod -aG developers john
验证组成员身份:
groups john
示例输出:
john : john developers
这表明john属于以下组:john和developers.
了解文件和目录权限
Linux 文件权限对于控制对文件和目录的访问至关重要。权限针对以下三个类别定义:所有者, 组和其他人.
权限类型
每个类别有三种权限类型:
- 读取 (r):允许查看文件内容或列出目录内容。
- 写入 (w):允许修改文件内容或在目录中创建/删除文件。
- 执行 (x):允许运行可执行文件或访问目录。
示例:
使用ls -l查看文件权限:
ls -l /home/john
示例输出:
-rw-r--r-- 1 john john 4096 Mar 21 14:00 file.txt
rw-:所有者(john)拥有读取和写入权限。r--:组(john)拥有只读权限。r--:其他人拥有只读权限。
更改权限
使用chmod命令修改权限。
示例命令:
- 授予所有者执行权限:
chmod u+x file.txt - 删除其他人的写入权限:chmod o-w file.txt
使用数值:
权限也可以使用数值来设置:
chmod 755 file.txt:所有者拥有全部权限,组和其他人拥有读取/执行权限。
了解数字权限(755、777、744)
Linux 权限可以用数字表示,其中每个数字对应一个特定的权限级别:
数字权限的结构:
每个数字权限由三个数字组成:
- 第一个数字:所有者的权限。
- 第二个数字:组的权限。
- 第三个数字:其他人的权限。
每个数字根据以下值计算:
4:读取(r)2:写入(w)1:执行(x)
这些值的总和决定了每个类别的权限级别。
常见的数字权限:
- 777:所有人拥有全部权限(读取、写入、执行)。
- 所有者:
rwx - 组:
rwx - 其他人:
rwx - 使用场景:出于安全原因很少使用,但可以应用于临时目录,例如
/tmp.
- 所有者:
- 755:所有者拥有全部权限,组和其他人拥有读取和执行权限。
- 所有者:
rwx - 组:
r-x - 其他人:
r-x - 使用场景:常用于可执行文件或目录。
- 所有者:
- 744:所有者拥有全部权限,组和其他人只读。
- 所有者:
rwx - 组:
r-- - 其他人:
r-- - 使用场景:常用于私有文件。
- 所有者:
示例:
要将权限设置为755以用于脚本:
chmod 755 script.sh
示例输出:
-rwxr-xr-x 1 john john 4096 Mar 21 14:00 script.sh
所有权管理
使用chown命令来更改所有权。
示例命令:
sudo chown john:developers file.txt
这会将所有者设置为john,并将组设置为developers.
示例输出:
-rw-r--r-- 1 john developers 4096 Mar 21 14:00 file.txt
使用 Sudo 提升权限
sudo命令允许用户以提升的权限执行命令。要授予用户sudo访问权限,请将其添加到sudo组。
示例命令:
sudo usermod -aG sudo john
验证 Sudo 访问权限:
sudo -l -U john
示例输出:
User john may run the following commands on this host:
(ALL : ALL) ALL
保护用户帐户的最佳实践
- 强制执行严格的密码策略:
使用passwd设置密码过期时间:sudo passwd -e john - 限制 Sudo 访问权限:
仅向受信任的用户授予sudo权限。 - 禁用 Root 登录:
编辑 SSH 配置文件:
sudo nano /etc/ssh/sshd_config
设置:
PermitRootLogin no
- 使用 SSH 密钥进行身份验证:
用 SSH 密钥取代基于密码的登录。 - 监控用户活动:
使用last或who跟踪登录活动:
last
输出说明
uadmin pts/1 192.168.255.48 Fri Mar 21 13:55 still logged in
uadmin pts/0 192.168.255.48 Fri Mar 21 13:54 still logged in
uadmin pts/1 192.168.255.48 Fri Mar 21 01:49 - 08:19 (06:29)
uadmin pts/0 192.168.255.48 Fri Mar 21 00:53 - 08:19 (07:26)
reboot system boot 6.8.0-1021-azure Fri Mar 21 00:22 still running
逐行分析
用户登录:uadmin pts/1 192.168.255.48 Fri Mar 21 13:55 still logged in
uadmin:登录用户的用户名。pts/1:登录使用的伪终端会话。伪终端(pts)是虚拟终端,通常在用户通过 SSH 登录时创建。192.168.255.48:用户连接所用的远程计算机的 IP 地址。Fri Mar 21 13:55:用户登录的日期和时间。still logged in:表示用户当前已登录且处于活动状态。
| 列 | 含义 |
|---|---|
| 用户名 | 用户或事件的名称(uadmin, reboot). |
| 终端 | 伪终端会话(pts/X)或系统事件(system boot). |
| 远程主机/IP | 发起连接的远程计算机的 IP 地址或主机名。 |
| 登录日期/时间 | 登录或事件开始的日期和时间。 |
| 注销时间 | 会话结束的日期和时间(如适用)。 |
| 持续时间 | 会话持续的总时间(如适用)。 |
| 会话状态 | 会话的当前状态(still logged in, still running). |
用于深入了解的其他命令
- 显示当前已登录的用户:
who - 示例输出:
uadmin pts/1 2023-03-21 13:55 (192.168.255.48)
uadmin pts/0 2023-03-21 13:54 (192.168.255.48)
- 检查系统运行时间:
uptime - 示例输出:
14:15:32 up 13:53, 2 users, load average: 0.10, 0.12, 0.15
结论
管理用户、组和权限是 Ubuntu Server 管理员的一项基本技能。通过掌握这些任务,你可以保护服务器、防止未经授权的访问并提高运营效率。
下一篇教程:Ubuntu Server 网络基础知识
在下一篇教程中,我们将介绍 Ubuntu Server 的网络基础知识,包括配置网络接口、设置静态 IP、排查网络连接问题,以及使用 Ubuntu 的netplan处理网络任务。敬请期待可行的见解,以优化服务器的网络配置。
7 thoughts on “04. Managing Users and Permissions on Ubuntu Server: A Comprehensive Guide”