章节简述:
详细的为读者讲述了用户、用户组和其余人在系统中的不同身份与能力,以及文件的读(r)写(w)执行(x)权限的作用。
为了让系统更加的安全还需要学习SUID、SGID和SBIT的文件特殊权限,文件隐藏权限以及ACL访问控制列表。
学会su命令和sudo服务后一定能够满足您以非超级用户操作实验或日常工作的需求,同时也保证了系统的安全性。
5.1 用户身份与能力
类Unix系统的设计初衷就是为让多用户同时工作,所以也迫使Linux系统有了极强的安全性,在前面安装红帽RHEL7操作系统时还特别要求“设置root用户密码”,而root用户是存在于所有类UNIX系统中的"超级用户"。
root用户拥有极高的系统所有权,能够管理系统的各项功能,如添加/删除用户,启动/关闭进程,开启/禁用硬件设备等权限。虽然使用root用户工作时不会受到权限的控制,但老话讲“能力越大,责任就越大”,一旦我们使用这个高能的root用户敲出错误的命令就有可能毁掉整个系统,真得好好权衡下啊。
而其实"root"只是个名字,真正让它成为“超级用户”的是UID值:
UID(即User IDentification的缩写):每个用户都有对应的UID值,就像我们的身份证号码。
超级用户UID0:root用户默认为0。
系统用户UID1-999:系统中系统服务由不同用户运行,更加安全,默认被限制登陆系统。
普通用户UID1000~:即管理员创建的用于日常工作而不能管理系统的普通用户。
注意UID一定是不能冲突的,管理员创建的普通用户UID从1000开始(即便前面有闲置的号码)
帐户名称与UID保存在/etc/passwd文件中,而帐户密码则保存在/etc/shadow文件中。
GID(即Group IDentification的缩写):可将多个用户加入某个组中,方便指派任务或工作。
想象公司员工如果想要在同部门内共享资料,就可以加入自己的工作组如技术部、运维部、财务部……
每个用户在被创建时均会创建一个默认组(其GID与UID相同,俗称基本组)而后加入的则叫扩展组,一定要分清楚。
用户组名称与GID保存在/etc/group文件中。
useradd命令用于创建新的用户,格式为:“useradd [选项] 用户名”。
参数 | 作用 |
-d | 指定用户的家目录(默认为/home/username) |
-D | 展示默认值 |
-e | 帐号有效截至日期,格式:YYYY-MM-DD. |
-g | 指定一个初始用户组(必须已存在) |
-G | 指定一个或多个扩展用户组 |
-N | 不创建与用户同名的用户组 |
-s | 指定默认的Shell |
-u | 指定用户的UID |
创建名为linuxprobe的用户,并定义家目录路径、UID以及登陆解释器(不允许登陆):
[root@linuxprobe ~]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
查看linuxprobe用户的基本信息:
[root@linuxprobe ~]# id linuxprobe uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)
修改当前用户的密码:“passwd”修改其他用户的密码:“passwd 其他用户名”
参数 | 作用 |
-l | 锁定用户禁止其登陆 |
-u | 解除锁定,允许用户登陆。 |
--stdin | 允许从标准输入修改用户密码,如(echo "NewPassWord" | passwd --stdin Username) |
-d | 使帐号无密码 |
-e | 强制用户下次登陆时修改密码 |
-S | 显示用户的密码状态 |
删除用户与其家目录:
[root@linuxprobe ~]# userdel -r 用户名
参数 | 作用 |
-f | 强制删除用户,家目录与其相关文件 |
-r | 同时删除用户,家目录与其相关文件 |
参数 | 作用 |
-c | 填写帐号的备注信息 |
-d -m | -m与-d连用,可重新指定用户的家目录并自动旧的数据转移过去。 |
-e | 帐户到期时间,格式“YYYY-MM-DD” |
-g | 变更所属用户组 |
-G | 变更扩展用户组 |
-L | 锁定用户禁止其登陆系统 |
-U | 解锁用户,允许其登陆系统 |
-s | 变更默认终端 |
-u | 修改用户的UID |
groupadd命令用于创建群组,格式为:"groupadd [选项] 群组名"。
创建名称为linuxprobe的用户群组:
[root@linuxprobe ~]# groupadd linuxprobe
5.2 文件权限与归属
Linux系统中一切都是文件,文件和目录的所属与权限——来分别规定所有者、所有组、其余人的读,写,执行权限。
读(read),写(write),执行(execute)简写即为(r,w,x),亦可用数字(4,2,1)表示
举例:如果某文件权限为7则代表可读,可写,可执行(4+2+1)。若权限为6(4+2)则代表可读,可写。
那么权限为5与3时分别代表了什么?想出答案后用鼠标选中下行即出答案(答案模式)
答案:权限为5代表可读(4)和可执行(1)。而权限为3代表可写(2)和可执行(1)。
例如下图中的文件所有者(属主)为root,所有组(属组)为root,文件名为instsall.log,权限位的第一个减号"-"代表的是文件类型:
-:普通文件,d:目录文件,l:链接文件,b:块设备文件,c:字符设备文件,p:管道文件
文件的权限为rw-r--r--也就是分别表示所有者(属主)有读写权限,所有组(属组)有读权限,其余人也仅有读权限。
Nice,那么你来做一题试试吧.若某目录的权限为754则分别表示的权限是什么?代表着什么?(答案模式)
答案:权限应为drwxr-xr--,分别代表该目录所有者可读写、执行,所有组可读,可执行,其余人仅可读取。
这个时候发现问题了吗?对于目录文件的读和写权限我们还可以理解,目录要能执行操作?
普通文件即实际保存数据的地方,其并不具备删除自身的权限:
r:可读取文件的实际内容
w:可编辑/新增/修改该文件的实际内容
x:可被执行
目录文件即保存有目录结构和文件权限:
r:可读取目录结构和权限
w:可更改目录结构列表、新建/删除/重命名/转移子文件/目录。
x:表示用户可进入到该目录中
5.3 文件的特殊权限
单纯对文件位置的rwx权限肯定不能满足我们对安全、便捷工作的需求,所以便有了SUID与SGID的特殊权限机制。
SUID:让执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)
比如所有用户都可以执行用于修改用户密码的passwd命令,但用户密码保存在/etc/shadow文件中,默认权限是000即除了超级用户root外的所有用户都没有查看或编辑该文件的权限,所以对passwd命令加上SUID权限位,则可让普通用户临时获得程序所有者的身份,即以root用户的身份将变更的密码信息写入到shadow文件中。
SGID:
功能一:让执行者临时拥有属组的权限(对拥有执行权限的二进制程序设置)
举例来说,在早期的Linux系统中/dev/kmem是一个字符设备文件,用于存储内核程序要访问的数据,权限为:
cr--r----- 1 root system 2, 1 Feb 11 2015 kmem
读者们看出问题了吗?除了以root身份或system组成员的用户都没有读取该文件的权限,但用户又需要使用系统的ps命令来查看系统进程状态,所以为了让用户能够获取到系统状态信息,ps命令的权限被加了SGID位:
-r-xr-sr-x 1 bin system 59346 Feb 11 2015 ps
这样因为被给予了SGID权限,所以当用户执行了ps命令,实际有效用户组就是system啦,于是便能够顺利的读取设备文件啦~
功能二:在该目录中创建的文件自动继承此目录的用户组(只可以对目录设置)
比如我们将某个部门的工作目录给予了SGID权限,这样所有人创建的文件都归相同的工作组,这样方便以后的管理。
chmod命令用于修改文件或目录的权限,格式为:"chmod [参数] 权限 文件或目录名称"。
chown命令用于修改文件或目录的所属主与所属组,格式为:“chown [参数] 所属主:所属组 文件或目录名称”。
chmod与chown的命令参数很简单记——对于文件不加参数,遇到目录加大写-R(递归,修改目录内所有文件的属性)。
创建工作目录并给予GID权限:
[root@linuxprobe ~]# cd /tmp [root@linuxprobe tmp]# mkdir testdir [root@linuxprobe tmp]# ls -ald testdir/ drwxr-xr-x. 2 root root 6 Feb 11 11:50 testdir/ [root@linuxprobe tmp]# chmod -Rf 777 testdir/ [root@linuxprobe tmp]# chmod -Rf g+s testdir/ [root@linuxprobe tmp]# ls -ald testdir/ drwxrwsrwx. 2 root root 6 Feb 11 11:50 testdir/
切换至普通用户linuxprobe,在该目录创建文件:
[root@linuxprobe tmp]# su - linuxprobe Last login: Wed Feb 11 11:49:16 CST 2015 on pts/0 [linuxprobe@linuxprobe ~]$ cd /tmp/testdir/ [linuxprobe@linuxprobe testdir]$ echo "linuxprobe.com" > test [linuxprobe@linuxprobe testdir]$ ls -al total 8 drwxrwsrwx. 2 root root 17 Feb 11 11:50 . drwxrwxrwt. 18 root root 4096 Feb 11 11:50 .. -rw-rw-r--. 1 linuxprobe root 15 Feb 11 11:50 test
SBIT(Sticky Bit):只可管理自己的数据而不能删除他人文件(仅对目录有效)
一般老师希望学生可以将作业上传到某个特定目录——但为了避免某些小破坏份子,想限制删除其他人文件的话,那就要设置SBIT位了,当然也可以叫做特殊权限位之粘滞位。
切换至普通用户,进入tmp目录:
[root@linuxprobe tmp]# su - linuxprobe Last login: Wed Feb 11 12:41:20 CST 2015 on pts/0 [linuxprobe@linuxprobe ~]$ cd /tmp
查看目录权限,最后的t就是代表的粘滞位:
[linuxprobe@linuxprobe tmp]$ ls -ald drwxrwxrwt. 17 root root 4096 Feb 11 13:03 .
创建一个文件吧:
[linuxprobe@linuxprobe tmp]$ echo "for test " > test [linuxprobe@linuxprobe tmp]$ chmod 777 test
给予这个文件最大的权限(rwxrwxrwx,777):
[linuxprobe@linuxprobe tmp]$ ls -al test -rwxrwxrwx. 1 linuxprobe linuxprobe 10 Feb 11 12:59 test
此时切换到普通用户blackshield尝试删除该文件:
[root@linuxprobe tmp]# su - blackshield Last login: Wed Feb 11 12:41:29 CST 2015 on pts/1 [blackshield@linuxprobe ~]$ cd /tmp [blackshield@linuxprobe tmp]$ rm test rm: remove write-protected regular file ‘test’? y rm: cannot remove ‘test’: Operation not permitted
删除该文件时会提示错误,所以即便权限很充足,但因为特殊权限SBIT的缘故所以依然无法删除其他人的文件。
5.4 文件的隐藏属性
文件权限除了读写执行与SUID、SGID、SBIT外还有一种隐藏权限,例如明明有权限删除某个文件却报错了,或者仅能为某个文件追加内容而不能减少内容,遇到这种很“奇怪”的文件,就要怀疑是文件被设置隐藏权限了。
chattr命令用于设置文件的隐藏权限,格式为:“chattr [参数] 文件”。
参数 | 作用 |
i | 将无法对文件进行修改,若对目录设置后则仅能修改子文件而不能新建或删除。 |
a | 仅允许补充(追加)内容.无法覆盖/删除(Append Only)。 |
S | 文件内容变更后立即同步到硬盘(sync)。 |
s | 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)。 |
A | 不再修改这个文件的最后访问时间(atime)。 |
b | 不再修改文件或目录的存取时间。 |
D | 检查压缩文件中的错误。 |
d | 当使用dump命令备份时忽略本文件/目录。 |
c | 默认将文件或目录进行压缩。 |
u | 当删除此文件后依然保留其在硬盘中的数据,方便日后恢复。 |
t | 让文件系统支持尾部合并(tail-merging)。 |
X | 可以直接访问压缩文件的内容。 |
lsattr命令用于显示文件的隐藏权限,格式为:“lsattr [参数] 文件”。
参数 | 作用 |
a | 显示所有文件和目录。 |
l | 显示隐藏属性的全称(默认简写成一个字母)。 |
R | 递归处理,将指定目录下的所有文件及子目录一并处理。 |
d | 若目标文件为目录,请加此参数。 |
写入一个名为linuxprobe,内容为"for Test"的普通文件:
[root@linuxprobe ~]# echo "for Test" > linuxprobe
尝试用rm命令删除,结果成功:
[root@linuxprobe ~]# rm linuxprobe rm: remove regular file ‘linuxprobe’? y
再次写入linuxprobe文件:
[root@linuxprobe ~]# echo "for Test" > linuxprobe
添加仅允许追加的隐藏权限(无法删除与覆盖):
[root@linuxprobe ~]# chattr +a linuxprobe
再来尝试删除发现已经报错:
[root@linuxprobe ~]# rm linuxprobe rm: remove regular file ‘linuxprobe’? y rm: cannot remove ‘linuxprobe’: Operation not permitted
而用ls也无法看到不同的地方:
[root@linuxprobe ~]# ls -al linuxprobe -rw-r--r--. 1 root root 9 Feb 12 11:42 linuxprobe
用lsattr命令则原形毕露了,果然是因为这个隐藏权限:
[root@linuxprobe ~]# lsattr linuxprobe -----a---------- linuxprobe
去除对linuxprobe文件设置的隐藏权限:
[root@localhost ~]# chattr -a linuxprobe
再来看下linuxprobe文件的隐藏权限(已经没有了):
[root@localhost ~]# lsattr linuxprobe ---------------- linuxprobe
尝试删除该文件(已经可以顺利删除了):
[root@localhost ~]# rm linuxprobe rm: remove regular file ‘linuxprobe’? y
出现问题?大胆提问!
因读者们硬件不同或操作错误都可能导致实验配置出错,请耐心再仔细看看操作步骤吧,不要气馁~
Linux技术交流请加A群:560843(满),B群:340829(推荐),点此查看全国群。
*本群特色:通过口令验证确保每一个群员都是《Linux就该这么学》的读者,答疑更有针对性,不定期免费领取定制礼品。
5.5 su命令与sudo服务
虽然我们的学员在实验环境中很少碰到安全问题,但是我仍然强烈的建议您在工作生产环境中不要去使用root用户身份,因为一旦执行了错误的命令后可能直接让系统崩溃。但因为许多的系统管理命令和服务为了安全所以只有超级用户才可以使用,因此这也无疑让普通用户受到更多的权限束缚,而su命令则是用于便捷的变更使用者的身份,能够让使用者在不注销的情况下顺畅的切换至其他用户。
root用户切换到其他用户时无需输入密码,尝试切换到普通用户linuxprobe:
[root@linuxprobe ~]# su linuxprobe
成功切换后查看环境变量:
[linuxprobe@linuxprobe root]$ echo $PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/root/bin
普通用户再切换用户需要输入对方帐户密码才可以:
[linuxprobe@linuxprobe root]$ su root Password:
若需将环境变量改变为新用户的,请加参数"-":
[root@linuxprobe ~]# su - linuxprobe Last login: Mon Aug 24 19:27:09 CST 2015 on pts/0
再次查看环境变量:
[linuxprobe@linuxprobe ~]$ echo $PATH /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/linuxprobe/.local/bin:/home/linuxprobe/bin
从su切换用户模式中退出:
[linuxprobe@linuxprobe ~]$ exit logout
回到root用户的身份:
[root@linuxprobe ~]#
sudo服务用于给普通用户提供额外权利来完成原本超级用户才能完成的任务,格式为:“sudo [参数] 命令名称”。
虽然上面的su命令允许普通用户完全变更为root用户身份,但这也无疑会暴露了超级管理员的密码,使得系统增添很多的安全隐患,因此我们可以使用sudo程序来仅将特定命令的执行权限赋予给指定的用户,这样即可保证了正常工作的同时也避免了过度使用root身份。只要合理的配置sudo服务便可以合理的兼顾系统的安全性和用户便捷性,原则也很简单,即在保证普通用户完成工作的前提下,尽可能少的给予额外的权限。
总结来说sudo的特色功能有:
1:限制用户执行指定的命令。
2:记录用户执行的每一条命令。
3:配置文件(/etc/sudoers)提供集中的管理用户、权限与主机等参数。
4:验证过密码后5分钟(默认值)内无须再让用户验证密码,更加的方便。
sudo命令的常用参数包括有:
参数 | 作用 |
-h | 列出帮助信息。 |
-l | 列出当前用户可执行的命令。 |
-u 用户名或UID值 | 以指定的用户身份执行命令。 |
-k | 清空安全时间,下次执行sudo时需要再次密码验证。 |
-b | 在后台执行指定的命令。 |
-p | 更改询问密码的提示语。 |
只用超级用户才可以使用visudo命令编辑sudo程序的配置文件(/etc/sudoers),visudo命令的优势:
防止多个用户同时修改sudo配置文件。
对sudo程序配置文件的语法检查。
visudo会调用vi编辑器来修改配置文件,而如果语法有报错则会报错:
visudo: >>> /etc/sudoers: syntax error near line 111 <<<
What now?
Options are:
(e)dit sudoers file again
(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)
此时可以敲击"e键"来修正内容,敲击"x键"直接退出不保存还可敲击"Q键"强制保存退出(sudo程序将不能被启动)。
实验环节——允许linuxprobe用户执行所有命令:
使用visudo命令编辑sudo程序的配置文件,在第99行添加参数允许linuxprobe用户能够从任意主机执行任意命令的参数。
格式为:允许使用sudo服务用户 来源主机=(以谁的身份执行命令) 可执行命令的列表
[root@linuxprobe ~]# visudo linuxprobe ALL=(ALL) ALL
将上面的配置文件保存退出后切换至linuxprobe用户:
[root@linuxprobe ~]# su - linuxprobe Last login: Thu Sep 3 15:12:57 CST 2015 on pts/1
查看linuxprobe用户可以使用那些sudo执行的命令(此处验证执行用户的密码):
[linuxprobe@linuxprobe ~]$ sudo -l [sudo] password for linuxprobe: Matching Defaults entries for linuxprobe on this host: requiretty, !visiblepw, always_set_home, env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE", env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
告知linuxprobe用户能够执行的命令有“所有”:
User linuxprobe may run the following commands on this host: (ALL) ALL
使用ls命令查看/root目录内的文件提示权限拒绝:
[linuxprobe@linuxprobe ~]$ ls /root ls: cannot open directory /root: Permission denied
使用sudo命令以root用户身份执行则正常浏览:
[linuxprobe@linuxprobe ~]$ sudo ls /root anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates Desktop Downloads Music Public Videos
实验环节——仅允许linuxprobe用户以root用户身份执行cat命令。
使用visudo命令编辑sudo程序的配置文件,将前面实验的参数删除(第99行)。然后在第112行追加允许linuxprobe用户只能以root用户身份执行cat命令的参数:
[root@linuxprobe ~]# visudo linuxprobe ALL=(root) /bin/cat
切换至linuxprobe用户:
[root@linuxprobe ~]# su - linuxprobe Last login: Thu Sep 3 15:51:01 CST 2015 on pts/1
使用cat命令查看密码文件后提示权限不足:
[linuxprobe@linuxprobe ~]$ cat /etc/shadow cat: /etc/shadow: Permission denied
使用sudo命令来运行cat命令后获得了root权限后查看成功:
[linuxprobe@linuxprobe ~]$ sudo cat /etc/shadow root:$6$GV3UVtX4ZGg6ygA6$J9pBuPGUSgZslj83jyoI7ThJla9ZAULku3BcncAYF00Uwk6Sqc4E36MnD1hLtlG9QadCpQCNVJs/5awHd0/pi1:16626:0:99999:7::: bin:*:16141:0:99999:7::: daemon:*:16141:0:99999:7::: adm:*:16141:0:99999:7::: lp:*:16141:0:99999:7::: sync:*:16141:0:99999:7::: shutdown:*:16141:0:99999:7::: halt:*:16141:0:99999:7::: mail:*:16141:0:99999:7::: operator:*:16141:0:99999:7::: games:*:16141:0:99999:7::: ftp:*:16141:0:99999:7::: nobody:*:16141:0:99999:7::: dbus:!!:16626:::::: polkitd:!!:16626:::::: unbound:!!:16626:::::: colord:!!:16626:::::: usbmuxd:!!:16626:::::: avahi:!!:16626:::::: avahi-autoipd:!!:16626:::::: libstoragemgmt:!!:16626:::::: saslauth:!!:16626:::::: qemu:!!:16626:::::: rpc:!!:16626:0:99999:7::: rpcuser:!!:16626:::::: nfsnobody:!!:16626:::::: rtkit:!!:16626:::::: radvd:!!:16626:::::: ntp:!!:16626:::::: chrony:!!:16626:::::: abrt:!!:16626:::::: pulse:!!:16626:::::: gdm:!!:16626:::::: gnome-initial-setup:!!:16626:::::: postfix:!!:16626:::::: sshd:!!:16626:::::: tcpdump:!!:16626:::::: linuxprobe:$6$IaqSJH8ES4KGQp.7$NojzuWzxwKvgfufCN5CmYTaaMdiYYWDZwgoV0qgx6/K2ZSQUjby3lmkMvDLuLIqbkuGsnVp1w.Z7S2kvWjHY6/:16626:0:99999:7:::
实验环节——允许linuxprobe用户以任意身份执行命令,且每次都不需要密码验证。
使用visudo命令编辑sudo程序的配置文件,将前面实验的参数删除(第112行)后在此行追加下面的参数
linuxprobe ALL=NOPASSWD: ALL
切换至linuxprobe用户:
[root@linuxprobe ~]# su - linuxprobe
清空安全时间:
Last login: Thu Sep 3 15:58:31 CST 2015 on pts/1 [linuxprobe@linuxprobe ~]$ sudo -k
执行sudo后不再需要密码验证:
[linuxprobe@linuxprobe ~]$ sudo ifconfig eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.10.10 netmask 255.255.255.0 broadcast 192.168.10.255 inet6 fe80::20c:29ff:fe9c:6373 prefixlen 64 scopeid 0x20<link> ether 00:0c:29:9c:63:73 txqueuelen 1000 (Ethernet) RX packets 264 bytes 40883 (39.9 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 31 bytes 4381 (4.2 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 0 (Local Loopback) RX packets 2 bytes 140 (140.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2 bytes 140 (140.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
5.6 文件访问控制列表
不知读者有没有发现其实上面讲解的rwx权限、特殊权限、隐藏权限都是对某一类用户设置的,而如果希望对某个指定的用户进行单独的权限设置,那么就需要用文件的访问控制列表来实现啦。
我们可以基于普通文件或目录设置进行设置ACL,通俗来说ACL就是设置指定的特定用户或用户组对某个文件的操作权限。并且如果对某个目录设置了访问控制策略,那么子文件则继承其访问策略,而若对文件设置了访问控制策略则不再继承上级目录的控制策略。
setfacl命令用于增加或者修改ACL规则,格式为:"setfacl [参数] 文件"。
参数 | 作用 |
-R | 递归(对目录使用) |
-m | 设置文件的acl规则 |
-b | 删除acl规则 |
getfacl命令用于显示文件的ACL规则,格式为:"getfacl 文件"。
[root@linuxprobe ~]# getfacl /root
linuxprobe用户因工作的原因需要有能读取root家目录文件的权限:
[root@linuxprobe ~]# su - linuxprobe Last login: Sat Mar 21 16:31:19 CST 2015 on pts/0
切换到linuxprobe用户:
[linuxprobe@linuxprobe ~]$ cd /root -bash: cd: /root: Permission denied
尝试进入root用户的家目录失败了(当然进不去啦):
[linuxprobe@linuxprobe root]$ exit
返回到root用户后设置linuxprobe对/root有rwx权限:
[root@linuxprobe ~]# setfacl -Rm u:linuxprobe:rwx /root
切换到linuxprobe用户:
[root@linuxprobe ~]# su - linuxprobe Last login: Sat Mar 21 15:45:03 CST 2015 on pts/1
成功进入到/root目录:
[linuxprobe@linuxprobe ~]$ cd /root [linuxprobe@linuxprobe root]$ ls anaconda-ks.cfg Downloads Pictures Public
读者们也来试试看,能不能看到该文件的内容吧:
[linuxprobe@linuxprobe root]$ cat anaconda-ks.cfg
返回到root用户:
[linuxprobe@linuxprobe root]$ exit
用getfacl看到确实多了一条user:linuxprobe:rwx:
[linuxprobe@linuxprobe ~]# getfacl /root # file: . # owner: root # group: root user::r-x user:linuxprobe:rwx group::r-x mask::rwx other::---