Linux 用户、组管理及文件权限设置全解析
1. 用户与组管理基础
在 Linux 系统中,用户和组的管理是系统管理的重要部分。可以通过命令行工具对用户和组进行添加、修改和删除等操作。
1.1 组的删除
在 shell 中删除组可以使用
groupdel
命令,该命令只需要一个组名作为参数。例如,要删除
gingko
组,可以使用以下命令:
groupdel gingko
1.2 wheel 组
Linux 发行版默认会提供多个组,其中
wheel
组对于系统管理尤为重要。
wheel
组的成员被授予某些特殊的管理权限,比如使用
sudo
命令的权限。在安装操作系统时,有些发行版允许将主用户账户添加到
wheel
组,不过安装程序通常会以“管理员组”等类似表述来询问是否添加。
如果要更改
wheel
组成员,使用用户管理器时,需要取消勾选“隐藏系统用户和组”选项才能在组列表中看到
wheel
组。如果使用其他 GUI 工具,可能需要寻找类似的选项。
1.3 账户管理工具
在 GUI 环境中,可以使用 GUI 工具完成大多数常见的账户维护任务,通过菜单和列表选择选项来添加、修改和删除账户。但有些操作需要使用命令行工具,如
useradd
、
usermod
、
userdel
和
passwd
等。对于组的操作,
groupadd
、
groupmod
和
groupdel
命令提供了类似的功能。即使不需要使用文本模式工具的一些晦涩功能,熟悉之后,它们的使用速度可能比 GUI 工具更快。
1.4 建议练习
- 使用用户管理器(或发行版提供的其他 GUI 工具)创建一个测试账户,然后登录该账户,验证其是否按预期工作。
-
使用
useradd命令创建账户,但不使用passwd设置密码,尝试登录。之后使用passwd设置密码,再次尝试登录。
1.5 复习问题
| 问题 | 选项 | 答案 |
|---|---|---|
Linux 系统管理员要删除
nemo
账户及其主目录应输入什么命令?
|
A. userdel nemo
B. userdel -f nemo C. userdel -r nemo D. rm /home/nemo E. rm -r /home/nemo | C |
| 以下哪个是最佳密码? |
A. LinusTorvalds
B. uB2op%4q * * ** C. 123456 D. password E. peanutbuttersandwich | B |
假设以下命令成功完成,
# groupadd henry
的效果是什么?
|
A. 它创建一个名为
henry
的新组。
B. 它将用户
henry
添加到当前默认组。
C. 它从名为
henry
的文件中导入组信息。
D. 它将用户的默认组更改为
henry
。
E. 它将组
henry
添加到用户的组列表中。
| A |
| 用户账户的 UID 号是否比系统账户的 UID 号高? | True 或 False | True |
命令行用户通常是否应使用
usermod
来更改他们的密码?
| True 或 False | False |
| 删除账户后,以前由该删除账户拥有的文件是否可能仍保留在计算机上? | True 或 False | True |
要为新用户创建一个账户,使用用户名
theo
并为用户分配 UID 为
1926
,应使用的命令是
useradd ________
。
| - | -u 1926 theo |
要将用户的用户名从
e1211
更改为
emilyn
,而不更改账户的其他任何内容,应输入什么命令?
| - | usermod -l emilyn e1211 |
要创建系统账户,必须向
groupadd
传递什么选项?
| - | -r |
2. 文件所有权设置
Linux 作为多用户操作系统,提供了工具来保护文件免受未经授权的访问,主要通过文件和目录的所有权和权限来实现。
2.1 理解所有权
每个文件都有一个关联的所有者(即与之关联的账户),通过账户的用户 ID(UID)号进行关联。同时,每个文件还与一个组相关联,通过组 ID(GID)号进行关联。作为根用户,可以更改任何文件的所有者和组;文件所有者可以将文件的组更改为其所属的组。
目录的所有权规则与文件相同,根用户或目录所有者在一定程度上可以更改目录的所有者和组。
当使用多个 Linux 安装(如在一台计算机上进行双启动或安装在多台计算机上),并在不同安装之间传输文件时,可能会发现文件的所有权似乎发生了变化。这是因为不同计算机上同一用户或组的 UID 或 GID 号可能不同,即使账户或组的名称相同。使用原生 Linux 或 Unix 文件系统(如 ext2fs、HFS+ 或 NFS)传输数据时,这个问题更可能出现;而使用非 Linux/Unix 文件系统(如 FAT、NTFS 或 SMB/CIFS)时,问题出现的可能性较小。如果遇到这个问题,可以更改一个或多个安装上的 UID 或 GID 映射,使其匹配。
2.2 在文件管理器中设置所有权
以 Nautilus(GNOME 文件管理器)为例,如果要更改文件的所有者,必须以根用户身份运行 Nautilus;但作为普通用户,可以将文件的组更改为自己所属的任何组。以根用户身份更改文件所有权的步骤如下:
1. 启动终端窗口。
2. 在终端窗口中,输入
su
以获取根权限。
3. 在终端窗口中,输入
nautilus
启动 Nautilus。可以选择包含要启动的目录的路径,如果不包含路径,Nautilus 将从
/root
目录开始显示内容。
4. 找到要调整所有权的文件,右键单击它。
5. 在弹出的菜单中,选择“属性”,会弹出一个属性对话框。
6. 在属性对话框中,点击“权限”标签。
7. 要更改文件的所有者,在“所有者”字段中选择新的所有者(此操作只有以根用户身份运行 Nautilus 时才可行)。
8. 要更改文件的组,在“组”字段中选择新的组。如果以普通用户身份运行 Nautilus,只能选择自己所属的组;如果以根用户身份运行,则可以选择任何组。
9. 调整完要更改的功能后,点击“关闭”。
如果只想更改文件的组而不更改所有者,并且是目标组的成员,可以以普通用户身份启动 Nautilus,从步骤 4 开始操作。不过,运行 Nautilus 作为根用户时要格外谨慎,因为可能会意外创建或删除关键系统文件。建议使用文本模式 shell 来调整文件所有权,因为命令行提示符的变化更容易让人注意到是以根用户身份运行。
2.3 在 shell 中设置所有权
在文本模式下,使用
chown
命令来更改文件的所有权。最基本的形式是传递文件名和用户名,例如:
# chown bob targetfile.odf
此命令将
targetfile.odf
的所有权授予
bob
。可以通过在用户名和组名之间用冒号
:
分隔,在一个命令中同时更改文件的主要所有者和组,例如:
# chown bob:users targetfile.odf
此命令将
targetfile.odf
的所有权授予
bob
,并将文件与
users
组关联。如果只想更改组而不更改所有者,可以省略所有者,只保留冒号和组名,例如:
$ chown :users targetfile.odf
也可以使用
chgrp
命令,它的工作方式相同,但只更改组,不需要在组名前加冒号,例如:
$ chgrp users targetfile.odf
需要注意的是,更改所有者的命令需要根权限,而普通用户可以更改自己拥有的文件的组,但前提是属于目标组。
chown
和
chgrp
命令都支持一些选项,其中最有用的是
-R
(或
--recursive
),它可以更改整个目录树中所有文件的所有权。例如,如果用户
mary
离开了公司,现有的员工
bob
需要访问她的文件,而
mary
的主目录是
/home/mary
,可以使用以下命令:
# chown -R bob /home/mary
此命令将
/home/mary
目录及其所有子目录和文件的所有权授予
bob
。为了让
bob
过渡得更轻松,还可以将
mary
原来的主目录移动到
bob
的主目录中。
3. 文件权限设置
文件所有权如果没有权限的配合就没有意义,Linux 的权限结构借鉴了 Unix 的设计,下面来详细了解文件权限的相关知识。
3.1 理解权限
要理解 Unix(以及 Linux)的权限,可以从
ls -l
命令的输出开始。例如,要查看
test
文件的详细列表,可以使用以下命令:
$ ls -l test
-rwxr-xr-x 1 rodsmith users 111 Apr 13 13:48 test
这一行输出由几个部分组成,提供了关于文件的各种信息:
-
权限
:第一列(在这个例子中是
-rwxr-xr-x
)是文件的权限,这是当前关注的重点。
-
链接数
:下一列(在这个例子中是
1
)显示了文件的硬链接数,即可以用于访问该文件的唯一文件名的数量。
-
用户名
:下一列(在这个例子中是
rodsmith
)通过用户名标识文件的所有者。
-
组名
:文件的组(在这个例子中是
users
)紧随其后。
-
文件大小
:这个示例文件的大小非常小,只有 111 字节。
-
时间戳
:时间戳(在这个例子中是
Apr 13 13:48
)标识文件最后一次修改的时间。
-
文件名
:最后,
ls -l
显示文件的名称,在这个例子中是
test
。
输出开头的字符串(在这个例子中是
-rwxr-xr-x
)是权限字符串的符号表示,它可以分为四个部分:
graph LR
A[文件类型代码] --> B[所有者权限]
B --> C[组权限]
C --> D[其他用户权限]
-
文件类型代码
:第一个字符是文件类型代码,代表文件的类型,如下表所示:
|代码|名称|含义|
| ---- | ---- | ---- |
|-|普通数据文件|可能是文本、可执行程序、图形、压缩数据或几乎任何其他类型的数据。|
|d|目录|磁盘目录是文件,但它们包含文件名和指向这些命名文件数据结构的指针。|
|l|符号链接|文件包含另一个文件或目录的名称。当 Linux 访问符号链接时,它会尝试读取链接到的文件。|
|p|命名管道|管道允许两个运行的 Linux 程序以单向方式相互通信。|
|s|套接字|套接字类似于命名管道,但它允许网络和双向链接。|
|b|块设备|对应于一个硬件设备的文件,数据以大于一个字节的块进行传输。磁盘设备(如硬盘、软盘、CD - ROM 等)是常见的块设备。|
|c|字符设备|对应于一个硬件设备的文件,数据以一个字节为单位进行传输。示例包括并行和 RS - 232 串行端口设备。| - 所有者权限 :这些权限决定了文件所有者可以对文件执行的操作。
- 组权限 :这些权限决定了文件所属组的成员(非所有者)可以对文件执行的操作。
- 其他用户权限 :这些权限决定了既不是文件所有者也不是文件所属组成员的用户可以对文件执行的操作。
在三组权限中,字符串标识了三种访问类型(读、写和执行)的存在或不存在。读和写权限比较容易理解,如果存在执行权限,则表示文件可以作为程序运行。权限字符串中用破折号
-
表示权限不存在,用字母
r
表示读权限、
w
表示写权限、
x
表示执行权限。
另一种权限表示方式是将权限字符串的三个权限组(不包括文件类型代码)转换为 0 到 7 的数字(即八进制数),结果是一个三位八进制数。每个数字的构造方法是从 0 开始,根据权限情况进行加法运算:
- 如果存在读权限,则加 4。
- 如果存在写权限,则加 2。
- 如果存在执行权限,则加 1。
得到的三位代码分别代表所有者、组和其他用户的权限,常见权限及其含义如下表所示:
|权限字符串|八进制代码|含义|
| ---- | ---- | ---- |
|rwxrwxrwx|777|所有用户具有读、写和执行权限。|
|rwxr-xr-x|755|所有用户具有读和执行权限,文件所有者还具有写权限。|
|rwxr-x—|750|所有者和组具有读和执行权限,文件所有者还具有写权限,其他用户无访问权限。|
|rwx------|700|只有文件所有者具有读、写和执行权限,其他用户无访问权限。|
|rw-rw-rw-|666|所有用户具有读和写权限,无执行权限。|
|rw-rw-r–|664|所有者和组具有读和写权限,其他用户只有读权限。|
|rw-rw----|660|所有者和组具有读和写权限,其他用户无权限。|
|rw-r–r–|644|所有者具有读和写权限,其他用户只有读权限。|
|rw-r-----|640|所有者具有读和写权限,组只有读权限,其他用户无权限。|
|rw-------|600|只有文件所有者具有读和写权限,其他用户无权限。|
|r--------|400|只有文件所有者具有读权限,其他用户无权限。|
权限还有一些特殊情况:
-
目录执行位
:目录使用执行位来授予搜索目录的权限。当设置读位时,通常也会设置执行位。
-
目录写权限
:目录是一种特殊的文件,如果用户可以写入目录,那么该用户可以在目录中创建、删除或重命名文件,即使该用户不是这些文件的所有者,也没有对这些文件的写权限。
-
符号链接
:符号链接的权限始终是 777(
rwxrwxrwx
,如果包括文件类型代码则是
lrwxrwxrwx
)。这种访问权限仅适用于链接文件本身,而不适用于链接到的文件。所有用户都可以读取链接的内容以发现它指向的文件的名称,但链接到的文件的权限决定了对该文件的访问权限。更改符号链接的权限会影响链接到的文件。
-
root 用户
:许多权限规则不适用于 root 用户。超级用户可以读取或写入计算机上的任何文件,即使是那些没有授予任何访问权限的文件(即具有 000 权限的文件)。不过,超级用户仍然需要设置执行位才能运行程序文件。
3.2 在文件管理器中设置权限
在文件管理器中设置权限的过程与设置文件所有权类似:
- 通常使用与调整所有权相同的对话框来调整这些设置,例如前面提到的 Nautilus 对话框。
- 不需要以根用户身份来调整自己拥有的文件的权限。
- 只有在处理不属于自己的文件时,才需要以根用户身份进行此操作。
在 Nautilus 对话框中,有三个与所有者、组和其他用户相关的“访问”项:
-
所有者
:提供“只读”和“读和写”两个选项。
-
组和其他用户
:提供“只读”、“读和写”以及“无”选项。可以使用这些选项设置文件的读和写权限位。
Nautilus 需要单独设置执行位,通过勾选“允许作为程序执行文件”复选框来实现。此复选框会设置所有三个执行权限位,无法使用 Nautilus 更精确地控制执行权限,也无法调整目录的执行权限。
3.3 在 shell 中设置权限
在文本模式 shell 中,可以使用
chmod
命令来更改权限。该命令比较复杂,因为权限的更改方式有多种。可以用两种形式指定权限:八进制数字或符号形式。
八进制表示的模式与前面介绍的相同,例如,要将
report.tex
文件的权限更改为
rw-r--r--
,可以使用以下命令:
$ chmod 644 report.tex
符号模式由三个部分组成:
- 一个代码,指示要修改的权限集:
u
表示用户(即所有者),
g
表示组,
o
表示其他用户,
a
表示所有权限。
- 一个符号,指示是要添加(
+
)、删除(
-
)还是将模式设置为等于(
=
)指定的值。
- 一个代码,指定权限应该是什么,例如常见的
r
、
w
或
x
符号,或用于更高级操作的其他符号。
使用符号模式的
chmod
命令可能会比较混乱,以下是一些常见用法示例:
|命令|初始权限|最终权限|
| ---- | ---- | ---- |
|
chmod a+x bigprogram
|
rw-r--r--
|
rwxr-xr-x
|
|
chmod ug=rw report.tex
|
r--------
|
rw-rw----
|
|
chmod o-rwx bigprogram
|
rwxrwxr-x
|
rwxrwx---
|
|
chmod g-w,o-rw report.tex
|
rw-rw-rw-
|
rw-r-----
|
符号模式比八进制模式更灵活,因为可以指定修改现有权限的符号模式,例如在不影响其他权限的情况下添加或删除执行权限,也可以只设置用户、组或其他用户的权限而不影响其他权限。而使用八进制模式时,必须将所有三个权限位设置为指定的值。
3.4 设置 umask
用户掩码(umask)决定了新文件的默认权限。umask 是在创建新文件时从 666(
rw-rw-rw-
)权限中减去的值,或者在创建新目录时从 777(
rwxrwxrwx
)中减去的值。例如,如果 umask 是 022,那么新文件默认将以 644 权限创建,新目录将具有 755 权限。需要注意的是,这里的减法操作不是简单的算术减法,而是按位减法。
可以使用
umask
命令来调整 umask,例如:
umask 022
通常,这个命令会出现在系统配置文件(如
/etc/profile
)或用户配置文件(如
~/.bashrc
)中。与
chown
和
chgrp
命令一样,
chmod
命令也可以使用
-R
(或
--recursive
)选项来对整个目录树进行操作。
通过以上对 Linux 用户、组管理以及文件所有权和权限设置的详细介绍,相信你对 Linux 系统的安全管理有了更深入的理解。在实际操作中,要根据具体需求合理运用这些知识,确保系统的安全性和数据的完整性。
Linux 用户、组管理及文件权限设置全解析
4. 综合运用与实践建议
在实际的 Linux 系统管理中,用户、组管理以及文件所有权和权限设置往往需要综合运用,以下是一些综合运用的场景及实践建议。
4.1 团队项目文件权限管理
假设一个公司有一个项目团队,团队成员需要共同访问和编辑项目相关的文件。为了确保文件的安全性和合理使用,可以按照以下步骤进行操作:
1.
创建项目组
:使用
groupadd
命令创建一个名为
project_team
的组。
groupadd project_team
-
添加团队成员到组
:将团队成员的用户账户添加到
project_team组中。假设团队成员的用户名分别为user1、user2和user3,可以使用usermod命令进行添加。
usermod -a -G project_team user1
usermod -a -G project_team user2
usermod -a -G project_team user3
-
创建项目目录
:在合适的位置创建一个项目目录,例如
/home/projects/project1,并将其所有者设置为项目负责人,组设置为project_team。
mkdir /home/projects/project1
chown project_leader:project_team /home/projects/project1
- 设置目录权限 :为项目目录设置合适的权限,确保团队成员可以访问和编辑文件,同时防止其他用户的非法访问。
chmod 770 /home/projects/project1
这样,项目负责人和团队成员都可以对项目目录进行读写和执行操作,而其他用户则无法访问。
4.2 系统安全权限设置
为了提高系统的安全性,需要对系统文件和目录的权限进行严格管理。以下是一些常见的系统安全权限设置建议:
-
限制 root 用户的使用
:尽量避免直接以 root 用户身份登录系统,而是使用普通用户账户进行日常操作,需要 root 权限时使用
sudo
命令。
-
设置敏感文件的权限
:对于系统中的敏感文件,如
/etc/passwd
、
/etc/shadow
等,确保只有 root 用户可以访问和修改。
chmod 600 /etc/passwd
chmod 400 /etc/shadow
-
定期检查文件权限
:定期使用
find命令检查系统中权限设置不合理的文件和目录,并进行相应的调整。
find / -perm /777 -type f -exec chmod 644 {} \;
这个命令会查找系统中所有权限为 777 的文件,并将其权限修改为 644。
4.3 实践建议
- 备份重要数据 :在进行任何权限设置或用户、组管理操作之前,务必备份重要的数据,以防误操作导致数据丢失。
- 记录操作日志 :在进行系统管理操作时,记录操作的时间、内容和结果,以便在出现问题时进行追溯和排查。
- 持续学习和实践 :Linux 系统的管理是一个不断学习和实践的过程,建议定期学习新的知识和技巧,并在测试环境中进行实践。
5. 常见问题及解决方法
在进行 Linux 用户、组管理以及文件所有权和权限设置的过程中,可能会遇到一些常见的问题,以下是一些问题及解决方法。
5.1 用户无法登录
-
问题描述
:使用
useradd创建用户后,用户无法登录系统。 - 可能原因 :未设置用户密码或密码设置不正确。
-
解决方法
:使用
passwd命令为用户设置密码。
passwd username
按照提示输入新密码并确认,然后用户应该可以正常登录。
5.2 文件权限设置无效
-
问题描述
:使用
chmod命令设置文件权限后,权限没有生效。 - 可能原因 :文件系统不支持某些权限设置,或者文件被挂载为只读。
-
解决方法
:检查文件系统的类型和挂载选项,确保文件系统支持所需的权限设置。如果文件被挂载为只读,可以使用
mount命令重新挂载为可读写。
mount -o remount,rw /dev/sda1 /mnt
这里假设
/dev/sda1
是文件系统所在的分区,
/mnt
是挂载点。
5.3 组管理问题
-
问题描述
:使用
groupadd创建组后,无法将用户添加到该组中。 - 可能原因 :组名拼写错误或用户账户不存在。
-
解决方法
:检查组名的拼写是否正确,以及用户账户是否存在。可以使用
getent group命令查看组信息,使用id命令查看用户信息。
getent group groupname
id username
如果组名或用户名有误,进行相应的修正。
6. 总结与展望
通过对 Linux 用户、组管理以及文件所有权和权限设置的详细介绍,我们了解到这些功能是 Linux 系统安全管理的重要组成部分。合理的用户和组管理可以提高系统的安全性和管理效率,而正确的文件所有权和权限设置可以保护文件的隐私和完整性。
在未来的 Linux 系统管理中,随着技术的不断发展,用户和组管理以及文件权限设置可能会更加智能化和自动化。例如,可能会出现基于人工智能的权限管理系统,能够根据用户的行为和需求自动调整文件权限。同时,随着云计算和容器化技术的普及,如何在这些环境中有效地管理用户和文件权限也将成为新的挑战。
总之,掌握 Linux 用户、组管理以及文件所有权和权限设置是每个 Linux 系统管理员必备的技能,需要不断学习和实践,以适应不断变化的技术环境。
graph LR
A[用户与组管理] --> B[用户添加/删除/修改]
A --> C[组添加/删除/修改]
D[文件管理] --> E[所有权设置]
D --> F[权限设置]
B --> G[useradd/usermod/userdel]
C --> H[groupadd/groupmod/groupdel]
E --> I[chown/chgrp]
F --> J[chmod]
J --> K[八进制模式]
J --> L[符号模式]
以上流程图展示了 Linux 用户、组管理以及文件管理的主要操作和相关命令之间的关系,帮助我们更清晰地理解整个管理体系。通过合理运用这些知识和工具,我们可以更好地管理 Linux 系统的安全性和数据完整性。
超级会员免费看
1697

被折叠的 条评论
为什么被折叠?



