RHCSA学习笔记-06文件系统权限

RHCSA学习笔记-06文件系统权限

  • 最近更新2022年05月11日

学习目标:设置文件的访问权限,并解释不同权限设置的方法。

掌握知识点:

  • 文件和目录权限的查看;
  • 更改权限和所有权;
  • 控制用户创建时的默认权限,并对其权限的说明;
  • 特定目录所有者的设置。

 

一、LINUX文件系统权限

文件具有三个应用权限的用户类别:

  • 文件归用户所有,通常是创建文件的用户。
  • 文件还归单个组所有,通常是创建该文件的主要用户组所有。
  • 可以为所属用户、所属组和系统上 的非用户和非所属组成员的其他用户设置不同的权限。

有三种权限类别可应用:读取写入执行。下表说明了这些权限如何影响对文件和目录的访问。

用户通常对只读目录具有读取和执行权限,因此他们可以列出该目录,并且对其内容具有完整的只读访问权限。

如果用户仅对某目录具有读取访问权限,可以列出其中文件的名称,但是其他信息,(包括权限或时间戳)都不可用,也不可访问。

如果用户仅对目录具有执行权限,则无法列出目录中的文件名。如果他们知道自己有读取权限的文件的名称,可通过显式指定相对文件名,以便从目录外部访问该文件的内容。

在文件所在的目录中拥有所有权或写入权限的任何人都可以删除此文件,不论此文件本身的所有权或权限如何。(可以通过特殊权限将其覆盖,本章后续将对此进行讨论。)

# 查看当前目录下的文件或目录
ls -l

# 查看 /home 下的文件或目录
ls -ld /home

长列表的第一个字符表示文件类型,解译如下:

  • 是常规文件。
  • d是目录。
  • l是软链接。
  • 其他字符代表硬件设备(bc)或其他具有特殊用途的文件(ps)。

接下来的九个字符是文件权限。它们分为三组,每组三个字符,分别对应:应用于拥有该文件的用 户的权限、应用于拥有该文件的组的权限,以及应用于其他所有用户的权限。如果组中显示rwx, 说明该类别具有读取、写入和执行三种权限。如果其中一个字母被替换为则表示该类别没有这个权限。

 

二、管理文件系统权限

2.1 更改文件和目录权限

通常使用 chmod 命令来对文件或目录的权限进行修改。下面进行全面说明。

2.1.1 通过符号法更改权限

格式:chmod  WhoWhatWhich  file|directory

  • Who是指u、g、o、a (代表用户、组、其他、全部)
  • What是指+、-、=(代表添加、删除、精确设置)
  • Which是指 r、w、x (代表读取、写入、执行)

使用符号法时,不需要设置一组全新的权限。取而代之,可以更改现有的一个或多个权限。使用+来分别添加或删除权限,或者使用=来替换一组权限的整个集合。

# 创建空白文件0601
touch 0601
# 查看文件权限
ls -al 0601

# 当前用户组及其它用户删除读写权限
chmod go-rw 0601
# 查看文件权限
ls -al 0601

# 对所有用户加入可执行权限
chmod a+x 0601
# 查看文件权限
ls -al 0601

2.1.2 通过数值法更改权限

格式:chmod  ###  file|directory

每个数字(即#号)代表一个访问级别的权限,分别为:用户、组、其他。

数字的计算方法是:将所要添加的每个权限的数值加在一起,其中4代表读取,2代表写入,1代表执行。

如果使用数值法,权限由三位(或在设置高级权限时为四位)八进制数来表示。单个八进制数字可以表示0-7的任何单个值。

在权限的三位八进制(数值)表示法中,每个数字代表一个访问级别,从左至右为:用户、组和其 他。要确定每个数字:

  1. 从0开始。
  2. 如果该访问级别应该具有读取权限,加4。
  3. 如果应该具有写入权限,加2。
  4. 如果应该具有执行权限,加1。

检查权限-rwxr-x—对于用户,rwx计算为4+2+1=7,对于组,r-x计算为4+0+1=5,对于其他用户—表示为0。将这三个放在一起,这些权限的数值法表示为750。

这一计算也可按相反的方向执行。我们来看一下权限640。对于用户权限,6表示读取⑷和写入 ⑵,其显示为rw-。对于组部分,4仅包含读取(4),显示为r–。对于其他用户使用的0表示无权 限(—),因此这一文件最终的符号权限集为-rw-r—-。有经验的管理员通常使用数值权限,因为它们的输入和发音会比较短,而仍能完全控制所有权限。

# 创建空白文件 0602 
touch 0602
# 查看文件的权限
ls -al 0602

# 对用户设置读取和写入权限,对组设置读取权限,对其他设置读取权限
chmod 644 0602
# 查看文件的权限
ls -al 0602

# 对用户设置读取、写入和执行权限,对组设置读取和执行权限,而对其他则设置无权限
chmod 750 0602
# 查看文件的权限
ls -al 0602

 

2.2 更改文件和目录的所有权

新建的文件由创建该文件的用户所有。默认情况下,新文件的组所有权为创建该文件的主要用户组。在红帽企业Linux中,用户的主要组通常为仅有该用户作为成员的私有组。要根据组成员资格 授予对文件的访问权限,可能需要更改拥有该文件的组。

只有root用户可以更改拥有文件的用户。不过,组所有权可以由root用户或文件的所有者来设置。root用户可将文件所有权授予任何组,而普通用户仅可将文件所有权授予他们所属的组。

使用chown (更改所有者)命令可更改文件所有权。

# 切换到root用户
su root
# 创建student用户
useradd student
# 查看当前目录下的文件
ls -l

# 修改 0601 文件所属用户
chown student 0601
# 查看当前目录下的文件
ls -l

chown可与-R选项配合使用,以递归更改整个目录树的所有权。

# 创建目录 d0601
mkdir d0601
# 在目录下创建文件 aa.txt
touch d0601/aa.txt

# 为整个目录树设置所有权
chown -R d0601

chown命令也可用于更改文件的组所有权,只需在组名称之前加上冒号()。

# 查看有效的组信息
cat /etc/group
# 修改所有组
chown :student d0601

chown命令也可用于同时更改所有者和组,此时可使用语法owner:group。

# 创建空白文件 0603
touch 0603
# 查看权限信息
ls -l 0603

# 修改用户的所有权
chown student:student 0603
# 查看权限信息
ls -l 0603

有些用户并不使用chown,而是使用chgrp命令来更改组所有权。该命令的作用与chown类似, 不同之处在于它仅用于更改组所有权,而且不需要组名前的冒号(:)。

三、管理文件系统权限

3.1 特殊权限

特殊权限构成了除了基本用户、组和其他类型之外的第四种权限类型。顾名思义,这些权限提供了额外的访问相关功能,超出了基本权限类型允许的范畴。本节详细介绍了特殊权限的影响,具体参见下表中的总结。

对可执行文件的setuid权限表示将以拥有该文件的用户的身份运行命令,而不是以运行命令的用户身份。以passwd命令为例:

# 查看文件权限信息
ls -l /usr/bin/passwd

在长列表中,可以通过小写的s辨别出setuid权限,该处通常是x(所有者执行权限)。如果所有者不具有执行权限,这将由大写的S取代。

对某目录的特殊权限setgid表示在该目录中创建的文件将继承该目录的组所有权,而不是继承自创建用户。这通常用于组协作目录,将文件从默认的专有组自动更改为共享组,或者当目录中的文件始终都应由特定的组所有时使用。/run/log/journal目录就是这样的一个示例:

# 查看目录权限信息
ls -l /run/log/journal

如果对可执行文件设置了 setgid,则命令以拥有该文件的组运行,而不是以运行命令的用户身份运行,其方式与setuid类似。以locate命令为例:

# 查看目录权限信息
ls -ld /usr/bin/locate

在长列表中,可以通过小写的s辨别出setgid权限,该处通常是x (组执行权限)。如果组不具有执行权限,这将会由大写S取代。

最后,针对目录的粘滞位将对文件删除设置特殊限制。只有文件的所有者(及root)才能删除该 目录中的文件。

在长列表中,可以通过小写的t辨别出sticky权限,该处通常是x (其他执行权限)。如果其他不具有执行权限,这将会由大写T取代。

设置特殊权限:

  • 用符号表示:setuid =u+s; setgid=g+s; sticky = o+t
  • 用数值表示(第四位):setuid=4; setgid = 2; sticky = 1
# 创建目录d0604
mkdir d0604
# 目录加入 setid位
chmod g+s d0604
# 查看权限
ls -ld d0604

# 创建目录d0605
mkdir d0605
# 目录设置setgid位,并且为用户和组添加读取/写/执行权限,但其他不具有任何访问权限
chmod 2770 d0605
# 查看权限
ls -ld d0605

3.2 默认权限

创建新文件或目录时,会为其分配初始权限。有两个因素会影响这些初始权限。首先是要创建常规文件还是目录。其次是当前的umask

如果是创建新目录,操作系统首先会为其分配八进制权限0777 (drwxrwxrwx)。如果是创建新的常 规文件,操作系统则为其分配八进制权限0666 (-rw-rw-rw-)。必须始终为常规文件显式添加执行权限。这样攻击者就难以破坏网络服务,从而可以创建新文件并立即作为程序执行。

不过,shell会话还会设置一个umask,以进一步限制初始设置的权限。这是一个八进制位掩码,用于清除由该进程创建的新文件和目录的权限。如果在umask中设置了一个位,则新文件中的对应的 权限将被清除。例如,umask 0002可清除其他用户的写入位。前导零表示特殊的用户和组权限未被清除。umask为0077时,清除新创建文件的所有组和其他权限。不带参数运行umask命令将显示shell的umask的当前值:

# 显示shell的umask的当前值
umask

Bash shell用户的系统默认umask值在/etc/profile/etc/bashrc文件中定义。用户可以 在其主目录的.bash_profile.bashrc文件中覆盖系统默认值。

以下示例说明了 umask如何影响文件和目录的权限。查看当前shell中文件和目录的默认umask权限。所有者和组都对文件具有读写权限, 执行权限。其他的唯一权限是读取。所有者和组都对目录具有读取、写入和执行权限。

# 显示shell的umask的当前值
umask

# 创建空白文件
touch 0606
# 查看文件权限信息
ls -l 0606

# 创建目录
mkdir d0607
# 查看文件权限信息
ls -ld d0607

通过将umask值设置为0,其他的文件权限将从读取改为读取和写入。其他的目录权限将从读取和 执行改为读取、写入和执行。

# 将umask值设置为0
umask 0

# 创建空白文件
touch 0608
# 查看文件权限信息
ls -l 0608

# 创建目录
mkdir d0609
# 查看文件权限信息
ls -ld d0609

要屏蔽其他的所有文件和目录权限,请将umask值设置为007。

# 将umask值设置为007
umask 007

# 创建空白文件
touch 0610
# 查看文件权限信息
ls -l 0610

# 创建目录
mkdir d0611
# 查看文件权限信息
ls -ld d0611

umask为027可确保新文件的用户具有读写权限,并且组具有读取权限。新目录的组具有读取和写入权限,而其他则没有访问权限。

# 将umask值设置为027
umask 027

# 创建空白文件
touch 0612
# 查看文件权限信息
ls -l 0612

# 创建目录
mkdir d0613
# 查看文件权限信息
ls -ld d0613

用户的默认umask由shell启动脚本设置。默认情况下,如果帐户的UID为200或以上并且用户名和主要组名相同,就会分配一个值为002的umask。否则,umask将为022。

作为root用户,可以通过添加名为/etc/profile. d/local-umask. sh的shell启动脚本来更改此设置,该shell启动脚本的输岀如下例所示:

对于UID大于199且用户名和主要组名相匹配的用户,上面的示例会将umask设为007,其他人的则设为022。如果只想将每个人的umask都设为022,可以仅使用以下内容创建该文件:

要确保全局umask更改生效,必须注销shell并重新登录。在此之前,当前shell中配置的umask 仍然有效。

 

分享到 :
相关推荐

发表回复

您的电子邮箱地址不会被公开。