Linux 权限管理笔记

一、文件基本权限

1. 查看权限

1-1.基本权限的修改
-rw-r--r--
  - 第一个"-"表示文件类型(- 文件,d 目录,l 软链接文件)
  - rw-       r--       r--
    u所有者   g所属组   o其它人
其中r读,w写,x执行

2. 修改权限

(1).chmod  [选项]  模式  文件名
  - 选项
    . -R  递归 (当前目录下所有文件递归赋予权限)
  - 模式
    [ugoa] [+-=] [rwx]
    [mode=421]

栗子:

1. chmod u+x cangls.av   # u --> 所有者, x --> 执行
2. chmod g+w,o+w furong.av  # g --> 所属组  o --> 其他人
3. chmod g-w,o-w furong.av  
4. chmod u=rwx,g=rw furong.av  
5. chmod a=rw furong.av   # 所有人都有rw权限 
权限的数字表示(用二进制转的数)
r---4;  w----2;  x ----1;    常用组合:777  644 755 
如rwxr-xr-x,则对应7 5 5
# chmod 755 furong.av

3. 权限对文件的作用

r: 读取文件内容(cat more  head tail)
w: 编辑、新增、修改文件内容(vi echo)   # echo  1111 >> abc.txt
  - 但是不包含删除文件,因为文件名和文件数据存放位置不同
x: 可进入目录
注意:
  对文件来讲:最高权限是 x
  对目录来讲:最高权限是 w

  head:默认是查看文件的前10行
  tail:默认是查看文件的最后10行 ,  -n 指定查看多少行  # tail -f -n 20 abc.log 
  more:显示满一页时暂停,按空格/Ctrl+F继续显示下页,Ctrl+B 返回上一屏 或按Q停止显示。

4. 权限对目录的作用

r: 可以查询目录下的文件名(ls)
w: 具有修改目录结构的权限,如新建文件和目录, 删除此目录下的文件和目录, 
     重命名次目录下文件和目录,剪切(touch, rm , mv ,cp )
x: 可以进入目录 (cd)

对文件来讲, 最高权限是 x
对目录来讲: 最高权限是w --> 0 5(rx) 7(rwx) 只有这三种有有意义
chomd 755 <目录名>

(1) chown  用户名:组名   <文件or目录>
(2) chown: 修改文件的所有者
格式:chown  用户名  文件名
例:chown user1 test

(3) chgrp:修改文件的所属组
格式:chgrp  组名  文件名
例:chgrp user1 test

实例要求

  • 拥有一个test目录
  • 让testuser拥有所有的权限
  • 让用户组有查看的权限
  • 其他所有人不许查看这个目录
1. sudo groupadd  [用户组]   增加用户组
2. sudo gpasswd -a vagrant docker  将vagrant用户添加到docker用户组
3. groups [username]:查看该用户所属用户组     
4. sudo adduser [username]:添加新用户     
5. sudo usermod -G [用户组] [username]:把用户添加到用户组  
6. sudo usermod -G sudo Kobe:把科比添加到 sudo 用户组  
7. sudo deluser [username]:删除用户,如果同名用户组没有其它成员,同时该用户组也没了     
8. sudo gpasswd -d [username] [用户组]:从用户组中删除用户     
9. su [username]:切换用户到当前目录    
10. su -l [username]:切换用户到用户家目录    
11. Ctrl D】 / exit:退出当前用户     
12. sudo su:使当前用户进入 root 

[python] view plain copy

# 拥有一个test目录  
changwen@ubuntu:~$ ll -d test  
drwxrwxr-x 3 changwen changwen 4096 Jul 24 05:41 test/  

# 添加一个testuser用户  
changwen@ubuntu:~$ sudo useradd testuser  
  
# 设置该用户的密码  
changwen@ubuntu:~$ sudo passwd testuser  
Enter new UNIX password:   
Retype new UNIX password:   
passwd: password updated successfully  
  
# 在用户组里添加两个用户  
changwen@ubuntu:~$ sudo useradd -g usergroup user1  
changwen@ubuntu:~$ sudo useradd -g usergroup user2  
  
# 设置test目录的所有者:所属组  
changwen@ubuntu:~$ sudo chown testuser:usergroup test  
  
changwen@ubuntu:~$ ll -d test  
drwxrwxr-x 3 testuser usergroup 4096 Jul 24 05:41 test/  

# 按实例要求设置权限  
changwen@ubuntu:~$ sudo chmod 750 test  
changwen@ubuntu:~$ ll -d test  
drwxr-x--- 3 testuser usergroup 4096 Jul 24 05:41 test/  ```

二、文件默认权限

unmak: 查看默认权限
如0022
  - 第一位0: 文件特殊权限
  - 022 : 文件默认权限
临时修改: umask 0002
永久修改: vi  /etc/profile

1. 文件默认权限

  1) 文件默认不能建立执行文件,必须手工赋予执行权限
  2) 所以文件默认权限最大为666
  3) 默认权限需要换算成字母再相减
  4) 建立文件之后的默认权限,为666减去umask值
例如:
 - 文件默认最大权限是666, umask值为022
 - -rw-rw-rw-  减去  -----w--w-  等于 -rw-r--r--

2. 目录的默认权限

1).目录默认权限最大为777
  2).默认权限需要换算成字母再相减
  3).建立文件之后的默认权限,为777减去umask值
例如:
 - 目录默认权限最大为777, umask值为022  
 - -rwxrwxrwx  减去  -----w--w-  等于 -rwxr-xr-x

三、ACL简介

ACL就是用来解决用户身份不足的问题

查看分区ACL权限是否开启
dupe2fs 命令是查询指定分区详细文件系统信息的命令
dupe2fs -h /dev/sda5
-h 仅显示超级块中信息,而不是磁盘块的详细信息

临时开启分区ACL权限
重新挂载根分区,并挂载加入acl权限
mount -o remount, acl /

永久开启分区ACL权限(不建议修改)
vi /etc/fstab

加入acl

然后修改UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defalults acl 1 1

1. 查看与设定ACL权限

查看acl权限
getfacl 文件名

设定acl权限

setfacl  选项  文件名
  -m  设定ACL权限
  -x  删除指定的ACL权限
  -b  删除所有的ACL权限
  -d  设定默认ACL权限
  -k  删除默认ACL权限
  -R  递归设定ACL权限

栗子:

changwen@ubuntu:~$ mkdir av  

# 增加所有者和用户组,并设置av目录的权限  
changwen@ubuntu:~$ sudo useradd tony  
changwen@ubuntu:~$ sudo groupadd stu  
changwen@ubuntu:~$ sudo chown tony:stu av  
# 设置av权限  
changwen@ubuntu:~$ sudo chmod 770 av  
  
# 添加老王用户并设置密码  
changwen@ubuntu:~$ sudo useradd lw  
changwen@ubuntu:~$ sudo passwd lw  
Enter new UNIX password:   
Retype new UNIX password:   
passwd: password updated successfully  

# 给用户lw赋予r-x权限,使用 "u:用户名:权限" 格式  
changwen@ubuntu:~$ sudo setfacl -m u:lw:rx  /home/changwen/av  

# 为用户组tgroup2分配ACL权限。使用 "g:组名:权限" 格式  
setfacl -m g:tgroupt2:rwx  /home/changwen/av  

可以看到用户lw不属于用户组,也不属于其它组,这就是ACL权限

2. 最大有效权限与删除

上面getfacl av可以看到有一个mask
mask:是用来指定最大有效权限的。如果我给用户赋予ACL权限,是需要和mask的权限”相与”才能得到用户的真正权限。

[laowang@localhost home]$ getfacl av
# file: av
# owner: tony
# group: stu
user::rwx
user:laowang:r-x
group::rwx
mask::rwx
other::---
# 修改最大有效权限
setfacl -m m:rx 文件名
 - 设定mask权限为r-x。使用"m:权限"格式

删除ACL权限
# 删除指定用户的ACL权限
setfacl -x u:用户名  文件名

# 删除指用户组的ACL权限
setfacl  -x g:组名  文件名

# 删除文件的所有的ACL权限
setfacl -b 文件名

3. 默认ACL权限与递归ACL权限

1).递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。递归权限仅能赋予目录,不能赋予文件。
setfacl -m u:用户名:权限 -R 文件名
-R 如果不加R,那么该目录下创建的文件没有ACL权限
但加R,会有权限溢出
所以建议少用ACL权限

2).默认ACL权限的作用是如果给们目录设定了默认ACL权限,那么父目录中所有新建的子文件都会继承父目录的ACL权限。
setfacl -m d:u:用户名:权限 文件名

四、sudo权限

1. sudo权限的概念

root把本来只能超级用户执行的命令赋予普通用户执行。
sudo的操作对象是系统命令。

2. sudo权限的使用

// 查看sudo配置文件
//man 5 sudoers查看配置文件详细
#visudo     // 实际修改的是/etc/sudoers文件
// 用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
root ALL=(ALL)   ALL
// 组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
%wheel ALL=(ALL)  ALL

// 栗子一:普通用户不能执行shutdown命令

1  visudo   //编辑/etc/sudoers文件
2 增加user1 ALL=(ALL) /sbin/shutdown -r now配置。
注:命令写的越简单,user1用户得到的权限越大,命令写的越详细,user1用户得到的权限就越小;系统命令要写成绝对路径,以兼容其他版本。
3 保存退出

// 登陆普通用户账号user1,执行系统命令
#su - user1
$ sudo -l // 要求输入user1密码,才能查看可执行的系统命令
$ sudo /sbin/shutdown -h now // 执行关机命令不被允许
$ sudo /sbin/shutdown -r now //执行重启命令
//栗子二: 给普通用户执行添加用户和密码的权限

# visudo
// 添加 user1  ALL=/usr/sbin/useradd 配置  
// 添加 user1 ALL=/usr/bin/passwd 配置注:这使user1可以更改root的密码
// user1 ALL=/usr/bin/passwd [A-Za-z]*, !/usr/binpasswd "", !/usr/bin/passwd root,则user1无法更改root密码
// 添加 user1 ALL=/bin/vi 注:这使user1可以编辑/etc/shadow文件,更改root用户等密码

五、文件特殊权限

1. SetUID权限

  • 只有可执行的二进制程序才能设定SetUID权限
  • 命令执行者要对该程序拥有x(执行)权限
  • 命令这行者在执行该程序时获得该程序文件属主的身份(在执行程序的过程中灵魂附体为文件的属主)
    如: passwd命令,其他用户都可以使用passwd更改自己的密码
    [user1@localhost root]$ ll /usr/bin/passwd 
    -rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
    
    image
  • SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效;

2. 设置和取消SetUID权限

/*设置SetUID权限,4代表设置SetUID、2代表SetGID、1代表stickyBIT
 u+s :代表给文件加上SetUID权限
 g+s :代表给目录加上SetGID权限
 o+s :代表给文件加上STICKBIT权限
*/

#ll
-rwxr-xr-x .... test
#chmod 4755 test // 或chmod u+s test
-rwsr-xr-x ... test
// 若文件没有执行权限,但设置SetUID时,执行位显示大S,这没有意义。

// 取消SetUID权限
#chmod u-s test
#chmod 0755 test

3. 危险的SetUID权限

关键目录应严格控制写权限,比如”/”、”/usr” 等
用户的密码设置要严格最受密码三原则
对系统中默认应该具有SetUID权限的文件作以列表,定时检查有没有这之外的文件被设置了SetUID权限

不能对vi等编辑器赋予SetUID权限,这样vi就能编辑/etc/shadow文件而更改root密码。
#!/bin/bash
#  搜索系统中所有拥有SUID和SGID的文件, 并保存到临时文件中
find / -perm -4000 -o -perm -2000 > /tmp/setuid.check
# 做循环,每次循环取出临时文件中的文件名
for i in $(cat /tmp/setuid.check)
do 
        # 比对这个文件是否再模板文件中
		grep $i /root/suid.log > /dev/null
		# 检测上一个命令的返回值,如果不为0,证明上一个命令报错
			if ["$?" != "0"]
			then 
				# 如果文件名不在模板文件中,则输出错误信息,并把报错输出到日志中
				echo "$i is not in listfle" >> /root/sudi_log_$(date +%F)
			fi
done
# 删除临时文件
rm -rf /tmp/setuid.check
	
		
posted @ 2022-05-10 22:02  郭赫伟  阅读(102)  评论(0编辑  收藏  举报