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

在本章中,我们将详细讨论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

这里,第一列代表不同的访问模式,即与文件或目录相关的权限.

权限被分成三组,组中的每个位置表示一个特定的权限,顺序为:read(r),write(w),execute(x) :

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

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

  • 最后一组三个字符(8-10)表示其他人的权限.例如, -rwxr-xr  -  表示只有读取(r)权限.

文件访问模式

文件的权限是Unix系统安全性的第一道防线. Unix权限的基本构建块是读取写入执行权限,这些权限已在下面描述&减去;

读取

授予读取功能,即查看文件内容.

写入

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

执行

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

目录访问模式

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

读取

访问目录意味着用户可以读取内容.用户可以查看目录中的文件名.

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

执行

执行目录确实没有意义,所以将其视为遍历权限.

用户必须执行访问 bin 目录才能执行 ls cd 命令.

更改权限

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

在符号模式下使用chmod

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

Sr.No.Chmod operator&描述
1

+

将指定的权限添加到文件或目录中.

2

 -  

从文件或目录中删除指定的权限.

3

=

设置指定的权限.

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

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

然后每个示例 chmod 命令来自在testfile上运行上一个表,然后是 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八进制权限表示Ref
0 没有许可---
1 执行权限-  x
2 写入权限-  w  -
3 执行和写入权限:1(执行)+ 2(写入)= 3-  wx
4 读取权限r  -
5 读取和执行权限:4(读取)+ 1(执行)= 5rx
6 读写权限:4(读取)+ 2(写)= 6rw  -
7 所有权限:4(读取)+ 2(写)&加; 1(执行)= 7rwx

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

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

然后每个示例 chmod 命令来自在testfile上运行上一个表,然后是 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 .上述所有权限也是根据所有者和组分配的.

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

  • chown :   chown 命令代表"更改所有者",用于更改文件的所有者.

  • chgrp :   chgrp 命令代表"更改组",用于更改文件组.

更改所有权

chown 命令可更改文件的所有权.基本语法如下 :

$ chown user filelist

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

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

$ chown amrood testfile 
$

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

注意 : 超级用户root具有不受限制的功能来更改任何文件的所有权,但普通用户只能更改他们拥有的文件的所有权.

更改组所有权

chgrp 命令可更改文件的组所有权.基本语法如下 :

$ chgrp group filelist

组的值可以是系统上组的名称系统上组的组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位已设置且命令归属于根.执行位置中的大写字母 S 而不是小写 s 表示未设置执行位.

如果粘性在目录上启用了bit,只有当你是以下用户之一时才能删除文件 :

  • 粘性的所有者目录

  • 要删除的文件的所有者

  • 超级用户root

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

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