1.Linux 权限管控概述
访问⼀个⽂件或者⼀个⽬录是否应该被允许
1.系统权限
2.服务权限
3.防⽕墙firewall权限
4.SElinux权限
系统权限:
普通系统权限
特殊系统权限
默认系统权限
特殊ACL权限
⽂件权限
r - read 读权限
w - write 写权限
x - exec 执⾏权限
⽬录权限
r - read 读权限
w - write 写权限
x - exec 执⾏权限
2. Linux 权限修改
# chmod
chmod [修改的权限] [⽂件/⽬录]
u 修改⽂件拥有者权限
g 修改⽂件所属组权限
o 修改⽂件其他⼈权限
+ 添加某个权限 - 删除某个权限 = 赋予某个权限
#为⽂件拥有者添加执⾏权限
[u01@localhost ~]$ chmod u+x 123.txt
[u01@localhost ~]$ ls -l
总用量 0
-rwxrw-r--. 1 u01 u01 0 8月 8 10:36 123.txt
#为⽂件所属组删除掉写权限
[u01@localhost ~]$ chmod g-w 123.txt
[u01@localhost ~]$ ll
总用量 0
-rwxr--r--. 1 u01 u01 0 8月 8 10:36 123.txt
#为⽂件其他⼈删除掉读权限
[u01@localhost ~]$ chmod o-r 123.txt
[u01@localhost ~]$ ls -l
总用量 0
-rwxrw----. 1 u01 u01 0 8月 8 10:36 123.txt
#赋予⽂件所属组 读写权限
[u01@localhost ~]$ chmod g=rw 123.txt
[u01@localhost ~]$ ls -l
总用量 0
-rwxrw-r--. 1 u01 u01 0 8月 8 10:36 123.txt
#组合操作
[u01@localhost ~]$ chmod u-x g-w o+r 123.txt #逗号
chmod: 无法访问"g-w": 没有那个文件或目录
chmod: 无法访问"o+r": 没有那个文件或目录
[u01@localhost ~]$ chmod u-x,g-w,o+r 123.txt
[u01@localhost ~]$ ll
总用量 0
-rw-r--r--. 1 u01 u01 0 8月 8 10:36 123.txt
[u01@localhost ~]$ chmod u=rwx,g=rw,o=rw 123.txt
[u01@localhost ~]$ ll
总用量 0
-rwxrw-rw-. 1 u01 u01 0 8月 8 10:36 123.txt
#在linux 被执⾏⽂件通常是 : 命令⽂件 / 脚本⽂件 / 程序
#脚本⽂件
shell xxx.sh
python xxx.py
#普通⽂件执⾏ 使用 绝对路径或相对路径
3. Linux 目录权限
文件权限
r - read 读权限 - 查看该⽂件
w - write 写权限 - 对⽂件进行修改-添加/删除
x - exec 执⾏权限 - 执行文件中的代码信息
目录权限
r - read 读权限 - 可以查看该目录下的⽂件
w - write 写权限 - 对目录进行修改-添加/删除 -可以在⽬录下创建⽂件/删除⽂件
x - exec 执⾏权限 - 可以进⼊该⽬录
一个文件/目录 只有文件/目录的所有者和root可以修改文件/目录的权限.
⼀个⽬录如果正常对外开放,⾄少要有读和执⾏权限rx
4. Linux 权限掩码
#2 默认权限
# 考虑到系统安全性, linux在创建普通⽂件时,不应该给予⽂件执⾏权限 -----默认权限 0666 #第一个0 表示特殊权限,第2-4组 - 拥有者/所属组/其他⼈ - 默认权限
# 默认创建⽬录具有执⾏权限 , 默认权限 0777 #第一个0 表示特殊权限,第2-4组 - 拥有者/所属组/其他⼈ - 默认权限
#权限掩码
umask ⼀个⽤户创建⽂件/或者⽬录时 , ⽂件/⽬录的权限需要根据默认权限剪掉umask的权限
#3 修改umask 权限掩码
5. Linux 变更拥有者与所属组
chown (change owner)
chown [拥有者⽤户名称] ⽂件/⽬录名称
#修改文件/目录拥有者
-rw-r--r--. 1 root root 0 8月 8 13:56 123.txt
drwxr-xr-x. 2 root root 6 8月 8 13:58 rr
[root@localhost ~]# chown u01 123.txt
[root@localhost ~]# ll
总用量 0
-rw-r--r--. 1 u01 root 0 8月 8 13:56 123.txt #123.txt文件拥有者已改变
drwxr-xr-x. 2 root root 6 8月 8 13:58 rr
#修改文件/目录 拥有者:所属组
[root@localhost ~]# chown u02:u01 rr #文件拥有者和所属组 中间用":"隔开
[root@localhost ~]# ll
总用量 0
-rw-r--r--. 1 u01 root 0 8月 8 13:56 123.txt
drwxr-xr-x. 2 u02 u01 6 8月 8 13:58 rr # rr目录的拥有者和所属组已改变
#修改⽂件/⽬录 所属组
[root@localhost ~]# chown :u01 123.txt
[root@localhost ~]# ll
总用量 0
-rw-r--r--. 1 u01 u01 0 8月 8 13:56 123.txt #文件拥有者未变,所属组已改变
drwxr-xr-x. 2 u02 u01 6 8月 8 13:58 rr
# -c 在修改时显示变更信息
[root@localhost ~]# chown -c u02 123.txt
changed ownership of "123.txt" from u01 to u02 #变更拥有者过程显示
[root@localhost ~]# ll
总用量 0
-rw-r--r--. 1 u02 u01 0 8月 8 13:56 123.txt
drwxr-xr-x. 2 u02 u01 6 8月 8 13:58 rr
[root@localhost ~]# chown -c :u02 rr
changed ownership of "rr" from u02:u01 to :u02 #变更所属组过程显示
[root@localhost ~]# chown -c u02:u01 123.txt
[root@localhost ~]# #未变更则过程不显示,也没有过程显示
# -v 持续显示变更信息
[root@localhost ~]# chown -v u02:u01 123.txt
"123.txt" 的所有者已保留为u02:u01 #无论是否发送变更都显示变更信息
[root@localhost ~]# chown -v u02:u02 123.txt
changed ownership of "123.txt" from u02:u01 to u02:u02 #无论是否发送变更都显示变更信息
# 递归属性修改 -R
[root@localhost ~]# chown root:root rr
[root@localhost ~]# ll
总用量 4
-rw-r--r--. 1 u02 u02 42 8月 8 14:14 123.txt
drwxr-xr-x. 2 root root 81 8月 8 14:16 rr
[root@localhost ~]# ll ./rr
总用量 0
-rw-r--r--. 1 root root 0 8月 8 14:16 a01.mp3
-rw-r--r--. 1 root root 0 8月 8 14:16 a02.mp3
-rw-r--r--. 1 root root 0 8月 8 14:16 a03.mp3
-rw-r--r--. 1 root root 0 8月 8 14:16 a04.mp3
-rw-r--r--. 1 root root 0 8月 8 14:16 a05.mp3
[root@localhost ~]# chown -R u01:u01 rr #-R 目录拥有者和所属组修改,递归目录下文件也修改
[root@localhost ~]# ll ./rr/
总用量 0
-rw-r--r--. 1 u01 u01 0 8月 8 14:16 a01.mp3
-rw-r--r--. 1 u01 u01 0 8月 8 14:16 a02.mp3
-rw-r--r--. 1 u01 u01 0 8月 8 14:16 a03.mp3
-rw-r--r--. 1 u01 u01 0 8月 8 14:16 a04.mp3
-rw-r--r--. 1 u01 u01 0 8月 8 14:16 a05.mp3
# chgrp
chgrp [所属组的名称] 文件/目录名称
[root@localhost ~]# chgrp -v u01 123.txt #用法和chown一样,可以-c, -v, 只是 只能改组
changed group of "123.txt" from u02 to u01
[root@localhost ~]# ll
总用量 4
-rw-r--r--. 1 u02 u01 42 8月 8 14:14 123.txt
drwxr-xr-x. 2 u01 u01 81 8月 8 14:16 rr
[root@localhost ~]# chgrp -v -R root rr
changed group of "rr/a01.mp3" from u01 to root
changed group of "rr/a02.mp3" from u01 to root
changed group of "rr/a03.mp3" from u01 to root
changed group of "rr/a04.mp3" from u01 to root
changed group of "rr/a05.mp3" from u01 to root
changed group of "rr" from u01 to root
6. Linux 特殊权限
1.特殊权限 - set-uid
#0
root权限的特殊性
[root@localhost ~]# ll /etc/shadow
----------. 1 root root 1561 8月 8 11:12 /etc/shadow #没有任何权限,但root用户可以cat
[u01@localhost ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够 #u01用户不能cat
[root@localhost ~]# touch 1212
[root@localhost ~]# echo "123456789098765432" >> 1212
[root@localhost ~]# chmod 000 1212
[root@localhost ~]# cat 1212
123456789098765432
[u01@localhost ~]$ touch 111
[u01@localhost ~]$ echo "123123456789" >> 111
[u01@localhost ~]$ chmod 000 111
[u01@localhost ~]$ cat 111
cat: 111: 权限不够 #root可以看,但u01用户则不可以看
[root@localhost ~]# cat /etc/shadow | grep u01
u01:!!:20308:0:99999:7:::
[root@localhost ~]# echo "666" | passwd --stdin u01
更改用户 u01 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# cat /etc/shadow | grep u01
u01:$6$S649oe0s$jt/Uz6oLagYc/13Sxg9BHxQm9OyM8wdHDE/17J.D3dQjx/4nM/xwYBrCl8Bllrss8UnN/SWtTTjNN.mj545HD0:20308:0:99999:7:::
#命令是⼀种二进制⽂件(01010101) 未经过操作系统编码-编译的⽂件 (A/B/1) , 可以直接执⾏的⽂件
[root@localhost ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
1.Set - uid
#* 只针对二进制文件有效 , 针对普通⽂件,目录无效
#* 如果二进制文件中如果设置了set uid , 则表示其他人在执行该文件时会临时获取⽂件拥有者权限
#* 如果二进制文件中如果设置了set uid ,在⽂件拥有者的执行权限位置显示(s 具有执⾏权限 /S 无执行权 限)
2.特殊权限 - set-gid
2. Set - gid
#*针对⽬录⽣效
# 通常会和强制冒险位
#* 如果⽬录⽂件中如果设置了set gid ,在⽂件所属组的执⾏权限位置显示(s 具有执⾏权限 /S ⽆执⾏权 限)
[root@localhost ~]# cd /tmp/
[root@localhost tmp]# ll
总用量 4
drwxr-xr-x. 2 root root 6 8月 8 11:18 111
[root@localhost tmp]# chmod g+s 111
[root@localhost tmp]# ll
总用量 4
drwxr-sr-x. 2 root root 6 8月 8 11:18 111
特殊权限 - set-sTicky
3 . set - sTicky 强制冒险位(粘滞位)
# 通常会和 Set - gid 联合使⽤
# 如果⼀个⽬录被设置了强制冒险位,该⽬录下的⽂件只有⽂件拥有者(和root)可以删除,其他⽤户⽆法删除
#* 如果⽬录⽂件中如果设置了set - sTicky ,在⽂件其他⼈的执⾏权限位置显示(t 具有执⾏权限 /T ⽆执 ⾏权限)
[root@localhost tmp]# ll
drwxr-xr-x. 2 root root 48 8月 14 18:57 r
[root@localhost r]# ll
-rw-r--r--. 1 root root 0 8月 14 18:57 test01
-rw-r--r--. 1 root root 0 8月 14 18:57 test02
-rw-r--r--. 1 root root 0 8月 14 18:57 test03
[u01@localhost r]$ touch u_test
touch: 无法创建"u_test": 权限不够
[root@localhost tmp]# chmod o+w r
drwxrwsrwx. 2 root root 48 8月 14 19:03 r
[u01@localhost r]$ touch u_test
-rw-r--r--. 1 root root 0 8月 14 18:57 test01
-rw-r--r--. 1 root root 0 8月 14 18:57 test02
-rw-r--r--. 1 root root 0 8月 14 18:57 test03
-rw-rw-r--. 1 u01 root 0 8月 14 19:01 u_test
[u02@localhost r]$ rm -rf u_test #u01创建的文件被u02 删除了
-rw-r--r--. 1 root root 0 8月 14 18:57 test01
-rw-r--r--. 1 root root 0 8月 14 18:57 test02
-rw-r--r--. 1 root root 0 8月 14 18:57 test03
[u01@localhost r]$ touch u_test02 #u01重新创建文件
-rw-r--r--. 1 root root 0 8月 14 18:57 test01
-rw-r--r--. 1 root root 0 8月 14 18:57 test02
-rw-r--r--. 1 root root 0 8月 14 18:57 test03
-rw-rw-r--. 1 u01 root 0 8月 14 19:11 u_test02
[root@localhost tmp]# chmod o+t r #root设置set - sTicky
drwxrwsrwt. 2 root root 64 8月 14 19:11 r #小写t
[u02@localhost r]$ rm -rf u_test02
rm: 无法删除"u_test02": 不允许的操作 #u02 删除失败(无权限)
[root@localhost tmp]# chmod o-x r #去除x权限 ,不给o x权限其他用户进不来
drwxrwsrwT. 2 root root 64 8月 14 19:11 r #大写T
[u01@localhost tmp]$ cd ./r/
bash: cd: ./r/: 权限不够
4. 汇总
[root@localhost r]# chmod 0777 test01
-rwxrwxrwx. 1 root root 0 8月 14 18:57 test01
-rw-r--r--. 1 root root 0 8月 14 18:57 test02
-rw-r--r--. 1 root root 0 8月 14 18:57 test03
[root@localhost r]# chmod 1777 test02
-rwxrwxrwx. 1 root root 0 8月 14 18:57 test01
-rwxrwxrwt. 1 root root 0 8月 14 18:57 test02
-rw-r--r--. 1 root root 0 8月 14 18:57 test03
[root@localhost r]# chmod 6777 test03
-rwxrwxrwx. 1 root root 0 8月 14 18:57 test01
-rwxrwxrwt. 1 root root 0 8月 14 18:57 test02
-rwsrwsrwx. 1 root root 0 8月 14 18:57 test03
#一般不会出现 7777,第一个7是特殊权限,set uid 一般针对文件,set gid 和set sTicky针对目录
7. Linux 隐藏权限
#chattr (change attribute)
添加隐藏属性 - 权限
[root@localhost r]# touch test
[root@localhost r]# chmod 0000 test #所有权限为0,但此时仍可被删除
----------. 1 root root 0 8月 14 20:03 test
[root@localhost r]# chattr +i test #添加隐藏权限(无法更改或删除的权限),此时不能被删除
[root@localhost r]# rm -rf test
rm: 无法删除"test": 不允许的操作
[root@localhost r]# touch rxx
-rw-r--r--. 1 root root 0 8月 14 20:09 rxx
[root@localhost r]# chattr +i rxx #添加隐藏权限
[root@localhost r]# ll #通过ll无法查看到隐藏权限
-rw-r--r--. 1 root root 0 8月 14 20:09 rxx
[root@localhost r]# lsattr #需使用lsattr命令查看
----i----------- ./rxx
[root@localhost r]# echo "12345" >> rxx
-bash: rxx: 权限不够
[root@localhost r]# chattr -i rxx #取消 i 隐藏权限
[root@localhost r]# chattr = rxx #清空所有隐藏权限(权限有多种)
[root@localhost r]# chattr +a rxx
[root@localhost r]# lsattr
-----a---------- ./rxx
[root@localhost r]# rm -rf rxx #+a隐藏权限,不能被删除,但可以写入
rm: 无法删除"rxx": 不允许的操作
[root@localhost r]# echo "12345" >> rxx #+a隐藏权限,不能被删除,但可以追加数据
[root@localhost r]# cat rxx
12345
8. 权限委派
switch user do - > sudo
[u01@localhost clh]$ sudo cat /etc/shadow
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。 #1) Respect the privacy of others.
#2) 输入前要先考虑(后果和风险)。 #2) Think before you type.
#3) 权力越大,责任越大。 #3) With great power comes great responsibility.
[sudo] u01 的密码:
u01 不在 sudoers 文件中。此事将被报告。#u01 is not in the sudoers file. This incident will be reported.
# sudoers file 为 /etc/sudoers文件
[root@localhost clh]# usermod u01 -G wheel #将u01添加wheel为附属组,此时需退出shell/重新进入,或newgrp 临时更改所在组信息,或者# usermod tom -g wheel -G tom #更改主组为wheel
[u01@localhost clh]$ id u01
uid=1003(u01) gid=1004(u01) 组=1004(u01),10(wheel)
### sudo ---- 密码当前⽤户密码
### su ---- root账户的密码
[u01@localhost clh]$ gpasswd -d u01 wheel
gpasswd:没有权限。
[u01@localhost clh]$ sudo gpasswd -d u01 wheel
[sudo] u01 的密码:
正在将用户“u01”从“wheel”组中删除
[u01@localhost clh]$ id u01
uid=1003(u01) gid=1004(u01) 组=1004(u01)
[u01@localhost clh]$
#sudoers file 文件编辑
[root@localhost clh]# vim /etc/sudoers #退出保存用wq!
或者[root@localhost clh]# visudo ##wq
#经过编辑更改sudoers文件后 用户u01 具备sudo权限。
[root@localhost clh]# su u01
[u01@localhost clh]$ sudo cat /etc/shadow
[sudo] u01 的密码:
#添加u01-np 免密组 #%表示组,这里可以不加%,表示用户可以免密
[root@localhost clh]# groupadd u01_np && usermod u01 -G u01_np #&&表示同时操作
[u01@localhost clh]$ sudo cat /etc/shadow # 无需输密码,直接进入免密sudo
### sudo ---- 密码当前⽤户密码
### su ---- root账户的密码
#运维管理员加⼊到wheel
#单独创建一个新的组 group 免密码登录组- 在该组中添加⽤户