权限管理
1 文件权限
我们以/etc/passwd 文件为例,用ll长列出其属性如下所示
1 | ~]# ll /etc/passwd |
–rw–r–r–:代表文件的权限。
1:代表文件的引用计数
root:代表文件所有者
root:代表文件所属组
1619:代表文件大小
Jan 19 10:39:代表文件创建时间
/etc/passwd:代表文件名
每个文件针对每类访问访问者都定义了三种权限 r == 4 w == 2 x == 1
对于文件来说:
r:可以使用文件查看类工具获取其内容
w:可以修改其内容
x:可以执行此文件
对于目录来说:
r:可以使用ls查看此目录中文件列表
w:可以在此目录中创建,删除文件
x:可以使用ls -l查看此目录中文件列表,可以进入此目录
-:代表没有权限
文件类型说明
p表示命名管道文件
d表示目录文件
l表示符号连接文件
-表示普通文件
s表示socket文件
c表示字符设备文件
b表示块设备文件
1 chmod 命令
chmod命令用来变更文件或目录的权限
权限范围的表示法如下:
- u User,即文件或目录的拥有者;
- g Group,即文件或目录的所属群组;
- o Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围;
- a All,即全部的用户,包含拥有者,所属群组以及其他用户;
- s 特殊功能说明:变更文件或目录的权限。
语法 : chmod(选项)(参数)
选项
-c:效果类似“-v”参数,但仅回报更改的部分;
-f:不显示错误信息;
-R:递归处理,将指令目录下的所有文件及子目录一并处理;
-v:显示指令执行过程;
示例:
1 | app]#ll file1 |
2 umask
用途 预设权限(权限掩码)
我们知道, 当我们建立一个目录或文件时,它都会带一个默认的权限:
若使用者建立为 ‘文件’ 则预设 ‘没有可执行 ( x ) 项目’, 亦即只有 rw 这两个项目, 用数字表示就是666或字母 –rw-rw-rw-
若使用者建立为 ‘目录’, 则由于 x 与是否可以进入此目录有关, 因此预设为所有权限均开放, 亦即为777 或字母d-rwx-rwx-rwx
umask就与这个默认权限有关. 那么 umask 是在搞什么呢? umask 就是指定 ‘目前用户在建立档案或目录时候的权限默认值’.
用法
1 查看 我们可以这样查看umask默认值
1 | app]#umask -S //以字符形式显示 |
要注意的是,umask 的数字指的是该默认值需要减掉的权限。
因此,上面的022实际上是去掉了其他用户的写权限,对于文件来说也就是, 实际权限是644即:-rw-r–r-
对于目录来说, 实际是755, 即:-rwxr-xr-x
2 设置 我们可以这样对umask值修改
1 | app]#touch file1 |
umask后面接3个数字就可以设定了.我们可以看到本来创建的文件是默认rw-r–r–权限,但修改完umask值后默认权限就变为rw-rw-r–
但这种修改umask值的方式只是临时修改,若要长期修改umask的值, 可以把它写进/etc/profile或/.profile或/.bash_profile中.
3 chown
chown命令改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户UID,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。
语法 : chown(选项)(参数)
选项 :
-c:效果类似“-v”参数,但仅回报更改的部分;
-f:不显示错误信息;
-h:只对符号连接的文件作修改,而不更改其他任何相关文件;
-R:递归处理,将指定目录下的所有文件及子目录一并处理;
-v:显示指令执行过程;
–dereference:效果和“-h”参数相同;
–help:在线帮助;
–reference=<参考文件或目录>:把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同;
–version:显示版本信息。
示例:
将目录/usr/meng及其下面的所有文件、子目录的文件所属人改成 liu:
chown -R liu /usr/meng
4 chgrp
chgrp命令用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。
在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。
语法 chgrp(选项)(参数)
选项
-c:效果类似“-v”参数,但仅回报更改的部分;
-f:不显示错误信息;
-h:只对符号连接的文件作修改,而不是该其他任何相关文件;
-R:递归处理,将指令目录下的所有文件及子目录一并处理;
-v:显示指令执行过程;
–reference=<参考文件或目录>:把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同;
实例
将/usr/meng及其子目录下的所有文件的用户组改为mengxin
chgrp -R mengxin /usr/meng
5 stat
stat命令用于显示文件的状态信息。stat命令的输出信息比ls命令的输出信息要更详细。
语法
1 | stat(选项)(参数) |
选项
1 | -L:支持符号连接; |
参数
文件:指定要显示信息的普通文件或者文件系统对应的设备文件名。
实例
1 | [root@localhost ~]# ls -l myfile |
7 acl权限
1 简介
给指定的用户指定目录分配指定的权限,就是 ACL 权限分配。
2 查看分区 ACL 权限
我们看某个文件(Linux系统中目录也是文件,一切皆是文件)是否支持 ACL 权限,首先要看文件所在的分区是否支持 ACL 权限。
查看当前系统有哪些分区:df -h
1 | [root@izbp12c0zpe8t4yri0xphiz ~]# df -h |
查看指定分区详细文件信息:dumpe2fs -h 分区路径
下面是查看 根分区/ 的详细文件信息
1 | [root@izbp12c0zpe8t4yri0xphiz ~]# dumpe2fs -h /dev/vdal |
3 开启分区 ACL 权限
临时开启分区 ACL 权限
1 | mount -o remount,acl / |
重新挂载根分区,并挂载加入 acl 权限。注意这种命令开启方式,如果系统重启了,那么根分区权限会恢复到初始状态。
永久开启分区 ACL 权限
1 修改配置文件 /etc/fstab
1 | # |
上面是修改根分区拥有 acl 权限
1 | UUID=eb448abb-3012-4d8d-bcde-94434d586a31 / ext4 defaults , acl 1 1 |
2 重新挂载文件系统或重启系统,使得修改生效
1 | mount -o remount / |
4 设定 ACL 权限
选项:
-m 设定acl权限
-x 删除指定的acl权限
-b 删除所有的acl权限
-d 设定默认acl权限
-k 删除默认acl权限
-R 递归设定acl权限
①、给用户设定 ACL 权限:setfacl -m u:用户名:权限 指定文件名
②、给用户组设定 ACL 权限:setfacl -m g:组名:权限 指定文件名
**注意: ** 我们给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限“相与”之后的权限才是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限。mask 权限下面我们会详细讲解
范例:所有者root用户在根目录下创建一个文件目录/project,然后创建一个QQ群所属组,所属组里面创建两个用户zhangsan和lisi。所有者和所属组权限和其他人权限是770。
然后创建一个旁听用户 pt,给他设定/project目录的 ACL 为 r-x。
目录 /project 的所有者和所属组其他人权限设定为 770。接下来我们创建旁听用户 pt,并赋予 acl 权限 rx
为了验证 pt 用户对于 /project 目录没有写权限,我们用 su 命令切换到 pt 用户,然后进入 /project 目录,在此目录下创建文件,看是否能成功:
上面提示权限不够,说明 acl 权限赋予成功,注意如下所示,如果某个目录或文件下有 + 标志,说明其具有 acl 权限。
5 查看 ACL 权限
6 最大有效权限 mask
我们给用户或用户组设定 ACL 权限其实并不是真正我们设定的权限,是与 mask 的权限“相与”之后的权限才是用户的真正权限,一般默认mask权限都是rwx,与我们所设定的权限相与就是我们设定的权限。
我们通过 getfacl 文件名 也能查看 mask 的权限,那么我们怎么设置呢?
1 | setfacl -m m:权限 文件名 |
7 删除 ACL 权限
①、删除指定用户的 ACL 权限
1 | setfacl -x u:用户名 文件名 |
②、删除指定用户组的 ACL 权限
1 | setfacl -x g:组名 文件名 |
③、删除文件的所有 ACL 权限
1 | setfacl -b 文件名 |
8 递归 ACL 权限
通过加上选项 -R 递归设定文件的 ACL 权限,所有的子目录和子文件也会拥有相同的 ACL 权限。
1 | setfacl -m u:用户名:权限 -R 文件名 |
9 默认 ACL 权限
1 | setfacl -m d:u:用户名:权限 文件名 |