04. 在 Ubuntu Server 上管理用户和权限:全面指南

管理用户、组和权限是 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)

这些值的总和决定了每个类别的权限级别。

常见的数字权限:

  1. 777:所有人拥有全部权限(读取、写入、执行)。
    • 所有者:rwx
    • 组:rwx
    • 其他人:rwx
    • 使用场景:出于安全原因很少使用,但可以应用于临时目录,例如/tmp.
  2. 755:所有者拥有全部权限,组和其他人拥有读取和执行权限。
    • 所有者:rwx
    • 组:r-x
    • 其他人:r-x
    • 使用场景:常用于可执行文件或目录。
  3. 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处理网络任务。敬请期待可行的见解,以优化服务器的网络配置。