云计算 Linux Rocky day07【chmod、chown、ACL、Sticky Bit、Set GID、Set UID、文件目录的默认权限、手动建立用户家目录、递归设置权限错误】
1.基本权限与归属
读取:允许查看内容-read r
写入:允许修改内容-write w
可执行:允许运行和切换-excute x
对于文本文件:
r读取权限:cat、less、grep、head、tail
w写入权限:vim、> 、 >>
x可执行权限:Shell与Python
对于目录:
r读取权限:ls命令查看目录内容
w写入权限:能够创建、删除、修改等目录的内容
x 执行权限:能够cd切换到此目录下(进入此目录)
归属关系
所有者(属主):拥有此文件/目录的用户-user u
所属组(属组):拥有此文件/目录的组-group g
其他人:除所有者、所属组以外的用户-other o
zhangsan zhangsan 1.txt
所有者、所属组默认情况只有一个
2.查看数据权限
执行 ls -l或者ls -ld 命令查看
以-开头:文本文件
以d开头:目录
以l开头:快捷方式
[root@localhost ~]# ls -ld /etc/
[root@localhost ~]# ls -l /etc/passwd
[root@localhost ~]# ls -ld /root
[root@localhost ~]# ls -ld /tmp #有附加权限
[root@localhost ~]# ls -l /etc/shadow
[root@localhost ~]# useradd zhangsan
[root@localhost ~]# ls -ld /home/zhangsan
Linux中判断用户具备的权限:
- 查看用户,对于该数据所处的身份
- 查看相应身份的权限位
3.修改数据的权限chmod
•chmod命令
格式:chmod [ugoa] [±=][rwx] 文件…
•常用命令选项
-R:递归修改权限
[root@localhost ~]# mkdir /nsd10
[root@localhost ~]# ls -ld /nsd10
[root@localhost ~]# chmod u-w /nsd10 #所有者去掉w权限
[root@localhost ~]# ls -ld /nsd10
[root@localhost ~]# chmod u+w /nsd10 #所有者加上w权限
[root@localhost ~]# ls -ld /nsd10
[root@localhost ~]# chmod g+w /nsd10 #所属组加上w权限
[root@localhost ~]# ls -ld /nsd10
[root@localhost ~]# chmod g=r /nsd10 #所属组重新定义权限
[root@localhost ~]# ls -ld /nsd10
[root@localhost ~]# chmod a=rwx /nsd10 #a表示所有人
[root@localhost ~]# ls -ld /nsd10
[root@localhost ~]# chmod u=---,g=rx,o=rwx /nsd10
[root@localhost ~]# ls -ld /nsd10
-R:递归修改权限
[root@localhost ~]# mkdir -p /opt/aa/bb/cc
[root@localhost ~]# chmod -R a=rwx /opt/aa
[root@localhost ~]# ls -ld /opt/aa
[root@localhost ~]# ls -ld /opt/aa/bb
[root@localhost ~]# ls -ld /opt/aa/bb/cc
案例:设置基本权限
1)以root身份新建/dir目录,在此目录下新建readme.txt文件
[root@localhost ~]# mkdir /dir
[root@localhost ~]# echo 123456 > /dir/readme.txt
[root@localhost ~]# cat /dir/readme.txt
2)使用户zhangsan能够修改readme.txt文件内容
[root@localhost ~]# chmod o+w /dir/readme.txt
3)使用户zhangsan不可以修改readme.txt文件内容
[root@localhost ~]# chmod o-w /dir/readme.txt
4)使用户zhangsan能够在此目录下创建/删除子目录
[root@localhost ~]# chmod o+w /dir/
5)调整此目录的权限,使任何用户都不能进入,然后测试用户zhangsan是否还能查看readme.txt内容(测试结果是不能,对父目录没有权限)
[root@localhost ~]# chmod a-x /dir/
6)为此目录及其下所有文档设置权限 rwxr-x---
[root@localhost ~]# chmod -R u=rwx,g=rx,o=--- /dir
权限利用数字方式表示
• 权限位的8进制数表示
– r、w、x分别对应4、2、1,后3组分别求和
分组: User权限 Group权限 Other权限
字符: r w x r - x r - x
数字: 4 2 1 4 0 1 4 0 1
求和: 7 5 5
r 4
w 2
x 1
u rwx 4+2+1 7
g r-x 4+1 5
o r-x 4+1 5
755
u rwx 421 7
g rx 401 5
o rx 401 5
[root@localhost ~]# mkdir /nsd14
[root@localhost ~]# ls -ld /nsd14
[root@localhost ~]# chmod 700 /nsd14
[root@localhost ~]# ls -ld /nsd14
[root@localhost ~]# chmod 007 /nsd14
[root@localhost ~]# ls -ld /nsd14
[root@localhost ~]# chmod 750 /nsd14
[root@localhost ~]# ls -ld /nsd14
[root@localhost ~]# chmod 755 /nsd14
[root@localhost ~]# ls -ld /nsd14
4.chown修改归属关系
•chown命令
–chown 属主 文件…
–chown 属主:属组 文件…
–chown :属组 文件…
[root@localhost ~]# mkdir /nsd15
[root@localhost ~]# ls -ld /nsd15
[root@localhost ~]# groupadd tmooc #创建组tmooc
[root@localhost ~]# useradd lisi #创建用户lisi
[root@localhost ~]# chown lisi:tmooc /nsd15 #修改所有者与所属组
[root@localhost ~]# ls -ld /nsd15
[root@localhost ~]# chown zhangsan /nsd15 #仅修改所有者
[root@localhost ~]# ls -ld /nsd15
[root@localhost ~]# chown :root /nsd15 #仅修改所属组
[root@localhost ~]# ls -ld /nsd15
常用命令选项
-R:递归修改归属关系
[root@localhost ~]# mkdir -p /opt/aa/bb/cc
[root@localhost ~]# chown -R zhangsan /opt/aa #递归修改归属关系
[root@localhost ~]# ls -ld /opt/aa
[root@localhost ~]# ls -ld /opt/aa/bb
[root@localhost ~]# ls -ld /opt/aa/bb/cc
[root@localhost ~]# chown -R lisi:tmooc /opt/aa
[root@localhost ~]# ls -ld /opt/aa
[root@localhost ~]# ls -ld /opt/aa/bb
[root@localhost ~]# ls -ld /opt/aa/bb/cc
Linux中判断用户具备的权限:
1.查看用户,对于该数据所处的身份,
顺序所有者>所属组>其他人
,原则是匹配即停止
2.查看相应身份的权限位
例如:
1.所有人不能进入
2.牛老师可以进入
案例2:归属关系练习
1)利用root的身份新建/tarena目录,并进一步完成下列操作
[root@localhost ~]# mkdir /tarena
2)将/tarena属主设为gelin01,属组设为tmooc组
[root@localhost ~]# useradd gelin01
[root@localhost ~]# groupadd tmooc
[root@localhost ~]# chown gelin01:tmooc /tarena
3)使用户gelin01对此目录具有rwx权限,除去所有者与所属组之外的用户对此目录无任何权限
[root@localhost ~]# chmod o=--- /tarena
4)使用户gelin02能进入、查看此目录内容
[root@localhost ~]# useradd gelin02
[root@localhost ~]# gpasswd -a gelin02 tmooc
5)将gelin01加入tmooc组,将/tarena目录的权限设为r–r-x—,测试gelin01用户能否进入此目录(匹配立即停止原则,不能进入)
[root@localhost ~]# gpasswd -a gelin01 tmooc
[root@localhost ~]# chmod u=r,g=rx /tarena
5.ACL策略管理
•文档归属的局限性:
–任何人只属于三种角色:属主、属组、其他人
–针对特殊的人实现更精细的控制
•acl访问策略作用:
–能够对个别用户、个别组设置独立的权限
•setfacl命令
–格式:
setfacl [选项] u:用户名:权限 文件...
setfacl [选项] g:组名:权限 文件...
•常用命令选项
-m
:修改ACL策略
-x
:清除指定的ACL策略
-b
:清除所有已设置的ACL策略
-R
:递归设置ACL策略
[root@localhost ~]# mkdir /nsd19
[root@localhost ~]# chmod 770 /nsd19
[root@localhost ~]# ls -ld /nsd19
[root@localhost ~]# useradd dc
[root@localhost ~]# su - dc
[dc@localhost ~]$ cd /nsd19
-bash: cd: /nsd19: 权限不够
[dc@localhost ~]$ exit
[root@localhost ~]# setfacl -m u:dc:rx /nsd19 #单独赋予dc用户权限
[root@localhost ~]# getfacl /nsd19 #查看ACL策略
[root@localhost ~]# su - dc
[dc@localhost ~]$ cd /nsd19
[dc@localhost ~]$ pwd
[dc@localhost ~]$ exit
Linux中判断用户具备的权限:
1.首先查看该用户或者组是否有ACL策略
2.查看用户,对于该数据所处的身份,顺序所有者>所属组>其他人,原则是匹配及停止
3.查看相应身份的权限位
ACL命令的练习:
[root@localhost ~]# mkdir /nsd22
[root@localhost ~]# setfacl -m u:dc:rx /nsd22
[root@localhost ~]# setfacl -m u:zhangsan:rwx /nsd22
[root@localhost ~]# setfacl -m u:lisi:rx /nsd22
[root@localhost ~]# setfacl -m u:gelin01:rwx /nsd22
[root@localhost ~]# getfacl /nsd22
[root@localhost ~]# setfacl -x u:zhangsan /nsd22 #删除指定用户ACL
[root@localhost ~]# getfacl /nsd22
[root@localhost ~]# setfacl -x u:dc /nsd22 #删除指定用户ACL
[root@localhost ~]# getfacl /nsd22
[root@localhost ~]# setfacl -b /nsd22 #清除目录所有ACL策略
[root@localhost ~]# getfacl /nsd22
ACL策略-黑名单的使用(单独拒绝某些用户)
[root@localhost ~]# mkdir /home/public
[root@localhost ~]# chmod 777 /home/public
[root@localhost ~]# setfacl -m u:lisi:--- /home/public
[root@localhost ~]# getfacl /home/public
su - lisi
cd/home/public 权限不够
ls /home/public 无法打开目录,权限不够
-R:递归设置ACL策略
[root@localhost ~]# setfacl -Rm u:dc:rwx /opt/aa
[root@localhost ~]# getfacl /opt/aa
[root@localhost ~]# getfacl /opt/aa/bb
ACL常见问题
给组设置ACL
6.附加权限(特殊权限)(3种)
6.1 第1种:•粘滞位,Sticky Bit 权限
–占用其他人(Other)的 x 位
–显示为 t 或 T,取决于其他人是否有 x 权限。t:有执行权限,T:没有执行权限。
–适用于目录,用来限制用户滥用写入权
–在设置了t权限的目录下,即使用户有写入权限,也不能删除或改名其他用户文档
[root@localhost ~]# mkdir /nsd26
[root@localhost ~]# chmod 777 /nsd26
[root@localhost ~]# ls -ld /nsd26
[root@localhost ~]# chmod o+t /nsd26
[root@localhost ~]# ls -ld /nsd26
su - zhangsan
cd /nsd26
touch zhangsan.txt
su - lisi
cd /nsd26
touch lisi.txt
su - dc
cd /nsd26
touch dc.txt
rm -rf zhangsan.txt #无法删除,不允许的操作
mv dc.txt a.txt# 无法移动:不允许的操作
6.2 第2种:•Set GID权限(SGID权限)
–占用属组(Group)的 x 位
–显示为 s 或 S,取决于属组是否有 x 权限
–对目录有效
–在一个具有SGID权限的目录下,新建的文档会自动继承
父目录的属组身份
[root@localhost ~]# mkdir /nsd18
[root@localhost ~]# chown :tmooc /nsd18 #修改所属组
[root@localhost ~]# ls -ld /nsd18
[root@localhost ~]# chmod g+s /nsd18 #赋予SGID特殊权限
[root@localhost ~]# ls -ld /nsd18
[root@localhost ~]# mkdir /nsd18/abc01
[root@localhost ~]# ls -ld /nsd18/abc01
[root@localhost ~]# mkdir /nsd18/abc02
[root@localhost ~]# ls -ld /nsd18/abc02
[root@localhost ~]# touch /nsd18/1.txt
[root@localhost ~]# ls -ld /nsd18/1.txt
6.3 第3种:附加权限Set UID(SUID)权限(了解)
占用属主(User)的 x 位
显示为 s 或 S,取决于属主是否有 x 权限
仅对可执行的程序有意义
当其他用户执行带SUID标记的程序时,具有此程序属主的身份和相应权限
[root@localhost ~]# which mkdir
[root@localhost ~]# /usr/bin/mkdir /opt/abc01
[root@localhost ~]# ls /opt/
[root@localhost ~]# cp /usr/bin/mkdir /opt/hahadir
[root@localhost ~]# ls -l /opt/hahadir
[root@localhost ~]# /opt/hahadir /opt/abc02
[root@localhost ~]# ls /opt/
[root@localhost ~]# chmod u+s /opt/hahadir
[root@localhost ~]# ls -l /opt/hahadir
[root@localhost ~]# su - zhangsan
[zhangsan@localhost ~]$ mkdir zs01
[zhangsan@localhost ~]$ ls -l
[zhangsan@localhost ~]$ /opt/hahadir zs02
[zhangsan@localhost ~]$ ls -l
创建目录时,指定目录的权限
[root@localhost ~]# mkdir -m 700 /opt/cbd03
[root@localhost ~]# ls -ld /opt/cbd03
[root@localhost ~]# mkdir -m 777 /opt/cbd04
[root@localhost ~]# ls -ld /opt/cbd04
6.4 权限利用数字的方式表示
基本权限:
利用数字4表示读取权限®
利用数字2表示写入权限(w)
利用数字1表示执行权限(x)
附加权限:了解
利用数字4表示suid
利用数字2表示sgid
利用数字1表示t
7.文件/目录的默认权限
• 新建文件/目录的默认权限
– 一般文件默认均不给 x 执行权限
– 其他取决于 umask(权限掩码) 设置
– 新建目录默认权限为755
– 新建文件默认权限为644
[root@localhost ~]# umask
0022
[root@localhost ~]# umask -S #显示新建目录的默认权限
u=rwx,g=rx,o=rx
[root@nb ~]# mkdir -m 777 /nsd26 #-m无视umask值创建数据指定数据的权限
[root@nb ~]# ls -ld /nsd26
实现natasha用户新建数据,目录权限为700文件为600
[root@nb ~]# useradd natasha
[root@nb ~]# vim /home/natasha/.bashrc #修改家目录配置文件
...
umask 077 #新增配置,指定权限掩码值
...
[root@nb ~]# su - natasha
[natasha@nb ~]$ umask
0077
[natasha@nb ~]$ mkdir abc
[natasha@nb ~]$ ls -ld abc
drwx------. 2 natasha natasha 6 2月 23 17:27 abc
[natasha@nb ~]$ exit
8.手动建立用户家目录
/etc/skel是新建用户时,会以此目录作为模板建立用户家目录
]# useradd harry
]# rm -rf /home/harry
]# cp -r /etc/skel /home/harry
]# chown -R harry:harry /home/harry
]# ls -lA /home/harry
]# su - harry
[harry@localhost ~]$ pwd
[harry@localhost ~]$ exit
请问实现lisi用户可以读取/etc/shadow文件内容,您有几种办法?(至少写出三种以上)
- 利用其他人身份
chmod o+r /etc/shadow
- 利用所属组身份
chown :lisi /etc/shadow
chmod g+r /etc/shadow
- 利用所有者身份
chown lisi /etc/shadow
chmod u+r /etc/shadow
- 利用ACL策略
setfacl -m u:lisi:r /etc/shadow
9.常见故障:递归设置权限错误
[root@nb ~]# mkdir /nsd26
[root@nb ~]# mkdir /nsd26/haha
[root@nb ~]# mkdir /nsd26/xixi
[root@nb ~]# touch /nsd26/1.txt
[root@nb ~]# touch /nsd26/2.txt
[root@nb ~]# chmod -R 000 /nsd26
[root@nb ~]# ls -ld /nsd26
[root@nb ~]# ls -l /nsd26
[root@nb ~]# find /nsd26 -type d -exec chmod 755 {} \;
[root@nb ~]# ls -l /nsd26
[root@nb ~]# find /nsd26 -type f -exec chmod 644 {} \;
[root@nb ~]# ls -l /nsd26
10.课后练习
练习3:权限设置(参考答案)
1、 创建文件夹/data/test,设置目录的访问权限,使所有者和所属组具备读写执行的权限;其他人无任何权限。
[root@A ~]# mkdir -p /data/test
[root@A ~]# chmod 770 /data/test
2、 递归修改文件夹/data/test的归属使所有者为zhangsan,所属组为tarena。
[root@A ~]# chown -R zhangsan:tarena /data/test
[root@A ~]# ls -ld /data/test
3、 请实现在test目录下,新建的所有子文件或子目录的所属组都会是tarena。
[root@A ~]# chmod g+s /data/test
[root@A ~]# mkdir /data/test/abc
[root@A ~]# ls -ld /data/test/abc
4、为lisi创建ACL访问权限,使得lisi可以查看/etc/shadow文件
[root@A ~]# setfacl -m u:lisi:r /etc/shadow
[root@A ~]# getfacl /etc/shadow