Linux文件所有权、权限与文件系统导航全解析
1. Linux文件所有权与权限基础
在多用户操作系统如Linux中,文件安全至关重要,其中所有权是安全拼图的重要一块。在Linux里,每个文件都有一个所有者和一个关联的组。超级用户可以使用
chown
命令设置文件所有者,超级用户或文件所有者可以使用
chown
或
chgrp
命令设置文件的组。不过,仅有所有权是不够的,Linux支持文件权限的概念,它能控制其他用户以何种方式访问文件,可使用
chmod
工具设置权限。使用
ls
命令的
-l
选项可以查看文件的所有权、权限以及一些额外的文件特性。
2. 相关练习建议
-
文件操作测试
:以root用户身份,将普通用户创建的文件复制到普通用户的主目录。然后使用普通账户,尝试用文本编辑器编辑该文件并保存更改,观察发生了什么;再使用
rm命令尝试删除该文件,查看结果。 -
权限实验
:普通用户创建一个临时文件,然后以root用户身份使用
chown和chmod命令尝试不同类型的所有权和权限设置,探索在普通登录账户下何时可以读取和写入该文件。 -
查看文件权限
:使用
ls -l命令查看主目录、/usr/bin(许多程序文件所在位置)和/etc(大多数系统配置文件所在位置)中文件的所有权和权限。分析不同的所有权和权限对谁可以读取、写入和执行这些文件有何影响。
3. 复习问题解答
| 问题 | 选项 | 答案 | 解析 |
|---|---|---|---|
作为root用户,要将
somefile.txt
的所有权从
ralph
更改为
tony
,应输入什么命令?
|
A.
chown ralph:tony somefile.txt
B.
chmod somefile.txt tony
C.
chown somefile.txt tony
D.
chown tony somefile.txt
E.
chmod tony somefile.txt
| D |
chown
命令用于更改文件所有权,格式为
chown 新所有者 文件名
,所以选D。
|
输入
ls -ld wonderjaye
显示符号文件模式为
drwxr-xr-x
,以下哪些说法是正确的?(多选)
|
A.
wonderjaye
是符号链接。
B.
wonderjaye
是可执行程序。
C.
wonderjaye
是目录。
D. 系统的所有用户都可以读取
wonderjaye
。
E. 文件所属组的任何成员都可以写入
wonderjaye
。
| C、D |
开头的
d
表示是目录,
r
表示可读,所以C和D正确。
|
| 以下哪个命令可用于更改文件的组? |
A.
groupadd
B.
groupmod
C.
chmod
D.
ls
E.
chown
| E |
chown
可以更改文件的所有者和组,所以选E。
|
| 判断题:假设所有用户都可以读取文件所在的目录,权限为755的文件可以被计算机上的任何用户读取。 | - | 正确 | 权限755表示所有者有读、写、执行权限,组用户和其他用户有读、执行权限,所以可以被任何用户读取。 |
判断题:只有root用户可以使用
chmod
命令。
| - | 错误 |
文件所有者也可以使用
chmod
命令更改文件权限。
|
判断题:只有root用户可以使用
chown
命令更改文件的所有权。
| - | 错误 | 理论上只有root用户可以任意更改文件所有权,但在某些特定情况下,文件所有者也可能有一定权限。 |
chown
命令的哪个选项可以更改整个目录树的所有权?
| - |
-R
|
使用
chown -R
可以递归更改目录及其子目录的所有权。
|
| 表示读取和执行权限但没有写入权限的三个字符符号字符串是什么? | - |
rx-
|
r
表示读,
x
表示执行,
-
表示无该权限。
|
可以传递给
chmod
以给予所有用户对文件的执行访问权限,而不影响其他权限的符号表示是什么?
| - |
a+x
|
a
表示所有用户,
+x
表示添加执行权限。
|
4. Linux文件系统导航
Linux使用统一的目录树,即每个分区、可移动磁盘、网络文件共享和其他磁盘或类似磁盘的存储设备都可以作为单个目录树(或文件系统)中的目录进行访问。理解主要目录的用途有助于定位文件并避免严重错误,在深入了解这些细节之前,需要明白用户文件和系统文件的区别。
5. 用户文件与系统文件
Linux是多用户操作系统,一台计算机理论上可以容纳数千个用户。大多数用户不熟悉Linux系统管理细节,他们只希望使用自己的文字处理器、电子邮件客户端等用户应用程序,不需要处理系统配置文件。给予他们对这些文件的访问权限,尤其是写入权限,可能会导致灾难性后果。
系统文件控制计算机的运行,包括系统启动脚本、程序文件、程序支持文件、配置文件、系统程序的数据存储以及系统日志文件等。非技术用户不应直接更改系统文件,系统文件通常由root或其他具有特定用途的系统账户拥有,并设置适当的权限以防止未经授权的访问。
即使在个人笔记本电脑等单用户Linux计算机上,区分用户文件和系统文件也很有用,它可以提供一层保护,防止意外或恶意损坏。
6. 文件系统层次结构标准(FHS)
虽然每个Linux发行版都有自己独特的做事方式,但开发者们都认识到需要对目录布局进行一定的标准化。为了满足这一需求,创建了文件系统层次结构标准(FHS),一些类Unix操作系统也在一定程度上遵循该标准。
FHS做出了两个重要区分:
-
可共享文件和不可共享文件
:可共享文件可以在计算机之间合理共享,如用户数据文件和程序二进制文件;不可共享文件包含特定于系统的信息,如配置文件。
-
静态文件和可变文件
:静态文件通常只有在系统管理员直接干预时才会更改,大多数程序可执行文件是静态文件的典型例子;可变文件可能会被用户、自动化脚本、服务器等更改,如用户主目录和邮件队列。
FHS试图将每个目录隔离到这个2×2(可共享/不可共享 × 静态/可变)矩阵的一个单元格中,如下图所示:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(Shareable):::process --> B(Static):::process
A --> C(Variable):::process
D(Unshareable):::process --> B
D --> C
B --> E(/etc):::process
B --> F(/boot):::process
B --> G(/usr):::process
B --> H(/opt):::process
C --> I(/var/run):::process
C --> J(/var/lock):::process
C --> K(/home):::process
C --> L(/var/mail):::process
FHS有编号版本,目前最新版本是2004年1月发布的2.3版,其官方网页URL为 http://www.pathname.com/fhs/。
7. 重要目录及其内容
FHS定义了Linux系统上许多目录和子目录的名称和用途,以下是一些最重要的目录及其用途总结:
|目录|用途|
| ---- | ---- |
|
/
|根目录,所有文件都出现在该目录或其下的子目录中。|
|
/etc
|保存系统配置文件。|
|
/boot
|保存重要的启动文件,如Linux内核、初始RAM磁盘,通常还有启动加载器配置文件。|
|
/bin
|保存对正常运行至关重要且普通用户可以运行的程序文件。|
|
/sbin
|保存对正常运行至关重要但普通用户很少运行的程序文件。|
|
/lib
|保存对基本系统运行至关重要的库(许多其他程序使用的代码)。|
|
/usr
|保存正常系统运行时使用的程序和数据,但对于裸机启动系统不是关键的。该目录分为子目录,与根目录的组织部分类似,如
/usr/bin
、
/usr/sbin
、
/usr/lib
等。|
|
/home
|保存用户的主目录。将该目录分离到自己的低级文件系统中可以有效地将大多数用户数据与操作系统隔离,如果需要重新安装操作系统而不丢失用户数据,这很有用。|
|
/root
|root用户的主目录,注意与
/
(发音为root)不同。|
|
/var
|保存各种临时文件,如日志文件和打印假脱机文件。
/var
的一个子目录
/var/tmp
值得特别提及,它和
/tmp
一样保存临时文件,但这些文件在计算机重启时不应被删除。|
|
/tmp
|保存临时文件,通常包括用户程序创建的临时文件。理论上,这些文件在计算机重启时可能会被删除,但实际上许多发行版不会这样做。|
|
/mnt
|传统的可移动媒体挂载点,有时会为每个挂载的文件系统拆分为子目录。|
|
/media
|新的可移动媒体挂载点,通常为每个挂载的文件系统拆分为子目录。|
|
/dev
|保存设备文件,提供对硬件的低级访问。|
作为普通用户,大部分文件会创建在主目录(通常是
/home
的子目录)中,也可能会访问挂载在
/media
的可移动媒体以及其他位置的网络资源。可以使用
/tmp
和
/var
的某些子目录,但大多数用户不需要明确知道这些位置,程序通常会硬编码使用它们来存储临时文件或特定类型的文件。作为系统管理员,可能会操作这些目录中的任何文件,其中
/etc
尤为重要,因为大多数系统配置文件都位于此处。
在使用GUI或文本模式实用程序探索计算机时,应牢记这个目录结构。其中,有几个目录或目录集合需要特别关注:
-
配置目录
:
/etc
目录保存了大多数系统配置文件,之前提到过一些这样的文件,如
/etc/fstab
(定义分区挂载位置)和
/etc/passwd
(主要的账户定义文件),还有更多文件存在。实际上,
/etc
中有子目录用于存放复杂子系统和服务器的多个配置文件,如
/etc/X11
(用于X窗口系统)和
/etc/samba
(用于Samba文件服务器)。
-
可执行目录
:程序文件主要位于
/sbin
、
/bin
、
/usr/sbin
和
/usr/bin
中。在某些系统上,其他目录也可以存放程序文件,最值得注意的是
/usr/local/sbin
和
/usr/local/bin
保存本地编译的程序。
-
库目录
:库是对许多程序有用的编程函数集合,它们存储在单独的文件中,以节省磁盘空间和程序运行时的RAM,并便于在不重新安装依赖它们的所有程序的情况下更新库文件。在Linux中,大多数库位于
/lib
和
/usr/lib
中,但在某些系统上,有些库可能位于其他位置,如
/usr/local/lib
。
与Windows不同,在Windows中,程序二进制文件、其配置文件和所有支持文件通常位于属于该程序的单个目录树中,如
C:\Program Files\SomeProgram
。而在Linux中,大多数程序的关键文件可能位于与其他程序共享的标准位置,并且分散在各处。例如,程序的可执行文件可能在
/usr/bin
中,相关库在
/usr/lib
中,配置文件在
/etc
或用户主目录中。这在Linux中运行良好,因为Linux的包管理系统会跟踪包的许多文件的位置,使你能够轻松删除或升级包,并且简化了程序文件所在目录列表的路径。
Linux文件所有权、权限与文件系统导航全解析
8. 特殊权限位和文件特性
除了基本的所有权和权限设置,Linux还支持一些特殊的权限位和文件特性,这些可以影响Linux处理文件和目录的方式。这些特殊属性可以帮助隐藏文件,或者以对共享用户目录有用的方式改变通常的权限规则。
9. 隐藏文件
在Linux中,以点(
.
)开头的文件被视为隐藏文件。这些文件在使用
ls
命令时默认不会显示,只有使用
ls -a
命令才能查看。隐藏文件通常用于存储配置信息或用户不希望意外修改的重要数据。例如,许多用户应用程序会在用户主目录下创建隐藏的配置文件,如
.bashrc
是Bash shell的配置文件。
10. 特殊权限位
Linux中有三种特殊权限位,分别是SetUID(SUID)、SetGID(SGID)和Sticky Bit,以下是详细介绍:
|特殊权限位|符号表示|八进制表示|作用|
| ---- | ---- | ---- | ---- |
|SetUID(SUID)|
s
|4|当一个具有SUID权限的可执行文件被执行时,它将以文件所有者的身份运行。这意味着即使普通用户执行该文件,也会拥有文件所有者的权限。例如,
/usr/bin/passwd
命令具有SUID权限,普通用户可以使用它来更改自己的密码,因为它需要访问
/etc/shadow
文件,而该文件只有root用户可以访问。|
|SetGID(SGID)|
s
|2|对于可执行文件,SGID的作用与SUID类似,但它是以文件所属组的身份运行。对于目录,当一个目录设置了SGID权限时,在该目录下创建的新文件将继承该目录的所属组。|
|Sticky Bit|
t
|1|主要用于目录,当一个目录设置了Sticky Bit权限时,只有文件的所有者、目录的所有者或root用户可以删除或重命名该目录下的文件。这在共享目录中非常有用,例如
/tmp
目录就设置了Sticky Bit权限,防止用户误删其他用户的临时文件。|
可以使用
chmod
命令结合特殊权限位的八进制表示或符号表示来设置这些特殊权限。例如,要为文件
test
设置SUID权限,可以使用
chmod 4755 test
或
chmod u+s test
。
11. 文件特性
除了权限位,Linux还支持一些文件特性,这些特性可以通过
chattr
命令来设置和修改。以下是一些常见的文件特性:
-
i
(immutable)
:设置该特性后,文件不能被删除、重命名、写入或链接,即使是root用户也不行。要设置该特性,可以使用
chattr +i filename
命令;要移除该特性,可以使用
chattr -i filename
命令。
-
a
(append only)
:设置该特性后,文件只能以追加的方式写入,不能被删除或重命名。这在日志文件中非常有用,可以防止误删除或修改日志内容。设置该特性的命令是
chattr +a filename
,移除该特性的命令是
chattr -a filename
。
12. 总结与实践建议
通过本文的介绍,我们了解了Linux文件所有权、权限、文件系统导航以及特殊权限位和文件特性等重要内容。以下是一些实践建议,帮助你更好地管理和使用Linux系统:
-
权限管理
:合理设置文件和目录的所有权和权限,确保只有授权用户可以访问敏感信息和执行关键操作。定期检查文件权限,避免出现权限过高或过低的情况。
-
目录结构
:熟悉Linux的目录结构,特别是重要目录的用途。在创建和存储文件时,遵循目录结构的规范,便于文件的管理和查找。
-
特殊权限位和文件特性
:谨慎使用特殊权限位和文件特性,因为它们可能会带来安全风险。在使用之前,充分了解它们的作用和影响。
通过不断实践和学习,你将能够更好地掌握Linux系统的文件管理和安全设置,提高工作效率和系统安全性。希望本文对你有所帮助,祝你在Linux的世界中探索愉快!
以下是一个简单的流程图,展示了设置文件权限的基本流程:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(确定文件或目录):::process --> B(查看当前权限):::process
B --> C{是否需要更改权限?}:::process
C -->|是| D(选择权限设置方式):::process
D --> E{使用八进制表示?}:::process
E -->|是| F(确定八进制值):::process
E -->|否| G(确定符号表示):::process
F --> H(使用chmod命令设置):::process
G --> H
C -->|否| I(结束):::process
H --> I
这个流程图展示了从确定要操作的文件或目录,到查看当前权限,再到根据需要选择合适的方式设置权限的整个过程。通过遵循这个流程,你可以更加清晰地进行文件权限的管理。
超级会员免费看
104

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



