一、 管理 UNIX 基本权限与特殊权限
6.1 UNIX 基本权限( UGO 权限)
6.1.1 权限的作用
权限的作用是针对文件和目录,是否允许授予用户和组执行读、写或执行的操作。
6.1.2 UGO权限的构成 u g o
u 文件和目录的拥有者(所有者,所属用户)
g 文件和目录的所属组
o 其他用户(不属于文件的所属用户也不属于所属组)
6.1.3 UGO权限的权限标识符
r = 4 w = 2 x = 1
难点:理解r、w、x对目录的影响
☛ 首先:Linux 一切皆文件
☛ 读权限影响着:我们能否看到目录文件内容,即:读取文件和子目录的名称列表 ®
☛ 执行权限影响着:我们能否执行目录文件内容,即:访问文件和子目录的inode 数据 (x)
☛ 写权限影响着:我们能否改变目录文件内容,即:新增/删除/移动/更名文件和子目录 (w)
权限标识的表示格式
6.1.4 UGO 初始权限的生成机制 (了解)
★ cmask:就是要默认创建的权限位。
★ umask:就是要默认屏蔽的权限位。
cmask 也就是 root 用户初始建立目录和文件的权限
umask 可以被修改
用户创建文件和目录的初始权限为 cmask - umask
因为umask是022 所以目录权限是 755(rwxr-xr-x) ,文件是644 (rw-r–r–),不带x权限,可用root用户创建目录和文件 ll 查看去验证
UNIX初始权限 = 在cmask权限位中,去除umask权限位
某普通用户目录权限 = 777 - umask
某普通用户文件权限 = 666 - umask
对目录来说没用问题。对于文件来说,文件是没有 执行(x)权限的,所以当umask里面有执行(x)权限,不能用这个公式
例如 umask 为 033 时 ,文件初始权限为 644
文件:
cmask 666 rw- rw- rw-
umask 033 — -wx -wx
权限 644 rw- r- - r–
无论什么情况,初始文件创建都是没有可执行(x)权限 ,否则 比如 创建一个病毒会直接执行
6.2 管理UNIX 基本权限
ugo权限
6.2.1 chmod命令更改rwx权限
chmod重点
功能:重设、添加、删减UNIX基本权限
语法 :chmod [选项]… 模式… 文件名…
选项 : -R 递归操作,应用于目录 --reference=参考文件 通过引用参考文件的UNIX权限设置,来配置UNIX权限
[模式] 格式 : ugoa -+= rwxXst 或者格式 0~7数字 r4 w2 x1
其中:
u :代表所有者
g :代表所属组,默认情况下,是所有者的主要组
o :代表其他人
a :代表所有人(所有者、所属组、其他人)
chmod 命令的三种授权方法:
☞ 方法1:重置权限(=),覆盖式配置文件和目录的权限。
☞ 方法2:添加权限(+),在现有权限的基础上,添加权限。
☞ 方法3:撤销权限(-),在现有权限的基础上,删减权限。
1 查看文件和目录的UGO 权限
ls - l /tmp/1.txt ## 查看1.txt的权限信息
2 添加文件和目录的UGO 权限
chmod u+rx /tmp/1.txt ## 给 1.txt 的所有者增加rw权限
3 撤销文件和目录的UGO 权限
chmod g-r /tmp/1.txt ## 给 1.txt 的所属组取消r权限
4 重置文件和目录的UGO 权限
chmod o=rw /tmp/1.txt ## 给 1.txt 的其他用户权限改成rw-
5 ugo权限全部修改 常用方式
chmod 654 /tmp/1.txt ## 给 1.txt 的权限改成 rw-r-xr--
6.2.2 chown更改所有者和所属组
语法 :chown [选项] 所有者 :所属组 文件或目录名
选项有 -R 递归操作,用于目录
chown cl:cl 1.txt ## 把1.txt的所有者和所属组都改成cl
chown cl 1.txt ## 把1.txt的所有者改成cl,所属组不变
chown :cl 1.txt ## 所有者不变,把1.txt的所属组改成cl
chown cl:cl a ## 把目录a的所有者和所属组都改成cl,目录下的所有者和所属组不变
chown -R cl:cl a ## 把目录a和a目录下的的所有者和所属组都改成cl
chgrp 更改所属组,了解就好,不如chown
语法 : chgrp [选项] 所属组 文件或者目录名
选项有 -R 用法 和chown一样,了解就好
6.2.3 管理:UNIX 特殊权限(功能性解决不了时使用)
1 了解 UNIX 特殊权限
目录本身有rwx权限时候,可以进行增删子文件,在修改文件的时候,就算子文件没有权限修改(只读文件),用户也可以通过强制保存 wq! 修改
特殊权限有 SUID(4)、SGID(2)、SBIT(1)
SUID(4) 的功能作用:让用户在执行特定应用程序的过程中被临时提权。(u)
仅用于命令,让该命令变成文件或目录的所属者去执行文件和目录 所属者有什么权限该命令就有什么权限
SGID(2) 的功能作用:统一设置文件和子目录的所属组和进程的运行组账号。(用于命令和目录,让目录下的文件和目录继承该目录所属组)(g)
对于命令,让该命令变成文件或目录的所属用户权限去执行文件和目录 所属用户有什么权限该命令就有什么
对于目录, 让该目录下的文件和目录(不仅子目录,孙子目录及以下也会继承)继承其所属用户
SBIT(1) 的功能作用:防止非特权用户的误删除和强制修改并夺权。(o) (防删除键) 非特权用户表示该用户对目录有权限,但对于目录里的文件没有权限
仅对于目录 ,禁止目录下的文件和目录被删除和更改,强制保存也不行 (对文件有权限的用户可以修改,对目录有权限对文件没权限不行)
只有目录的所有者、文件所有者和 root 用户才能删除或重命名该目录中的文件。(目录其他用户有权限也不行,用户对文件有权限可以修改)
2 配置 UNIX特殊权限
SUID SGID SBIT
u+s g+s o+t
原来是 rwx rw- rw- 变成 rws rwS rwT 大写表示本来是-,小写表示本来是x
SUID(4) 的功能作用
作用于可执行文件(命令)
让 命令 临时拥有可执行文件的权限,即以该文件的所属用户权限去执行(相当于拥有尚方宝剑),例子如下:
su cl ## 切换普通用户
cat /var/log/messages ## 会显示权限不够
which cat ## 查看 cat 命令路径,显示user/bin/cat
ll /user/bin/cat ## 查看 cat 权限 即rwxr-xr-x
chmod u+s /user/bin/cat ## 赋予SUID 权限 即rwsr-xr-x 如果是rw- 使用u+s 变成 rwS 大写表示没有,小写表示有执行权限
cat /var/log/messages ## 可查看日志
SGID(2) 的功能作用
1 作用于可执行命令 和SUID差不多,只不过是 变成以该文件的所属组权限去执行 (少用)
2 作用于目录 (常用)
在更换目录所属用户组时,在其下创建的文件所属用户组也跟着改变,例如
当前在root用户下
cd /tmp
mkdir a ## a的所属用户和所属用户组都是root
ll a ## 查看权限是rwxr-xr-x
chown : cl a ## a的所属用户组改成 cl
touch /tmp/a/1.txt ## 发现1.txt的所属用户组还是root
chmod g+s a ## 权限变成rwsr-xr-x
touch /tmp/a/2.txt ## 发现2.txt的所属用户组变成cl
SBIT(1) 的功能作用
作用于目录 锁住目录,让目录下的文件或目录,只能该目录所有者和目录下的文件所有者还有root用户可以进行增删重命名。如果对文件有权限就有权限作用,对文件没有权限但是对该文件的父目录有权限也不能通过 wq!强制保存进行修改
su cl ## 切换普通用户
mkdir a cl:cl ## 当目录的其他用户有rwx权限,其他用户可用增删子目录和子文件
## 如果子文件是只读文件,但是因为该父目录有w权限也可以通过 wq! 强制保存进行修改
su dj
touch a/1.txt dj:dj ## 当文件的其他用户有rwx权限,其他用户也能修改文件内容
## 可用cl或者其他用户验证
chmod u+t a ## 如果本来是rwxrwxrwx权限变成rwxrwxrwt
注意:执行该操作后,只有cl用户和dj用户还有root可以对目录下的文件或目录进行删除改名等操作,别的都不行,其他用户对目录有权限但是对该文件没有权限是不能修改的
注意 如果是 775 即rwxrwxr-x 如果使用chown o+t 1.txt 那么会变成rwxrwxr-t
后面如果是 T/S ,说明本来是 - (无执行权限) 如果 是t/s ,说明本来是x(有执行权限)
二、 管理 ACL 访问控制列表
1 了解ACL (范围性解决不了使用)
ACL 是 Access Control List 的缩写,主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限配置。
ACL 可以针对单一使用者,单一文件或目录来进行 r,w,x 的权限规范,对于需要特殊权限的使用状况非常有帮助。
ACL 主要可以针对以下几个方面来控制权限:
使用者 (user):可以针对使用者来配置权限;
群组 (group):针对群组为对象来配置其权限;
默认属性 (mask):还可以针对在该目录下在创建新文件/目录时,规范新数据的默认权限;
ACL 的作用:用于弥补UNIX 基本权限不够精细的缺陷,实现更加精细的权限控制。
ACL 是文件系统所赋予的一种安全特性,它不属于UNIX 基本权限的范畴。
当前 CentOS 7 所采用的XFS文件系统就已经默认启动了ACL 特性,可以直接使用。
( acl是特性,不是权限范围,要手动开启)
2 getfacl 和 setfacl 命令
getfacl 是 get file access control list 的简称
setfacl 是 set file access control list 的简称
getfacl功能 : 用于查看文件或目录的ACL 访问控制列表。(查看ACL)
语法 : getfacl [选项] <文件和目录> … 可写多个文件或者目录
选项 : -a -d -r 可不写
-a # 显示ACL 访问控制列表,这是默认选项 几乎都显示
-d # 仅显示ACL 默认权限 显示#注释的内容
-e # 显示出ACL 有效权限 几乎都显示
cd /tmp
getfacl 1.txt 查看acl,即1.txt里面的默认权限 # 前面有注释和有效权限
getfacl -a 1.txt 显示1.txt的权限控制列表,即所属用户,所属用户组,其他用户对他的权限(常用)
getfacl -d 1.txt 显示1.txt的默认权限 # 注释内容
getfacl -e a 显示目录a的有效权限
setfacl功能 :用于配置文件或目录的ACL 访问控制列表。
语法 : setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] <文件和目录> … 可写多个文件或者目录 空格隔开
**例如 : setfacl -m u:dj:r-- /tmp/test **
setfacl -m g:dj:rwx /tmp/test
setfacl -d -m g:dj:rwx /tmp/a
意思是代表对用户dj 针对于 test这个文件或者目录 赋予他的权限为r–
属性可能是 用户 ,也可能是用户组或者其他
选项: 可不写
-R # 表示递归操作(对目录生效)(慎用,少用,新创建的没有该权限)
-m # 修改ACL 列表项
-x # 删除ACL 列表项 删除某一添加的
-b, --remove-all # 清除ACL 所有扩展的列表项(恢复出厂)
-d, --default # 设置目录的ACL 默认权限,赋予目录可被其目录下的新建的文件或目录继承该ACL,本身目录下存在的文件也没有权限(本身没有继承)
-k, --remove-default # 清除目录的ACL 默认权限 (清除继承权限)
## 如果 要某目录下的内容 新创建的内容都要有权限 那 -R 和 -d联合使用且写两遍
2.1 修改-m,删除-x,清空-b,重置-b -m
对某个文件或目录修改ACL权限(在后面对某一属性添加权限,与文件或目论本身默认权限的无关) -m
setfacl -m u:cl:r-- /tmp/test ## 对用户cl添加acl修改权限为r-- 仅对于test目录生效
getfacl /tmp/test ## 查看test的acl,进去可以看到多了一行内容 user:cl:rwx
setfacl -m g:cl:rwx /tmp/test ## 对用户组cl添加acl修改权限为rwx 仅对于test目录生效
getfacl /tmp/test ## 查看test的acl,进去可以看到多了一行内容 group:cl:r-x
setfacl -m u:it01:--- /tmp/myfile ## 该命令也是设置用户it01的ACL,但是这里“---”表示用户it01没有任何权限
setfacl -m u:it01:- /tmp/myfile ## “-”表示移除用户it01的所有权限
对于某一目录或文件针对某一属性删除ACL -x
setfacl -x u:cl /tmp/test ## 对用户cl删除在test目录里面添加的ACL
setfacl -x g:cl /tmp/test ## 对用户组cl删除在test目录里面添加的ACL
getfacl /tmp/test ## 验证cl用户和用户组所添加的ACL内容是否删除
清空ACL(相当于恢复出厂) -b
setfacl -b /tmp/test
重置ACL(先清空,在添加) -b -m
setfacl -b -m u:cl:rw- /tmp/test ## 先把扩展权限清空,
## 然后给用户cl添加权限rw- 仅对于test而言
2.2 配置ACL 可继承默认权限(仅针对目录) -d -m
setfacl -d -m u:cl:r-x /tmp/a ## a是目录,添加目录的ACL权限
## -d 使且让其子目录可以继承其ACL
setfacl -m u:cl:r-x /tmp/a ## 本身不会被继承,要想本身也有权限得写
getfacl /tmp/a ## 查看如下图所示
如图所示
图方框内为可被继承的权限
touch /tmp/a/1.txt
getfacl /tmp/a/1.txt ## 查看发现如下图所示已经继承a目录的ACL
2.3 清空ACL 可继承默认权限(仅针对<目录> -k
setfacl -k /tmp/a ## 把a里面可继承的ACL权限删除 即删除上方方框里面default开头的内容
getfacl /tmp/a ## 查看ACL验证是否清除
2.4 让原来的文件和后面的文件都拥有继承功能
setfacl -R -m u:cl:r-x /tmp/a ## 递归写入,让目录a本身及其以下原有的文件都拥有 r-x 权限
setfacl -R -d -m u:cl:r-x /tmp/a ## 让目录a以下新建的文件或者目录继承 r-x 权限
## 仅对于用户cl来说
三、扩展权限(万不得已使用)
不建议使用,甚至可以阻止root用户进行操作
lsattr 和 chattr
lsattr 查看扩展权限
语法 :lsattr [选项] 文件名
选项一般不用 -a ,-d ,-R 和 ls 里面选项作用一样
lsattr 1.txt ## 主要查看chattr有没有给1.txt文件赋予了什么权限
chattr 设置文件扩展权限
语法: chattr [ (+或-或=)权限 ] 文件名
比如 chattr +a 1.txt
权限[选项] :
a :仅附加<属性>
★ <文件和目录>不能被<删除/重命名/移动>,但是,可以<附加数据>,可复制
★ 针对该<文件>不能创建<硬链接>,针对该<文件和目录>可以创建<符号链接>
i :一成不变<属性>
★ <文件和目录>不能被<修改/删除/重命名/附加数据> root也不能修改内容 ,可复制
★ 针对该<文件>不能创建<硬链接>,针对该<文件和目录>可以创建<符号链接>
还有别的选项
注意:给文件附加或修改内容时候,不能使用vim、vi ,只能使用 echo 进行附加内容
a选项 可用cp不能使用mv
touch 1.txt
echo 111 > 1.txt ## 写入111 成功
chattr +a 1.txt ## a仅允许添加数据,不允许修改数据
echo 222 > 1.txt ## 失败,不能写入222覆盖 root用户也不行
echo 222 >> 1.txt ## 在第二行添加加222成功
可以使用cat 1.txt查看文件内容 还可以使用lsattr 1.txt 查看 发现 a 权限
i选项 可用cp 不能使用mv
touch 1.txt
echo 111 > 1.txt ## 写入111 成功
chattr +i 1.txt ## a仅允许添加数据,不允许修改数据
echo 222 > 1.txt ## 失败,不能写入222覆盖
echo 222 >> 1.txt ## 失败,不能附加222内容
四、su 用户切换
su 命令功能: 切换用户身份
su 命令的使用方法如下
第1种 切换方式:su user01
执行:不完整的 login 用户登录,也称之为 non-login 登录。(登录 了3个配置环境,共五个)
最直接的感知就是:切换之后,当前目录未发生改变。
第2种 切换方式:su -l user01 或者 su - user01
执行完整的 login 用户登录。 (登录了全部5个配置环境)
最直接的感知就是:切换之后,当前目录变成了用户家目录。
五、sudo 用户提权
sudo 命令功能:让当前用户通过临时提权的方式来执行一个特权的命令。
提示:用户能否通过sudo命令来提取,取决于</etc/sudoers 配置文件>的授权配置。
给普通用户提权: (两个办法)
1 或者去/etc/sudoers 文件里面后面写入内容(防止不知道写在哪)
2 或者去 /etc/sudoers.d 目录下创建一个文件,仍会在文件里面写入内容提权 (建议用这个,因为出问题可以直接把创建的文件删掉)
3 visudo 进去文件里面写入内容,是进去 vi /etc/sudoers 文件
/etc/sudoers.d 属于 /etc/sudoers 下被包括的目录 ,在里面创建的文件写内容也可以配置sudo
可使用 cat -n /etc/sudoers 或者 cat /etc/sudoers | grep -vE ‘^\s*(##|# |#\s* ∣ | ∣)’ 查看内容
写入的内容: (全部提权)
user01 ALL = (ALL) NOPASSWD: ALL
%groud01 ALL = (ALL) NOPASSWD: ALL
# 指定的用户或组 主机名 可切换的用户 无需口令 命令 % 代表是用户组不是用户
例子 下面给用户cl 和dj 进行配置sudo 提权功能
1 给 cl 配置 使用sudo时候需要输入密码验证
cd /etc/sudoers.d
vim cl ## 没有cl文件会创建一个cl文件,换别的文件名也可以
切换命令模式输入 cl ALL=(ALL) ALL ## 保存退出即可
2 给dj配置 使用sudo不需要密码验证
cd /etc/sudoers.d
vim dj
切换命令模式输入 dj ALL=(ALL) NOPASSWD: ALL 保存退出即可
3 给cl 配置 sudo 不能使用 rm -rf/* 命令的权限
(部分不提权)
which rm ## 查看rm位置,可知在 /usr/bin/rm 或者显示 /bin/rm
## 因为/bin在/usr目录下,但是 ll / 也可以显示bin
cd /etc/sudoers.d
vim cl
切换命令模式输入 cl ALL=(ALL) NOPASSWD: ALL,!/bin/rm -rf /*
## 注意:!后面没有空格直接接路径,或者路径可写/usr/bin/rm 保存退出
4 给 用户 组 配置权限 以ac组为例子,给ac组成员添加多个管理命令
cd /etc/sudoers.d
vim ac
切换命令模式输入 %ac ALL=(ALL) NOPASSWD: ALL,!/bin/rm -rf /*
## 注意:!后面没有空格直接接路径,或者路径可写/usr/bin/rm 保存退出