RHEL7--第五章
用户身份与文件权限
- 用户身份与能力
用户的类别:
管理员UID:0 root
系统用户UID:
1~999 RHEL 7
1~499 RHEL 5,6
系统为了避免因某个程序出现漏洞而被黑客提权至服务器,默认服务程序会有独立的系统用户复制运行,有效控制被破坏范围;
普通用户UID:
1000~无限制 RHEL 7
500~65535 RHEL 5,6
是由管理员创建的用于日常工作的用户;
用户组的类别:
管理员组;
普通组:
系统组;
一般组;
组的类别:
基本组:创建用户时,如果没有特别为其指定所属的组,系统会自动为其创建一个与用户同名的组;基本组只有用户一人;
附加组:A用户被纳入B用户组,则这个B用户组就是A用户的附加组;
1:useradd 创建用户
-d:指定用户家目录,默认为/home/username;
-e:账户的到期时间,时间格式:YYYY-MM-DD;
-u:指定该用户的默认UID;
# useradd -u 1006 user1
-g:可跟组名或GID,指定一个初始的用户基本组(组必须已存在);
# useradd -g group1 user2
# useradd -g 1007 user2
-G:指定一个或多个附加组(组必须已存在);
# useradd -G group2 user1 给user1 添加附加组 group2;
-N:不创建与用户同名的基本组;
-s:指定用户的默认shell;
当前系统支持的所有shell版本:etc/shells;
# useradd -s /bin/tcsh user3
/sbin/nologin:是终端解释器的一员,与bash解释器完全不同,一旦用户的解释器被设置为nologin,代表该用户不能登录系统;
# useradd -s /sbin/nologin user4
2:usermod 修改用户属性
格式:usermod [选项] 用户名;
-c:备注用户信息;
-d:修改家目录,之前数据不迁移;
-d -m:参数m与参数d连用,可重新指定用户的家目录并自动把旧目录数据迁移过去;不懂!!!
-e:账户的到期时间,格式:YYYY-MM-DD;
-g:修改用户GID;
-G:变更所属 附加组,覆盖之前的附加组;
-a -G GID:添加附加组,不使用 -a 选项,会覆盖此前的附加组;
-L:锁定用户禁止其登陆系统;
-U:解锁用户,允许其登陆系统;
-s:变更默认shell;
-u:修改用户UID;
3:groupadd 创建用户组
格式:groupadd [选项] 组名;
把几个用户加入到同一组,可以针对一类用户统一安排权限;
-g:指定GID号;
-r:添加系统组;
4:passwd 修改用户密码,过期时间,认证信息等;
root用户修改密码,无须验证旧密码;
-l:锁定用户,禁止其修改密码;
-u:解锁用户,运行其修改密码;
--stdin:允许通过标准输入修改用户密码;
-d:使该用户用空密码登录系统;
-e:强制用户在下次登录时修改密码;
-S:显示用户的密码是否锁定,以及密码锁采用的加密算法名称;
5:userdel 删除用户;
-f:强制删除用户;
-r:同时删除用户及家目录;
- 文件权限与归属
常见文件类型字符:
-:普通文件;
d:目录文件;
l:连接文件;
b:块设备文件;
c:字符设备文件
p:管道文件;
s:套字节文件;
文件权限:
r:可读,读取文件内容;
w:可写,编辑,新增,修改,删除文件的实际内容;
x:可执行,生成可执行的脚本程序;
目录权限:
r:读,能够读取目录内的文件列表;
w:写,能够在目录内新增,删除,重命名文件;
x:执行,能够进入该目录中,即 cd 命令生效;

chmod 修改文件权限
-R:递归修改权限;
# chmod 770 /tmp/test 修改目录test权限为770,test目录下的权限不变;
# chmod -R 770 /tmp/test 修改目录test权限为770,包括test目录下的所有文件权限;
MODE:修改一类用户的所有权限;
u=rw
g=r
o=rwx
# chmod u=rwx /tmp/test 修改test的所有者权限为 rwx;
MODE:修改一类用户的某位或某些权限;
u+,u-,g+,g-,o+,o-
# chmod u-w /tmp/test 取消test的所有者的 w 权限;
chown 修改文件的属主;仅root可用;
chown [OPTION]... [OWNER][:[GROUP]] FILE...
# chown a1 b.txt 修改 b文件的属主为 a1 用户;
# chown a1:a1 b.txt 修改 b文件的属主及属组为 a1;
# chown :a1 b.txt 修改 b文件的属组为 a1;
chgrp 修改文件的属组;
umask 文件或目录创建时的遮罩码;
查看 umask:
root:显示4位,如0022,只看后三位,即:666-022=644;
普通用户:只显示1位,如2,666-002=664;
文件:666-umask
创建文件时默认权限为666-umask,得到的额结果就是文件的权限;
Note:只针对文件:如果某类用户的权限减得的结果中存在x权限,则将其权限+1
目录:777-umask
创建目录时默认权限为777减去umask,得到的结果就是目录权限;
# umask 查看umask;
# umask # 设定umask
# umask 3
- 文件的特殊权限
SUID,SGID,SBIT 可以与一般权限同时使用,弥补一般权限无法实现的功能;
SUID
1:可以让二进制程序(如,cat 等)的执行者临时拥有程序的属主权限,仅对拥有执行权限的二进制程序有效;
2:进程访问文件时的权限,取决于进程的发起者;
a):进程的发起者,同文件的属主,则应用文件属主权限;
b):进程的发起者,属于文件的属组,则应用文件属组权限;
c):进程的发起者,属于文件的其他,则应用文件其他权限;
3:任何一个可执行程序文件能不能启动为进程,取决发起者对程序文件是否拥有执行权限;
4:启动为进程后,其进程的属主为原程序文件的属主;
4:设置在属主上,即user;
权限设定:
chmod u+s 可执行程序 添加SUID权限;
#chmod u+s /bin/cat 使普通用户可以用cat查看/etc/shadow文件内容;

chmod u-s 可执行程序 删除SUID权限;

SGID
实现的两大功能:
1:让执行者临时拥有属组的权限,对拥有执行权限的二进制程序进行设置;
2:在某个目录中创建的文件自动继承该目录的用户组,只可以对目录进行设置;
3:设置在属组上,即group;
例1:
设置共享目录,让共享目录中所有用户都能读取目录中内容,首先用户需加入这个共享用户组,即用户的附加组。创建完共享目录后,设置SGID权限即可实现,即任何用户在此共享目录中创建的文件,属组都是这个共享目录的属组;
SBIT(Sticky Bit)粘滞位,保护位
作用:设置共享目录,用户之间无法删除编辑;即便共享目录权限全开;
1:SBIT确保用户只能删除自己的文件,其他用户的无法删除;
2:文件能否被删除取决于所在目录是否有写入权限,开启SBIT权限后,即便权限全开也无法删除他人账号的文件。
3:目录的other权限,有x执行权限则写出 t,没有x权限则写出 T;
4:设置在其他用户上,即other;
权限设定:
# chmod o+t DIR
系统的 tmp 目录,默认就是SBIT权限开启状态;

解析权限的设定:
SUID SGID SBIT(Sticky)
4 2 1
当以数字显示设置权限的时候,特殊权限在一般权限的前面,如:4777,其中4即为特殊权限SUID;
例:
# chmod 4777 a.txt 设置 a.txt文件拥有SUID权限及一般权限为777;
# chmod 6666 a.txt 设置 a.txt文件拥有SUID,SGID权限及一般权限为666;
- 文件的隐藏属性
除了一般权限和特殊权限,还有一种隐藏权限,默认情况下无法直接被用户发现。
1:chattr
设置文件的隐藏权限,格式:chattr [+_参数] 文件;
i:无法对文件进行修改,若对目录设置该参数,则仅能修改其中的子文件内容不能新建或删除文件;
a:仅允许补充(追加)内容,无法覆盖/删除内容;Append Only;
S:文件内容在变更后立即同步到硬盘(sync);
s:彻底从硬盘中删除,不可恢复(用0填充源文件所在硬盘区域)
A:不再修改这个文件或目录的最后访问时间(atime);
b:不再修改文件或目录的存取时间;
D:检查压缩文件中的错误;
d:使用dump命令备份时忽略本文件/目录;
c:默认将文件或目录进行压缩;
u:当删除该文件后依然保留其在硬盘中的数据,方便日后恢复;
t:让文件系统支持尾部合并(tail-merging)
x:可以直接访问压缩文件中的内容;
例:
# chattr +a test.txt
2:lsattr
显示文件的隐藏权限
# lsattr test.txt
- 文件访问控制列表
对某个指定的用户进行单独的权限控制,需要用到文件的访问控制列表 ACL;
基于普通文件或目录设置ACL就是针对指定的用户或用户组设置文件或目录的操作权限;
1:针对某个目录设置ACL,则目录中的文件会继承其ACL;
2:针对文件设置ACL,则文件不再继承其所在目录的ACL;
1:setfacl
用于管理设置文件或目录的ACL规则,格式:setfacl [参数] 文件名称;
针对单一用户或用户组,单一文件或目录进行读写执行权限的控制;
-R: 针对目录使用递归参数;
-m: 更改文件或目录的规则;
-b: 删除所有的ACL;
-x: 删除指定用户的ACL;
例1:
# setfacl -Rm u:user1:rwx /tmp/test
# setfacl -x u:user1 /tmp/test
# setfacl -b /tmp/test
解析:
1:R必须在m前面;
2:u 表示用户,g 表示用户组;
3:user1 表示指定的用户名;
4:rwx 表示权限,r-x等;
5:/tmp/test 表示添加ACL规则的目录;
备注:
在使用 ls 查看文件时,权限的最后一个 . 变成了 + ,意味者文件设置了ACL;

2:getfacl
显示文件上设置的ACL信息;格式:getfacl 文件名称;
- su命令与sudo服务
1:su
解决切换用户身份的需求,当前用户不需退出,直接切换到其他用户;
- :表示完全切换新用户,包括环境变量也变更为新用户信息;
root切换到普通用户无需密码验证;反之需要密码验证;
例:
# su - 用户名
2:sudo
用于给普通用户提供额外的权限来完成root才能完成的任务;格式:sudo 参数 命令名称;
参数:
-h:列出帮助信息;
-l: 列出当前用户可执行的命令;
-u 用户名或UID:以指定的用户身份执行命令;
-k:清空密码的有效时间,下次执行sudo时需要再次进行密码验证;
-b:在后台执行指定的命令;
-p:更改询问密码的提示语;
功能:
限制用户执行指定的命令;
记录用户执行的每一条命令;
配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
验证密码的后5分钟内(默认值)无需再让用户再次验证密码;
配置方法:
只有root才能进行visudo命令编辑sudo服务的配置文件;
1:# vi /etc/sudoers 或直接使用 # visudo 命令

参照98行进行添加新的用户及权限;以外各字段的意思:
root: 谁可以使用;
ALL: 允许使用的主机;
(ALL):以谁的身份;
ALL: 可执行命令的列表;
例1:
a1 ALL=(ALL) ALL
表示 a1 在任何主机 以任何用户的身份,执行任何的命令;

2:配置完 /etc/sudoers 后;
# ls /root
提示:没有权限访问root目录;
# sudo ls /root
成功显示root目录下的文件信息;
例2:
a2用户指定可执行的命令;
a2 ALL=(ALL) /usr/bin/cat
a3用户执行sudo时不需要密码验证;
a3 ALL=(ALL) NOPASSWD: ALL

例3:
[a1@host~]# sudo -u a2 cat /etc/passwd
当前用户a1指定以a2的身份运行 cat /etc/passwd;
3:whereis
查找命令的绝对路径及搜索程序名,二进制文件;
浙公网安备 33010602011771号