首页 > 编程笔记 > Linux笔记 阅读:2

Linux用户和组的管理(新手必看)

在 Linux 中,我们经常从目的或预期使用的角度区分两种类型的用户账户:

系统用户和普通用户之间的区别与其说是技术上的,不如说是组织结构上的。为了理解这一点,我们首先必须介绍用户 ID(UID)的概念,这是一个由 Linux 管理的 32 位数值。

Linux 通过 UID 标识用户,用户属于一个组或多个组,通过组 ID(GID)标识。有一种 UID 为 0 的特殊用户,通常称为 root。这个“超级用户”可以做任何事情,也就是说,不受任何限制。通常,你希望避免以 root 用户身份工作,因为它的权限太大了。如果不小心,很容易就会破坏一个系统。

不同的 Linux 发行版有自己的方法来决定如何管理 UID 范围。例如,systemd 驱动的发行版有以下约定(这里简化):
要找出你自己的 UID,你可以像这样使用 id 命令:
$ id -u
了解了 Linux 用户的基本知识之后,让我们看看如何管理用户。

Linux管理本地用户

第一个选项,也是传统上唯一可用的选项,是管理本地用户。也就是说,只使用计算机本地的信息,与用户相关的信息不会在计算机网络中共享。

对于本地用户管理,Linux 使用了一个简单的基于文件的界面,其命名方案有些混乱,但这是一个历史遗留问题,我们不得不接受。

下表列出了四个文件,它们共同实现了用户管理:

表:本地用户管理文件的参考
目的 文件
用户数据库 /etc/passwd
组数据库 /etc/group
用户密码文件 /etc/shadow
组密码文件 /etc/gshadow

可以将 /etc/passwd 看作一种小型用户数据库,用于跟踪普通用户的用户名、UID、组成员关系和其他数据,例如使用的主目录和登录 shell。

让我们来看一个具体的例子:
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash  ①
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin ②
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
syslog:x:104:110::/home/syslog:/usr/sbin/nologin
mh9:x:1000:1001::/home/mh9:/usr/bin/fish ③

让我们仔细看看 /etc/passwd 中的一行,以详细了解一个用户条目的结构:



我们注意到,在 /etc/passwd 中缺少的东西正是我们根据名称期望在那里找到的东西,也就是密码。出于历史原因,密码存储在一个名为 /etc/shadow 的文件中。虽然每个用户都可以读取 /etc/passwd,但通常需要 root 权限才能读取 /etc/shadow。

要添加一个用户,可以使用 adduser 命令,如下所示:
$ sudo adduser mh9
Adding user 'mh9' ...
Adding new group 'mh9' (1001) ...
Adding new user 'mh9' (1000) with group 'mh9' ...
Creating home directory '/home/mh9' ... ①
Copying files from '/etc/skel' ... ②
New password: ③
Retype new password:
passwd: password updated successfully
Changing the user information for mh9
Enter the new value, or press ENTER for the default ④
    Full Name []:
    Room Number []:
    Work Phone []:
    Home Phone []:
    Other []:
Is the information correct? [Y/n] Y

如果你想创建一个系统账户,则请传入 -r 选项。这将禁用使用登录 shell 的能力,并避免创建主目录。详细配置请参见 /etc/adduser.conf,包括 UID/GID 范围等选项。

除了用户之外,Linux 还有组的概念,从某种意义上说,组就是一个或多个用户的集合。任何普通用户都属于一个默认组,但可以是其他组的成员。

你可以通过 /etc/group 文件找到组和映射:
$ cat /etc/group ①
root:x:0:
daemon:x:1:
bin:x:2:
sys:x:3:
adm:x:4:syslog
...
ssh:x:114:
landscape:x:115:
admin:x:116:
netdev:x:117:
lxd:x:118:
systemd-coredump:x:999:
mh9:x:1001: ②

有了这些基本的用户概念和管理,我们将转向一种在专业设置中管理用户的可能更好的方法,并考虑到规模。

Linux用户集中管理

如果你有多台机器或服务器需要管理用户(例如,在专业设置中),那么本地管理用户很快就过时了。你需要一种集中的方式来管理可以在本地应用到一台特定机器上的用户。

根据你的需求和(时间)预算,有几种方法可供你选择:

实际的实现通常由环境决定。也就是说,公司可能已经在使用 LDAP,因此选择可能是有限的。

相关文章