1 Linux用户组和权限管理
1.1 用户基础
1.1.1 用户&用户组
在互联网中,几乎所有的软件级别的解决方案,只要涉及到安全操作,基本上都是按照如下的流程进行处理的:
Authentication:认证,验证用户身份
Authorization:授权,不同的用户设置不同权限
Accouting|Audition:审计(准入控制)
安全上下文
Linux安全上下文Context:
运行中的程序,即进程 (process),以进程发起者的身份运行,进程所能够访问资源的权限取决于进程
的运行者的身份
分别以root 和 sswang 的身份运行 /bin/cat /etc/shadow ,得到的结果是不同的,资源能否
能被访问,是由运行者的身份决定,非程序本身
用户登录和退出
关于用户登录和退出,在linux系统中,会有对应的日志文件进行相关的记录动作:
Rocky9的日志:
/var/log/secure
/var/log/audit/audit.log
ubuntu的日志:
/var/log/auth.log
1.1.2 配置文件
#############################################################################
/etc/passwd:用户及其属性信息(名称、UID、主组ID等)
/etc/shadow:用户密码及其相关属性,只有 root 才有读和写权限
/etc/group:组及其属性信息
/etc/gshadow:组密码及其相关属性
查看用户信息:
id 用户名
从passwd文件中获取某一个用户信息
getent passwd sswang
#############################################################################
1.1.3 配置操作
#############################################################################
#vipw|vigr 命令用于编辑/etc/passwd,/etc/group,/etc/shadow,/etc/gshadow
vipw #默认编辑 /etc/passwd 文件
vipw -s #/etc/shadow 注意只有root用户能修改/etc/shadow
vigr #默认编辑 /etc/group 文件
vigr -s #/etc/gshadow
pwck 命令:对用户相关配置文件进行检查,默认检查文件为 /etc/passwd
pwck [options] [passwd_file | shadow_file]
-q|--quiet #只报告错误,忽略警告
-r|--read-only #显示错误和警告,但不改变文件
-R|--root CHROOT_DIR #chroot 到的目录
-s|--sort #通过 UID 排序项目
grpck命令:对用户组相关配置文件进行检查,默认检查文件为 /etc/group,/etc/gshadow
grpck [options] [group [gshadow]]
-r|--read-only #显示错误和警告,但不改变文件
-R|--root CHROOT_DIR #chroot 到的目录
-s|--sort #通过 UID 排序项
eg:
[root@rocky9 ~]# pwck #就是用于检测/etc/passwd内容有没有达到要求
无效的影子密码文件项
删除“”一行?y
pwck:文件已更新
[root@rocky9 ~]# grpck #就是用于检测/etc/group,/etc/gshadow内容有没有达到要求
无效的组文件条目
删除“”一行?y
grpck:文件已更新
#############################################################################
1.2 用户管理
1.2.1 用户组管理1
#############################################################################
groupadd 命令:创建用户组
命令格式
groupadd [options] GROUP
稍微常用选项
-r|--system #创建一个系统组 CentOS 6之前: ID<500,CentOS 7以后: ID<1000
一般选项
-f|--force #如果组已经存在则成功退出
-g|--gid GID #新建组时指定组ID,默认是系统分配,指定值不要超过[GID_MIN,GID_MAX]
-K|--key KEY=VALUE #不使用 /etc/login.defs 中的默认值,自己指定,比如 -K GID_MIN=100
-o|--non-unique #允许创建有重复 GID 的组
-p|--password PASSWORD #为新组使用此加密过的密码,这里要用加密后的密文,不然就是直接是明文在/etc/gshadow 里面
groupmod 命令:修改group属性
命令格式:
groupmod [options] GROUP
常见选项
-g|--gid GID #将组 ID 改为 GID
-n|--new-name NEW_GROUP #改名为 NEW_GROUP
-o|--non-unique #允许使用重复的 GID
-p|--password PASSWORD #将密码更改为(加密过的) PASSWORD
groupdel 命令:删除用户组
常见选项
-f|--force #强制删除,即使是用户的主组也强制删除组,但会导致无主组的用户不可用无法登录
eg:
#创建用户组
groupadd group1
#查看用户组
getent group group1
#查看多个用户组
[root@rocky9 ~]# getent group group1 group2 group3
#指定id创建用户组
groupadd group2 -g 10086
#创建系统用户组
groupadd -r sgroup1 #sgroup1:x:978 系统用户组最后的编号CentOS 7以后: ID<1000
#强制创建已存在用户组
groupadd -f group1
#修改用户组ID属性
[root@rocky9 ~]# groupmod -g 20087 group4
[root@rocky9 ~]# getent group group4
group4:x:20087:
#修改用户组名字
[root@rocky9 ~]# groupmod -n group5 group4
[root@rocky9 ~]# getent group group4
[root@rocky9 ~]# getent group group5
group5:x:20087:
#删除用户组
删除指定用户组 - 只能一个一个的删
[root@rocky9 ~]# groupdel -f group1
[root@rocky9 ~]# groupdel -f group2
[root@rocky9 ~]# groupdel -f group3
#############################################################################
1.2.2 用户创建
#############################################################################
id用于查看用户的基本信息
命令格式
id [username]
一般选项
-a #显示详细信息,
默认选项
-Z|--context #仅显示安全上下文信息,要开启selinux 配置才有
-g|--group #仅显示GID,就是只显示主组ID
-G|--groups #显示主组和附加组ID,就是所有组ID
-n|--name #显示用户名或组名,要组合使用-nu|-ng|-nG
-u|--user #仅显示UID
useradd 命令可以创建新的Linux用户
命令使用
useradd [options] LOGIN
useradd -D # 查看默认的配置属性
常用选项
-u|--uid UID #指定UID
-g|--gid GID #指定用户组,-g groupname
-m|--create-home #创建家目录,一般用于登录用户
-p|--password PASSWORD #设置密码,这里的密码是以明文的形式存在于/etc/shadow 文件中
一般选项
-c|--comment COMMENT #新账户的 GECOS 字段
-d|--home-dir HOME_DIR #指定家目录,可以是不存在的,指定家目录,并不代表创建家目录
-s|--shell SHELL #指定 shell,可用shell在/etc/shells 中可以查看
-r|--system # 创建系统用户
# CentOS 6之前 ID<500
# CentOS7 以后 ID<1000不会创建登录用户相关信息
-M|--no-create-home #不创建家目录,一般用于不用登录的用户
-o|--non-unique #允许使用重复的 UID 创建用户
-G|--groups GROUP1[,GROUP2,...] #为用户指明附加组,组须事先存在
-N|--no-user-group #不创建同名的组,使用users组做主组
-D|--defaults #显示或更改默认的 useradd 配置,默认配置文件是 /etc/default/useradd
-e|--expiredate EXPIRE_DATE #指定账户的过期日期 YYYY-MM-DD 格式
-f|--inactive INACTIVE #密码过期之后,账户被彻底禁用之前的天数,0 表示密码过期立即禁用,-1表示不使用此功能
-k|--skel #指定家目录模板,创建家目录,会生成一些默认文件,如果指定,就从该目录复制文件,默认是/etc/skel/,要配合-m
-K|--key KEY=VALUE #不使用 /etc/login.defs 中的默认值,自己指定,比如 -K UID_MIN=100
-l|--no-log-init #不将用户添加到最近登录和登录失败记录,前面讲到的3a认证审计,就在此处lastlog|lastb|cat /var/log/secure
newusers 批量创建用户
命令使用:
newusers files
file文件格式为:
用户名:密码:uid:gid:描述信息:家目录:登录shell
u1:123456:1024:1024::/home/u1:/bin/bash
eg:
查看当前登录用户
[root@rocky9 ~]# id
查看指定用户信息
[root@rocky9 ~]# id sswang
通过选项,仅显示部分内容;#显示用户名或组名,要组合使用-nu|-ng|-nG
[root@rocky9 ~]# id -ng sswang
sswang
#用户创建
[root@rocky9 ~]# useradd -m nihao #ubuntu创建用户不会自动创建家目录需要加—m,所以都加上比较好。
[root@rocky9 ~]# id nihao
用户id=1001(nihao) 组id=1001(nihao) 组=1001(nihao)
#查看(nihao)组的组成员和组密码等详细信息
[root@rocky9 ~]# getent gshadow nihao
nihao:!::
#查看用户在passwd文件里的信息
[root@rocky9 ~]# getent passwd nihao
nihao:x:1001:1001::/home/nihao:/bin/bash
#查看详用户细密码信息,是加密的
[root@bogon ~]# getent shadow ss
ss:$6$njkq6lN2zSwcYEJA$qrYl7I/C9vKFtGZJWP3ZJdC8.IyUiwASq1xvhrVOP537YPrDSFqJQ6P9PkOzxfEr4ptvWi.ZezQh8pbVOfDnN1::0:99999:7:::
#创建用户组
groupadd -g 10086 group1
#创建用的时候指定用户组:
[root@rocky9 ~]# useradd -g 10086 user1
#查看用户创建效果
[root@rocky9 ~]# id user1
用户id=1026(user1) 组id=10086(group1) 组=10086(group1)
#在用户存在的前提下,删除用户组
[root@rocky9 ~]# groupdel -f group1
[root@rocky9 ~]# id user1
用户id=1026(user1) 组id=10086 组=10086
结果显示:
强制删除用户组之后,显示该组名的地方,只能显示该组ID,
如果此时新建与组ID相同的新组,则被删除的组的数据会被新组关联。
#再次创建相同id的用户组
[root@rocky9 ~]# groupadd group2 -g 10086
[root@rocky9 ~]# id user1
用户id=1026(user1) 组id=10086(group2) 组=10086(group2
#查看用户创建的基本属性
[root@rocky9 ~]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
#更改用户创建的属性信息(改用户的shell)
[root@rocky9 ~]# useradd -D -s /bin/sh
#批量创建用户:
#准备用户文件
[root@rocky9 ~]# cat user.txt
sswang1:123456:1024:1024::/home/sswang1:/bin/bash
sswang2:123456:1025:1025::/home/sswang2:/bin/bash
#批量创建用户
[root@rocky9 ~]# newusers user.txt
#############################################################################
1.2.3 密码拆解
#############################################################################
#查看用户密码信息
[root@rocky9 ~]# getent shadow nihao
nihao:$6$cKdUJegv4ahdu0CD$inEcX.EbKACalTOjjvmgWn.XrUw760UFNU3x9KScwFIRdrHbA.7zy3
Lto46N32Ctq8uVckpdLeU7HLo7SAWQF0:19991:0:99999:7:::
第一部分: 指定加密算法
$6
第二部分: 指定二次校验选项 - salt 盐值
$cKdUJegv4ahdu0CD
第三部分:通过 加密算法(salt值 + 密码) 加密后的一段字符串
$inEcX.EbKACalTOjjvmgWn.XrUwxxx.7zy3Lto46N32Ctq8uVckpdLeU7HLo7SAWQF0
简单实践:
#查看生成密码的算法解读
[root@rocky9 ~]# whatis crypt
[root@rocky9 ~]# man 5 crypt
#生成密码实践:
使用默认的算法,salt的值是随机的生成随机的密码,-6(这是一种指定的加密算法)
openssl passwd -6 123456
指定salt生成 固定内容的密码
openssl passwd -salt abcd -6 123456
eg:
[root@bogon ~]# openssl passwd -6 123456
$6$oYGZxAnIAEK4r/pV$uOCcWKwfoHRp58VLBgeNL63FmrTv/sScofhU52rsyCGD2/miwkegjj.9j9vOAQf0qsfJBi3H7/jJWSsFS88xO/
[root@bogon ~]# openssl passwd -salt abcd -6 123456
$6$abcd$BlbaPOqDDm3eVW.GrfRm4Vcuz4.0WgysdL5FY1CIn/4a5QwuySngbORfHwsHfXQERZejgHIflz1fJkKs82Iix.
生成随机密码:
tr -dc '[:alnum:]' < /dev/urandom | head -c 12 #-dc 删除所有不满足条件的字符
tr -dc 'A-Za-z0-9_!@#$%^&*()-+=' < /dev/urandom | head -c 12 #/dev/urandom是一个特殊的文件,提供了伪随机数流。
#openssl生成9个字节的随机数,然后通过base64进行编码【3个字节转换成base64的4个字符】
[root@rocky9 ~]# openssl rand -base64 9
VUsHXvHejGOl
[root@rocky9 ~]# openssl rand -base64 12
Ml2ruTni6XDrmygh
#mkpasswd 命令:
[root@rocky9 ~]# mkpasswd 123456 #mkpasswd是一个密码生成器,可用于生成带有特定复杂度的密码
$y$j9T$g4A3lDW88Ue7tSJihSUm2.$fpJ83ev./R7MswhpT0uQ/moOvcUx7tYsIF8idDOkEZ4
#更改密码:
passwd 用户名
passwd --stdin 用户名 <<<密码 #在Rocky和centos系统用
echo '密码' | passwd --stdin 用户名 #在Rocky和centos系统用
echo sswang:123456 | chpasswd #ubuntu,Rocky和centos 都可用
批量修改密码:(Ubuntu专用,Rocky和centos用不了)
chpasswd更改用户命令:用于批量更改用户密码,适合脚本自动化使用。
chpasswd < file
文件格式:
用户名:密码
ul:1234567
#############################################################################
1.2.5 用户属性
#############################################################################
usermod命令:用于进行用户属性的修改动作
命令格式:
usermod [options] LOGIN
常见选项
-g|--gid GROUP #修改组
-a|--append GROUP #将用户追加至上边
-G 中提到的附加组中,并不从其它组中删除此用户
-L|--lock #锁定用户帐号/禁用账号,在/etc/shadow 密码栏的增加 !
-l|--login LOGIN #新的登录名称
一般选项
-c|--comment COMMENT #修改注释
-d|--home HOME_DIR #修改家目录
-e|--expiredate EXPIRE_DATE #修改过期的日期,YYYY-MM-DD 格式
-f|--inactive INACTIVE #密码过期之后,账户被彻底禁用之前的天数,0 表示密码过期立即禁用,-1表示不使用此功能
-G|--groups GROUPS #groupName|GID... 新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-L|--lock #锁定用户帐号,在/etc/shadow 密码栏的增加 !
-m|--move-home #将家目录内容移至新位置,和 -d 一起使用
-o|--non-unique #允许使用重复的(非唯一的) UID
-p|--password PASSWORD #修改密码,这里是明文,如果要在此处修改密码,则要用加密后的字符串
-s|--shell SHELL #修改 shell
-u|--uid UID #修改 UID
-U|--unlock #解锁用户帐号,将 /etc/shadow 密码栏的!拿掉
命令实践
#更改用户登入名和描述信息,原用户为nihao2,改成nihao
[root@rocky9 ~]# usermod -c "nihao to nihao2" -l nihao2 nihao
[root@rocky9 ~]# id nihao #原名没了
id: “nihao”:无此用户
[root@rocky9 ~]# id nihao2 #登入名改成nihao2
用户id=1001(nihao2) 组id=1001(nihao) 组=1001(nihao)
确认用户家目录
[root@rocky9 ~]# ls /home/
nihao remote sswang sswang1 sswang2 test1 user1
[root@rocky9 ~]# getent passwd nihao2
nihao2:x:1001:1001:nihao to nihao2:/home/nihao:/bin/bash #nihao to nihao2 这一段描述信息也改了
结果显示:
nihao用户更改为了nihao2,但是用户家目录没有变动
#更改用户的登录shell 以及 用户家目录
[root@rocky9 ~]# usermod -s /bin/sh -d /home/nihao2 nihao2
#禁用用户实践
[root@rocky9 ~]# usermod -L nihao2
#原理:在用户密码前面多了一个 !
[root@rocky9 ~]# getent shadow nihao2
nihao2:!$6$ReJ2PO8ZEONu44XG$gRDh7wntpj6.IC7vVprzgrfsILW1Wz1G8KdwfkyHuAXd7gtkOWYvuk0zXME0BFAdLwsNOpI.syO1gAGjkSuGm.:19991:0:99999:7:::
#撤销用户登录锁定
[root@rocky9 ~]# usermod -U nihao2
[root@rocky9 ~]# getent shadow nihao2 # 用户密码前面的 ! 没了
nihao2:$6$ReJ2PO8ZEONu44XG$gRDh7wntpj6.IC7vVprzgrfsILW1Wz1G8KdwfkyHuAXd7gtkOWYvu
k0zXME0BFAdLwsNOpI.syO1gAGjkSuGm.:19991:0:99999:7:::
#用户空密码设定
[root@rocky9 ~]# useradd konguser
查看效果
[root@rocky9 ~]# getent shadow konguser
konguser:!!:19991:0:99999:7:::
此处的konguser的密码位置是 !!
手动修改shadow文件,取消!!
[root@rocky9 ~]# vim /etc/shadow
[root@rocky9 ~]# getent shadow konguser
konguser::19991:0:99999:7:::
注意:我们修改的文件,仅仅是将 两个!! 取消掉
使用ssh登录失失败的
root@sswang:~# ssh konguser@10.0.0.13
konguser@10.0.0.13's password:
但是我们在终端里面可以直接用konguser登录
#############################################################################
1.2.6 用户删除
#############################################################################
userdel: 可以对linux系统用户进行删除操作
命令格式:
userdel [options] LOGIN
常见选项-f|--force #强制删除,哪怕用户正在登录状态-r|--remove #删除家目录和邮件目录
注意: 正在使用的用户无法删除,除非-f强制
#命令实践:
#查看正在使用的用户
[root@rocky9 ~]# who
#正常删除用户-不清理家目录
[root@rocky9 ~]# userdel user1
#正常删除用户-清理家目录
[root@rocky9 ~]# userdel -r test1
#强制删除用户
[root@rocky9 ~]# userdel -f -r konguser
注意:被删除的用户,会还在使用;只有该用户退出使用后,才会真正的消失
#############################################################################
1.2.7 用户切换
#############################################################################
普通用户切到root:需要输入root密码
su -
root用户切到普通用户(无需密码);普通用户切到另一个普通用户(需要密码)
su - 用户名
通过指定shell,可以切换到不可登入的系统用户:
比如:
daemon:x:2:2:daemon:/sbin:/sbin/nologin #daemon 是不可登入的一个系统用户
[root@rocky9 ~]# su - daemon
This account is currently not available.
但是指定shell可以实现切换
[root@rocky9 ~]# su - daemon -s /bin/bash
[daemon@rocky9 ~]$ id
用户id=2(daemon) 组id=2(daemon) 组=2(daemon)
#############################################################################
1.2.8 密码策略
#############################################################################
chage 可以修改用户密码策略
命令格式
chage [options] LOGIN
一般选项
-d LAST_DAY #更改密码的时间
-m|--mindays MIN_DAYS
-M|--maxdays MAX_DAYS
-W|--warndays WARN_DAYS
-I|--inactive INACTIVE #密码过期后的宽限期
-E|--expiredate EXPIRE_DATE #用户的有效期
-l #显示密码策略
简单实践
查看当前的密码策略:
[root@rocky9 ~]# chage -l sswang
最近一次密码修改时间
密码过期时间
密码失效时间
帐户过期时间
:从不
:从不
:从不
:从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7
修改密码策略
[root@rocky9 ~]# chage sswang
#############################################################################
1.2.9 用户组管理2
#############################################################################
gpasswd:更改组成员和密码 - 站在用户的角度
命令格式:
gpasswd [option] GROUP
一般选项:
-a|--add USER #向组中添加用户
-d|--delete USER #从组中移除用户
-r|--delete-password #删除组密码
-R|--restrict #向其成员限制访问组 GROUP
-M|--members USER,... #批量加组
-A|--administrators ADMIN,... #批量设组管理员
注意:组没有密码的情况下,加组只能由root来操作
groupmems 可以管理附加组的成员关系-站在用户组的角度
命令格式:
groupmems [options] [action]
一般选项
-g|--group groupname #更改为指定组 (只有root)
-a|--add username #指定用户加入组
-d|--delete username #从组中删除用户
-p|--purge #从组中清除所有成员
-l|--list #显示组成员列表
groups 可查看用户组关系
命令格式:
groups [OPTION].[USERNAME]...
简单实践:
将用户加入到一个小组:
将sswang加入到web组
[root@rocky9 ~]# gpasswd -a sswang web # groupmems -g web -a sswang 同效果
[root@rocky9 ~]# getent gshadow web #查看web组信息,多了一个用户 sswang,这个命令只有root下有效
web:!::sswang
[root@rocky9 ~]# id sswang #查看用户信息,多了一个组web,一个用户可以有加入很多组
用户id=1000(sswang) 组id=1000(sswang) 组=1000(sswang),10(wheel),10087(web)
#为组添加密码
[root@rocky9 ~]# gpasswd web
确认效果
[root@rocky9 ~]# getent gshadow web #之前是web:!::sswang这样,没密码的
web:$6$Yn38J2xYaxPJiqsq$GOLKqbtMg9BHqeXcR0EzHgOWbsEIle89YTA45MXNzEOcWaZOIbLYxzSv6RBr75H23Edi/xNizvMl.use7v1Vt1::sswang
#从组中移出用户
[root@rocky9 ~]# gpasswd -d sswang web
#维护组关系
查看web组有哪些用户
[root@rocky9 ~]# groupmems -g web -l #这个命令是管理附加组的,不会显示主组信息
#因为web组没有用户所以不显示任何信息
#为web组添加用户
[root@rocky9 ~]# groupmems -g web -a sswang
再次检测
[root@rocky9 ~]# groupmems -g web -l
sswang
从组里面删除用户
[root@rocky9 ~]# groupmems -g web -d sswang
#############################################################################
1.2.10 其他配置
#############################################################################
用户登录配置文件 /etc/login.defs
[root@rocky9 ~]# grep -Ev '#|^$' /etc/login.defs
查看创建用户的配置文件 /etc/default/useradd
[root@rocky9 ~]# cat /etc/default/useradd
定制新用户基本配置和属性:
[root@rocky9 ~]# ls /etc/skel/
注意:该目录保存了创建新用户后需要拷贝到 /home 目录下所需的相关文件。
面试题:如何在新建用户家目录里,提供一个通用的提示文件?
[root@rocky9 ~]# ls -a /home/nihao/
. .. .bash_logout .bash_profile .bashrc .mozilla .zshrc
[root@rocky9 ~]# ls /etc/skel/ -a
. .. .bash_logout .bash_profile .bashrc .mozilla .zshrc
#用户家目录下,自动添加了一些配置文件,这些文件来自于 /etc/skel 目录下的文件
定制用户登录的显示页面,用于设置用户登录系统后显示给用户的提示信息,该文件默认为空。
可以做成皮卡丘等有趣图片作为登入时显示的信息。
[root@rocky9 ~]# cat /etc/motd
#############################################################################
1.3 权限管理
1.3.1 权限体系
#############################################################################
Linux文件权限主要分为三种类型:
读权限(Readable):
允许用户读取文件内容 或 查看目录中的文件列表。
简写:r、4
写权限(Writable):
允许用户修改文件内容 或 在目录中创建、删除或重命名文件。
简写:w、2
执行权限(eXcutable):
对于文件,表示该文件是可执行的程序;对于目录,表示用户可以进入该目录。
简写:x、1
文件权限被分为三个级别,分别对应不同的用户群体:
所有者(Owner):
文件或目录的创建者,拥有对文件或目录的最高权限。
简写:u
所属组(Group):
文件或目录被分配到的用户组,组内的所有成员将继承该组对该文件或目录的权限。
简写:g
其他用户(Others):
既不是文件所有者也不是所属组成员的所有其他用户。
简写:o
程序访问文件时的权限,取决于此程序的发起者
进程的发起者,同文件的属主:则应用文件属主权限
进程的发起者,属于文件属组;则应用文件属组权限
应用文件“其它”权限
注意:
默认情况下
- 创建的目录权限是 755 也就是说,谁都可以进入目录查看
- 创建的文件权限是 644 也就是所,谁都可以读去文件内容
查看文件:
[root@rocky9 ~]# ls /etc/bashrc
-l-rw-r--r--. 1 root root 2696 9月 23 06:13 /etc/bashrc
-l-rw-r--r--. #文件权限,
1 #链接数,
root #所有者,
root #所属组,
2696 #文件大小,
9月 23 06:13 #创建和修改时间,
/etc/bashrc #文件名字
r和w权限对root 用户无效,对没有读写权限的文件,root用户也可读可写
只要 所有者,所属组或other三者之一有x权限,root就可以执行
#############################################################################
1.3.2 属性操作
#############################################################################
基础知识
chown 命令可以修改文件的属主,也可以修改文件属组
命令格式:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
注意:
owner 表示所有者
:group 和 .group 表示归属组
owner. 和 owner: 表示所有者和归属组一样
常用选项
-R|--recursive #递归操作
一般选项
-c|--changes #同-v选项,但只显示更新成功的信息
-f|--silent|--quiet #不显示错误信息
-v|--verbose #显示过程
--dereference #修改的是符号链接指向的文件,而不是链接文件本身
-h|--no-dereference #修改的是符号链接文件,而不是其指向的目标文件
#只有当前系统支持修改符号链接文件属性时,此项才有效
--from=user:group #根据原属主属组来修改,相当于一个查询条件
--no-preserve-root # 不特别对待“/”,意思就是将根目录当成普通目录来执行
# 默认如此,所以不要对根目录进行操作
--preserve-root #不允许在"/"上递归操作
--reference=RFILE #根据其它文件权限来操作,就是复制该文件的属主属组信息给指定文件
下列选项配合 -R 使用
-H #如果选项是指向目录的软链接,则只修改指向的目录,不改变目录里面文件的属主属组
-L #更改所有遇到的符号链接指向的目录
-P #不更改符号链接指向的目录
chgrp 命令可以只修改文件的属组
命令格式:
chgrp [OPTION]... GROUP FILE...
chgrp [OPTION]... --reference=RFILE FILE...
常用选项
-R|--recursive #递归操作
一般选项
参考 chown 的选项
chmod 命令可以修改文件的操作权限
命令格式
chmod [OPTION]... MODE[,MODE]... FILE...
chmod [OPTION]... OCTAL-MODE FILE...
chmod [OPTION]... --reference=RFILE FILE...
常用选项
-R|--recursive #递归操作
一般选项
-c|--changes #同-v选项,但只显示更新成功的信息
-f|--silent|--quiet #不显示错误信息
-v|--verbose #显示过程
--no-preserve-root #不特别对待“/”,意思就是将家目录当成普通目录来执行,默认如此,所以不要对根目录进行操作
--preserve-root #不允许在"/"上递归操作
--reference=RFILE #根据其它文件权限来操作,就是复制该文件的权限信息给指定文件
面试题:Linux中的目录和文件的权限区别,分别说明:读,写,和执行权限的区别:
对于目录:
x #没有进入的资格,剩余的权限无效
r #具有ls命令执行的权限
w #目录下创建/删除文件的权限
对于文件:
x #通过文件所在路径执行文件(如果指定/bin/bash 执行那都是成功的,这不是以文件所在路径执行)
r #为文件增加内容--编辑文件
w #查看这个文件的内容--cat
权限的增删:
linux系统中,对于文件的属性和权限的操作,常见的动作主要有以下三种
+ 增加某些权限- 删除某些权限
= 只保留某些权限,覆盖写法
操作示例:
u+r # 属主加读权限
g-x # 属组去掉执行权限
ug=rx # 属主属组权限改为读和执行
o= # other用户无任何权限
a=rwx # 所有用户都有读写执行权限
u+r,g-x # 同时指定
+x # 属主属组其他用户都加可执行权限
eg:
只修改所有者属性
[root@rocky9 ~]# chown sswang chown/a.txt
同时修改所有者和归属组的属性
[root@rocky9 ~]# chown sswang. chown/b.txt #不推荐单.的写法
[root@rocky9 ~]# chown sswang: chown/c.txt #推荐:的写法
通过用户id的方式修改文件归属
[root@rocky9 ~]# chown 1024 chown/d.txt
仅修改文件的归属组的属性
[root@rocky9 ~]# chown .sswang1 chown/d.txt
批量修改文件所有者属性信息:
[root@rocky9 ~]# chown -R sswang2 /path
批量修改文件归属组信息设置:
[root@rocky9 ~]# chgrp -R web /path
文件权限修改实践:
指定文件的其他用户都增加x权限
[root@rocky9 ~]# chmod o+x chown/{a..e}.txt
指定文件的 归属组权限+x,其他用户权限-x
[root@rocky9 ~]# chmod g+x,o-x chown/{a..e}.txt
指定文件的 所有者权限为 rwx
[root@rocky9 ~]# chmod u=rwx chown/{a..e}.tx
指定文件的 仅有其他人员才具有w权限
[root@rocky9 ~]# chmod 002 chown/{a..e}.txt
目录的写权限实践
[root@rocky9 ~]# chmod 700 -R /chown/dir1/
#############################################################################
1.3.3 默认权限
#############################################################################
linux系统在创建文件的时候,会有一个默认的权限。普通文件的权限是 644,普通目录文件的权限是
755。在Linux系统中,文件创建时的默认权限与umask(用户文件创建掩码)紧密相关。umask决定了在创
建新文件或目录时哪些权限位将被屏蔽(即不允许),从而间接决定了新文件或目录的默认权限。
umask简介
umask是用户文件创建掩码(User Mask)的缩写,它是一个八进制数值,用于指定在创建新文件或目
录时需要屏蔽的权限位。umask的值决定了新创建的文件或目录的默认权限。
默认情况下,Linux系统中的umask值通常为022。这个值意味着:
对于新创建的目录,所以默认权限为755(即所有者具有读、写、执行权限,所属组和其他用户具有读和执行权限)
对于新创建的文件,所以默认权限为644(即所有者具有读写权限,所属组和其他用户只有读权限)。
原因:
对于目录,必须要有进入x=1,查看r=4,操作文件的权限w=2,即完整的权限是777,减去umask 022。
对于文件,默认情况下不需要x(=1)的权限,完整的权限是666,减去umask 022
设定umask
[root@rocky9 tmp]# umask 123
[root@rocky9 tmp]# umask
0123 #前面的0不算
临时修改:
在命令行中使用umask命令后跟新的umask值来临时修改umask值。例如,umask 000会将umask值设
置为000,但这种方式只在当前会话中有效,重启后失效
永久修改:
要将umask值的更改永久生效,可以将新的umask值添加到用户的登录shell配置文件中
(如.bashrc、.profile等)。这样,每次用户登录时都会自动应用新的umask值。
1.3.4 特殊权限
SUID: 一旦为 cat 赋予了suid属性,普通用户,就暂时具有了该命令所有者的一些属性。
SGID: 一旦目录具有了SGID的属性后,无论是哪个用户在该目录下创建文件,文件的归属组都是该目录的数组属性。
STICKY: 一旦dir目录添加了STICKY属性,那么用户只能删除自己的文件。
#############################################################################
特殊权限
在Linux文件系统中,除了基本的读(r)、写(w)、执行(x)权限外,还存在三种特殊权限,它们分
别是SUID(Set User ID)、SGID(Set Group ID)和Sticky Bit。这些特殊权限用于在特定情况下提
供更灵活的权限控制。
SUID(Set User ID)
功能:
当SUID权限设置在可执行文件上时,执行该文件的用户将暂时获得该文件所有者的权限。这意味着,即
使执行者不是文件的所有者,他们也能以文件所有者的身份执行文件,并可能因此访问或修改只有文件所有者
才能访问的资源。
表现:
在ls -l命令的输出中,如果可执行文件的"所有者"执行ls -权限位是s(小写),则表示该文件具有
SUID权限。如果该文件没有执行权限,则表现为S(大写)。
示例:
root@sswang:~# ls -l /usr/bin/* | grep -E 'rws'-rwsr-xr-x 1 root root
-rwsr-xr-x 1 root root 72792 4月 9 15:01 /usr/bin/passwd #取一个举例
解读:
以/usr/bin/passwd文件为例,Linux系统中的/usr/bin/passwd文件就具有SUID权限。这使得普
通用户能够修改自己的密码,因为passwd程序在执行时会暂时获得root权限,从而能够写入只有root才能访
问的/etc/shadow文件。
SGID(Set Group ID)
功能:
SGID权限可以应用于可执行文件或目录。对于可执行文件,它与执行SUID文件类似,但影响的是执行者
的组身份。然而,在实际应用中,SGID更多地被用于目录,以便在该目录下创建的新文件自动继承目录的组身
份。
表现:
在ls -l命令的输出中,如果"目录的组"执行权限位是s(小写),则表示该目录具有SGID权限。
示例:
root@sswang:~# ls -l /usr/bin/* | grep -E '\-sr'
-rwxr-sr-x 1 root shadow 72184 4月 9 15:01 /usr/bin/chage #取一个举例
解读:
在多用户环境中,SGID目录可以确保在该目录下创建的所有文件都属于同一个组,从而方便组成员之间
的文件共享和管理。
Sticky Bit
功能:
Sticky Bit权限仅对目录有效。当一个目录被设置为Sticky Bit时,只有该目录的所有者、文件的所
有者或root用户才能删除或重命名该目录下的文件。这有助于防止其他用户删除或移动他们不拥有但可能有权
访问的文件。
表现:
在ls -l命令的输出中,如果目录的"其他用户"执行权限位是t(小写),则表示该目录具有Sticky
Bit权限。
示例:
root@sswang:~# ll / | grep tmp
drwxrwxrwt 18 root root 4096 9月 26 09:17 tmp/
解读:
Sticky Bit通常用于需要多用户访问但又要限制删除权限的目录
权限 字符表示 八进制表示 备注
SUID s(小写) 4 如果原属主没有可执行权限,再加SUID权限,则显示为S
SGID s(小写) 2 如果原属组没有可执行权限,再加SGID权限,则显示为S
STICKY t(小写) 1 如果other没有可执行权限,再加STICKY权限,则显示为T
设定方式:
SUID设定方式: u+s、u-s、4xxx
SGID设定方式: g+s、g-s、2xxx
STICKY设定方式: o+t、o-t、1xxx
#############################################################################
1.3.5 SUID实践
#############################################################################
准备源文件:
[root@rocky9 ~]# ll /usr/bin/{cat,passwd,tail}
-rwxr-xr-x 1 root root 39384 4月 5 22:36 /usr/bin/cat*
-rwsr-xr-x 1 root root 64152 4月 9 15:01 /usr/bin/passwd*
-rwxr-xr-x 1 root root 64032 4月 5 22:36 /usr/bin/tail*
[root@rocky9 ~]# ll /etc/shadow
-rw-r----- 1 root shadow 1484 9月 26 10:17 /etc/shadow
根据我们之前对于 文件属性和权限的了解,
cat、passwd、tail 对于普通用户来说,也具有 x执行权限
/etc/shadow 文件只有 root用户具有读写能力,shadow小组具有读权限,普通用户没有读取权限。
对于passwd来说,它具有SUID的权限,也就是说,普通用户通过执行该文件,具有了操作- 原本普通用户没有资格编辑 /etc/shadow 的文件权限。
#普通用户sswang1不能cat /etc/shadow:
[root@rocky9 ~]# su - sswang1
[sswang1@rocky9 ~]$ cat /etc/shadow
cat: /etc/shadow: 权限不够
[sswang1@rocky9 ~]$ passwd
更改用户 sswang1 的密码 。
当前的密码:
新的密码: # compre123
重新输入新的密码: # compre123
passwd:所有的身份验证令牌已经成功更新。
#root用户为cat命令添加suid属性
[root@rocky9 ~]# chmod u+s /usr/bin/cat
[root@rocky9 ~]# ll /usr/bin/cat
-rwsr-xr-x. 1 root root 36440 4月 20 20:43 /usr/bin/cat #属主部分原来是-rw 现在是-rws
结果显示:cat命令的拥有者具有了suid的权限属性
#一旦为 cat 赋予了suid属性,普通用户,就暂时具有了该命令所有者的一些属性
[sswang1@rocky9 ~]$ cat /etc/shadow #普通用户sswang1能cat /etc/shadow了
...
sswang1:$6$BI0G6pNgkD.3RkkX$n1i8NkU.di8Rk8LcjkjBaCp7fJYgSeN033IUEwpSFKBUMM2TyrsY
cTSovGqUNMKQ6rXVO3fXt2cdMjgoBsuIW/:19992:0:99999:7:::
#suid权限恢复:
使用root用户,对suid权限进行复原
[root@rocky9 ~]# chmod u-s /usr/bin/cat
#############################################################################
1.3.6 SGID实践
#############################################################################
[sswang1@rocky9 ~]$ ll /tmp/sswang1/
总用量 0
-rw-r--r-- 1 root root 0 9月 26 04:48 root.txt
-rw-r--r-- 1 sswang1 sswang1 0 9月 26 04:49 sswang1.txt
##在/tmp 目录下执行文件的创建,文件的所有者、归属组,都是各自的用户身份
#为 sswang1目录添加SGID属性
[root@rocky9 ~]# chmod g+s /tmp/sswang1
[root@rocky9 ~]# ll /tmp/
总用量 0
drwxr-sr-x 2 sswang1 sswang1 41 9月 26 04:49 sswang1
#root用户执行文件创建动作:
[root@rocky9 ~]# touch /tmp/sswang1/root-sgid.txt
[root@rocky9 ~]# mkdir /tmp/sswang1/root
[root@rocky9 ~]# ll /tmp/sswang1/
总用量 0
drwxr-sr-x 2 root sswang1 6 9月 26 04:54 root
-rw-r--r-- 1 root sswang1 0 9月 26 04:51 root-sgid.txt
-rw-r--r-- 1 root root 0 9月 26 04:48 root.txt
-rw-r--r-- 1 sswang1 sswang1 0 9月 26 04:49 sswang1.txt
#一旦目录具有了SGID的属性后,无论是哪个用户在该目录下创建文件,文件的归属组都是该目录的数组属性。
#/tmp/sswang1目录具有SGID的属性后,无论是哪个用户在该目录下创建文件,文件的归属组都是sswang1的数组属性。
#SGID属性恢复:
[root@rocky9 ~]# chmod g-s /tmp/sswang1/
#############################################################################
1.3.7 STICKY实践
#############################################################################
#创建一个任何用户都有RWX权限的文件夹
[root@bogon ~]# chmod -R 777 /sticky
该目录下的所有文件,任何用户都可以为所欲为
[sswang2@rocky9 ~]$ rm -rf /sticky/dir/*
使用root用户为指定目录添加sticky属性
[root@bogon ~]# chmod o+t /sticky/dir
[root@bogon ~]# ll /sticky/
总用量 0
drwxrwxrwt. 2 root root 42 10月 29 17:10 dir
#使用多个用户在dir目录下创建文件
[root@bogon ~]# su - ss
[ss@bogon ~]# touch /sticky/dir/ss.txt
[ss@bogon ~]# su - magedu
[magedu@bogon ~]# touch /sticky/dir/magedu.txt
[magedu@bogon ~]#
[magedu@bogon ~]# ll /sticky/dir/
总用量 0
-rw-r--r--. 1 magedu magedu 0 10月 29 17:16 magedu.txt
-rw-r--r--. 1 ss ss 0 10月 29 17:15 ss.txt
#用普通用户执行删除文件的操作:
[magedu@bogon ~]# rm -rf /sticky/dir/magedu.txt
[magedu@bogon ~]# rm -rf /sticky/dir/ss.txt
rm: 无法删除 '/sticky/dir/ss.txt': 不允许的操作
[magedu@bogon ~]#
[magedu@bogon ~]# ls /sticky/dir/
ss.txt
[ss@bogon ~]# rm -rf /sticky/dir/ss.txt
[ss@bogon ~]# ll /sticky/dir/
总用量 0
#一旦dir目录添加了STICKY属性,那么用户只能删除自己的文件
#为 dir目录取消sticky属性
[root@bogon ~]# chmod o-t /sticky/dir/
[root@bogon ~]# ll /sticky
总用量 0
drwxrwxrwx. 2 root root 6 10月 29 17:19 dir
#############################################################################
1.3.8 特殊属性
#############################################################################
在Linux系统中,文件的特殊属性提供了 "额外的" 安全性和稳定性保障。这些特殊属性通过chattr命
令来设置,通过lsattr命令来查看。
chattr命令用于改变文件或目录的扩展属性。这些属性可以增强文件的安全性,防止被意外修改、删除
或重命名。
命令格式
chattr [+-=][ASacdistu...] 文件或目录名称
常用选项-p project # 设置文件项目编号-R
# 递归执行-V -f
# 显示过程,并输出chattr 版本
# 不输出错误信息-v version # 设置版本
常用动作
+表示添加属性,-表示移除属性,=表示设置唯一属性,覆盖其他所有属性。
常用属性
a:只允许追加数据,不能删除或修改文件内容。
i:设置文件为不可修改,即不能删除、重命名、修改内容或添加链接。
s:同步写入磁盘,修改立即生效,而非默认的非同步方式。
u:当文件被删除时,其内容仍保留在磁盘上,直到空间被其他文件覆盖。
A:访问文件时不更新访问时间。
c:自动压缩文件。
d:防止目录被dump备份。
lsattr命令用于查看文件或目录的扩展属性。
命令格式
lsattr [选项] 文件或目录
常用选项
-a:显示所有文件和目录的属性,包括以.开头的隐藏文件。
-d:如果目标是目录,则只显示目录本身的属性,而不显示目录内文件的属性。
-R:递归地列出目录及其所有子目录和文件的属性。
注意事项
1 使用chattr和lsattr命令时,需要确保有足够的权限,通常是以root用户身份执行。
2 某些文件系统可能不支持所有chattr属性,具体取决于文件系统的类型和版本。
3 修改文件或目录的特殊属性可能会对系统的正常操作产生影响,因此请谨慎使用这些命令。
简单实践
#对文件进行属性增加不可修改的属性
[root@bogon dir]# chattr +i /attr/dir/{1,3,5}.txt
[root@bogon dir]#
[root@bogon dir]# lsattr
---------------------- ./2.txt
----i----------------- ./3.txt
---------------------- ./4.txt
----i----------------- ./5.txt
---------------------- ./6.txt
----i----------------- ./1.txt
[root@bogon dir]# ll
总用量 0
-rw-r--r--. 1 root root 0 10月 29 17:26 1.txt
-rw-r--r--. 1 root root 0 10月 29 17:26 2.txt
-rw-r--r--. 1 root root 0 10月 28 17:37 3.txt
-rw-r--r--. 1 root root 0 10月 29 17:26 4.txt
-rw-r--r--. 1 root root 0 10月 28 17:37 5.txt
-rw-r--r--. 1 root root 0 10月 28 17:37 6.txt
#1 3 5 文件有了禁止操作权限,禁止了很多动作 rm,echo,mv都不能:
[root@bogon dir]# rm -rf *
rm: 无法删除 '1.txt': 不允许的操作
rm: 无法删除 '3.txt': 不允许的操作
rm: 无法删除 '5.txt': 不允许的操作
[root@bogon dir]# ls
1.txt 3.txt 5.txt
[root@bogon dir]#
[root@bogon dir]# echo "Hello" > 1.txt
-bash: 1.txt: 不允许的操作
[root@bogon dir]# mv 1.txt /..
mv: 无法将'1.txt' 移动至'/../1.txt': 不允许的操作
但是可以cp
[root@bogon dir]# cp 1.txt 1.txt.bak
[root@bogon dir]# ls
1.txt 1.txt.bak 3.txt 5.txt
#设定仅允许增加的动作属性
[root@bogon dir]# chattr -i 1.txt
[root@bogon dir]# chattr +a 1.txt
[root@bogon dir]# lsattr
-----a---------------- ./1.txt
#只允许追加内容,不能覆盖
[root@bogon dir]# echo "hello" >> 1.txt
[root@bogon dir]# cat 1.txt
hello
[root@bogon dir]# echo "world" > 1.txt
-bash: 1.txt: 不允许的操作
#对目录进行操作:对目录 +i 后,不能删除和创建新文件,但是对里面原有的文件可正常操作。
#############################################################################
1.3.9 ACL
#############################################################################
传统意义层面的文件系统级别的 User + Group + Other + RWX 的授权体系,主要针对的对象是以
文件为基本单位的。其实并不能实现 一个文件针对不同的用户设定形式各异的操作权限。
Linux系统的ACL(Access Control Lists,访问控制列表)是一种用于控制对文件和目录访问权限
的机制。它扩展了传统的文件权限模型,为系统管理员提供了更加灵活和精细的权限控制手段。
- CentOS7 默认创建的xfs和ext4文件系统具有ACL功能
- CentOS7 之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加
- 对于ubuntu系统来说,如果没有的话,需要安装 acl 命令
#setfacl 可设置ACL权限:
命令格式:
setfacl [-bkndRLPvh] [{-m|-x} acl_spec] [{-M|-X} acl_file] file ...
常见选项
-m|--modify=acl #修改acl权限
-x|--remove=acl #删除文件acl 权限
-b|--remove-all #删除文件所有acl权限
--set=acl #用新规则替换旧规则,会删除原有ACL项,用新的替代,
#一定要包含UGO的设置,不能象 -m一样只有 ACL
一般选项
-M|--modify-file=file #从文件读取规则
-X|--remove-file=file #从文件读取规则
-k|--remove-default #删除默认acl规则
--set-file=file #从文件读取新规则
--mask #重新计算mask值
-n|--no-mask #不重新计算mask值
-d|--default #在目录上设置默认acl
-R|--recursive #递归执行
-L|--logical #将acl 应用在软链接指向的目标文件上,与-R一起使用
-P|--physical #将acl 不应用在软链接指向的目标文件上,与-R一起使用
注意:
ACL 也可以对 mask 进行操作,但是它的作用想要有效的限制还是比较高的。
- mask只影响除所有者和other的之外的人和组的最大权限
- mask需要与用户的权限进行逻辑与运算后,才能变成有限的权限
- 用户或组的设置必须存在于mask权限设定范围内才会生效
也就是说,对于mask,acl 不欢迎你,也没有什么意义。
演示示例:setfacl -m mask::rx file
getfacl 可查看设置的ACL权限
命令格式:
getfacl file ...
简单实践
默认ACL的实践
查看默认的acl策略
[root@bogon dir]# getfacl acl.txt
# file: acl.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
[root@bogon dir]# setfacl -m u:ss:- acl.txt #ss:- 就是ss这个用户权限是---
[root@bogon dir]#
[root@bogon dir]# getfacl acl.txt
# file: acl.txt
# owner: root
# group: root
user::rw-
user:ss:---
group::r--
mask::r--
other::r--
# 查看文件权限,多了一个+
[root@bogon dir]# ll
总用量 4
-rw-r--r--+ 1 root root 4 10月 29 17:43 acl.txt
#ss用户不可读
[root@bogon dir]# su - ss -c "cat acl.txt"
cat: acl.txt: 没有那个文件或目录
#其他的普通用户可读但是不可写
[root@bogon ~]# su - magedu -c "cat /acl/dir/acl.txt"
acl
[root@bogon ~]# su - magedu -c "echo 123 >> /acl/dir/acl.txt"
-bash:行1: /acl/dir/acl.txt: 权限不够
#修改acl对用户ss的权限:
[root@bogon ~]# setfacl -m u:ss:rw /acl/dir/acl.txt #ss:- 就是ss这个用户权限是rw-
[root@bogon ~]#
[root@bogon ~]# getfacl /acl/dir/acl.txt
getfacl: Removing leading '/' from absolute path names
# file: acl/dir/acl.txt
# owner: root
# group: root
user::rw-
user:ss:rw-
group::r--
mask::rw-
other::r--
#用户ss可以cat 可以 echo; 但是其他用户只能cat,不能echo,因为 other::r--
[root@bogon ~]# su - ss -c "cat /acl/dir/acl.txt"
acl
[root@bogon ~]# su - ss -c "echo 123 >> /acl/dir/acl.txt"
[root@bogon ~]# su - ss -c "cat /acl/dir/acl.txt"
acl
123
[root@bogon ~]# su - magedu -c "cat /acl/dir/acl.txt"
acl
123
[root@bogon ~]# su - magedu -c "echo abc >> /acl/dir/acl.txt"
-bash:行1: /acl/dir/acl.txt: 权限不够
#给组加ACL实践
[root@bogon ~]# setfacl -m g:magedu:rwx /acl/dir/acl.txt
[root@bogon ~]# getfacl
[root@bogon ~]# getfacl /acl/dir/acl.txt
getfacl: Removing leading '/' from absolute path names
# file: acl/dir/acl.txt
# owner: root
# group: root
user::rw-
user:ss:rw-
group::r--
group:magedu:rwx #magedu这个组有rwx权限
mask::rwx
other::r--
[root@bogon ~]# su - magedu -c "echo abc >> /acl/dir/acl.txt"
[root@bogon ~]# su - magedu -c "cat /acl/dir/acl.txt"
acl
123
abc
#ACL策略的复制:
[root@rocky9 ~]# getfacl /acl/dir/acl.txt | setfacl --set-file=- /acl/dir/sswang.txt
[root@bogon ~]# getfacl /acl/dir/acl.txt | setfacl --set-file=- /acl/dir/acl2.txt
getfacl: Removing leading '/' from absolute path names
#看到2个文件acl权限一致了:
[root@bogon ~]# getfacl /acl/dir/acl.txt /acl/dir/acl2.txt
getfacl: Removing leading '/' from absolute path names
# file: acl/dir/acl.txt
# owner: root
# group: root
user::rw-
user:ss:rw-
group::r--
group:magedu:rwx
mask::rwx
other::r--
# file: acl/dir/acl2.txt
# owner: root
# group: root
user::rw-
user:ss:rw-
group::r--
group:magedu:rwx
mask::rwx
other::r--
#ACL规则的移除
[root@bogon ~]# setfacl -x u:ss /acl/dir/acl.txt
[root@bogon ~]# setfacl -x g:magedu /acl/dir/acl.txt
[root@bogon ~]#
[root@bogon ~]# getfacl /acl/dir/acl.txt
getfacl: Removing leading '/' from absolute path names
# file: acl/dir/acl.txt
# owner: root
# group: root
user::rw-
group::r--
mask::r--
other::r--
#移除所有定制ACL权限 - 恢复默认的acl权限
[root@bogon ~]# setfacl -b /acl/dir/*
[root@bogon ~]#
[root@bogon ~]# getfacl /acl/dir/*
getfacl: Removing leading '/' from absolute path names
# file: acl/dir/acl2.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
# file: acl/dir/acl.txt
# owner: root
# group: root
user::rw-
group::r--
other::r--
#通过 --set 同时定制多个属性信息:
[root@bogon ~]# setfacl --set u::rw,u:ss:-,g::-,o::- /acl/dir/acl.txt
[root@bogon ~]# getfacl /acl/dir/acl.txt
getfacl: Removing leading '/' from absolute path names
# file: acl/dir/acl.txt
# owner: root
# group: root
user::rw-
user:ss:---
group::---
mask::---
other::---