# 权限相关

权限管理

基本权限与归属关系

基本权限(rwx)

  • 读取 r(read):允许查看内容。
    写入 w(write):允许修改内容。
    可执行 x(execute):允许运行和切换。

  • 没有权限 -

    • 有写无读:只能用echo >>写入,但查看(读取)不了,所以一般给写也给读。
  • 对文本文件的权限:

    • r读取权限:cat、less、grep、head、tail、……

    • w写入权限:vim、> 、 >>、……

    • x可执行权限:Shell与Python、……

  • 对目录的权限:

    • r读取权限:能够ls命令查看目录内容。

    • w写入权限:能够创建、删除、修改等目录的内容注意:是对目录的内容,不是对目录本身),基本不能单独使用。

    • x可执行权限:能够cd命令切换到此目录下(进入此目录)。

      • 例如:对目录/opt有写入权限w,则可以创建、删除、修改其下的内容,但删除它需要对其父目录有写入权限
  • 不要修改根目录的权限

归属关系(ugo)

  • 所有者 u(user,也叫属主):拥有该数据的用户。
    所属组 g(group,也叫属组):拥有该数据的组。可以是用户的基本组或附加组。
    其他用户 o(other):除所有者、所属组以外的用户。
    • 所有用户 a(all)。
    • 数据的所有者默认一个,所属组默认一个。
    • 例如:ls -l 1.txt 返回 …… zhangsan(所有者) zhangsan(所属组) 1.txt

查看数据的归属与权限

  • 执行命令 ls -l 文件路径ls -ld 目录路径 返回要素:

    • 数据类型,所有者的权限位XXX,所属组的权限位yyy,其他用户的权限位zzz,ACL策略。
      文件的硬链接个数(本身占1),目录的子目录个数(包括隐藏目录)。
      数据的所有者。
      数据的所属组(默认是所有者的基本组)。
      数据大小。
      数据的最后修改时间。
      数据名称(不是绝对路径。其他用户有写入权限时,名称颜色目录、文件,快捷方式无影响)。
      • 数据类型:- 表示文本文件,d 表示目录,l 表示快捷方式
      • ACL策略:. 表示没有ACL策略,+ 表示有ACL策略
  • Linux中判断用户对数据具备的权限

    1. 首先查看该用户或者组是否有ACL策略。
      getfacl 数据路径 (项 mask 表明存在ACL策略)
    2. 查看该用户对于该数据的身份(顺序:所有者>所属组>其他人),原则是匹配则停止。
      id 用户(查看用户的组)、ls -l 文件路径ls -ld 目录路径(查看数据的所有者和所属组)
    3. 查看相应身份的权限。
      ls -l 文件路径ls -ld 目录路径 (查看权限位)
// 查看数据的归属与权限
/* 数据类型,所有者的权限位XXX,所属组的权限位yyy,其他人的权限位zzz,ACL策略
 * 文件的硬链接个数(本身占1),目录的子目录个数(包括隐藏目录)
 * 数据的所有者
 * 数据的所属组(默认是所有者的基本组)
 * 数据大小
 * 数据的最后修改时间
 * 数据名称(其他用户有写入权限时,目录名称黄绿底蓝字,文件名称绿字,快捷方式无影响)
 */
]# ls -ld /etc
	drwxr-xr-x. 141 root root 8192 530 15:51 /etc
/* drwxr-xr-x:d表示目录,rwx是所有者权限,r-x是所属组权限,r-x是其他人权限,.表示无ACL策略
 * 141:目录的子目录个数(包括隐藏目录)
 * root:数据所有者
 * root:数据所属组(默认是所有者的基本组)
 * 8192:数据大小
 * 5月 30 15:51:最后修改时间
 * /etc:数据名称
 */
]# ls -l /etc/passwd
	-rw-r--r--. 1 root root 2513 530 11:00 /etc/passwd	// 1表示文件的硬链接个数1个,它本身
]# ls -ld /root
	dr-xr-x---. 17 root root 4096 531 17:22 /root
]# ls -ld /tmp								
	drwxrwxrwt. 17 root root 4096 66 09:44 /tmp			// t表示数据有附加权限t
]# ls -l /etc/shadow
	----------. 1 root root 1320 530 11:00 /etc/shadow
]# useradd zhangsan
]# ls -ld /home/zhangsan
	drwx------. 3 zhangsan zhangsan 78 66 09:44 /home/zhangsan
]# cd /home/zhangsan
zhangsan]# ls -ld
	drwx------. 3 zhangsan zhangsan 78 66 09:44 zhangsan	// 最后是名称不是绝对路径

修改基本权限 chmod

字母方式

  • chmod [选项] [ugoa][+-=][rwx-] 数据路径(change mode):修改用户对该数据的权限。
    • ugoa:u所有者,g所属组,o其他用户,a所有用户,省略为a所有用户。
      +-=:+增加权限,-减少权限,=重置权限。
      rwx-:r读取,w写入,x执行,-无权限。每种用户类型有三个基本权限位,缺位默认为 - 。
    • -R(recurse):该选项是递推修改权限(目录本身及其内容)。
// chmod -R 递推修改权限
]# mkdir -p /chmodr/a/aa.txt /chmodr/b
]# ls -ld /chmodr
	drwxr-xr-x. 4 root root 24 66 11:00 /chmodr
]# ls -l /chmodr
	总用量 0
	drwxr-xr-x. 3 root root 20 66 11:00 a
	drwxr-xr-x. 2 root root  6 66 11:00 b
]# ls -l /chmodr/a
	drwxr-xr-x. 2 root root  6 66 11:00 aa.txt
// 修改目录/chmodr权限,u所有者权限重置为rwx,g所属组权限重置为rx,o其它用户权限重置为无权限
]# chmod u=rwx,g=rx,o=--- /chmodr	// 其它用户也可以简写为o=-
]# ls -ld /chmodr
	drwxr-x---. 4 root root 24 66 11:00 /chmodr	// 目录chmodr权限改变
]# ls -l /chmodr
	总用量 0
	drwxr-xr-x. 3 root root 20 66 11:00 a		// 目录chmodr子目录a权限不变
	drwxr-xr-x. 2 root root  6 66 11:00 b
]# ls -l /chmodr/a
	drwxr-xr-x. 2 root root  6 66 11:00 aa.txt	
// 选项-R递推修改目录/chmodr/a及其内容的权限,g所属组权限重置为rx,o其它用户权限重置为r
]# chmod -R g=rw,o=r /chmodr/a		// 递推改变目录a及以下
]# ls -ld /chmodr
	drwxr-x---. 4 root root 24 66 11:00 /chmodr	// 目录a父目录chmodr权限不变
]# ls -l /chmodr
	总用量 0
	drwxrw-r--. 3 root root 20 66 11:00 a		// 目录a权限改变
	drwxr-x---. 2 root root  6 66 11:00 b
]# ls -l /chmodr/a									 // 目录a的内容aa.txt权限改变
	drwxrw-r--. 2 root root  6 66 11:00 aa.txt

数字方式

  • chmod [选项] 数字 数据路径:修改用户对该数据的权限。
    • -R(recurse):该选项是递推修改权限(目录本身及其内容)。
    • 数字方式一般用于大规模的修改权限。
    • 三位数字是基本权限;四位数字第一位是附加权限,后三位是基本权限。
      • 基本权限三位数字:第一位所有者权限,第二位所属组权限,第三位其他用户权限。
      • 八进制数字:r(4)、w(2)、x(1)、-(0)。
        • rwx(7)、rw-(6)、r-x(5)、-wx(3)
// 数字方式修改基本权限
]# mkdir -p /chmodsz
]# ls -ld /chmodsz
	drwxr-xr-x. 2 root root 6 66 18:59 /chmodsz
// 权限700:所有者权限7(rwx),所属组权限0(---),其他用户权限0(---)
]# chmod 700 /chmodsz	
]# ls -ld /chmodsz
	drwx------. 2 root root 6 66 18:59 /chmodsz

修改归属关系 chown

  • chown [选项] 所有者 数据路径(change owner):修改该数据的所有者(属主)。
    chown [选项] :所属组 数据路径:修改该数据的所属组(属组)。
    chown [选项] 所有者:所属组 数据路径:修改该数据的所有者和所属组。
    也可以写作chown [选项] 所有者.所属组 数据路径
    • -R(recurse):该选项是递推修改归属关系(目录本身及其内容)。
    • 修改所属组也可以用chgrp [选项] 所属组 数据路径(change group)
  • 如果一个用户有若干身份,权限匹配则停止:所有者>所属组>其他用户
    • 例如:zhangsan是其他用户,又加入了所属组(所属组是它的基本组或附加组),那么它的权限在匹配到所属组时就停止了,假设一个数据的权限是所属组r--、其他用户rwx,那么zhangsan对该数据的权限是r--
  • 注意:cp命令会修改目标文件的所有者和所属组为当前用户。可以通过选项-p(preserve)来保持文件的所有者和所属组。
// chown修改归属关系
]# mkdir /chowntest
]# ls -ld /chowntest
	drwxr-xr-x. 2 root root 6 66 19:06 /chowntest	// 所有者root,所属组root
]# useradd cho1
]# useradd cho2
]# groupadd gro1
]# groupadd gro2
]# chown cho1 /chowntest		// 修改所有者
]# ls -ld /chowntest
	drwxr-xr-x. 2 cho1 root 6 66 19:06 /chowntest
]# chown :gro1 /chowntest		// 修改所属组
]# ls -ld /chowntest
	drwxr-xr-x. 2 cho1 gro1 6 66 19:06 /chowntest
]# chown cho2:gro2 /chowntest	// 修改所有者和所属组
]# ls -ld /chowntest
	drwxr-xr-x. 2 cho2 gro2 6 66 19:06 /chowntest
// chown -R递推修改归属关系(目录本身及其内容)
]# mkdir /chowntest/{a,b}		
]# touch /chowntest/a/aa.txt
]# chown -R cho1 /chowntest/a	// 递推修改目录a及其内容的归属关系
]# ls -lR /chowntest
	/chowntest/:	
	总用量 0
	drwxr-xr-x. 2 cho1 root 20 66 19:16 a	// 目录a归属关系改变
	drwxr-xr-x. 2 root root  6 66 19:16 b	// 目录b归属关系不变
	
    /chowntest/a:	
	总用量 0
	-rw-r--r--. 1 cho1 root 0 66 19:16 aa.txt	// 目录a的内容的归属关系改变
    
	/chowntest/b:	
	总用量 0

ACL策略管理

  • ACL(access control list)访问策略的作用:能够对个别用户、个别组设置独立的权限
    • ACL策略权限比基本权限高:对个别用户或个别组设置ACL策略后,其原本的基本权限不生效。
  • 存在ACL策略的表现形式
    • ls -l 命令查看,权限后的 . 会变成 +
    • getfacl 命令会存在掩码项 mask

getfacl(get file access control list)

  • getfacl 数据路径:查看该数据的ACL策略及用户权限。
    • 设置ACL策略后,所属组的权限位会显示mask权限掩码的内容。所以查看权限以getfacl命令为准。

setfacl(set file access control list)

  • setfacl [-R] -m u:用户名:权限 数据路径(modify):设置该用户对该数据的ACL策略。权限可以用数字方式。
    setfacl [-R] -m g:组名:权限 数据路径设置该组对该数据的ACL策略。权限可以用数字方式。
  • setfacl [-R] -x u:用户名 数据路径清除该用户对该数据的所有ACL策略。
    setfacl [-R] -x g:组名 数据路径清除该组对该数据的所有ACL策略。
  • setfacl [-R] -b 数据路径清除该数据所有ACL策略。
    • -R(recurse):该选项是递推修改ACL策略。可以连用写成-Rm-Rx-Rb,R写在前。
    • setfacl -m u:用户名:- 数据路径:单独黑名单该用户对该数据的权限。
//setfacl -m 设置
]# mkdir /acltest
]# chmod 770 /acltest	// 修改目录权限为770
]# ls -ld /acltest
    drwxrwx---. 2 root root 6 66 20:05 /acltest/
]# useradd uacl			// 创建普通用户uacl
]# su - uacl			
[uacl@local ~]$ cd /acltest
	-bash: cd: /acltest/: 权限不够
[uacl@local ~]$ exit
]# setfacl -m u:uacl:rx /acltest	// 单独设置用户uacl对目录/acltest的权限
]# ls -ld /acltest
    drwxrwx---+ 2 root root 6 66 20:05 /acltest/		// .变成+,存在ACL策略
]# getfacl /acltest		// 查看ACL策略
	getfacl: Removing leading '/' from absolute path names
	# file: acltest/
	# owner:root
	# group:root
	user::rwx
	user:uacl:r-x
	group::rwx
	mask::rwx			// 有ACL策略就存在掩码mask
	other::---
]# su - uacl
[uacl@local ~]$ cd /acltest
[uacl@local acltest]$ exit			// 用户uacl对目录/acltest有x可执行权限,可以进入目录
// setfacl -m、-x、-b 设置与清除
]# useradd wangyi
]# useradd wanger
]# useradd wangsan
]# setfacl -m u:wangyi:rwx /acltest	// 设置用户wangyi对目录/acltest的ACL策略
]# setfacl -m u:wanger:rw /acltest
]# setfacl -m u:wangsan:rx /acltest
]# getfacl /acltest
	getfacl: Removing leading '/' from absolute path names
	# file: acltest/
	# owner:root
	# group:root
	user::rwx
	user:uacl:r-x
	user:wangyi:rwx
	user:wanger:rw-
	user:wangsan:r-x
	group::rwx
	mask::rwx			// ACL掩码mask
	other::---
]# setfacl -x u:wangyi /acltest		// 清除用户wangyi对目录/acltest的ACL策略
]# setfacl -x u:wanger /acltest
]# getfacl /acltest
	getfacl: Removing leading '/' from absolute path names
	# file: acltest/
	# owner:root
	# group:root
	user::rwx
	user:uacl:r-x
	user:wangsan:r-x
	group::rwx
	mask::rwx			// ACL掩码mask
	other::---
]# setfacl -b /acltest				// 清除目录/acltest的所有ACL策略
]# getfacl /acltest
	getfacl: Removing leading '/' from absolute path names
	# file: acltest/
	# owner:root
	# group:root
	user::rwx
	group::rwx
	other::---
]# ls -ld /acltest
    drwxrwx---. 2 root root 6 66 20:05 /acltest/		// 没有ACL策略,显示为.

附加权限 chmod??

  • 附加权限(也叫特殊权限):Set UID(u+s)、Set GID(g+s)、Sticky Bit(o+t

o+t 用户写入权

  • Sticky Bit(粘滞位):t/T权限,适用于目录,用来限制用户(所属组和其他用户)滥用写入权。
    • 在设置了t权限的目录下,即使用户有写入权限,也不能删除或重命名其他用户创建的数据。
    • 占用其他用户o的执行权限位x
      • 其他用户原本有执行权限x,则显示为t;没有执行权限-,则显示为T
      • T其实没有意义,因为没有执行权限x
    • 方式:chmod o+t 目录(目录:绝对路径和相对路径)。
// 附加权限之t权限
]# useradd t01
]# useradd t02
]# mkdir /testsb
]# chmod 777 /testsb
]# ls -ld /opt/testsb
    drwxrwxrwx. 2 root root 6 66 15:58 /testsb	// 其它用户对testsb目录权限rwx
]# su - t01
[t01@local ~]$ mkdir /testsb/1a.txt /testsb/2a.txt
[t01@local ~]$ exit
]# su - t02
[t02@local ~]$ mkdir /testsb/2c.txt /testsb/2d.txt
[t02@local ~]$ ls /testsb
	1a.txt  2a.txt  2c.txt  2d.txt
[t02@local ~]$ mv /testsb/2a.txt /testsb/1b.txt		// 用户t02可以移动重命名用户t01的文件爱你
[t02@local ~]$ ls /testsb
	1a.txt  1b.txt  2c.txt  2d.txt
[t02@local ~]$ exit
]# chmod o+t /testsb	// t权限,不能删除或改名其他用户创建的文本文件
]# ls -ld /testsb
	drwxrwxrwt. 2 root root 62 66 16:40 /testsb	// 其他用户的可执行权限位x变成t
]# su - t02
[t02@local ~]$ rm -f /testsb/1b.txt	
	rm: 无法删除'/testsb/1b.txt': 不允许的操作

g+s 继承父目录所属组

  • Set GID(SGID权限):s适用于目录
    • 在设置了SGID权限的目录下,新建的数据会自动继承父目录的所属组。

    • 占用所属组g的执行权限位x

      • 所属组原本有执行权限x,则显示为s;没有执行权限-,则显示为S
    • 方式:chmod g+s 目录(目录:绝对路径和相对路径)。

// 附加权限之SGID权限
]# mkdir /sgid
]# groupadd sgidgrp
]# chown :sgidgrp /sgid		// 修改sgid目录的归属关系之所属组
]# ls -ld /sgid
	drwxr-xr-x.2 root sgidgrp 6 66 21:11 /sgid/		// 所属组是sgidgrp
]# chmod g+s /sgid				// SGID权限,sgid目录下新建的数据会自动继承父目录的所属组
]# ls -ld /sgid
	drwxr-sr-x.2 root sgidgrp 6 66 21:11 /sgid		// 所属组的可执行权限位x变为s
]# mkdir -p /sgid/a/aa
]# touch /sgid/b.txt
]# ls -l /sgid
	总用量 0
	drwxr-sr-x.3 root sgidgrp 16 66 21:13 a
	-rw-r--r--.1 root sgidgrp  0 66 21:13 b.txt
]# ls -l /sgid/a
    总用量 0 
	drwxr-sr-x.2 root sgidgrp 6 66 21:13 aa

u+s 所有者身份和权限

  • Set UID(SUID权限):s适用于可执行的程序(命令的绝对路径)。
    • 其他用户执行设置了SUID权限的程序时,具有此程序所有者的身份和相应权限
    • 占用所有者u的执行权限位x
      • 所有者原本有执行权限x,则显示为s;没有执行权限-,则显示为S
    • 方式:chmod u+s 命令或程序的绝对路径
// 附加权限之SUID权限,以mkdir举例
]#	which mkdir					// 查找mkdir命令的目录
	/usr/bin/mkdir
]# cp -r /usr/bin/mkdir /usr/bin/suidir	// 复制并重命名mkdir命令的目录
]# /usr/bin/mkdir -p /suid/1a		// 该目录是可执行程序
]# /usr/bin/suidir -p /suid/2b		// 复制后的目录也是可执行程序
]# ls -l /suid
	drwxr-xr-x.2 root root 6 66 21:36 1a
	drwxr-xr-x.2 root root 6 66 21:36 2b
]# ls -ld /usr/bin/suidir	
	-rwxr-xr-x. 1 root root 84832 66 21:35 /usr/bin/suidir
]# chmod u+s /usr/bin/suidir		// SUID权限,执行该程序时,可以具有所有者的身份和相应权限	
]# ls -ld /usr/bin/suidir
	-rwsr-xr-x. 1 root root 84832 66 21:35 /usr/bin/suidir	// 所有者的执行权限位x变为s
]# useradd s01
]# su - s01
[s01@local ~]$ /usr/bin/mkdir /suid/3c			
	/usr/bin/mkdir: 无法创建目录“/suid/3c”: 权限不够
[s01@local ~]$ /usr/bin/suidir /suid/3c			// 其他用户s01对可知执行的程序/usr/bin/suidir会具有所有者身份和权限
[s01@local ~]$ ls -l /suid
	总用量 0 
	drwxr-xr-x.2 root root 6 66 21:36 1a
	drwxr-xr-x.2 root root 6 66 21:36 2b
	drwxrwxr-x.2 root s01  6 66 21:36 3c		// 用户s01创建,但所有者是root

附加权限的数字方式

  • chmod 数字 路径:修改路径的使用权限。
    • 三位数字是基本权限:少于三位则默认前面缺位是0。
    • 四位数字是一位附加权限+三位基本权限:
      • 附加权限:suid是4,sgid是2,t权限是1。
      • 例如:2755表示rwxr-sr-x,3755表示rwxr-sr-t,3754表示rwxr-sr-T

创建数据与权限 mkdir -m

  • mkdir -m 权限 目录路径(mode):创建目录并指定权限
// mkdir -m 创建目录并指定权限
[root@loacal ~]# mkdir /opt/mkm00
[root@loacal ~]# ls -ld /opt/mkm00
	drwxr-xr-x. 2 root root 6 67 09:49 /opt/mkm00	// 创建目录默认权限755
[root@loacal ~]# mkdir -m 700 /opt/mkm01
[root@loacal ~]# ls -ld /opt/mkm01 
	drwx------. 2 root root 6 67 09:50 /opt/mkm01
[root@loacal ~]# mkdir -m 754 /opt/mkm02
[root@loacal ~]# ls -ld /opt/mkm02
	drwxr-x---. 2 root root 6 67 09:51 /opt/mkm02

// 创建多层新目录,-m 只对最后一层目录生效
[root@mysql ~]# mkdir -p -m 544 /haha/xixi/didi
[root@mysql ~]# ll -d /haha/
	drwxr-xr-x 3 root root 18 Nov  3 10:12 /haha/
[root@mysql ~]# ll /haha/
    total 0
	drwxr-xr-x 3 root root 18 Nov  3 10:12 xixi
[root@mysql ~]# ll /haha/xixi/
    total 0
    dr-xr--r-- 2 root root 6 Nov  3 10:12 didi

权限掩码 umask

  • 创建数据的默认权限

    • 新建目录默认权限755,新建文件默认权限644。(一般文件默认均不可执行权限,即默认不给x
    • 默认权限可以用umask(权限掩码)设置。
  • umask:权限掩码。默认权限 = 7777 - umask。

    • 权限掩码写四位是附加权限掩码+基本权限掩码,写三位是基本权限掩码。

      • 附加权限:suid是4,sgid是2,t权限是1。
        附加权限掩码 = 7 - 附加权限加和。
        附加权限掩码4,表示附加权限为3 = sgid + t权限。
    • 管理员的umask默认为022,即默认权限为755。
      普通用户的umask默认为002,即默认权限为775。

    • umask 数字临时修改新建目录的权限掩码(新终端失效)。

      • 写在/home/用户名/.bashrc 配置文件则对该用户永久有效。
        写在/etc/bashrc 配置文件则对所有用户永久有效。

      • /etc/login.defs(定义新用户的默认参数)中修改是对新建用户生效。

    • umask -S(show):显示新建目录的默认权限。(文件自动比目录少x

// umask
[t01@local ~]$ umask      	// 显示权限掩码,普通用户默认是0002
	0002
[t01@local ~]$ umask -S
	u=rwx,g=rwx,o=rx
[t01@local ~]$ exit			
]# umask       // 显示权限掩码,root默认是0022
	0022
]# umask -S   	// 显示新建目录的默认权限
	u=rwx,g=rx,o=rx
]# mkdir -m 777 /umasktest  // -m无视umask值创建数据并指定数据的权限
]# ls -ld /umasktest
	drwxrwxrwx. 2 root root 6 66 16:17 /umasktest
  
// 实现natasha用户新建数据,目录权限为700文件为600(文件会自动比目录少x,也就少1)
]# useradd  natasha
]# vim /home/natasha/.bashrc  // 修改家目录配置文件
	umask 077         // 指定权限掩码值,777-700=077
]# su - natasha
[natasha@local ~]$ umask 
	0077			// 默认权限掩码??是0077还是7077
[natasha@local ~]$ mkdir /abc
[natasha@local ~]$ ls -ld /abc
	drwx------. 2 natasha natasha 6 223 17:27 abc
[natasha@local ~]$ exit

重建家目录

  • /etc/skel(skeleton):家目录的源头
    • 每创建一个用户,都会从这个目录复制一份作为家目录。所以,如果有常用的重要的内容,可以写在这个目录下,每个新建用户都可以使用。
    • /etc/skel下有三个隐藏文件.bash_logout.bash_profile.bashrc
  • 删除了家目录怎么弥补:先复制一个家目录并重命名,然后递推修改归属关系
// 删除了家目录怎么弥补:先复制一个家目录并重命名,然后递推修改归属关系
]# useradd hometest
]# rm -rf /home/hometest
]# su - hometest
	su: 警告: 无法更改到 /home/hometest 目录:没有那个文件或目录
]# cp -r /etc/skel /home/hometest		// 也可以复制别人的家目录
]# ls -ld /home/hometest
    drwxr-xr-x. 3 root root 78 66 17:28 /home/hometest
]# chown -R hometest:hometest /home/hometest	// 递推修改归属关系
]# ls -ld /home/hometest
    drwxr-xr-x. 3 hometest hometest 78 66 17:28 /home/hometest
]# ls -lA /home/hometest
    总用量 12
	-rw-r--r--. 1 hometest hometest  18 66 17:28 .bash_logout 
	-rw-r--r--. 1 hometest hometest 141 66 17:28 .bash_profile
	-rw-r--r--. 1 hometest hometest 376 66 17:28 .bashrc
	drwxr-xr-x. 4 hometest hometest  39 66 17:28 .mozilla
]# su - hometest			
[hometest@local ~]$									// 成功切换,家目录创建成功
// 修复权限
]#	mkdir -p /xiufu/{haha,xixi} 
]# touch /xiufu/{1.txt,2.txt}
]# ls -l /xiufu
	总用量 0
    -rw-r--r--. 1 root root 0 66 17:40 1.txt
	-rw-r--r--. 1 root root 0 66 17:40 2.txt
	drwxr-xr-x. 2 root root 6 66 17:40 haha
	drwxr-xr-x. 2 root root 6 66 17:40 xixi
]# chmod -R a=--- /xiufu
]# ls -ld /xiufu
    d---------. 4 root root 56 66 17:40 /xiufu
]# ls -l /xiufu
    总用量 0
	----------. 1 root root 0 66 17:40 1.txt
	----------. 1 root root 0 66 17:40 2.txt
	d---------. 2 root root 6 66 17:40 haha
	d---------. 2 root root 6 66 17:40 xixi
]# find /xiufu -type d -exec chmod 755 {} \;	// 根据目录类型
]# ls -ld /xiufu
	drwxr-xr-x. 4 root root 56 66 17:40 /xiufu		
]# ls -l /xiufu
	总用量 0
	----------. 1 root root 0 66 17:40 1.txt
	----------. 1 root root 0 66 17:40 2.txt
	drwxr-xr-x. 2 root root 6 66 17:40 haha
	drwxr-xr-x. 2 root root 6 66 17:40 xixi
]# find /xiufu -type f -exec chmod 644 {} \;	// 根据文件类型
]# ls -l /xiufu
    总用量 0
	-rw-r--r--. 1 root root 0 66 17:40 1.txt
	-rw-r--r--. 1 root root 0 66 17:40 2.txt
	drwxr-xr-x. 2 root root 6 66 17:40 haha
	drwxr-xr-x. 2 root root 6 66 17:40 xixi

sudo提权

  • sudo(super do):管理员预先为用户设置执行许可,被授权用户有权执行被授权的命令。
    • /etc/sudoers :sudo提权的配置文件。

      • visudo = vim /etc/sudoers,且增加了语法检查,但没有颜色。
      • 被授权的用户 主机名=(变成的用户) [NOPASSWD:]可以执行的命令程序
        %被授权的组 主机名=(变成的用户) [NOPASSWD:]可以执行的命令程序
        可以使用ALL代表所有主机、所有用户、所有命令程序。
    • sudo 命令:提权执行该命令。
      sudo -u 用户名 命令:提权使用该用户身份执行该命令。

    • sudo -l(list):查看自己被授权的命令。

    • sudo -i(interactive):切换为root身份。

// sudo
]# visudo			// 此方式可以检查语法错误
	// 被授权的用户  主机名=(变成的用户)    [NOPASSWARD:]可以执行的命令程序
    // %被授权的组	主机名=(变成的用户) 	[NOPASSWARD:]可以执行的命令程序
	bob            ALL=(root)      NOPASSWD:/usr/bin/mkdir,/usr/bin/cat
	bob            ALL=(root)      /usr/bin/less
	// 让bob用户在所有主机可以使用root身份执行mkdir和cat命令,无需密码
	// 让bob用户在所有主机可以使用root身份执行less命令,需要密码
]# useradd bob
]# echo 123 | passwd --stdin bob
]# su - bob
[bob@local ~]$ sudo -l			// 查看提权的命令
	用户 bob 可以载 Test02 上运行以下命令:
		(root) NOPASSWD/usr/bin/mkdir,/usr/bin/cat
		(root) /usr/bin/less
[bob@local ~]$ mkdir /opt/sudotest
	mkdir:无法创建目录 “/opt/sudotest”:权限不够
[bob@local ~]$ sudo mkdir /opt/sudotest
[bob@local ~]$ ls -ld /opt/sudotest
	drwxr-xr-x. 2 root root 6 69 11:00 /opt/sudotest		// 所有者是root

// visudo的语法检查
]# visudo			// 在第101行键入字符串"asdfadsf"后末行模式":wq"
>>> /etc/sudoers: syntax error near line 101 <<<
What now? 
Options are:
  (e)dit sudoers file again
  e(x)it without saving changes to sudoers file
  (Q)uit and save changes to sudoers file (DANGER!)
What now? x

文件的特殊属性

  • 文件的特殊属性:
    • lasttr 文件路径:查看文件的特殊属性。
    • chattr +i 文件路径:不允许对文件做任何操作,可以看,不能增删改,但是可以复制,复制出来的文件不带i属性。
      chattr -i 文件路径:去除i属性。
    • chattr +a 文件路径:文件只允许追加。vim是将硬盘文件加载到内存修改后再覆盖硬盘文件。>>是直接往硬盘文件追加数据。
      chattr -a 文件路径:去除a属性。
      • 黑客登陆机器后可能会删除日志文件的记录,使用a属性可以增强安全管理
// 文件的特殊属性
// 查看文件的特殊属性:lasttr 文件路径 
]# lsattr /etc/passwd						// 查看文件的特殊属性
	---------------- /etc/passwd    		// 没有特殊属性

// 修改特殊属性
chattr +i 文件    # 不允许对文件做任何操作,可以看,不能增删改,但是可以复制,复制出来的文件不带i属性
chattr -i 文件    # 去除i属性
chattr +a 文件    # 文件只允许追加。`vim`是将硬盘文件加载到内存修改后再覆盖硬盘文件。`>>`是直接往硬盘文件追加数据。
chattr -a 文件    # 去除a属性
	黑客登陆机器后可能会删除日志文件的记录,使用a属性可以增强安全管理。

// i属性
]# chattr +i /etc/passwd
]# lsattr /etc/passwd				
	----i----------- /etc/passwd
]# useradd zhangsan
	useradd: cannot open /etc/passwd							// 不能写入
]# rm -f /etc/passwd
	rm: cannot remove '/etc/passwd': Operation not permitted	// 不能删除
]# cp /etc/passwd /etc/passwd+									// 可以复制
]# lsattr /etc/passwd+
	-------------------- /etc/passwd+							// 复制出来的文件不带i属性
]# ls -l /etc/passwd+  /etc/passwd
	-rw-r--r-- 1 root root 1269 Aug  2 09:26 /etc/passwd+
	-rw-r--r-- 1 root root 1269 Aug  1 16:51 /etc/passwd

]# lsattr /etc/passwd
	----i--------------- /etc/passwd
]# chattr -i /etc/passwd										// 去除i属性
]# rm -f /etc/passwd 											// 可以删除
]# ls /etc/passwd
	ls: cannot access '/etc/passwd': No such file or directory
]# cp /etc/passwd- /etc/passwd									// /etc/passwd-是系统自带的备份文件

// a属性
]# chattr +a /etc/hosts							// 增加a属性
]# vim /etc/hosts								// 保存时报错:"/etc/hosts" E212: Can't open file for writing
]# echo 192.168.88.254 zhenji > /etc/hosts
	-bash: /etc/hosts: Operation not permitted	// 不能修改
]# echo 192.168.88.254 zhenji >> /etc/hosts		// 可以追加
]# rm -f /etc/hosts								// 不能删除
	rm: cannot remove '/etc/hosts': Operation not permitted		

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值