· 基本权限和归属
· 附加权限
· ACL策略管理
基本权限与归属关系
- root 用户有最高权限,无视所有权限,可以修改权限
基本权限
-
读取 : 允许查看内容 - read 利用 r 表示
-
写入 :允许修改内容 - write 利用 w 表示
-
可执行 :运行运行和切换 - excute 利用 x 表示
对于文本文件
-
读取权限(r) :cat 、head 、tail 、 less 、 grep
-
写入权限(w) :vim (保存退出) 、> 、>>
-
可执行权限(x) :Shell脚本 、Python脚本
归属关系
-
所有者 : 拥有此文件/目录的用户 - user 利用u表示
-
所属组 : 拥有此文件/目录的组 - group 利用g表示
-
其他用户 : 出所有者、所属组以外的用户 - other 利用o表示
-
nana(所有者) nana组(一般基本组为所属组) 1.txt
执行ls -l.. 命令查看文件权限
执行ls -ld.. 命令查看目录权限
- 输出信息包括7个字段
以 - 开头:表示文本文件
以 d 开头:表示目录
以 l 开头:表示快捷方式或者链接文件
ls -l /etc/passwd
# -rw-r--r--. 1 root root 938 Mar 3 11:53 /etc/passwd
以 - 开头:表示文本文件,rw-所有者具备的权限,r--所属组成员具备的权限,r--其他人的权限
1表示硬链接的个数,第一个root所有者,第二个root所属组
ls -ld /etc/
# drwxr-xr-x. 83 root root 8192 Mar 9 16:20 /etc
以 d 开头:表示目录,83表示etc有83个子目录
ls -l /etc/rc.local
# lrwxrwxrwx. 1 root root 13 Mar 3 19:08 /etc/rc.local -> rc.d/rc.local
以 l 开头:表示快捷方式或者链接文件,1表示硬链接的个数
ls -ld /tmp 默认具备附加权限的目录
修改权限chmod
chmod命令
- 格式: chmod [ugoa] [+-=] [rwx] 文件...
常用命令选项
- -R: 递归修改权限
mkdir /nsd01
ls -ld /nsd01
# drwxr-xr-x 2 root root 6 Mar 9 17:31 /nsd01
chmod u-w /nsd01 修改所有者用户写权限
ls -ld /nsd01
# dr-xr-xr-x 2 root root 6 Mar 9 17:31 /nsd01
chmod u+w /nsd01
ls -ld /nsd01
# drwxr-xr-x 2 root root 6 Mar 9 17:31 /nsd01
chmod g=rwx /nsd01 修改所属组权限
ls -ld /nsd01
# drwxr-xr-x 2 root root 6 Mar 9 17:31 /nsd01
chmod u=rwx,g=rx,o=--- /nsd01 修改所有者,所属组,其他用户权限
ls -ld /nsd01
# drwxr-x--- 2 root root 6 Mar 9 17:31 /nsd01
chmod a=rwx /nsd01 赋予所有人权限
ls -ld/nsd01
# drwxrwxrwx 2 root root 6 Mar 9 17:31 /nsd01
mkdir -p /opt/aaa/bbb/ccc
chmod -R o=--- /opt/aaa 递归设置权限(目录本身以及目录下的所有已存在的数据)
ls -ld /opt/aaa
# drwxr-x--- 3 root root 17 Mar 9 18:16 /opt/aaa
ls -ld /opt/aaa/bbb/
# drwxr-x--- 3 root root 17 Mar 9 18:16 /opt/aaa/bbb
ls -ld /opt/aaa/bbb/ccc
# drwxr-x--- 2 root root 6 Mar 9 18:16 /opt/aaa/bbb/ccc
Linux判断用户具备的权限
一个用户对于不同的数据具备不同的权限
- 1.首先判断,用户对于该数据,处于的身份(角色)
- ACL权限>所有者>所属组>其他人,匹配即停止!!! 匹配了所有者就不会再去匹配所属组了,匹配所属组就不会匹配其他人啦!
id nana 查看用户nana的id
# uid=1000(nana) gid=1000(nana) groups=1000(nana)
ls -ld /etc/passwd 查看数据/etc/passwd的文件权限
# -rw-r--r-- 1 root root 977 Mar 9 17:24 /etc/passwd
对比这两个之间的关系,用户的uid是属于nana,gid是nana组
数据/etc/passwd的所有者是root,所属组是root,两者没有所有者与所属组的关系
- 2.查看相应身份的权限位置,权限内容
su - nana 切换至普通用户nana
head -1 /etc/passwd 查看文件的第一行内容,可读
# root:x:0:0:root:/root:/bin/bash
echo haha >> /etc/passwd 插入haha进/etc/passwd文件,不可写
# -bash: /etc/passwd: Permission denied
由此可分析,用户nana对于/etc/passwd数据只具备读的权限,属于o(其他人)
案例:
其他用户dada对于文本文件/opt/a.txt新增写权限
echo haha > /opt/a.txt
useradd dada
id dada
ls -l /opt/a.txt
su - dada
cat /opt/a.txt
echo lala >> /opt/a.txt
exit
chmod o+w /opt/a.txt
su - dada
echo lala >> /opt/a.txt
cat /opt/a.txt
用户对于目录具备权限
- 读取权限( r ) : 可以查看目录内容
- 可执行权限( x ) : 可以进入切换到该目录下(一位用户能否切换到一个目录只和x执行权限有关)
- 写入权限( w ) : 可以新建、删除、改名目录的内容,对目录本身没有修改的权限(只对目录内的子目录,子文件操作)
一般情况下,r权限和x权限都是一起出现的
如果只给w权限,那么是不生效的
- 如果没有给父目录赋予x权限,那么对父目录下的子文件或者子目录,无论赋予什么权限那么都是没有办法去操作的!!!
设置基本权限
· 权限位的8进制数表示
- r、w 、x 分别对应4、 2 、1,后3组分别求和
mkdir nsd01 目录默认位755
ls -ld /root/nsd01
# drwxr-xr-x 2 root root 6 Mar 10 09:20 nsd01
chmod 700 /root/nsd01 将目录权限改成700
ls -ld /root/nsd01
# drwx------ 2 root root 6 Mar 10 09:20 /root/nsd01
chmod 750 /root/nsd01 将目录权限改成750
ls -ld /root/nsd01
# drwxr-x--- 2 root root 6 Mar 10 09:20 /root/nsd01
touch /root/nsd02.txt 文件默认权限为644
ls -l /root/nsd02.txt
# -rw-r--r-- 1 root root 0 Mar 10 09:28 /root/nsd02.txt
新建文件/目录的默认权限
-
一般文件默认均不给x执行权限
-
其他取决于umask设置
-
目录默认的权限为755,文件的默认权限为644
umask 第一个0为附加权限,777-022=755
# 0022
umask 077 将unmask值设置成007
umask
# 0077
mkdir /root/nsd03
ls -ld /root/nsd03 777-077=700
# drwx------ 2 root root 6 Mar 10 09:37 /root/nsd03
umask 002 将umask值恢复为默认值
修改归属关系
· chown命令
- chown 属主 文件 … (单独修改文件的属主)
- chown 属主 : 属组 文件 … (同时修改文件的属主和属组)
- chown :属组 文件 … (单独修改文件的属组)
· 常用命令选项
- -R :递归修改权限
groupadd K1
useradd nana
useradd dada
mkdir /nsd08
ls -ld /nsd08
#drwxr-xr-x 2 root root 6 Mar 10 09:48 /nsd08
chown nana:K1 /nsd08 修改目录/nsd08的所属组和所有者
ls -ld /nsd08
# drwxr-xr-x 2 nana K1 6 Mar 10 09:48 /nsd08
chown dada /nsd08 单独修改目录/nsd08的所有者
ls -ld /nsd08
# drwxr-xr-x 2 dada K1 6 Mar 10 09:48 /nsd08
chown :root /nsd08 单独修改目录/nsd08的所属组
ls -ld /nsd08
# drwxr-xr-x 2 dada root 6 Mar 10 09:48 /nsd08
mkdir -p /a/b/c/d
chown -R nana /a 递归修改权限,将目录a以及a下的所有子目录所属主全部改成nana
ls -ld /a
# drwxr-xr-x 3 nana root 15 Mar 10 10:02 /a
ls -ld /a/b
# drwxr-xr-x 3 nana root 15 Mar 10 10:02 /a/b
ls -ld /a/b/c
# drwxr-xr-x 3 nana root 15 Mar 10 10:02 /a/b/c
ls -ld /a/b/c/d
# drwxr-xr-x 2 nana root 6 Mar 10 10:02 /a/b/c/d
案例1:
1.利用root的身份新建/tarena目录,并进一步完成下列操作
cd root
mkdir /tarena
2.将/tarena属主设为gelin01,属组设为tmooc组
useradd gelin01
chown gelin01:tmooc /root/tarena
3.使用户gelin01对此目录具有rwx权限,除去所有者于所属组之外的用户对此目录无任何权限
chmod 750 /root/tarena
4.使用户gelin02能进入,查看此目录
useradd gelin02
gpasswd -a gelin02 root 先添加进入父目录的权限
gpasswd -a gelin02 tmooc
5.将gelin01加入tmooc组,将tarena目录的权限设为450,测试gelin01用户能否进入此目录
gpasswd -a gelin01 tmooc
chmod 450 /root/tarena
案例2:
实现lisi用户可以读取/etc/shadow文件内容,有几种办法?
ls -ld /etc/shadow
# ---------- 1 root root 693 Mar 10 11:41 /etc/shadow
1.利用其他人
chmod o+r /etc/shadow
2.利用所属组
chown :lisi /etc/shadow lisi的基础组为lisi,将/etc/shadow的组更换成lisi组
chmod g+r /etc/shadow 更改组成员的r权限
3.利用所有者
chown lisi /etc/shadow
chmod u+r /etc/shadow
4.利用acl策略
setfacl -m u:lisi:r /etc/shadow
附加权限(特殊权限)
除了r、w、x以外的又附加的权限
- Set UID
- Set GID
- Sticky Bit (t权限)
t权限
· 粘滞位 Sticky Bit权限(t权限)
- 占用其他人(other)的x位
- 显示位t或T,却决于其他人是否有x权限(t有x,T没有x)
- 适用于目录,用于限制用户滥用写入权
- 在设置了粘滞位的文件夹下,即使用户有写入权限,也不能删除或改名其他用户文档
mkdir /home/a
chmod 777 /home/a
ls -ld /home/a
# drwxrwxrwx 2 root root 6 Mar 10 12:38 /home/a
chmod o+t /home/a
ls -ld /home/a 其他用户有切入权限的时候,显示为t
# drwxrwxrwt 2 root root 6 Mar 10 12:38 /home/a
chmod o-x /home/a
ls -ld /home/a 其他用户没有切入权限的时候,显示为T
# drwxrwxrwT 2 root root 6 Mar 10 12:38 /home/a
ehco abc > /home/a/a.txt
useradd dudu
su - dudu
ehco 123 > /home/b.txt
cd /home/a
cat a.txt 有查看权限
mv a.txt z.txt 没有改名权限
echo 123 >> a.txt 没有修改文本内容权限
rm -rf a.txt 没有删除权限
可以对自己的写入的文件行使w权力
echo abc >> b.txt
mv b.txt z.txt
rm -rf z.txt
ls -ld /tmp 根下的目录tmp目录默认自带t权限的
# drwxrwxrwt. 21 root root 4096 Mar 10 14:38 /tmp
Set GID权限
· SGID权限
- 占用属组(group)的x位
- 显示为s或S,取决于属组是否有x权限
- 对目录有效
- 在一个具有SGID权限的目录下,新建的文档会自动继承此目录的属组身份
命令演示:
mkdir /a
chown :dudu /a
ls -ld /a
# drwxr-xr-x 2 root dudu 6 Mar 10 15:22 /a
chmod g+s /a 赋予Set GID权限
ls -ld /a
# drwxr-sr-x 2 root dudu 6 Mar 10 15:22 /a
touch /a/a.txt 在a目录下的创建a.txt文件,属组继承了父目录a的属组dudu
ls -l /a/a.txt
# -rw-r--r-- 1 root dudu 0 Mar 10 15:23 /a/a.txt
mkdir /a/a1 在a目录下的创建a1自目录,属组继承了父目录a的属组dudu
ls -ld /a/a1
# drwxr-sr-x 2 root dudu 6 Mar 10 15:24 /a/a1
Set UID权限(了解即可)
· SUID权限
- 占用属主(user)的x位
- 显示为s或S,取决于属组是否有x权限
- 仅对可执行的程序有意义
- 当其他用户执行带SUID标记的程序时,具有此程序属主的身份和相应权限
which mkdir 查看mkdir的执行文件
# /usr/bin/mkdir
/usr/bin/mkdir /opt/test01
ls /opt/
# test01
cp /usr/bin/mkdir /usr/bin/xixidir
ls -l /usr/bin/xixidir
# -rwxr-xr-x 1 root root 79768 Mar 10 18:17 /usr/bin/xixidir
chmod u+s /usr/bin/xixidir 赋予执行文件Set UID权限
ls -l /usr/bin/xixidir
# -rwsr-xr-x 1 root root 79768 Mar 10 18:17 /usr/bin/xixidir
su - nana
/usr/bin/mkdir a1 用原执行文件创建目录a1
/usr/bin/xixidir a2 用具有Set UID权限的执行文件创建目录a2
ls -l
# drwxrwxr-x 2 nana nana 6 Mar 10 18:22 a1
# drwxrwxr-x 2 root nana 6 Mar 10 18:23 a2
由此可见,我们在用赋予了Set UID权限的执行文件创建目录等同于root身份在创建目录
我们普通用户是无法在根下创建目录的,但是这个时候我们用Set UID权限的执行文件可以以root的身份在根下创建目录
/usr/bin/xixidir /abc
ls /
# 成功创建了子目录abc
ACL策略管理
acl策略的作用
· 文档归属的局限性
- 任何人只属于三种角色: 属主 属组 其他人
- 无法实现更精细的控制
· acl访问策略 - 能够对个别用户、个别组设置独立的权限
- 大多数挂载的EXIT3/4 、XFS文件系统默认已支持
定义ACL控制策略
setfacl命令
- 格式 : setfacl [选项] u:用户名:权限 文件...
setfacl [选项] g:组名:权限 文件...
常用命令选择
-m : 定义一条ACL策略
-x : 清除指定的ACL策略
-b : 清除所有已经设置的ACL策略
-R : 递归设置ACL策略
getfacl 文件路径 查看acl策略配置文件
mkdir /nsd01 创建目录nsd01
chmod 770 /nsd01 设置nsd01的目录权限为770
ls -ld /nsd01 查看目录权限
# drwxrwx--- 2 root root 6 Mar 10 16:12 /nsd01
su - dudu 切换用户到普通用户dudu
cd /nsd01 普通用户切换至/nsd01目录上,other用户没有办法切换
# -bash: cd: /nsd01: Permission denied
exit
setfacl -m u:dudu:rx /nsd01 给目录nsd01定义一条acl权限,用户名:dudu:rx权限
getfacl /nsd01 查看/nsd01权限
getfacl: Removing leading '/' from absolute path names
# file: nsd01
# owner: root
# group: root
user::rwx
user:dudu:r-x
group::rwx
mask::rwx
other::---
su -dudu 切换至普通用户dudu
cd /nsd01 普通用户对/nsd具备读权限和切换权限
pwd
# /nsd01
将某个用户拉黑(制作黑名单)
setfacl -m u:xixi:--- /nsd01
getfacl /nsd01
getfacl: Removing leading '/' from absolute path names
# file: nsd01
# owner: root
# group: root
user::rwx
user:dudu:r-x
user:xixi:---
group::rwx
mask::rwx
other::---
因为ACL的权限的优先级是最高的,这样单独设置一个用户xixi,那么用户xixi对于目录/nsd01不具备任何权限
ACL练习:
mkdir /nsd18
setfacl -m u:dudu:rwx /nsd18
setfacl -m u:dada:--- /nsd18
setfacl -m u:nana:rx /nsd18
getfacl /nsd18 查看目录/nsd18下的ACL策略配置信息
setfacl -x u:nana /nsd18 删除指定的ACL策略信息
setfacl -b /nsd18 清空所有的ACL策略信息
递归设置ACL策略
针对已经存在的数据来进行递归设置,新增的数据是不会有继承关系的
mkdir -p /opt/a/b
setfacl -Rm u:nana:rx /opt/a 在目录a下创建递归的ACL策略
getfacl /opt/a/b 查看目录a下的子目录b是否也赋予了用户nana的rx权限
# ACL策略里面存在 user:nana:r-x
mkdir /opt/a/b/c 创建新的子目录a/b/c
getfacl /opt/a/b/c 查看新建子目录c下是否继承了用户nana的rx权限
# ACL策略里面不存在 user:nana:r-x 新增的数据是不会有继承关系的