linux更改权限操作权限
了解Linux权限以及如何控制哪些用户可以访问文件是系统管理的一项基本技能。
本文将介绍标准的Linux文件系统权限,进一步研究特殊权限,并使用umask解释默认权限。
了解ls命令输出
在讨论如何修改权限之前,我们需要知道如何查看权限。 带有长列表参数( -l )的ls命令为我们提供了有关文件的许多信息。
$
ls
-lAh
total 20K
-rwxr-xr--+
1 root root
0 Mar
4
19 :
39 file1
-rw-rw-rw-.
1 root root
0 Mar
4
19 :
39 file10
-rwxrwxr--+
1 root root
0 Mar
4
19 :
39 file2
-rw-rw-rw-.
1 root root
0 Mar
4
19 :
39 file8
-rw-rw-rw-.
1 root root
0 Mar
4
19 :
39 file9
drwxrwxrwx.
2 root root 4.0K Mar
4
20 :04 testdir
要了解这意味着什么,让我们将有关权限的输出细分为各个部分。 单独参考每个部分会更容易。
在上面的输出中查看最后一行的每个组件:
drwxrwxrwx. 2 root root 4.0K Mar 4 20 :04 testdir
第一节 | 第二节 | 第三节 | 第4节 | 第5节 | 第6节 | 第7节 |
---|---|---|---|---|---|---|
d | w | w | w | 。 | 根 | 根 |
第1节(左侧)显示文件的类型。
d | 目录 |
- | 常规文件 |
l | 软链接 |
ls的信息页面上完整列出了不同的文件类型。
每个文件都有三种访问方式:
- 主人
- 群组
- 所有其他人
第2、3和4节涉及用户,组和“其他用户”权限。 并且每个部分可以包含r (读), w (写)和x (可执行)权限的组合。
还为每个权限分配了一个数值,这在谈论权限的八进制表示形式时很重要。
允许 | 八进制值 |
---|---|
Read | 4 |
Write | 2 |
Execute | 1个 |
第5节详细介绍了任何其他访问方法,例如SELinux或文件访问控制列表(FACL)。
方法 | 字符 |
---|---|
No other method | -- |
SELinux | 。 |
FACLs | + |
Any combination of methods | + |
第6节和第7节分别是所有者的名称和组的名称。
使用chown和chmod
chown命令
chown (更改所有权)命令用于更改文件的用户和组所有权。
要将文件foo的用户和组所有权都更改为root ,我们可以使用以下命令:
$
chown root:root foo
$
chown root: foo
运行与用户的命令后面跟着冒号(:)组的用户和组所有权。
要仅将文件foo的用户所有权设置为root用户,请输入:
$ chown root foo
要仅更改文件foo的组所有权,请在组之前加冒号:
$ chown :root foo
chmod命令
chmod (更改模式)命令控制所有者,组以及既不是所有者也不是与文件关联的组的一部分的所有其他用户的文件许可权。
chmod命令可以以八进制(例如755、644等)和符号(例如u + rwx,g-rwx,o = rw)格式设置权限。
八进制表示法将4个“点”分配给read ,2个要写入 ,1个要执行 。 如果要分配用户读取权限,则将4分配给第一个插槽,但是如果要添加写权限,则必须添加2。如果要添加execute ,则需要添加1。我们为每个权限执行此操作类型:所有者,组和其他。
例如,如果我们想将read , write和execute分配给文件的所有者,而只将read和execute分配给组成员和所有其他用户,则我们将使用755的八进制格式。 这是所有者的所有权限位(4 + 2 + 1),而组和其他权限的所有权限位只有4和1(4 + 1)。
细分为:4 + 2 + 1 = 7; 4 + 1 = 5; 和4 + 1 = 5。
如果我们想将读写 权限分配给文件的所有者,而只读写组的成员和所有其他用户,则可以使用chmod ,如下所示:
$ chmod 644 foo_file
在以下示例中,我们在不同分组中使用符号表示法。 请注意,字母u , g和o分别代表用户 , 组和其他 。 我们将u , g和o与+ , -或=结合使用以添加,删除或设置权限位。
要将执行位添加到所有权权限集:
$ chmod u+x foo_file
要从组成员中删除read , write和execute :
$ chmod g-rwx foo_file
要为所有其他用户的所有权读写 :
$ chmod o =rw
特殊位:设置UID,设置GID和粘性位
除了标准权限外,还有一些特殊的权限位,它们具有一些有用的好处。
设置用户标识(suid)
在文件上设置suid时 ,操作将以文件的所有者(而不是运行文件的用户)的身份执行。 passwd命令就是一个很好的例子 。 需要将suid位置1,以便更改密码具有root权限。
$
ls
-l
/ bin
/
passwd
-rwsr-xr-x.
1 root root
27832 Jun
10
2014
/ bin
/
passwd
设置suid位的示例为:
$ chmod u+s / bin / foo_file_name
设定群组编号(sgid)
sgid位类似于suid位,在某种意义上说,操作是在目录的组所有权下完成的,而不是用户运行命令。
使用sgid的一个示例是,如果多个用户正在同一目录中工作,并且目录中创建的每个文件都需要具有相同的组权限。 下面的示例创建一个名为collab_dir的目录,设置sgid位,并将组所有权更改为webdev 。
$
mkdir collab_dir
$
chmod g+s collab_dir
$
chown :webdev collab_dir
现在,在目录中创建的任何文件都将具有webdev的组所有权,而不是创建该文件的用户。
$
cd collab_dir
$
touch file-sgid
$
ls
-lah file-sgid
-rw-r--r--.
1 root webdev
0 Jun
12 06:04 file-sgid
“粘性”位
/ tmp 。 在下面的示例中, 所有其他权限集的execute列中的t表示已应用粘性位。
$
ls
-ld
/ tmp
drwxrwxrwt.
8 root root
4096 Jun
12 06:07
/ tmp
/
请记住,这不会阻止某人编辑文件。 它只是阻止他们删除目录的内容。
我们将粘性位设置为:
$ chmod o+t foo_dir
您可以自己尝试设置目录上的粘滞位并赋予其完整的组权限,以便多个用户可以在目录中进行读取,写入和执行,因为他们属于同一组。
从那里,以每个用户的身份创建文件,然后尝试以另一个用户的身份删除它们。
如果一切配置正确,则一个用户应该不能从另一用户中删除用户。
请注意,这些位中的每个位也可以用SUID = 4,SGID = 2和Sticky = 1的八进制格式设置。
$
chmod
4744
$
chmod
2644
$
chmod
1755
大写还是小写?
如果您正在设置特殊位并看到大写的S或T而不是小写的字符(正如我们到目前为止所看到的),那是因为底层的执行位不存在。 为了说明这一点,下面的示例创建一个设置了粘性位的文件。 然后,我们可以添加/删除执行位以演示大小写更改。
$
touch
file cap-ST-demo
$
chmod
1755 cap-ST-demo
$
ls
-l cap-ST-demo
-rwxr-xr-t.
1 root root
0 Jun
12 06:
16 cap-ST-demo
$
chmod o-x cap-X-demo
$
ls
-l cap-X-demo
-rwxr-xr-T.
1 root root
0 Jun
12 06:
16 cap-ST-demo
有条件地设置执行位
至此,我们已经使用小写的x设置了execute位,这将在不询问任何问题的情况下进行设置。 我们还有另一种选择:使用大写X代替小写将仅在权限组中已经存在的执行位中设置执行位。 这可能是一个很难解释的概念,但是下面的演示将帮助说明它。 请注意,在尝试将执行位添加到组特权后,该位不被应用。
$
touch cap-X-file
$
ls
-l cap-X-file
-rw-r--r--.
1 root root
0 Jun
12 06:
31 cap-X-file
$
chmod g+X cap-X-file
$
ls
-l cap-X-file
-rw-r--r--.
1 root root
0 Jun
12 06:
31 cap-X-file
在这个类似的示例中,我们首先使用小写字母x将执行位添加到组权限,然后使用大写字母X为所有其他用户添加权限。 这次,大写的X设置权限。
$
touch cap-X-file
$
ls
-l cap-X-file
-rw-r--r--.
1 root root
0 Jun
12 06:
31 cap-X-file
$
chmod g+x cap-X-file
$
ls
-l cap-X-file
-rw-r-xr--.
1 root root
0 Jun
12 06:
31 cap-X-file
$
chmod g+x cap-X-file
$
chmod o+X cap-X-file
ls
-l cap-X-file
-rw-r-xr-x.
1 root root
0 Jun
12 06:
31 cap-X-file
了解umask
umask屏蔽(或“阻止”)默认权限集中的位,以定义文件或目录的权限。 例如, umask输出中的2表示它至少在默认情况下阻止了文件的写位。
使用不带任何参数的umask命令可以使我们看到当前的umask设置。 共有四列:第一列为特殊的suid,sgid或sticky位保留,其余三列代表所有者,组和其他权限。
$
umask
0022
要理解这意味着什么,我们可以使用-S执行umask (如下所示)以获得屏蔽位的结果。 例如,由于第三列中的值为2 ,因此写入位从组和其他部分中被屏蔽掉; 只能为其分配读和执行权限。
$
umask
-S
u =rwx,
g =rx,
o =rx
要查看文件和目录的默认权限集是什么,让我们将umask设置为全零。 这意味着我们在创建文件时不会掩盖任何位。
$
umask 000
$
umask
-S
u =rwx,
g =rwx,
o =rwx
$
touch file-umask-000
$
ls
-l file-umask-000
-rw-rw-rw-.
1 root root
0 Jul
17
22 :03 file-umask-000
现在,当我们创建文件时,我们看到所有部分的默认权限为read (4)和write (2),这相当于八进制表示666。
我们可以对目录执行相同的操作,并查看其默认权限为777。我们需要目录上的execute位,以便我们可以遍历它们。
$
mkdir dir-umask-000
$
ls
-ld dir-umask-000
drwxrwxrwx.
2 root root
4096 Jul
17
22 :03 dir-umask-000
/
结论
管理员还有许多其他方法可以控制对系统文件的访问。 这些权限是Linux的基础,我们可以在这些基本方面上进行构建。 如果您的工作将您带入FACL或SELinux,您将看到它们也建立在这些文件访问的第一条规则之上。
翻译自: https://opensource.com/article/19/8/linux-permissions-101
linux更改权限操作权限