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

  • 简述

    本章将详细讨论 Unix 中的文件权限和访问模式。文件所有权是 Unix 的一个重要组成部分,它提供了一种安全的文件存储方法。Unix 中的每个文件都具有以下属性 -
    • Owner permissions − 所有者的权限决定了文件的所有者可以对文件执行哪些操作。
    • Group permissions − 组的权限决定了作为文件所属组的成员的用户可以对文件执行哪些操作。
    • Other (world) permissions − 其他人的权限表示所有其他用户可以对文件执行的操作。
  • 权限指标

    使用时 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-- 代表有 read (r) 唯一的许可。
  • 文件访问模式

    文件的权限是 Unix 系统安全的第一道防线。Unix 权限的基本构建块是read, write, 和 execute 权限,如下所述 -

    授予读取,即查看文件内容的能力。

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

    执行

    具有执行权限的用户可以将文件作为程序运行。
  • 目录访问模式

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

    访问目录意味着用户可以阅读内容。用户可以查看filenames 目录里面。

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

    执行

    执行一个目录并没有真正的意义,所以把它看作是一个遍历权限。
    用户必须拥有 execute 访问 bin 目录以执行 ls 或者 cd 命令。
  • 更改权限

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

    在符号模式下使用 chmod

    初学者修改文件或目录权限的最简单方法是使用符号模式。通过符号权限,您可以使用下表中的运算符添加、删除或指定所需的权限集。
    序号 Chmod 运算符和说明
    1
    +
    将指定的权限添加到文件或目录。
    2
    -
    从文件或目录中删除指定的权限。
    3
    =
    设置指定的权限。
    这是一个使用示例 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 命令修改权限的第二种方法是使用一个数字来指定文件的每组权限。
    每个权限都分配了一个值,如下表所示,每组权限的总数为该组提供了一个编号。
    数字 八进制权限表示 参考
    0 没有权限 ---
    1 执行权限 - X
    2 写权限 -w-
    3 执行和写权限:1(执行)+2(写)=3 -wx
    4 读取权限 r--
    5 读和执行权限:4(读)+1(执行)=5 接收
    6 读写权限:4(读)+2(写)=6 rw-
    7 所有权限:4(读)+2(写)+1(执行)=7 rwx
    这是使用 testfile 的示例。跑步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 上创建帐户时,它会分配一个 owner ID 和一个 group ID给每个用户。上面提到的所有权限也是根据所有者和组分配的。
    有两个命令可用于更改所有者和文件组 -
    • chown − 该 chown 命令代表 "change owner" 和用于更改文件的所有者。
    • chgrp − 该 chgrp 命令代表 "change group" 和用于更改文件的组。
  • 改变所有权

    chown命令更改文件的所有权。基本语法如下 -
    
    $ chown user filelist
    
    用户的价值可以是 name of a user 在系统或 user id (uid) 系统上的用户。
    以下示例将帮助您理解这个概念 -
    
    $ chown amrood testfile
    $
    
    将给定文件的所有者更改为用户 amrood.
    NOTE − 超级用户root 可以不受限制地更改任何文件的所有权,但普通用户只能更改其拥有的文件的所有权。
  • 更改组所有权

    chgrp命令更改文件的组所有权。基本语法如下 -
    
    $ chgrp group filelist
    
    group 的值可以是 name of a group 在系统或 the group ID (GID) 系统上的一组。
    以下示例可帮助您理解这个概念 -
    
    $ chgrp special testfile
    $
    
    将给定文件的组更改为 special 团体。
  • SUID 和 SGID 文件权限

    通常当一个命令被执行时,它必须以特殊权限执行才能完成它的任务。
    例如,当您使用 passwd 命令,您的新密码存储在文件中 /etc/shadow.
    作为普通用户,您没有 read 或者 write出于安全原因可以访问此文件,但是当您更改密码时,您需要具有此文件的写入权限。这意味着,passwd 程序必须为您提供额外的权限,以便您可以写入文件 /etc/shadow.
    通过一种称为 Set User ID (SUID) Set Group ID (SGID) 位。
    当您执行启用了 SUID 位的程序时,您将继承该程序所有者的权限。未设置 SUID 位的程序在启动该程序的用户的权限下运行。
    SGID 也是这种情况。通常,程序以您的组权限执行,但您的组将仅针对该程序更改为该程序的组所有者。
    SUID 和 SGID 位将显示为字母 "s"如果权限可用。SUID"s" 位将位于所有者的权限位中 execute 许可通常存在。
    例如,命令 -
    
    $ ls -l /usr/bin/passwd
    -r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*
    $
    
    显示 SUID 位已设置并且命令归根所有。一个大写字母S 在执行位置而不是小写 s 表示未设置执行位。
    如果在目录上启用了粘滞位,则仅当您是以下用户之一时才能删除文件 -
    • 粘性目录的所有者
    • 被删除文件的所有者
    • 超级用户,root
    要为任何目录设置 SUID 和 SGID 位,请尝试以下命令 -
    
    $ chmod ug+s dirname
    $ ls -l
    drwsr-sr-x 2 root root  4096 Jun 19 06:45 dirname
    $