大家好 这是RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200和EX300中的文章的翻译。
对我自己:我希望本文不仅对初学者有用,而且还将帮助更有经验的管理员整理他们的知识。
所以走吧

要在Linux上访问文件,将使用权限。 这些权限分配给三个对象:一个文件,一个组和另一个对象(即其他所有对象)。 在本文中,您将学习如何应用权限。
本文首先回顾了基本概念,然后讨论了特殊权限和访问控制列表(ACL)。 在本文的结尾,您将学习如何通过umask配置默认权限以及如何管理高级用户属性。
文件所有权管理
在讨论权限之前,您应该了解文件和目录的所有者的角色。 拥有文件和目录对于使用权限至关重要。 在本部分中,您将首先学习如何看到所有者。 然后,您将学习如何更改文件和目录的组所有者和用户。
显示文件或目录的所有者
在Linux上,每个文件和每个目录都有两个所有者:一个用户和一个组。
这些所有者是在创建文件或目录时设置的。 创建文件的用户将成为该文件的所有者,而包含同一用户的主要组也将成为该文件的所有者。 为了确定您作为用户是否具有文件或目录的访问权限,外壳程序会检查其所有权。
发生的顺序如下:- 外壳程序检查您是否拥有要访问的文件。 如果您是此所有者,那么您将获得权限,并且外壳程序将停止检查。
- 如果您不拥有该文件,则外壳程序将检查您是否是对此文件具有权限的组的成员。 如果您是该组的成员,则可以使用为该组设置的权限访问该文件,并且外壳程序将停止检查。
- 如果您既不是该组的用户,也不是该组的所有者,那么您将获得其他用户(其他)的权利。
要查看当前的所有者分配,可以使用
ls -l命令 。 此命令显示用户和所有者组。 在下面,您可以看到/ home目录中目录的所有者设置。
[root@server1 home]
使用
ls命令,可以显示此目录中文件的所有者。 有时,获得将用户或组指定为所有者的系统中所有文件的列表可能会很有用。 您可以
为此使用
find 。
find -user参数可用于此目的。 例如,以下命令显示将linda用户指定为所有者的所有文件:
find / -user linda
您也可以使用
find搜索特定组拥有它们的文件。
例如,以下命令搜索属于
用户组的所有文件:
find / -group users
所有权变更
要应用权限,首先要考虑的是所有权。 为此有一个
chown命令 。 该命令的语法很容易理解:
chown
例如,以下命令将/ home / account目录的所有者更改为用户linda:
chown linda /home/account
chown命令有几个选项,其中一个特别有用:
-R 。 您可以猜测它的作用,因为此选项也可用于许多其他团队。 这允许您递归设置所有者,从而允许您设置当前目录以及下面所有内容的所有者。 以下命令将/ home目录及其下面的所有内容的所有者更改为lisa:
现在所有者看起来像这样:
[root@localhost ~]
运行:
[root@localhost ~]
现在,丽莎已成为帐户目录的所有者:
[root@localhost ~]
群组拥有者变更
有两种更改组所有权的方法。 您可以使用
chown来执行此操作,但是有一个名为
chgrp的特殊命令可以完成这项工作。 如果要使用
chown命令 ,请使用
。 或
:在组名之前。
以下命令将/ home /帐户组的任何所有者更改为帐户组:
chown .account /home/account
您可以使用
chown以多种方式更改用户和/或组的所有者。 以下是一些示例:
- chown lisa myfile1将lisa设置为拥有myfile1。
- chown lisa.sales myfile将lisa用户设置为myfile文件的所有者,并且还将sales组设置为同一文件的所有者。
- chown lisa:sales myfile与上一个命令相同。
- chown .sales myfile将销售组设置为myfile文件的所有者,而无需更改用户的所有者。
- chown:sales myfile与上一个命令相同。
您可以使用
chgrp命令更改组所有者。 考虑以下示例,您可以在其中使用
chgrp将销售组设置为帐户目录的所有者:
chgrp .sales /home/account
与
chown一样 ,您可以在
chgrp中使用
-R选项,还可以递归更改组所有者。
了解默认所有者
您可能会注意到,当用户创建文件时,将应用默认所有权。
创建文件的用户自动成为该文件的所有者,而该用户的主要组自动成为该文件的所有者。 这通常是一个在/ etc / passwd文件中指定为用户的主组的组。 但是,如果用户是多个组的成员,则他可以更改有效核心组。
要显示当前有效的主要组,用户可以使用
groups命令:
[root@server1 ~]
如果当前用户linda要更改有效的主要组,则将使用
newgrp命令,后跟要设置为新的有效主要组的组的名称。 使用
newgrp命令后,主要组将处于活动状态,直到用户发出
exit命令或注销为止。
下面显示了lisa如何使用此命令,以便销售组成为主要组:
lisa@server1 ~]$ groups lisa account sales [lisa@server1 ~]$ newgrp sales [lisa@server1 ~]$ groups sales lisa account [lisa@server1 ~]$ touch file1 [lisa@server1 ~]$ ls -l total 0 -rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1
更改当前主组后,用户创建的所有新文件都将以该组作为所有者组,要返回主组的初始设置,请使用
exit 。
为了能够使用
newgrp命令,用户必须是他要用作主要用户的组的成员。 另外,可以使用
gpasswd命令将组密码用于该组。 如果用户使用
newgrp命令但不是目标组的成员,则外壳程序将请求组密码。 输入正确的组密码后,将设置一个新的有效主要组。
基本权利管理
Linux许可系统是在1970年代发明的。 由于那几年的计算需求是有限的,因此基本权限系统相当有限。 此权限系统使用可以应用于文件和目录的三个权限。 在本节中,您将学习如何使用和更改这些权限。
了解读取,写入和执行权限
三个基本权限使您可以读取,写入和执行文件。 这些权限的效果在应用于文件或目录时有所不同。 对于文件,“读取”权限授予您打开文件以进行读取的权利。 因此,您可以读取其内容,但这意味着您的计算机可以打开文件以对其进行处理。
例如,需要访问库的程序文件应具有对该库的读访问权限。 因此,读取权限是使用文件所需的最基本的权限。
对于目录,读取允许您显示该目录的内容。 您应该知道,该权限不允许您读取目录中的文件。 Linux权限不知道继承,并且读取文件的唯一方法是对该文件使用读取权限。
您可能会猜到,如果将写许可权应用于文件,则可以将其写入文件。 换句话说,它允许您修改现有文件的内容。 但是,它不允许创建或删除新文件或更改文件权限。 为此,您需要向要在其中创建文件的目录授予写权限。 在目录中,此权限还允许您创建和删除新的子目录。
执行权限是执行文件所需要的。 默认情况下,它将永远不会安装,这使得Linux几乎完全不受病毒感染。 只有对目录具有写权限的人才能申请执行权限。
以下总结了基本权限的使用:
使用chmod
要管理权限,请使用
chmod命令 。 使用
chmod时,可以为用户(用户),组(组)和其他用户(其他)设置权限。 您可以在两种模式下使用此命令:相对模式和绝对模式。 在绝对模式下,使用三个数字来设置基本权限。

设置权限时,计算所需的值。 如果要在/ somefile中为用户设置读取,写入和执行,为组读取和执行以及为其他用户读取和执行,则可以使用以下
chmod命令 :
chmod 755 /somefile
当以这种方式使用
chmod时,所有当前权限都将替换为您设置的权限。
如果要更改相对于当前权限的权限,则可以在相对模式下使用
chmod 。 在相对模式下使用
chmod时,您正在使用三个指示符来指示要执行的操作:
- 首先,您要更改谁的权限。 为此,您可以在用户( u ),组( g )和其他用户( o )之间选择。
- 然后,您可以使用操作员从当前模式添加或删除权限,或者完全设置权限。
- 最后,使用r , w和x指示要设置的权限。
在相对模式下更改权限时,可以跳过“至”部分以添加或删除所有对象的权限。 例如,此命令为所有用户添加执行权限:
chmod +x somefile
在相对模式下工作时,还可以使用更复杂的命令。 例如,此命令向组添加写许可权,并为其他组删除读取:
chmod g+w,or somefile
使用
chmod -R o + rx / data时,可以设置所有目录以及/ data目录中文件的执行权限。 要将权限设置为仅对目录而非文件执行,请使用
chmod -R o + rX / data 。
如果文件尚未设置某些对象的执行权限,则大写X可以确保文件没有执行权限。 这使X成为一种具有执行权限的更聪明的方式。 这样可以避免在不需要此权限的文件上安装此权限。
延伸权利
除了您刚刚了解的基本权限外,Linux还具有一组高级权限。 这些不是您设置的默认权限,但是有时它们提供了有用的补充。 在本节中,您将学习它们是什么以及如何配置它们。
了解扩展的SUID,GUID和粘性位权限
有三个高级权限。 首先是允许设置用户标识符(SUID)。 在某些特殊情况下,您可以将此权限应用于可执行文件。 默认情况下,运行可执行文件的用户使用其自己的权限执行文件。
对于普通用户,这通常意味着该程序的使用受到限制。 但是,在某些情况下,用户仅需要特殊权限才能执行特定任务。
例如,考虑用户需要更改密码的情况。 为此,用户必须将他的新密码写入/ etc / shadow文件。 但是,非root用户不能写入此文件:
root@hnl ~]
解决方案SUID提供了此问题的解决方案。 在/ usr / bin / passwd实用程序中,默认情况下使用此权限。 这意味着,更改密码后,用户会暂时获得root特权,这使他可以写入/ etc / shadow文件。 您可以在通常希望看到
x的用户权限的位置看到
ls -l为
s的SUID解析度:
[root@hnl ~]
SUID权限看似有用(在某些情况下是有用的),但同时有潜在的危险。 如果使用不当,您可能会意外地授予root访问权限。 因此,我建议仅在使用时格外小心。
大多数管理员将永远不必使用它。 您只会在操作系统默认设置它的某些文件中看到它。
第二个特殊权限是组标识符(SGID)。 此分辨率有两个效果。 当应用于可执行文件时,它为执行文件的用户提供此文件的组所有者的权限。 因此,SGID可以与SUID大致相同。 但是,SGID实际上不用于此目的。
与SUID权限一样,SGID作为默认设置应用于某些系统文件。
应用于目录时,SGID很有用,因为您可以使用它为在此目录中创建的文件和子目录设置默认组所有者。 默认情况下,当用户创建文件时,其有效的主要组将设置为该文件的组所有者。
这并不总是非常有用,特别是因为Red Hat / CentOS用户具有与该用户同名的组,并且该用户是唯一的成员。 因此,默认情况下,将共享用户创建的文件。
想象一下一个情况,其中linda和lori用户从事会计工作,并且是
帐户组的成员。 默认情况下,这些用户是专用组的成员,他们是唯一组。 但是,这两个用户都是帐户组的成员,而且也是辅助组的参数。
默认情况是这些用户中的任何一个创建文件时,主组都将成为所有者。 因此,默认情况下,linda无法访问lori创建的文件,反之亦然。 但是,如果您创建网上论坛的共享目录(例如/ groups /帐户),并确保将SGID权限应用于此目录,并且将网上论坛结算设置为该目录的网上论坛所有者,则将在此目录及其所有子目录中创建所有文件,还将帐户组作为默认组所有者。
因此,SGID权限是在共享组目录上安装的非常有用的权限。
SGID许可权在输出
ls -ld中以
s显示 ,通常在执行该许可权的位置:
[root@hnl data]
特殊权限的第三个是粘性位。 在多个用户对同一目录具有写权限的环境中,此权限对于防止文件被意外删除很有用。 如果使用粘性位,则只有用户是文件或文件所在目录的所有者,用户才能删除文件。 因此,它用作/ tmp目录的默认权限,并且对于共享组目录也可能有用。
无需麻烦,如果用户可以在目录中创建文件,则还可以从该目录中删除文件。 在公共团体环境中,这可能很烦人。 想象一下用户linda和lori,他们都具有对/ data /帐户目录的写权限,并通过帐户组中的成员身份获得这些权限。 因此,linda可以删除lori创建的文件,反之亦然。
当您使用粘滞位时,用户只有在满足以下条件之一的情况下才能删除文件:
当使用
ls -ld时 ,您会在通常看到其他人的执行权限的位置看到粘性位
t :
[root@hnl data]
增强权利
要应用SUID,SGID和粘性位,还可以使用
chmod 。 SUID的值为4,SGID的值为2,sticky位的值为1。
如果要应用这些权限,则需要在
chmod中添加一个四位数的参数,其第一位数表示特殊权限。 例如,以下行将向目录添加SGID权限,并为用户设置rwx,为组和其他设置rx:
chmod 2755 /somedir
如果您需要查看在绝对模式下使用
chmod之前设置的当前权限,这是非常不切实际的。 (如果不这样做,则存在覆盖权限的风险。)因此,如果需要应用任何特殊权限,建议您在相对模式下工作:
- 对于SUID,请使用chmod u + s 。
- 对于SGID,请使用chmod g + s 。
- 对于粘性位,请使用chmod + t ,然后使用要为其设置权限的文件或目录的名称。
下表总结了有关管理特殊权限的所有重要信息。

享有特殊权利的例子
在此示例中,您使用特殊权限来使团队成员更轻松地共享共享组目录中的文件。 您分配了已设置的组标识符的ID位以及粘性位,然后看到安装它们后,添加了一些功能,这些功能有助于组成员的联合工作。
- 打开您是linda用户的终端。 您可以使用useradd linda创建用户,添加密码passwd linda 。
- 使用命令mkdir -p / data / sales在根目录中创建目录/数据和子目录/ data / sale 。 运行cd / data / sales进入sales目录。 运行touch linda1和touch linda2创建linda拥有的两个空文件。
- 运行su-lisa ,将当前用户切换为同时也是销售组成员的lisa。
- 运行cd / data / sales并从此目录执行ls -l 。 您将看到linda创建的两个文件,它们属于linda组。 运行rm -f linda * 。 这将删除两个文件。
- 运行touch lisa1和touch lisa2创建两个属于用户lisa的文件。
- 运行su-将您的特权提升到根级别。
- 运行chmod g + s,o + t / data / sales以设置组标识符位(GUID)以及共享组目录中的粘性位。
- 运行苏琳达 。 然后触摸linda3和linda4 。 现在,您应该看到创建的两个文件属于销售组,该销售组是/ data / sales目录组的所有者。
- 运行rm -rf lisa * 。 粘滞位可防止这些文件代表linda删除,因为您不拥有这些文件。 请注意,如果linda是/ data / sales目录的所有者,则他仍然可以删除这些文件!
在Linux上管理ACL(setfacl,getfacl)
即使以上讨论的扩展权限为Linux使用权限的方式添加了有用的功能,也不允许您在单个文件中向多个用户或一个组授予权限。访问控制列表提供此功能。另外,它们允许管理员以复杂的方式设置默认权限,其中默认权限在不同目录中可能有所不同。了解ACL
尽管ACL子系统为您的服务器添加了强大的功能,但它有一个缺点:并非所有实用程序都支持它。因此,在复制或移动文件时,您可能会丢失ACL设置,并且备份软件可能不会备份ACL设置。tar实用程序不支持ACL。为确保备份时不会丢失ACL设置,请使用star而不是tar。star具有与tar相同的参数;它只是增加了对ACL设置的支持。您也可以使用getfacl备份ACL ,可以使用setfacl命令将其还原。要创建备份,请使用getfacl -R /目录> file.acls。要从备份文件恢复设置,请使用setfacl --restore = file.acl。缺少某些工具的支持应该不是问题。ACL通常作为结构度量应用于目录,而不是单个文件。因此,在文件系统的智能位置中不会应用很多,只有少数应用。因此,即使备份软件不支持使用原始ACL,恢复它们也相对容易。为ACL准备文件系统
在开始使用ACL之前,您可能需要准备一个文件系统以支持ACL。由于文件系统元数据需要扩展,因此文件系统中并不总是默认支持ACL。如果在为文件系统配置ACL时收到消息“不支持操作”,则您的文件系统可能不支持ACL。要解决此问题,您需要在/ etc / fstab文件中添加acl挂载选项,以便默认情况下使用ACL支持挂载文件系统。使用setfacl和getfacl更改和查看ACL设置
要设置ACL,您需要setfacl命令。要查看当前的ACL设置,您需要getfacl。该命令的ls -l显示没有现有的ACL;它仅在权限列表后显示+,表示ACL也适用于该文件。在配置ACL之前,使用getfacl显示当前ACL设置总是有用的。在下面的示例中,您可以看到当前权限,如ls -ld和getfacl所示。如果仔细看,您将看到显示的信息完全相同。 [root@server1 /]
作为getfacl命令的结果,您可以在下面看到对三个不同对象(用户,组和其他对象)的权限显示。现在,让我们添加一个ACL,以向销售组授予读取和执行权限。该命令是setfacl -mg:sales:rx / dir。在此命令中,-m表示必须更改当前的ACL设置。之后,g:sales:rx告诉团队将ACL设置为读取并执行组(g)销售的(rx)。在下面,您可以看到命令的外观以及更改当前ACL设置后的getfacl命令的输出。 [root@server1 /]
既然您了解了如何设置组ACL,现在就很容易理解用户和其他用户的ACL。例如,setfacl -mu:linda:rwx / data命令向/ data目录中的linda用户授予权限,而无需使其成为所有者,也不更改当前所有者的目的地。setfacl命令具有许多功能和选项。一个选项特别重要,-R选项。如果使用此选项,则为安装ACL的目录中当前存在的所有文件和子目录配置ACL。建议在修改现有目录的ACL时始终使用此选项。使用默认ACL
使用ACL的好处之一是,您可以向目录中的多个用户或组授予权限。另一个优点是您可以通过使用默认ACL来启用继承。通过设置默认ACL,您可以定义将为目录中创建的所有新项目设置的权限。请记住,默认ACL不会更改现有文件和子目录的权限。要更改它们,您需要添加常规ACL!这一点很重要。如果要使用ACL为多个用户或组配置对同一目录的访问,则必须将ACL设置两次。首先使用setfacl -R -m更改当前文件的ACL。然后使用setfacl -md:处理还将创建的所有新元素。要设置默认ACL,只需在-m选项之后添加d选项(顺序很重要!)。因此,如果希望销售组读取并执行对将在/ data目录中创建的任何内容的访问,请使用setfacl -md:g:sales:rx / data。使用默认ACL时,为其他ACL设置也很有用。这通常没有多大意义,因为您还可以使用chmod更改其他人的权限。但是,您无法使用chmod,这表示应为将要创建的每个新文件授予其他用户的权限。例如,如果您希望其他人不对在/ data中创建的任何内容获得任何权限,请使用setfacl -md:o ::-/ data。ACL和常规权限并非总是很好地集成在一起。如果将默认ACL应用于目录,然后将项目添加到该目录,然后尝试更改常规权限,则可能会出现问题。适用于常规权限的更改不会很好地反映在ACL概述中。为避免出现问题,请首先设置普通权限,然后设置默认ACL(然后尝试不再更改它们)。使用ACL的高级权限管理示例
在此示例中,您将继续使用先前创建的目录/数据/帐户和/数据/销售。在前面的示例中,您确保销售组具有/数据/销售的权限,并且帐户组具有/数据/帐户的权限。首先,确保帐户组在/ data / account目录中具有读取权限,而销售组在/ data / account目录中具有读取权限。然后,设置默认的ACL,以确保所有新文件的所有新项目的权限都正确设置。- 打开一个终端。
- 运行setfacl -mg:account:rx / data / sales和setfacl -mg:sales:rx / data / account。
- getfacl , , , .
- setfacl -md:g:account:rwx,g:sales:rx /data/sales , ACL sales.
- ACL /data/account, setfacl -md:g:sales:rwx,g:account:rx /data/account .
- , ACL , /data/sales. touch /data/sales/newfile getfacl /data/sales/newfile .
umask
上面,您学习了默认情况下如何使用ACL。如果您未使用ACL,则有一个shell参数定义您将收到的默认权限:umask(向后掩码)。在本节中,您将学习如何使用umask更改默认权限。您可能会注意到,在创建新文件时,会设置一些默认权限。这些权限由umask设置确定。此外壳程序选项适用于登录时的所有用户。umask参数使用一个数值,该数值是可以为文件自动设置的最大权限减去的值;文件的最大设置为666,目录的最大设置为777。但是,某些例外适用于此规则。您可以在下表中找到umask设置的完整概述。在umask中使用的数字中,就象chmod命令的数字参数一样,第一个数字指的是用户权限,第二个数字指的是组权限,最后一个指的是为其他用户设置的默认权限。umask的默认值022为在服务器上创建的所有新文件提供644,为所有新目录提供755。下表列出了所有umask数值及其结果的完整概述。
查看umask参数如何工作的简单方法如下:首先将文件的默认权限设置为666,然后减去umask以获得有效权限。对目录及其默认权限777执行相同的操作。有两种方法可以更改umask设置:适用于所有用户和单个用户。如果要为所有用户安装umask,则必须确保在运行Shell环境文件(如/ etc / profile中指定)时考虑了umask选项。正确的方法是在/etc/profile.d目录中创建名为umask.sh的shell脚本,并指定要在此shell脚本中使用的umask。如果该文件中的umask更改,则在登录服务器后将其应用于所有用户。通过/ etc / profile和相关文件配置umask(将其应用于系统上的所有用户)的另一种方法是,更改名为.profile的文件中的umask设置,该文件在每个用户的主目录中创建。此文件中应用的设置仅适用于单个用户。因此,如果您需要更多细节,这是一个好方法。我个人喜欢此功能,可以将root用户的默认umask值更改为027,而普通用户则使用默认的umask 022。使用高级用户属性
这是有关Linux权利的最后一部分。使用权限时,用户或组对象与这些用户或组对象对文件或目录的权限之间始终存在关系。保护Linux服务器上文件的另一种方法是使用属性。无论访问文件的用户是什么,属性都会发挥作用。与ACL一样,文件属性可能需要包含mount选项。这是user_xattr选项。如果在使用高级用户属性时收到“不支持操作”消息,请确保在/ etc / fstab文件中设置mount参数。记录了许多属性。一些属性可用,但尚未实现。不要使用它们;他们不会带你任何东西。以下是您可以应用的最有用的属性:A此属性可确保对文件文件的访问时间不变。通常,每次打开文件时,文件访问时间都应写入文件的元数据中。这会对性能产生不利影响;因此,对于定期访问的文件,可以使用属性A禁用此功能。a此属性允许您添加但不能删除文件。ç如果使用支持卷级别压缩的文件系统,则此文件属性可确保在首次启用压缩机制时将文件压缩。D此属性确保对文件的更改立即写入磁盘,而不是首先缓存。这在重要的数据库文件中是有用的属性,请确保它们在文件高速缓存和硬盘驱动器之间不会丢失。d此属性确保该文件不会保存在使用转储实用程序的备份中。我此属性为包含它的目录启用索引。这为原始文件系统(例如Ext3)提供了更快的文件访问权限,这些原始文件系统不使用B树数据库来进行快速文件访问。i此属性使文件不变。因此,您无法对文件进行更改,这对于需要额外保护的文件很有用。j此属性确保在ext3文件系统中,首先将文件写入日志,然后再写入硬盘上的数据块。■删除文件后,覆盖保存文件的块0 s。这样可以确保删除文件后无法进行文件恢复。ü此属性存储删除信息。这使您可以开发一个实用程序,使用该信息来保存已删除的文件。如果要应用属性,可以使用chattr命令。例如,使用chattr +的somefile将属性应用于somefile。是否需要删除属性?然后使用chattr -s somefile它将被删除。要获得当前使用的所有属性的概述,请使用lsattr命令。总结
在本文中,您学习了如何使用权限。您将了解三种基本权限,高级权限,以及如何将ACL应用于文件系统。您还学习了如何使用umask参数应用默认权限。在本文的结尾,您学习了如何使用用户高级属性来应用文件系统安全性的附加层。如果您喜欢这种翻译,请在评论中写一下。会有更多的动力来进行有用的翻译。. .
« - .» « - .», .
berez .
:
, , , .
:
, , , . , , , .
CryptoPirate