权限管理
基本权限与归属关系
基本权限(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策略。
- 数据类型:
- 数据类型,所有者的权限位XXX,所属组的权限位yyy,其他用户的权限位zzz,ACL策略。
-
Linux中判断用户对数据具备的权限:
- 首先查看该用户或者组是否有ACL策略。
getfacl 数据路径
(项mask
表明存在ACL策略) - 查看该用户对于该数据的身份(顺序:所有者>所属组>其他人),原则是匹配则停止。
id 用户
(查看用户的组)、ls -l 文件路径
或ls -ld 目录路径
(查看数据的所有者和所属组) - 查看相应身份的权限。
ls -l 文件路径
和ls -ld 目录路径
(查看权限位)
- 首先查看该用户或者组是否有ACL策略。
// 查看数据的归属与权限
/* 数据类型,所有者的权限位XXX,所属组的权限位yyy,其他人的权限位zzz,ACL策略
* 文件的硬链接个数(本身占1),目录的子目录个数(包括隐藏目录)
* 数据的所有者
* 数据的所属组(默认是所有者的基本组)
* 数据大小
* 数据的最后修改时间
* 数据名称(其他用户有写入权限时,目录名称黄绿底蓝字,文件名称绿字,快捷方式无影响)
*/
]# ls -ld /etc
drwxr-xr-x. 141 root root 8192 5月 30 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 5月 30 11:00 /etc/passwd // 1表示文件的硬链接个数1个,它本身
]# ls -ld /root
dr-xr-x---. 17 root root 4096 5月 31 17:22 /root
]# ls -ld /tmp
drwxrwxrwt. 17 root root 4096 6月 6 09:44 /tmp // t表示数据有附加权限t
]# ls -l /etc/shadow
----------. 1 root root 1320 5月 30 11:00 /etc/shadow
]# useradd zhangsan
]# ls -ld /home/zhangsan
drwx------. 3 zhangsan zhangsan 78 6月 6 09:44 /home/zhangsan
]# cd /home/zhangsan
zhangsan]# ls -ld
drwx------. 3 zhangsan zhangsan 78 6月 6 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 6月 6 11:00 /chmodr
]# ls -l /chmodr
总用量 0
drwxr-xr-x. 3 root root 20 6月 6 11:00 a
drwxr-xr-x. 2 root root 6 6月 6 11:00 b
]# ls -l /chmodr/a
drwxr-xr-x. 2 root root 6 6月 6 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 6月 6 11:00 /chmodr // 目录chmodr权限改变
]# ls -l /chmodr
总用量 0
drwxr-xr-x. 3 root root 20 6月 6 11:00 a // 目录chmodr子目录a权限不变
drwxr-xr-x. 2 root root 6 6月 6 11:00 b
]# ls -l /chmodr/a
drwxr-xr-x. 2 root root 6 6月 6 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 6月 6 11:00 /chmodr // 目录a父目录chmodr权限不变
]# ls -l /chmodr
总用量 0
drwxrw-r--. 3 root root 20 6月 6 11:00 a // 目录a权限改变
drwxr-x---. 2 root root 6 6月 6 11:00 b
]# ls -l /chmodr/a // 目录a的内容aa.txt权限改变
drwxrw-r--. 2 root root 6 6月 6 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 6月 6 18:59 /chmodsz
// 权限700:所有者权限7(rwx),所属组权限0(---),其他用户权限0(---)
]# chmod 700 /chmodsz
]# ls -ld /chmodsz
drwx------. 2 root root 6 6月 6 18:59 /chmodsz
修改归属关系 chown
chown [选项] 所有者 数据路径
(change owner):修改该数据的所有者(属主)。
chown [选项] :所属组 数据路径
:修改该数据的所属组(属组)。
chown [选项] 所有者:所属组 数据路径
:修改该数据的所有者和所属组。
也可以写作chown [选项] 所有者.所属组 数据路径
。-R
(recurse):该选项是递推修改归属关系(目录本身及其内容)。- 修改所属组也可以用
chgrp [选项] 所属组 数据路径
(change group)
- 如果一个用户有若干身份,权限匹配则停止:所有者>所属组>其他用户。
- 例如:zhangsan是其他用户,又加入了所属组(所属组是它的基本组或附加组),那么它的权限在匹配到所属组时就停止了,假设一个数据的权限是所属组
r--
、其他用户rwx
,那么zhangsan对该数据的权限是r--
。
- 例如:zhangsan是其他用户,又加入了所属组(所属组是它的基本组或附加组),那么它的权限在匹配到所属组时就停止了,假设一个数据的权限是所属组
- 注意:cp命令会修改目标文件的所有者和所属组为当前用户。可以通过选项
-p
(preserve)来保持文件的所有者和所属组。
// chown修改归属关系
]# mkdir /chowntest
]# ls -ld /chowntest
drwxr-xr-x. 2 root root 6 6月 6 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 6月 6 19:06 /chowntest
]# chown :gro1 /chowntest // 修改所属组
]# ls -ld /chowntest
drwxr-xr-x. 2 cho1 gro1 6 6月 6 19:06 /chowntest
]# chown cho2:gro2 /chowntest // 修改所有者和所属组
]# ls -ld /chowntest
drwxr-xr-x. 2 cho2 gro2 6 6月 6 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 6月 6 19:16 a // 目录a归属关系改变
drwxr-xr-x. 2 root root 6 6月 6 19:16 b // 目录b归属关系不变
/chowntest/a:
总用量 0
-rw-r--r--. 1 cho1 root 0 6月 6 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 6月 6 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 6月 6 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 6月 6 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 6月 6 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 6月 6 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 6月 6 21:11 /sgid/ // 所属组是sgidgrp
]# chmod g+s /sgid // SGID权限,sgid目录下新建的数据会自动继承父目录的所属组
]# ls -ld /sgid
drwxr-sr-x.2 root sgidgrp 6 6月 6 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 6月 6 21:13 a
-rw-r--r--.1 root sgidgrp 0 6月 6 21:13 b.txt
]# ls -l /sgid/a
总用量 0
drwxr-sr-x.2 root sgidgrp 6 6月 6 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 6月 6 21:36 1a
drwxr-xr-x.2 root root 6 6月 6 21:36 2b
]# ls -ld /usr/bin/suidir
-rwxr-xr-x. 1 root root 84832 6月 6 21:35 /usr/bin/suidir
]# chmod u+s /usr/bin/suidir // SUID权限,执行该程序时,可以具有所有者的身份和相应权限
]# ls -ld /usr/bin/suidir
-rwsr-xr-x. 1 root root 84832 6月 6 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 6月 6 21:36 1a
drwxr-xr-x.2 root root 6 6月 6 21:36 2b
drwxrwxr-x.2 root s01 6 6月 6 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 6月 7 09:49 /opt/mkm00 // 创建目录默认权限755
[root@loacal ~]# mkdir -m 700 /opt/mkm01
[root@loacal ~]# ls -ld /opt/mkm01
drwx------. 2 root root 6 6月 7 09:50 /opt/mkm01
[root@loacal ~]# mkdir -m 754 /opt/mkm02
[root@loacal ~]# ls -ld /opt/mkm02
drwxr-x---. 2 root root 6 6月 7 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(权限掩码)设置。
- 新建目录默认权限755,新建文件默认权限644。(一般文件默认均不可执行权限,即默认不给
-
umask:权限掩码。默认权限 = 7777 - umask。
-
权限掩码写四位是附加权限掩码+基本权限掩码,写三位是基本权限掩码。
- 附加权限:suid是4,sgid是2,t权限是1。
附加权限掩码 = 7 - 附加权限加和。
附加权限掩码4,表示附加权限为3 = sgid + t权限。
- 附加权限:suid是4,sgid是2,t权限是1。
-
管理员的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 6月 6 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 2月 23 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 6月 6 17:28 /home/hometest
]# chown -R hometest:hometest /home/hometest // 递推修改归属关系
]# ls -ld /home/hometest
drwxr-xr-x. 3 hometest hometest 78 6月 6 17:28 /home/hometest
]# ls -lA /home/hometest
总用量 12
-rw-r--r--. 1 hometest hometest 18 6月 6 17:28 .bash_logout
-rw-r--r--. 1 hometest hometest 141 6月 6 17:28 .bash_profile
-rw-r--r--. 1 hometest hometest 376 6月 6 17:28 .bashrc
drwxr-xr-x. 4 hometest hometest 39 6月 6 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 6月 6 17:40 1.txt
-rw-r--r--. 1 root root 0 6月 6 17:40 2.txt
drwxr-xr-x. 2 root root 6 6月 6 17:40 haha
drwxr-xr-x. 2 root root 6 6月 6 17:40 xixi
]# chmod -R a=--- /xiufu
]# ls -ld /xiufu
d---------. 4 root root 56 6月 6 17:40 /xiufu
]# ls -l /xiufu
总用量 0
----------. 1 root root 0 6月 6 17:40 1.txt
----------. 1 root root 0 6月 6 17:40 2.txt
d---------. 2 root root 6 6月 6 17:40 haha
d---------. 2 root root 6 6月 6 17:40 xixi
]# find /xiufu -type d -exec chmod 755 {} \; // 根据目录类型
]# ls -ld /xiufu
drwxr-xr-x. 4 root root 56 6月 6 17:40 /xiufu
]# ls -l /xiufu
总用量 0
----------. 1 root root 0 6月 6 17:40 1.txt
----------. 1 root root 0 6月 6 17:40 2.txt
drwxr-xr-x. 2 root root 6 6月 6 17:40 haha
drwxr-xr-x. 2 root root 6 6月 6 17:40 xixi
]# find /xiufu -type f -exec chmod 644 {} \; // 根据文件类型
]# ls -l /xiufu
总用量 0
-rw-r--r--. 1 root root 0 6月 6 17:40 1.txt
-rw-r--r--. 1 root root 0 6月 6 17:40 2.txt
drwxr-xr-x. 2 root root 6 6月 6 17:40 haha
drwxr-xr-x. 2 root root 6 6月 6 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 6月 9 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