📜  Unix / Linux-文件权限/访问模式

📅  最后修改于: 2020-10-31 14:45:13             🧑  作者: Mango


在本章中,我们将详细讨论Unix中的文件许可和访问模式。文件所有权是Unix的重要组成部分,它提供了一种安全的文件存储方法。 Unix中的每个文件都具有以下属性-

  • 所有者权限-所有者的权限确定文件的所有者可以对文件执行哪些操作。

  • 组权限-组权限确定用户(属于文件所属组的成员)可以对该文件执行哪些操作。

  • 其他(世界)权限-其他权限表示所有其他用户可以对该文件执行什么操作。

权限指标

使用ls -l命令时,它显示与文件许可权相关的各种信息,如下所示:

$ls -l /home/amrood
-rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir

在此,第一列表示不同的访问模式,即与文件或目录关联的权限。

权限分为三部分,每组中的每个位置代表一个特定的权限,其顺序为:读取(r),写入(w),执行(x)-

  • 前三个字符(2-4)表示文件所有者的权限。例如, -rwxr-xr–表示所有者具有读取(r),写入(w)和执行(x)权限。

  • 第二组三个字符(5-7)包含文件所属组的权限。例如, -rwxr-xr–表示该组具有读取(r)和执行(x)权限,但没有写权限。

  • 最后一组三个字符(8-10)代表其他所有人的权限。例如, -rwxr-xr–表示存在只读(r)权限。

档案存取模式

文件的权限是Unix系统安全性的第一道防线。 Unix权限的基本构建块是readwriteexecute权限,下面对此进行了介绍-

授予读取(即查看文件内容)功能。

授予修改或删除文件内容的功能。

执行

具有执行权限的用户可以将文件作为程序运行。

目录访问模式

目录访问模式的列出和组织方式与其他任何文件相同。有一些差异需要提及-

访问目录意味着用户可以阅读目录。用户可以查看目录内的文件名

访问意味着用户可以在目录中添加或删除文件。

执行

执行目录实际上没有任何意义,因此请将其视为遍历权限。

用户必须具有对bin目录的执行访问权限,才能执行lscd命令。

更改权限

要更改文件或目录权限,请使用chmod (更改模式)命令。有两种使用chmod的方法-符号模式和绝对模式。

在符号模式下使用chmod

初学者修改文件或目录权限的最简单方法是使用符号模式。使用符号权限,您可以使用下表中的运算符来添加,删除或指定所需的权限集。

Sr.No. Chmod operator & Description
1

+

Adds the designated permission(s) to a file or directory.

2

Removes the designated permission(s) from a file or directory.

3

=

Sets the designated permission(s).

这是使用testfile的示例。在测试文件上运行ls -1表示文件的权限如下:

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

然后,上表中的每个示例chmod命令都在测试文件上运行,然后是ls –l ,因此您可以看到权限更改-

$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod g = rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

这是您如何在一行上组合这些命令的方法-

$chmod o+wx,u-x,g = rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

使用具有绝对权限的chmod

使用chmod命令修改权限的第二种方法是使用数字来指定文件的每组权限。

如下表所示,为每个权限分配了一个值,每组权限的总数为该权限集提供了一个数字。

Number Octal Permission Representation Ref
0 No permission
1 Execute permission –x
2 Write permission -w-
3 Execute and write permission: 1 (execute) + 2 (write) = 3 -wx
4 Read permission r–
5 Read and execute permission: 4 (read) + 1 (execute) = 5 r-x
6 Read and write permission: 4 (read) + 2 (write) = 6 rw-
7 All permissions: 4 (read) + 2 (write) + 1 (execute) = 7 rwx

这是使用测试文件的示例。在测试文件上运行ls -1表示文件的权限如下:

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

然后,上表中的每个示例chmod命令都在测试文件上运行,然后是ls –l ,因此您可以看到权限更改-

$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod 043 testfile
$ls -l testfile
----r---wx  1 amrood   users 1024  Nov 2 00:10  testfile

更改所有者和组

在Unix上创建帐户时,它将为每个用户分配所有者ID组ID 。上面提到的所有权限也都是根据所有者和组分配的。

有两个命令可用于更改所有者和文件组-

  • chownchown命令代表“更改所有者” ,用于更改文件的所有者。

  • chgrpchgrp命令代表“更改组” ,用于更改文件组。

改变所有权

chown命令更改文件的所有权。基本语法如下-

$ chown user filelist

用户的值可以是系统上用户名称,也可以是系统上用户的用户ID(uid)

以下示例将帮助您理解概念-

$ chown amrood testfile
$

将给定文件的所有者更改为用户amrood

–超级用户root具有更改任何文件所有权的不受限制的能力,但是普通用户只能更改其拥有的那些文件的所有权。

更改组所有权

chgrp命令更改文件的组所有权。基本语法如下-

$ chgrp group filelist

group的值可以是系统上名称,也可以是系统上组的组ID(GID)

以下示例可帮助您理解概念-

$ chgrp special testfile
$

将给定文件的组更改为特殊组。

SUID和SGID文件权限

通常,执行命令时,必须以特殊特权执行命令才能完成其任务。

例如,当您使用passwd命令更改密码时,新密码存储在文件/ etc / shadow中

作为一个普通用户,你没有或到本文件出于安全原因访问,但是当你改变你的密码,你需要有写权限来此文件。这意味着passwd程序必须为您提供其他权限,以便您可以写入文件/ etc / shadow

通过称为“设置用户ID”(SUID)和“设置组ID”(SGID)位的机制将附加权限授予程序。

当执行启用了SUID位的程序时,您将继承该程序所有者的权限。未设置SUID位的程序在启动该程序的用户的权限下运行。

SGID也是如此。通常,程序以您的组权限执行,但是您的组将仅为此程序更改为该程序的组所有者。

如果允许,SUID和SGID位将显示为字母“ s” 。 SUID “ s”位将位于所有者的执行权限通常所在的权限位中。

例如,命令-

$ ls -l /usr/bin/passwd
-r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*
$

显示SUID位置1,并且该命令归根所有。执行位置的大写字母S代替小写字母s表示未设置执行位。

如果目录上启用了sticky位,则只有以下用户之一才能删除文件-

  • 粘性目录的所有者
  • 被删除文件的所有者
  • 超级用户,root

要为任何目录设置SUID和SGID位,请尝试以下命令-

$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root  4096 Jun 19 06:45 dirname
$