CentOS7用户管理
用户和组的相关配置文件
用户一般来说是指使用计算机的人,计算机针对使用它的每一个人给了一个特定的名称,用户就可以使用这些名称来登录使用计算机,除了人之外,一些系统服务也需要含有部分特权的用户账户运行,因此出于安全考虑,用户管理应运而生,它加以明确限制各个用户账户的权限,root在计算机中拥有至高无上的特权,所以一般只做管理来用,非特权用户可以通过SU或SUDO程序来临时获得特权
GNU/Linux通过用户和用户组实现访问控制----包括对文件访问,设备使用控制
个人可以拥有很多个账户,只不是彼此的名称不同,比如root名称已经占用就不能再用了,此外,任意用户可能从属某个用户组,此用户可以加入某些已经存在的组来获得该组的特权
GNU/Linux系统中的每一个文件都有属一个用户(属主)和一个用户组(属组),另外,还有三种类型的访问权限:读(read)、写(write)、运行(execute),我们可以针对文件的属主,属组,而设置相应的访问权限,再次,我们可有通过ls|stat命令查询文件的属主、属组和权限,例如:
stat /etc/passwd
用户的分类
Linux用户三种角色:
超级用户:root 拥有对系统的最高的管理权限 ID=0
普通用户:系统用户 UID:1-999(Centos7版本) 1-499(Centos6版本)
本地用户 UID:1000+ 500+
UID:即每个用户的身份表示,类似于每个人的身份号码
虚拟用户:伪用户,一般不会用来登记系统的,它主要是用于维护某个服务的正常运行,如:ftp,Apache
用户和组的关系:
一对一:一个用户可以存在一个组中; 一对多:一个用户可以存在多个组中
多对一:多个用户可以存在一个组中; 多对多:多个用户可以存在多个组中
配置文件
用户配置文件
/etc/passwd
说明:记录了每个用户的一些基本信息,并且对所有用户可读,每一行记录了对应的一个用户,每行记录通过冒号进行分隔
用户组文件
/etc/group
说明:用户组的所有信息存放地,并且组名不能重复
用户对应的密码信息
/etc/shadow
说明:因为passwd文件对所有用户是可读的,为了安全起见把密码从passwd中分离出来放入这个单独的文件,该文件只有root用户拥有可读的权限,从而保证密码安全性
用户管理
用户命令
命令:useradd
useradd -m -u "UID" -g '初始组' -G'附加组' -s'登录的shell' 用户
-m:创建用户主目录/home/[用户名];(注:在自己的主目录内,即使不是root用户也可以读写文件、安装程序等)
-g:设置用户初始组的名称或者数字ID;该组必须是存在的;如果没有设置该选项,useradd会根据/etc/lofin.defs文件中USERGROUPS_ENAB环境变量进行设置,默认USERGROUPS_ENAB yes会用和用户名相同的名字创建群组,GID等于UID
-G:用户要加入的附加组列表;使用逗号分隔多个组,不要添加空格;如果不设置,用户仅仅加入初始组,(一个用户只允许有一个主组,可以有很多个附属组)
-s:用户默认登录shell的路径;启动过程结束后,默认启动的登录shell在此处设定,请确保使用的shell已经安装,默认是Bash,有时候需要禁止某些用户执行登录操作,例如用来执行系统服务的用户,将shell设置成/sbin/nologin就可以禁止用户登录
添加用户登录
例:添加一个名为YQHP的用户,并使用bash作为登录的shell
useradd YQHP
则在/etc/passwd后面可以看到
YQHP:x:1000:1000::/home/YQHP:/bin/bash
也可以通过命令来查看
tail -1 /etc/passwd
YQHP:用户名
x:密码占位符
1000:用户的UID。它都是用数字来表示的
1000:用户所属的GID,它都是用数字来表示的
用户描述信息:对用户的功能或其它来进行一个简要的描述
/home/YQHP:用户主目录(shell提示符中"~"代表的那个)
/bin/bash:用户登录系统后使用的shell
通过这个命令可以才看到已经以此用户的UID创建了一个组:
tail -1 /etc/group
YQHP:x:1000:
查看系统中,支持哪些shell
cat /etc/shells
指定用户的UID: -u 用户ID
例如:
useradd -u 1100 YQHP1
可以使用
tail -1 /etc/passwd
或者
id YQHP1
查看到
uid=1100(YQHP1) gid=1100(YQHP1) groups=1100(YQHP1)
我们先前在这里面看到有/home/YQHP/这个目录
YQHP:x:1000:1000::/home/YQHP:/bin/bash
我们进行查看,表面上是没有
ls /home/YQHP/
但加上-a属性,则显示其中有隐藏文件
[root@master ~]# ls /home/YQHP/ -a
. .. .bash_logout .bash_profile .bashrc
指定用户家目录
通过-d属性,可以指定家目录,例子:在/opt/下面创建hello1
useradd -u /opt/hello1 hello1
然后tail一下passwd
hello:x:1102:1102::/opt/hello1:bin/bash
指定用户的主组
通过-g属性,可以自定义此用户的主组,例如:创建一个YQHP2.将YQHP2的主组设置为YQHP的主组
useradd -g YQHP YQHP2
通过id查询一下
id YQHP2
可以看到
uid=1003(YQHP2) gid=1000(YQHP) groups=1000(YQHP)
指定用户的附属组
通过-G属性,我们也可以把这个附属组称为补充组,用户可以有0个或多个附加组的成员
如果一个组有多个成员,我们是可以在/etc/group文件中找到的
useradd -G YQHP,YQHP2 YQHP3
然后通过命令即可查看到
id YQHP3
创建用户的另一个命令:adduser
可以通过命令查看adduser,蓝色的adduser代表他是绿色的useradd的软链接
ノ.assets/adduser.png)
删除用户
usage:userdel [options] LOGIN
选项:-r 删除的时候,会同时删除用户的家目录和/var/mail下的目录,例如:
userdel YQHP
ls /home/
会发现下面还存在YQHP,加上-r参数则会一并删除
userdel -r YQHP
shadow文件-用户修改密码
密码文件
例如:通过命令查看shadow
head -3 /etc/shadow
可以查看到
[root@master ~]# head -3 /etc/shadow
root:$6$lNTx4FAPYWmzzvmv$Qdzb46lF92ezjAIlmx4odyRfPvOsydfc2n0kGraknZl1Vnbed2HCYrhRvpJ0TOzmnmDaVzuQ6q8aWoU0.4C/g1::0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
/etc/shadow文件每一行的格式如下:用户名:加密口令:上一次修改的时间(从1970年1月1日起的天数):口令在两次修改间的最小天数:口令修改之前向用户发出警告的天数:口令终止后账号被禁用的天数:从1970年1月1日起账号被禁用的天数:保留域
内容格式如下,用冒号隔开,可以用man 5 shadow查看帮助:
name | 登录名称,必须是有效用户名 |
---|---|
password | 已加密密码,分为三个部分用$分隔,第一部分表示用哪种哈希算法;第二部分是用于加密哈希的salt;第三部分是已加密的哈希哈希算法:1表示MD5;6表示SHA-512;5表示SHA-256注意:在密码前一个感叹号(!)代表该用户被锁定,可以在机器上转到改用户,但无法远程注意:密码是两个感叹号(!),表示没有设置密码 |
lastchanage | 最近一次更改密码的日期,以距离1970/1/1的天数表示 |
min-age | 密码更改后多少天内不能再次更改。0表示可以随时更改 |
max-age | 密码过期时间,必须在期限内修改密码 |
warning | 警告期,警告用户再过多少天密码将过期。0表示不提供警告 |
inactive | 宽限期,密码过期多少天仍然可以使用 |
expire | 帐号过期时间,以距离1970/1/1的天数表示。0或空字符表示永不过期 |
blank | 预留字段 |
给用户添加密码
例如:给oracle添加密码,有交互行为
passwd oracle
无交互行为
echo 123456 | passwd --stdin oracle
注:两个用户的密码一样,但shadow中加密的hash值不一样,那是因为两个用户的salt不一样,salt是passwd命令自动生成的
修改密码信息(扩展,了解)
通过文件信息过滤,可以查看到/etc/login.defs下有这些信息,过滤掉了空行与#开头的
egrep是grep的高级用法等同于grep -e,-v选项表示取反值,"^$|^#"中^表示以什么开头,$表示空行,完整意思表示以空行或#开头。
egrep -v "^$|^#" /etc/login.defs
查看到
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
详细说明:
CREATE_HOME(boolean) 指示是否应该为新用户默认创建主目录。此设置并不应用到系统用户,并且可以使用命令行覆盖。
GID_MAX(number),GID_MIN(number) useradd,groupadd或newusers创建的常规组的组ID范围。GID_MIN默认值1000(CentOS6为500),GID_MAX默认值60000。
MAIL_DIR(string)邮箱目录。修改或删除用户账户时需要处理邮箱,如果没有指定,将使用编译时指定的默认值。
MAIL_FILE(string) 定义用户邮箱文件的位置(相对于主目录)。
注意:MAIL_DIR和MAIL_FILE变量由useradd,usermod和userdel用于创建、移动或删除用户邮箱。如果MAIL_CHECK_ENAB设置为yes,它们也被用于定义MAIL环境变量。
MAX_MEMBERS_PER_GROUP(number) 每个组条目的最大成员数。达到最大值时,在/etc/group开始一个新条目(行)(使用同样的名称,同样的密码,同样的GID)。默认值是0,意味着组中的成员数没有限制。此功能(分割组)允许限制组文件中的行长度。这对于确保NIS组的行比长于1024字符。如果要强制这个限制,可以使用25。
注意:分割组可能不受所有工具的支持(甚至在Shadow工具集中)。如果没有必要你不应该使用这个变量。
PASS_MAX_DAYS(number) 一个密码可以使用的最大天数。如果密码比这个旧,将会强迫更改密码。如果不指定,就假定为-1,这会禁用此限制。
PASS_MIN_DAYS(number) 两次更改密码时间最小间隔。将会拒绝任何早于此的更改密码的尝试。如果不指定就假定为-1,将会禁用此限制。
PASS_WARN_AGE(number) 密码过期之前鬼畜警告的天数。0表示在过期当天警告,负值表示不警告。如果没有指定,不会给出警告。
SYS_GID_MAX(number),SYS_GID_MIN(number) useradd、groupadd或newusers创建的系统组的组ID范围。SYS_GID_MIN默认101(CentOS6为201),SYS_GID_MAX默认GID_MIN-1。
SYS_UID_MAX(number),SYS_UID_MIN(number) useradd或newusers创建的系统用户的用户ID的范围。SYS_UID_MIN默认101(CentOS6为201),SYS_UID_MAX默认UID_MIN-1。
UID_MAX(number),UID_MIN(number) useradd或newusers创建的普通用户的用户ID的范围。UID_MIN默认1000(CentOS6为500),UID_MAX默认60000。
UMASK(number) 文件模式创建掩码初始化为此值。如果没有指定,掩码初始化为022。Useradd和newusers使用此掩码设置它们创建的用户主目录的模式。也被login用于指定用户的初始umask。注意,此掩码可以被用户的GECOS行覆盖(当设置了QUOTAS_ENAB时),也可以被带K指示符的limits(5)定义的限制值覆盖。
USERGROUPS_ENAB(boolean) 如果uid和gid相同,用户名和主用户名也相同,使非root组的组掩码位和属主位相同(如:022->002,077->007)。如果设置为yes,组中也没有成员了,userdel将移除此用户组,useradd创建用户时,也会创建一个同名的默认组。
也可以查看添加用户信息
[root@master ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
扩展命令chage
chage [选项] 登录名
选项:
-m 密码更改后多少天内不能再次更改。0表示可以随时更改
-M 密码过期时间,必须在期限内修改密码
-W 警告期,警告用户再过多少天密码将过期。0表示不提供警告
-E 帐号过期时间,以距离1970/1/1的天数表示。0或空字符表示永不过期
-d最近一次更改密码的日期,以距离1970/1/1的天数表示。为0表示强制在下次登录时更新密码
-I宽限期,密码过期多少天仍然可以使用
-l 显示用户当前设置信息
例:修改用户YQHP密码信息:让这个用户YQHP首次登陆系统时必须更改其密码
chage -d 0 YQHP
ssh YQHP@192.168.153.50
注:两个用户的UID可以一样的,我甚至可以把root的UID改了,使其成为普通用户,让YQHP成为root用户
修改用户信息
语法:usermod [参数] 用户名
常用参数:
-u | UID | |
---|---|---|
-d | 宿主目录 | |
-g | 起始组 | 只能有一个 |
-G | 附加组 | 可以有多个 |
-s | 登录shell | |
-L | 锁定 |
例如:修改UID
usermod -u 1111 oracle
例子:更改主目录
usermod -m -d /mnt/YQHP YQHP
例子:添加说明信息
usermod -c "hello" YQHP
然后在passwd里面就可以找到YQHP用户有说明信息了
解决模板文件被删除之后显示不正常的问题
例子:将/home/YQHP的bash不小心给删了,导致登录异常
rm -rf /home/YQHP/.bash*
然后切换用户导致异常
su - YQHP
解决:复制bash到/home/YQHP/目录下
cp /etc/skel/.bash* /home/YQHP/
然后赋予YQHP用户对这个文件的权限
chown YQHP:YQHP /home/YQHP/.bash*
进入Centos7的紧急模式恢复root密码
第一步:重启系统,在出现内核选择时,按 ↑ ↓ 键,选择第一项,按下 e 键进行编辑,如下图 所示:
ノ.assets/按e.png)
第二步:进入emergency模式按e键后,会进入如下图所示界面,在此界面找到 ro 这一项,改为 rw init=/sysroot/bin/sh,如图所示:
rw init=/sysroot/bin/sh
ノ.assets/进入紧急模式.png)
当同时按下ctrl + x两个键时,就正式进入emergency模式,如下图所示:
ノ.assets/已进入.png)
原理:启动一个Shell环境,系统并没有真正启动
第三步:换根,修改密码
换根命令:
chroot /sysroot
chroot,即change root directory(更改root目录),在Linux系统中,系统默认的目录结构都是以/.即是以根(root)开始的,而在chroot之后,系统的目录结构将以指定的位置作为/位置
在经过chroot命令之后,系统读取到目录和文件将不再是在旧系统根下而是新根下(即被指定的新的位置)的目录结构和文件
修改密码命令:
passwd
更新系统信息
touch /.autorelabel
退出当前系统并且重启
exit
reboot
ノ.assets/修改密码.png)
Centos7-文件权限管理
权限的作用
通过对文件设定权限可以达到以下三种访问权限限制:
只允许用户自己访问;
允许一个预先指定的用户组中的用户访问;
允许系统中的任何用户访问;
查看权限
ll /root/anaconda-ks.cfg
文件权限基本解释:
- | rwx | r-x | r-x | user1 | user1 | time | FILENAME |
---|---|---|---|---|---|---|---|
文件类型 | 拥有者的权限 | 所属组的权限 | 其他人的权限 | 拥有者 | 属组 | 最后修改的时间 | 对象 |
其中:文件类型,可以为p d l s c b 和 -
p表示命名管道文件
l表示符号连接文件
-表示普通文件
s表示socket套接口文件,比如我们启用mysql时,会产生一个mysql.sock文件
c表示字符设备文件 例:虚拟控制台或tty0
b表示块设备文件 例:sda cdrom
例:
ll /dev/sda /dev/cdrom /etc/passwd /dev/tty0
ノ.assets/文件类型.png)
权限说明
对于文件来说:
r:读
w:写
x:执行
对于目录来说:
r:读(看到目录里面有什么) ls
w:在目录里面创建文件,删除,移动 touch mkdir rm mv cp
x:进入 cd
文件拥有者
UGO:所有者---用户组---其它用户
所有者:就是创建文件的用户,这个用户拥有对它所创建的文件的一切权限,所有者可以允许其所在的用户组可以访问所有者的文件
用户组:用户组是具有相同特征用户的逻辑集合,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有10个用户的话,就需要授权10次,显然这种方法是不太合理的,另一种方法是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中,那么所有用户就具有了和组一样的权限,这就是用户组
其它用户:系统内的其它所有者用户就是other用户类
举例说明
常见几种文件权限组成
-rwx --- ---:文件所有者对文件具有读取、写入和执行的权限
-rwx r-- r--:文件所有者具有读、写与执行的权限,用户组里用户及其他用户则具有读取的权限
-rw- rw- r-x:文件所有者与同组用户对文件具有读写的权限,而其他用户仅仅具有读取和执行的权限
drwx--x---x:目录所有者具有读写与进入目录的权限,其他用户仅能进入该目录,却无法读取任何数据
drwx-------:除了目录所有者所具有完整的权限之外,其他用户对该目录完全没有任何权限
举例如下:
每个用户都拥有自己的专属目录,通常放置/home下
ll /home/
注:[rwx------]表示目录所有者本身拥有的权限,其他用户是无法进入的,root除外,你以什么用户身份登录,那么你创建的文件或目录,自动成为该文件的所属主和组
更改文件的属主和属组
改变文件的所属关系用到的命令:
chown :可以用来改变文件(或目录)的属主
chgrp :可以用来改变文件(或目录)的默认属组
如果你要对目录进行操作,加参数 -R
语法:
chown user:group filename
比如:chown hr:san a.txt 把a.txt文件的属主和属组改为hr,san
chown user filename
比如:chown san a.txt 把a.txt文件的属主改为san用户
chown :group filename
比如有:chown :miao a.txt 把a.txt文件的属组改为miao这个组
chgrp hr filename
比如:chgrp hr f.txt
-R :递归(目录下的所有内容都更改,否则只修改目录)
注:一个文件只有读的权限,但文件所有者一定可以写文件,就像root可以对shadow强制写一样,因为shadow的拥有者是root
修改权限
使用字符设定
修改权限用的命令:chmod
作用:修改文件,目录的权限
语法:chmod [对谁操作] [操作符] [赋予什么权限] 文件名
对谁操作:
u----->用户user,表示文件或目录的所有者
g----->用户组group,表示文件或目录所属的用户组
o----->其他用户other
a----->所有用户all
操作符:
+添加权限 -减少权限 =直接给定一个权限
例如下面的组合:
u-w | user | 拥有者 |
---|---|---|
g+x | group | 组 |
o=r | other | 其他人 |
a+x | all | 所有人 |
例:chmod修改权限
chmod u-w 1.txt
ll 1.txt
或
给shell脚本加一个可执行权限
chmod a+x 1.txt
chmod a=rwx 1.txt
ll 1.txt
使用八进制(0-7)数字表示权限法
权限 | 二进制 | 八进制 | 描述 |
---|---|---|---|
--- | 000 | 0 | 没有任何权限 |
--x | 001 | 1 | 只有执行的权限 |
-w- | 010 | 2 | 只有写入的权限 |
-wx | 011 | 3 | 有写入和执行权限 |
r-- | 100 | 4 | 只有读取权限 |
r-x | 101 | 5 | 有读取和执行权限 |
rw- | 110 | 6 | 有读取和写入权限 |
rwx | 111 | 7 | 有全部权限 |
例:
语法:chmod 755 文件夹或者文件名字
chmod a=rwx b.txt
等于
chmod 777 b.txt
权限对文件和目录的影响
有三种权限可以应用:读取,写入和执行,这些权限对访问文件和目录的影响如下:
权限 | 对文件的影响 | 对目录的影响 |
---|---|---|
r(读取) | 可以读取文件的内容 | 可以列出目录的内容(文件名) |
w(写入) | 可以更改文件的内容 | 可以创建或删除目录中的任意文件 |
x(执行) | 可以作为命令执行文件 | 可以访问目录的内容(取决于目录中文件的权限) |
补码
umask命令允许你设定文件创建时的缺省模式,对应每一类用户(文件属主、同组用户、其他用户)存在一个相应的umask值中的数字
文件默认权限=666 目录默认权限=777
我们一般在/etc/profile、$[HOME]/.bash_profile或$[HOME]/.profile中设置umask值
例如就在第/etc/profile的第59行就能看见
vim /etc/profile
ノ.assets/umask.png)
注:UID大于199且用户的组名和用户名一样,那么umask值为002,否者为022
注:-gt在shell 中表示大于,id -g 显示用户组ID,id -gn 显示组名
修改umask值:
永久生效:编辑用户的配置文件vim .bash_profile
临时生效:umask权限补码,例如:
umask 044
权限的算法:一般情况是:目录默认权限-umask值
666-022=644
777-022=655 #这是一个好的记忆方法,但是不够严谨
因为:umask掩码为033 创建普通文件后,权限是什么?666-033=633 (rw- -wx -wx)?
然而实际测试结果是,你把umask值设置为033,去创建文件,发现是644
权威科学的计算方法步骤:
1.将默认权限(目录777,文件666)和umask值都转换为2进制
2.对umask取反
3.将默认权限和umask取反后的值做运算
4.将得到的二进制值再转换成为八进制,即为权限
例1:umask为022
6 6 6 | 0 2 2 | |
---|---|---|
110 110 110 | 000 010 010 | |
111 101 101 | #umask取反 | |
110 110 110 | 111 101 101 | #默认权限与umask取反后的值做与运算 |
110 100 100 | ||
6 4 4 | #再转为八进制 |
例2:umask为033
6 6 6 | 0 3 3 | |
---|---|---|
110 110 110 | 000 011 011 | |
111 100 100 | #umask取反 | |
110 110 110 | 111 100 100 | #默认权限与umask取反后的值做与运算 |
110 100 100 | ||
6 4 4 | #再转为八进制 |
文件的特殊权限:suid sgid sticky和文件扩展权限ACL
其实文件与目录设置不止这些,还有所谓的特殊权限,由于特殊权限会拥有一些"特权"
特殊权限:
文件的特殊权限:suid sgid sticky
1.SUID(set uid设置用户ID):限定:只能设置在二进制可执行程序上面,对目录设置无效
功能:程序运行时的权限从执行者变更成程序所有者的权限
2.SGID:限定:既可以给二进制可执行程序设置,也可以对目录设置
功能:在设置了SGID权限的目录下建立文件时,新创建的文件的所属组会继承上级目录的所属组
3.Stickybit:粘滞位权限是针对目录的,对文件无效,也叫防删除位,目录下创建的文件只有root、文件创建者、目录所有者才能删除,系统中的tmp目录就是这样
这3个特殊权限对应的数值为:
SUID | SGID | Stickybit |
---|---|---|
u+s或u=4 | g+s或g=2 | o+t或o=1 |
SUID:
例:SUID属性一般用在可执行文件上,当用户执行该文件时,会临时拥有该执行文件的所有者权限
ノ.assets/SUID.png)
注:一个普通用户是看不到且无法vim修改/etc/passwd文件的,但是为什么却可以修改自己的密码,这就是因为passwd是一个SUID文件,在他修改他密码时,那一瞬间是拥有文件所有者root的权限的
例二:
切换到普通用户,使用less查看shadow文件,是看不到的
less /etc/shadow
切换到root,给less命令一个SUID权限
su - root
chmod u+s /usr/bin/less
再切换到普通用户用less查看shadow就能看到了
可以仔细查看下less命令
ll /usr/bin/less
SGID:
例子:
创建一个test文件,ll查看权限
mkdir test
ll -d test
加上SGID权限,并再次查看权限
chmod g+s test
!ll
然后更改test文件的所属组,并在test目录下创建一个a.txt文件
chown :bin test
touch test/a.txt
查看,可以发现虽然所有者是root,但test下的文件所属组都为bin
ll test/
文件扩展权限ACL
扩展ACL :access control list
例:设置用户mk对文件a.txt拥有rwx权限,mk不属于a.txt的所属主和组,mk是other
创建一个/tmp/a.txt文件
touch /tmp/a.txt
ll /tmp/a.txt
给YQHP用户添加权限
setfacl -m u:YQHP:rwx /tmp/a.txt
删除单个权限
setfacl -x u:YQHP /tmp/a.txt
给目录添加扩展权限
setfacl -m d:u:YQHP:rwx /tmp/test
给目录下所有文件都加扩展权限 #-R 一定要在-m前面
setfacl -R -m u:YQHP:rw- /tmp/test
实战:创建一个让root都无法删除的文件
假如你想删除一个a.txt,但发现既无法删除也无法修改文件,通过ll查看发现文件权限也全部正常 ,这是因为有人对这文件使用了attr扩展属性
从REHL6开始,新增加文件系统扩展属性:
命令:chattr
参数:a 只能追加内容 i 不能被修改
+a:主机能追加内容 如:echo aaa >> hack.sh
+i:即Immutable,系统不允许对这个文件进行任何的修改,如果目录具有这个属性,那么任何的进程只能修改目录之下的文件, 不允许建立和删除文件
例子:
chattr +i a.txt
查看这个文件,可以发现多出了一个i属性
lsattr a.txt
删除i属性
chattr -i a.txt
参数a同理使用