介绍
Linux权限允许文件或目录所有者基于访问者与每个文件的关系来限制访问。 这允许提供对不同人的不同级别的访问的控制方案。
umask命令被用于确定分配给每个用户创建的文件的默认权限。 根据系统和用户的需要,可以对其进行修改以提供严格的安全限制或放宽文件共享方案的权限。
本指南将解释Linux权限的基本知识,并将演示正确配置umask的有用性。 它还将简要介绍chmod命令为相关权限的工具。
目录
权限类别
Linux的权限看起来很模糊,很难让新用户理解。 但是,一旦您熟悉了表示权限的方式,轻松地读取和更改文件或目录的权限是微不足道的。
所有者权限
理解权限所必需的第一个概念是Linux基本上是一个多用户操作系统。
每个文件由一个用户拥有。 即使您是唯一使用您的VPS的人,仍然有许多不同的“用户”创建运行特定的程序。 您可以通过键入以下内容查看系统上的不同用户:
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh lp:x:7:7:lp:/var/spool/lpd:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh . . .
在/ etc / passwd文件中包含已在操作系统上创建的每个用户线。 每行上的第一个字段是唯一用户的名称。 如您所见,许多这些用户都与服务和应用程序相关联。
将服务配置为作为不同用户操作允许我们通过利用用户权限分配来控制服务的访问。 许多程序配置为创建用户名并使用该用户执行所有操作。
组权限
我们可以分配权限的第二个类别是文件的“组所有者”。
与所有者类别一样,文件只能由一个组拥有。 每个用户可以是多个组的成员,每个组可以包含多个用户。
要查看您的用户当前所属的组,请键入:
groups
这将显示您的用户当前所有的组。 默认情况下,您可能只是一个或两个组的成员,其中一个可能与您的用户名相同。
要显示系统上当前可用的所有组,请键入:
cat /etc/group
root:x:0: daemon:x:1: bin:x:2: sys:x:3: adm:x:4: tty:x:5: disk:x:6: lp:x:7: . . .
每行的第一个字段是组的名称。
Linux允许您基于文件的组所有者分配权限。 这允许您为一组人提供自定义权限,因为只有一个用户可以拥有文件。
其他权限
您可以为其分配权限的最后一个类别是“其他”类别。 在此上下文中,其他定义为不是文件所有者并且不是拥有该文件的组成员的任何用户。
此类别允许您设置将应用于其他两个控制组之外的任何人的基本权限级别。
权限类型
可以为每个权限类别(所有者,组所有者和其他)分配允许或限制其读取,写入或执行文件的权限。
对于常规文件,需要读取权限来读取文件的内容,需要写入权限来修改文件,并需要执行权限才能以脚本或应用程序运行文件。
对于目录,读权限是必要的,LS(列表)目录中的内容,权限需要修改目录的内容写和执行权限允许用户cd(更改目录)到目录中。
Linux使用两个独立的符号符号表示这些类型的权限:字母和八进制。
字母符号
字母符号易于理解,并由几个常用程序用于表示权限。
每个权限由单个字母表示:
- r =读取权限
- w =写权限
- x =执行权限
重要的是要记住,字母权限总是以此顺序指定。 如果授予某个特权,则由适当的字母表示。 如果访问受限制,则用破折号( - )表示。
首先授予文件所有者的权限,然后是组所有者,最后是其他用户。 这给我们三组三个值。
ls命令使用时,其长格式选项称为字母的符号:
cd /etc ls -l
drwxr-xr-x 3 root root 4096 Apr 26 2012 acpi -rw-r--r-- 1 root root 2981 Apr 26 2012 adduser.conf drwxr-xr-x 2 root root 4096 Jul 5 20:53 alternatives -rw-r--r-- 1 root root 395 Jun 20 2010 anacrontab drwxr-xr-x 3 root root 4096 Apr 26 2012 apm drwxr-xr-x 3 root root 4096 Apr 26 2012 apparmor drwxr-xr-x 5 root root 4096 Jul 5 20:52 apparmor.d drwxr-xr-x 6 root root 4096 Apr 26 2012 apt …
此命令输出中的第一个字段表示文件的权限。
十个字符表示此数据。 第一个字符实际上不是权限值,而是表示文件类型( - 对于常规文件,d表示目录等)。
接下来的九个字符表示我们上面讨论的权限。 代表所有者,组所有者和其他权限的三个组,每个组具有指示读取,写入和执行权限的值。
在上面的示例中,“acpi”目录的所有者具有读取,写入和执行权限。 组所有者和其他用户具有读取和执行权限。
“anacrontab”文件允许文件所有者读取和修改,但组成员和其他用户只有读取权限。
八进制符号
更简洁,但稍微不直观的表示权限的方式是使用八进制符号。
使用此方法,每个权限类别(所有者,组所有者和其他)由0到7之间的数字表示。
我们通过为每种类型的权限分配一个数值,得到适当的数字:
- 4 =读取权限
- 2 =写权限
- 1 =执行权限
我们将与我们希望为每个类别授予的权限类型相关联的数字相加。 这将是每个类别的0和7之间的一个数字(0表示没有权限,7表示完全读取,写入和执行权限)。
例如,如果文件所有者具有读取和写入权限,则将在文件所有者列中将其表示为6。 如果组所有者仅需要读取权限,则可以使用4来表示其权限。
与字母符号类似,八进制符号可以包括指定文件类型的可选前导字符。 其后分别是所有者权限,组所有者权限和其他权限。
从使用八进制的好处的一个基本程序是chmod命令。
使用Chmod命令
更改文件的权限最流行的方法是使用八进制使用chmod命令。 我们将通过在我们的主目录中创建一个空文件来练习:
cd touch testfile
首先,让我们查看创建时给予此文件的权限:
ls -l testfile
-rw-rw-r-- 1 demouser demouser 0 Jul 10 17:23 testfile
如果我们解释权限,我们可以看到文件所有者和文件组所有者都具有读取和写入权限,而其他用户具有读取功能。
如果我们将它转换为八进制表示法,则所有者和组所有者将具有6(4为读取,2为写入)的权限值,而另一个类别将具有4(用于读取)。 完全权限将由三元组664表示。
我们假设这个文件包含一个我们想要执行的bash脚本,作为所有者。 我们不希望任何人修改该文件,包括群组所有者,我们不希望群组中的任何人都无法读取该文件。
我们可以按如下字母顺序表示我们所需的权限设置:-rwxr -----。 我们将转换到这八进制,改变用chmod的权限:
chmod 740 testfile ls -l testfile
-rwxr----- 1 demouser demouser 0 Jul 10 17:23 testfile
正如您所看到的,权限被正确分配。
如果我们想要更改权限,我们可以很容易地通过给chmod以下命令:
chmod 664 testfile ls -l testfile
-rw-rw-r-- 1 demouser demouser 0 Jul 10 17:23 testfile
使用Umask设置默认权限
umask命令定义了基于文件和目录明确了“基地”的权限设置新创建的文件的默认权限。
文件具有基本权限集666,或所有用户的完全读写权限。 默认情况下不会分配执行权限,因为大多数文件不会被执行(分配可执行权限也会打开一些安全问题)。
目录的基本权限设置为777,或者所有用户的读取,写入和执行权限。
Umask通过对上面所示的基本权限应用减法“掩码”来操作。 我们将使用一个例子来演示这是如何工作的。
如果我们希望所有者组的所有者和成员能够写入新创建的目录,但不能写入其他用户,则我们希望将权限分配给775。
我们需要三位数字来表示基本权限和所需权限之间的差异。 那个数字是002。
777 - 775 ------ 002
这个结果数字是我们想要应用的umask值。 巧合的是,这是用于许多系统默认umask值,如我们看到,当我们创建与Touch指令早的文件。 让我们再试一次:
touch test2 ls -l test2
-rw-rw-r-- 1 demouser demouser 0 Jul 10 18:30 test2
我们可以定义使用umask命令不同的umask。
如果我们想要更多地保护我们的系统,我们可以说,默认情况下,我们希望不是文件所有者的用户根本没有权限。 这可以通过077 umask实现:
umask 077 touch restricted ls -l restricted
-rw------- 1 demouser demouser 0 Jul 10 18:33 restricted
如果我们有一个创建共享内容的进程,我们可能需要为其创建的每个文件和目录授予完全权限:
umask 000 touch openfile ls -l openfile
-rw-rw-rw- 1 demouser demouser 0 Jul 10 18:36 openfile
默认情况下,分配给的umask设置将仅适用于当前的shell会话。 当您下次登录时,任何新文件和目录将给出您的分发所选择的原始设置。
如果您希望跨会话保持umask设置,可以在.bashrc文件中定义umask设置:
cd nano .bashrc
搜索以查看是否已设置umask值。 如果存在值,请修改现有值。 否则,在文件底部添加一行,并使用所需的umask设置:
umask 022
在这里,我们选择授予拥有者完全权限,并取消群组拥有者和其他类别的写入权限。 将此设置调整为您希望在下次登录时提供您的首选项。
一句注意
在更改权限时,一个重要的要点是文件系统的某些区域和某些进程需要特定的权限才能正确运行。 权限不足可能会导致错误和无法正常运行的应用程序。
在另一方面,设置过于宽松可能会带来安全风险。
由于这些原因,建议您不要在您自己的主目录之外调整权限,除非您知道由于配置不正确而可能产生的影响。
遵守的另一个好的规则是,尤其是手动配置软件时,始终分配最严格的权限策略,而不影响功能。
这意味着如果只有一个用户(例如服务)需要访问一组文件,则不需要允许世界其他地方对内容进行写或甚至读访问。 这在密码以纯文本存储的上下文中尤其如此。
您可以通过正确使用群组所有者权限并将必要的用户添加到相应的群组,从而更全面地调整权限。 如果需要访问文件的所有用户都是组所有者的成员,则可以锁定其他权限类别以提高安全性。