在Linux中,文件的权限共有五大类
一、文件的基本权限(r是可读;w是可写;x是可执行)
此权限前面已经做过记录。https://www.cnblogs.com/641055499-mozai/p/12176425.html
二、文件的默认权限(umask)
关于umask我们前面也有提到过。这个参数可以控制我们新建目录或者文件的时候默认权限。
输入umask就能得到umask的值(默认022,第一位是特殊权限值,下面会单独记录)。
上可以看出四位,其实生效的就只有后面三位。
1、计算:
当新建一个目录时,权限位默认为:drwxrwxrwx;新建一个文件时,权限位默认为:-rw-rw-rw-。然后umask的值可以转化为:----w--w-。之后,通过两者相减这样得到目录的权限为:drwxr-xr-x;文件的权限为:-rw-r--r--。这样当我们就可以控制新建目录或者文件的默认权限。
2、修改:
(a)临时修改:umask 所需修改的权限值
(b)永久修改:修改文件:/etc/profile(系统不同,文件名与文件保存位置可能不相同)
三、ACL权限(访问控制列表)
1、出现:一个文件或者目录权限只有三种(所有者的权限、所属组的权限、其他组的权限)。这样就代表了最多只有两个用户组内的用户可以对文件或目录的操作。这样在实际工作中,可能会发生用户角色不够分的情况。这样就出现了ACL。
2、配置过程:文件系统为xfs与ext4时,文件系统中内置了ACL支持。而其他的文件系统版本才可能会需要配置ACL。
由于CentOS7默认是xfs文件系统,我这安装了CentOS6并且文件系统选择ext3。
(a)检查:使用 grep -i acl /boot/config* 命令检查一下系统内核是否支持ACL。如果出现“N”而不是“Y”则需要重新编译。
(b)安装相关依赖包:yum -y install nfs4-acl-tools acl libacl
(c)重新挂载分区:mount -o remount,acl /
(d)查看是否ACL:tune2fs -l /dev/sda3 | grep acl
(e)写入配置文件使其永久生效, 文件:/etc/fstab
(f)重新挂载分区,使配置文件生效:mount -o remount /
3、ACL的使用:
getfacl 文件名 查询文件的acl权限
setfacl 选项 文件名 设定acl权限
选项:-m 设置acl权限
-b 删除文件的全部acl权限
-x 删除单个用户的acl权限
格式:
赋予用户权限:setfacl -m u:用户名:权限 文件名
赋予组内权限:setfacl -m g:组名:权限 文件名
例如:当使用root用户建立一个文件时,只有root用户拥有写的权限,普通用户只能查看读取其中的内容,而没有修改与执行的权限。
上面图是没有添加acl权限的文件,下面图是添加acl权限。
给了用户“zhangsan”权限1(执行权限);给用户“lisi”权限6(读写权限)。这样用户“zhangsan”就可以执行此文件,但不可以读写;“lisi”可以读写此文件,但不能执行。若不需要便可以删除此文件的acl权限。
也可删除单个用户的acl权限
添加acl权限后,在其权限后面多了一个“+”,表示有acl权限。
4、ACL的分类:递归ACL与默认ACL
递归ACL:setfacl -m u:用户名:权限 -R 文件名
setfacl -m g:组名:权限 -R 文件名
默认ACL:setfacl -m d:u:用户名:权限 -R 文件名
setfacl -m d:g:组名:权限 -R 文件名
两者区别:
(a)默认acl只能对目录进行赋予权限操作。
(b)递归acl只能对已经存在文件生效,新建的文件不能继承acl权限;而默认acl只对新建的文件生效,之前已建立的文件不能继承acl权限。
若要使得目录内现有文件与新建文件都继承acl权限,则两类acl权限都需设置。
5、mask
当使用getfacl查看文件或者目录时,会看到有个mask值,它是控制最大权限。
上图所示,mask权限与user:lisi权限做“与”运算,得到后面的“实际权限”。
mask的值可以修改,格式:setfacl -m m:权限 文件名
四、sudo 命令(给普通用户赋予部分管理员权限)
配置文件:visudo(命令终端直接执行此命令,打开后,按照vi编辑器使用方式编辑修改)
这个文件中,最主要的就是红线标出的代码。下面的设置也是按照这个格式进行设置。
root 代表用户名
ALL 代表被管理服务器IP地址(一般情况下填写ALL即可){这里我找了很多资料都是说管理者IP地址。具体含义见下图}
ALL 代表可以使用的身份(ALL代表任意身份。可以省略,省略表示root用户)
ALL 授权可以使用的命令(命令填写越详细,普通用户权限限制越高)
举例:
1、授权普通用户修改某一文件(以/etc/shadow文件为例,这个文件存放着用户的密码,非常重要,这里只是举例练习使用)
使用普通用户zhangsan,查看文件/etc/shadow。是没有查看与修改的权限的。所以使用vi编辑器无法查看其中的内容。
查看vi命令的存放位置。
修改visudo配置文件。(其含义是允许用户zhangsan,以root用户的vi权限来修改/etc/shadow文件)
使用sudo -l 可以查看授予zhangsan用户的权限。
再次进行测试,成功打开;测试修改并保存(由于此文件的特殊性,保存时使用w!,root用户也是这样),保存成功。
注意:授予具有root权限的vi/vim命令时,要写具体。如上面所示,若没有/etc/shadow,理论上zhangsan用户可以以root用户权限修改任意文件,这是非常危险的事情。 2、修改某些服务的状态。(这里以重启网络为例)
当普通用户重启网络状态时,需要验证root用户的密码。这一点一样也是非常不安全的。所以可以对其授权。
修改配置文件(这里代表的意思是对张三授予root的网络重启权限)。/etc/init.d/network 这个是系统存在的网络配置脚本存放位置,restart是重启的意思。
检查zhangsan用户权限。
网络服务重启成功,且不需要root用户密码。
注意:与上面一样,授予普通用户权限时,要写详细。如上面所示,若没有restart来进行限制,则普通用户对这个网络配置脚本拥有所有权限,包括停止网络服务。
3、某些命令需要搭配正则来使用。(这里以新建用户举例说明)
当某些时候需要普通用户来新建用户并且赋予密码,但是Linux中,默认情况下只有root用户才具有新建用户并赋予密码的权限。这时候就需要给普通用户授予相关的root权限。需要两个命令(useradd与passwd)。
创建用户这里比较简单:
先查询一下useradd命令存放位置。
写入visudo配置文件中并保存。这样zhangsan用户就拥有了执行新建用户的命令。
创建用户密码(需要正则),这里步骤与上面基本一致:
查询命令存放位置。
写入visudo配置文件,但是要注意,以root权限执行passwd命令,这样也是可以修改root密码的,这样也是不安全的。所以加入正则来限制操作权限。""代表空值
查看zhangsan用户赋予的权限。
测试新建用户lisi。成功。
测试修改lisi密码。成功。
测试修改root密码,失败。