文件和目录的权限
每个文件都有其所有者(u:user)、所属组(g:group)和其他人(o:other)对它的操作权限,a:all则同时代表这3者。权限包括读(r:read)、写(w:write)、执行(x:execute)。在不同类型的文件上读、写、执行权限的体现有所不同,所以目录权限和普通文件权限要区分开来。
普通文件
- r:可读,可以使用类似 cat 等命令查看文件内容;读是文件的最基本权限,没有读权限,普通文件的一切操作行为都被限制。
- w:可写,可以编辑此文件;
- x:可执行,表示文件可由特定的解释器解释并运行。可以理解为 windows 中的可执行程序或批处理脚本,双击就能运行起来的文件。
目录
- r:可以对目录执行ls以列出目录内的所有文件;读是文件的最基本权限,没有读权限,目录的一切操作行为都被限制。
- w:可以在此目录创建或删除文件/子目录;
- x:可进入此目录,可使用ls -l查看文件的详细信息。可以理解为windows中双击就进入目录的动作。
如果目录没有 x 权限,其他人将无法查看目录内文件属性(只能查看到文件类型和文件名),所以一般目录都要有 x 权限。而如果只有执行却没有读权限,则权限拒绝。
一般来说,普通文件的默认权限是 644 (没有执行权限),目录的默认权限是 755(必须有执行权限,否则进不去),链接文件的权限是 777。当然,默认文件的权限设置方法是可以通过 umask 值来改变的。
权限的表示方式
权限的模式有两种体现
- 数字体现方式
- 字符体现方式
权限的数字表示:"-"代表没有权限,用 0 表示。
- r-----4
- w-----2
- x-----1
例如:rwx rw- r--对应的数字权限是 764,732 代表的权限数值表示为 rwx -wx -w-。
权限解读实例
我们来获取下文件列表:
-rw-r--r-- 1 root root 218 Aug 1 15:16 a.txt
lrwxrwxrwx. 1 root root 7 Jan 9 2018 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 May 9 15:32 boot
一般来说权限格式如下:
- 第一个字符表示文件类型
- 第一组(每三个字符)表示是所有者权限
- 第二组表示所在组权限
- 第三组表示其他人的权限
- 最后一个是ACL类型,(.)点是ACL_T_SELINUX_ONLY, (+)加是ACL_T_YES,空白是没有ACL。
常用的文件类型为以下三种:
* d :目录 directory
* - :二进制文件 binary
* l :软链接文件 link
dr-xr-xr-x. 表示这是一个目录文件,它的所有者可以对它读和执行,不能写 、所属组可以对它读和执行,不可以写,其他人可以读和执行,不能写,并且是 ACL 类型。
ACL 权限
在计算机相关领域,所有的 ACL(access control list)都表示访问控制列表。
文件的 owner/group/others的权限就是一种 ACL,它们是基本的ACL。很多时候,只通过这3个权限位是无法完全合理设置权限问题的,例如如何仅设置某单个用户具有什么权限。这时候需要使用扩展ACL。
扩展ACL是一种特殊权限,它是文件系统上功能,用于解决所有者、所属组和其他这三个权限位无法合理设置单个用户权限的问题。所以,扩展ACL可以针对单一使用者,单一档案或目录里的默认权限进行r,w,x的权限规范。
需要明确的是,扩展ACL是文件系统上的功能,且工作在内核,默认在ext4/xfs上都已开启。
修改权限
能够修改权限的必须是管理员或者文件所有者。
语法格式
chmod(选项)(参数)
选项:
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
<权限范围>+<权限设置>:开启权限范围的文件或目录的该选项权限设置;
<权限范围>-<权限设置>:关闭权限范围的文件或目录的该选项权限设置;
<权限范围>=<权限设置>:指定权限范围的文件或目录的该选项权限设置;
参数:
权限模式:指定文件的权限模式;
文件:要改变权限的文件。
实例
实例1:使用数值方式修改权限
chmod 755 /tmp/a.txt
实例2:使用字符方式修改权限
由于权限属性附在文件所有者、所属组和其它上,它们三者都有独立的权限位,所有者使用字母"u"表示,所属组使用"g"来表示,其他使用"o"来表示,而字母"a"同时表示它们三者。所以使用字符方式修改权限时,需要指定操作谁的权限。
chmod [ugoa][+ - =] [权限字符] 文件/目录名
"+"是加上权限,"-"是减去权限,"="是直接设置权限
chmod a+x test # 对文件test的 u,g,o 都设置可执行属性
更改文件和目录的所属组
更改文件和目录的所属组,要求组已经存在。注意,对于链接文件而言,修改组的作用对象是链接的源文件,而非链接文件本身。
语法格式
chgrp (选项) (参数)
选项:
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quiet或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不是该其他任何相关文件;
-R或——recursive:递归处理,将指令目录下的所有文件及子目录一并处理;
-v或——verbose:显示指令执行过程;
--reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
参数:
组:指定新工作名称;
文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。
实例
将/usr/meng及其子目录下的所有文件的用户组改为 marklogzhu
chgrp -R marklogzhu /usr/meng
更改文件所有者和所属组
chown 命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户 D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。
语法
chown (选项) (参数)
选项:
-c或——changes:效果类似“-v”参数,但仅回报更改的部分;
-f或--quite或——silent:不显示错误信息;
-h或--no-dereference:只对符号连接的文件作修改,而不更改其他任何相关文件;
-R或——recursive:递归处理,将指定目录下的所有文件及子目录一并处理;
-v或——version:显示指令执行过程;
--dereference:效果和“-h”参数相同;
--help:在线帮助;
--reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
--version:显示版本信息。
参数:
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。
实例
将目录/usr/meng及其下面的所有文件、子目录的文件主改成 marklogzhu:
chown -R marklogzhu /usr/meng