- Unix/Linux 初学者指南
- Unix/Linux - 首页
- Unix/Linux - 什么是Linux?
- Unix/Linux - 入门指南
- Unix/Linux - 文件管理
- Unix/Linux - 目录
- Unix/Linux - 文件权限
- Unix/Linux - 环境
- Unix/Linux - 基本工具
- Unix/Linux - 管道与过滤器
- Unix/Linux - 进程
- Unix/Linux - 通信
- Unix/Linux - vi 编辑器
- Unix/Linux Shell 编程
- Unix/Linux - Shell 脚本
- Unix/Linux - 什么是Shell?
- Unix/Linux - 使用变量
- Unix/Linux - 特殊变量
- Unix/Linux - 使用数组
- Unix/Linux - 基本运算符
- Unix/Linux - 决策
- Unix/Linux - Shell 循环
- Unix/Linux - 循环控制
- Unix/Linux - Shell 替换
- Unix/Linux - 引号机制
- Unix/Linux - I/O 重定向
- Unix/Linux - Shell 函数
- Unix/Linux - 手册页帮助
- 高级 Unix/Linux
- Unix/Linux - 标准 I/O 流
- Unix/Linux - 文件链接
- Unix/Linux - 正则表达式
- Unix/Linux - 文件系统基础
- Unix/Linux - 用户管理
- Unix/Linux - 系统性能
- Unix/Linux - 系统日志
- Unix/Linux - 信号和陷阱
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
这里,第一列表示不同的访问模式,即与文件或目录关联的权限。
权限被分成三组,每组中的每个位置都表示特定的权限,顺序为:读 (r)、写 (w)、执行 (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
对于初学者来说,修改文件或目录权限最简单的方法是使用符号模式。使用符号权限,您可以使用下表中的运算符添加、删除或指定所需的权限集。
序号 | Chmod 运算符和说明 |
---|---|
1 |
+ 将指定的权限添加到文件或目录。 |
2 |
- 从文件或目录中删除指定的权限。 |
3 |
= 设置指定的权限。 |
这是一个使用testfile的示例。对 testfile 运行ls -1显示文件的权限如下:
$ls -l testfile -rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
然后,对 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 | r-x |
6 | 读和写权限:4(读)+ 2(写)= 6 | rw- |
7 | 所有权限:4(读)+ 2(写)+ 1(执行)= 7 | rwx |
这是一个使用 testfile 的示例。对 testfile 运行ls -1显示文件的权限如下:
$ls -l testfile -rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
然后,对 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。上面提到的所有权限也基于所有者和组进行分配。
可以使用两个命令来更改文件的所有者和组:
chown - chown命令代表“更改所有者”,用于更改文件的所有者。
chgrp - chgrp命令代表“更改组”,用于更改文件的组。
更改所有权
chown命令更改文件的所有权。基本语法如下:
$ chown user filelist
用户的值可以是系统上的用户名或系统上用户的用户 ID (uid)。
以下示例将帮助您理解此概念:
$ chown amrood testfile $
将给定文件的所有者更改为用户amrood。
注意 - 超级用户 root 具有更改任何文件所有权的无限制能力,但普通用户只能更改他们拥有的文件的所有权。
更改组所有权
chgrp命令更改文件的组所有权。基本语法如下:
$ chgrp group filelist
组的值可以是系统上的组名或系统上组的组 ID (GID)。
以下示例将帮助您理解此概念:
$ chgrp special testfile $
将给定文件的组更改为special组。
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 位已设置,并且该命令由 root 拥有。执行位置中的大写字母S而不是小写字母s表示未设置执行位。
如果在目录上启用了粘滞位,则只有在您是以下用户之一的情况下才能删除文件:
- 粘滞目录的所有者
- 要删除的文件的所有者
- 超级用户 root
要为任何目录设置 SUID 和 SGID 位,请尝试以下命令:
$ chmod ug+s dirname $ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $