一、token
1. 定义
令牌,当用户通过用户名和密码通过系统用户数据库,成功登录系统后,系统会颁发一个令牌给用户。用户访问资源时需要提交令牌,资源再根据令牌权限(UID、GID、groups)判断用户是否有权限访问。
如果用户已经登录系统,此时更新令牌,需要重新登录才能获取最新的令牌。
二、UID
1. 管理员
root:0。
2. 普通用户
1~65535
(1) 系统用户
CentOS6:1~499;
CentOS7:1~999。
(2) 登录用户
CentOS6:500+;
CentOS7:1000+。
3. 实战功能
(1) UID赋值
正常情况下,系统会扫描先存在的UID,并按照现有的UID最大值递增,前提是该UID在范围内。
三、GID
1. 定义
简化授权操作;
Linux允许用户和组同名,且在默认情况下,创建用户时,系统会自动创建一个同名的组(私有组),并把用户加入到私有组中。
2. 管理员组
root:0。
3. 普通组
(1) 系统组
CentOS6:1~499;
CentOS7:1~999。
(1) 普通组
CentOS6:500+;
CentOS7:1000+。
四、安全上下文
1. 定义
进程所能访问资源的权限取决于进程的运行者的身份、运行者所属的组和SELinux等……
五、组的类别
1. 定义
组和用户是多对多的关系,一个组可以包含多个用户,一个用户也可以加入多个组。
如果一个用户加入多个组,那么他的权限是多个组所累加的。
2. 主要组
用户必须属于一个且只有一个主组;
组名同用户名,且仅包含一个用户,私有组。
3. 附加组
一个用户可以属于零个或多个辅助组。
六、用户和组的配置文件
1. 与用户相关
(1) /etc/passwd
存放用户及其属性信息。
一般不建议直接修改该文件内的内容,使用参数相应的命令进行修改。
系统中可以有多个管理员,系统会根据/etc/passwd的用户列表顺序来显示用户名(即排序较后的管理员登录后所显示的用户信息还是排序最前的管理员)。
如果/etc/passwd里没有用户的UID为0(即管理员),则所有用户都无法登录系统,且系统重启后将死机无法启动。
如果/etc/passwd有用户的家目录不存在,则该用户登录后会在根目录。
参数
account
用户名
password
密码(新系统已用x代替)
UID
用户ID
GID
主组ID
GECOS
描述信息
directory
用户家目录
shell
使用的shell类型
查看用户描述信息
安装
rpm -ivh /misc/cd/Packages/finger-0.17-40.el6.x86_64.rpm
(2) /etc/shadow
存放用户密码及其相关属性。
属性
login name
用户名
encrypted password
加密过的口令:
CentOS5:$1(md5,已被破解);
CentOS6:$6(sha512);
CentOS7:$6(sha512)。如果用户没有设置密码,该域会以两个!填充,代表锁定,无法登录系统。如果把两个!删除,该用户就能免认证登录。
date of last password change
最近修改密码的时间(距离1970年1月1日);
如果值为0,对应用户在下次登录时要修改密码。
minimum password age
最短密码有效期,默认为0,即随时可以修改。
maximum password age
最长密码有效期,默认为99999。
password warning period
密码警告期,默认提前7天通知准备过期。
password inactivity period
密码宽限期。
account expiration date
账号有效期。
reserved field
保留字段,为未来的使用保留下来的。
(3) /etc/login.defs
用户相关设置
(4) /etc/default/useradd
新用户默认设置。
(5) /etc/skel
新建用户家目录模板目录。
2. 与组相关
(1) /etc/group
组机器属性信息。
属性
用户组名;
组口令:建议不设置,否则用户知道密码后随意加入组中;
组ID:如果创建用户时不设置组ID,那么该用户默认加入到组ID为100的users组;
组成员(附加组)。
(2) /etc/gshadow
组密码及其相关属性。
属性
用户组名;
组口令:建议不设置,否则用户知道密码后随意加入组中;
组成员关系:组长,可以设置多个;
组成员(附加组)。
3. 实战功能
(1) /etc/passwd显示或不显示密码
pwunconv
执行pwunconv命令后可以使/etc/passwd显示加密后的用户密码。
pwconv
执行pwunconv命令后可以使/etc/passwd不显示加密后的用户密码。
(2) 指定其他用户为管理员
在/etc/passwd中把指定用户的UID值修改为0。
(3) 修复由于/etc/passwd里没有用户的UID为0导致系统重启后将死机无法启动
重启系统后,进入系统选择界面,按按键e,跳转界面后,在最后一行末尾追加init=/bin/bash。进入系统后,执行mount -o rw.remount /命令以可读写的方式加载根分区,重新编辑/etc/passwd内容,重启系统后解决问题。
(4) 禁止用户登录系统
/usr/sbin/nologin
使用chsh -s /usr/sbin/nologin命令把用户的shell类型修改成/usr/sbin/nologin,同时修改/etc/passwd内的用户shell类型,该用户将无法登录系统,su命令也无法切换。
/usr/sbin/nologin一般为系统用户(程序、进程使用的账号)的shell类型。
(5) 新建用户替换旧用户,权限不变
/etc/passwd
/etc/shadow
修改/etc/passwd和/etc/shadow,把旧用户名改成新用户名,ID不变,权限不变。
(6) 修改用户主组
如果用户不在组中,使用newgrp命令需要输入正确组口令才能修改用户主组;
如果用户已经在组中(附加组),使用newgrp命令不需要输入正确组口令就能修改用户主组。
七、用户家目录
1. 定义
在新建用户时,系统会自动从/etc/skel/目录复制出相关配置文件到用户家目录。
2. 实战功能
(1) 修改用户家目录
方法1:
mkdir -m 777 USERNAME_DIRECTORY
chmod 777 USERNAME_DIRECTORY
cp -r /etc/skel/.[^.] USERNAME_DIRECTORY*
先赋予用户家目录的权限,然后把/etc/skel/里的隐藏文件都复制到用户新的家目录。
方法2
cp -r /etc/skel USERNAME_DIRECTORY
chown -R USERNAME:GROUP USERNAME_DIRECTORY
chmod 777 USERNAME_DIRECTORY
先把/etc/skel/整个目录复制,然后赋予目录所有者和所有组及目录权限。
八、创建用户
1. 实战功能
(1) 集群环境中确保相同用户UID相同
useradd -u
创建用户时使用useradd -u命令手工指定用户UID,确保多台服务器用户UID相同。
(2) 在同一系统下UID相同
useradd -uo
使用useradd -uo命令可以创建用户并手工指定用户UID时不检查UID的唯一性,系统会判断系统UID的两个用户为同一个用户,以先创建为优。
(3) 指定用户家目录
useradd -d
在实际工作中,创建给服务使用的账号可以手工指定服务的目录为账号家目录,服务的账号直接就对该目录具有完全的权限,不需要后续再修改。
(4) 应用程序账号指定为系统用户,指定shell类型为/sbin/nologin,并创建家目录
useradd -s /sbin/nologin -r -m USERNAME
在实际工作中,给应用程序使用的账号的shell类型一般为/sbin/nologin,且该账号是给服务进程使用,所以账号类型为系统账号。
使用useradd -r命令创建系统用户时,系统默认不会创建用户家目录,可以需要跟上-m选项,给系统用户创建指定家目录。
(5) 批量创建用户并设置密码
newusers
chpasswd
useradd命令只能一次创建一个用户,可以先编写好用户列表,用户列表格式与/etc/passwd格式一致,然后使用newusers命令批量创建用户。
执行chpasswd命令,按照USERNAME:PASSWORD格式批量创建用户;也可以先编写用户密码列表文件,内容格式为USERNAME:PASSWORD,然后使用cat PASSWORD.TXT chpasswd批量创建用户密码。
九、用户属性修改
1. 实战功能
(1) 删除用户所有附加组
usermod -G ""
usermod -G USERNAME
执行usermod -G ""命令,由于引号内为空,所以会把用户的附加组覆盖为空;usermod -G USERNAME命令,默认用户的附加组为用户同名的组,把用户同名的组覆盖用户附加组。
十、切换用户
1. 实战功能
(1) 什么时候用完全切换,什么时候用不完全切换
如果切换的用户也要访问前以用户当前目录,则使用不完全切换。
完全切换等价于重新登录,工作环境都会切换;
不完全切换只是切换身份,环境信息并未切换。
十一、用户组操作
1. 实战功能
(1) 用户组无法被删除
要删除用户组,前提是该用户组非任何用户的主组。
十二、删除用户
1. 实战功能
(1) 用户无法被删除
如果用户正在执行程序,则该用户无法被正常删除。需要先把用户退出系统再进行删除操作;或者执行userdel -f命令强制删除。
十三、文件权限
1. 实战功能
(1) 修改文件所有者和所有组
如果文件的所有者是普通用户,不能修改文件所有者属性,管理员用户可以修改;
如果文件的所有者(普通用户)在指定组中,可以把文件的所有组权限改成指定组,否则不能修改,管理员没有限制。
(2) 指定文件只能追加、清空内容,不能查看内容
chmod =w
一旦对文件执行了chmod =w命令,用户只能对该为文件追加、清空内容,无法使用文本编辑工具追加,更无法查看内容。
(3) 删除文件
删除文件的权限由文件所在目录决定,因为删除文件相当于把修改目录里的文件列表。目录是特殊文件,目录存储的内容就是文件列表。如果要删除目录内的文件,就要对目录有写权限,才有能力修改目录内的文件列表。
(4) 目录权限
如果用户没有目录的读权限,能进入目录,无法查看目录下的文件列表,但能查看、修改、创建目录下的文件(前提是有文件的权限)的内容;
如果用户没有目录的执行权限,无法进入目录,无法查看目录下的文件详细属性,也无法查看目录下的文件内容;
如果用户有目录的写权限,但没有执行权限,也不能删除、创建目录下的文件。读权限和执行权限是目录比较基础的权限,要么全给,要么都不给。
(5) 用户获取文件权限顺序
如果用户为文件所有者,将只看所有者权限;否则继续判断用户是否属于文件所有组,如果属于文件所有组,将只看所有组权限;如果用户并非文件所有者或所有组,则只看其他的权限。权限不会累加。
(6) 递归赋予文件执行权限
chmod -R +X
chmod -R +x
如果执行chmod -R +x命令将对目录下所有文件(目录、文件)都赋予执行权限;如果执行chmod -R +X命令将只对目录和已经有执行权限的文件赋予执行权限,而其他文件一律不赋予执行权限。
(7) 执行程序
如果要执行程序,前提是程序所在的目录要有执行权限。
(8) 递归赋予权限
chmod -R /*
递归赋予权限非常危险,危险程度不差于rm -rf /*,一旦执行无法恢复。
2. 权限
管理员不受读写权限限制,但受执行权限限制。
权限是否生效要看文件系统的格式,因为权限、所有者、所有组这些元数据并不是由操作系统所决定,而是由文件系统决定的,因为数据是存放在文件中,文件由文件系统进行管理。传统Linux文件系统支持这些属性的修改,如:ext系列和xfs。
(1) r(4)
read,读权限。
一些特殊文件(包括二进制文件),没必然要设置读权限;一般是对文本文件设置读权限。
(2) w(2)
write,写权限。
一些特殊文件(包括二进制文件),没必然要设置写权限;一般是对文本文件设置写权限。
(3) x(1)
excute,执行权限。
一般不对文本文件设置执行权限。
3. 对象
1. u
owner,所有者。
2. g
group,所有组。
3. o
other,其他。
4. 文件默认权限计算
(1) 文件
默认权限 = 666 - umask:对结果进行观察,如果结果有奇数就再加1,偶数则不变。
(2) 目录
默认权限 = 777 - umask。
5. 特殊权限
(1) SUID
定义:
数字法以4表示,占据所有者的执行权限位。
继承二进制程序所有者的权限;
作用在二进制程序的所有者的执行位上。当二进制程序指定了SUID权限后,用户运行该程序时,就会继承二进制程序所有者的权限,临时提升权限。只适合应用在二进制可执行的程序上。
如果程序的所有者有执行权限,为s,如果程序的所有者没有执行权限,就为S。
(2) SGID
定义:
数字法以2表示,占据所有组的执行权限位。
继承二进制程序所有组的权限;
作用在二进制程序的所有组的执行位上。当二进制程序指定了SGID权限后,用户运行该程序时,就会继承二进制程序所有组的权限,临时提升权限。通常用于创建一个协作目录;
一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件所属的组为此目录的属组;如果程序的所有组有执行权限,为s,如果程序的所有组没有执行权限,就为S。
(3) Stickly
定义:
粘滞位,数字法以1表示,占据其他的执行权限位。
作用在目录;
在目录设置Sticky位,只有文件的所有者或管理员可以删除该文件,其他用户(拥有写权限)只能修改该文件的内容。如果目录的其他用户有执行权限,为t,如果程序的所有者没有执行权限,就为T。
(4) 实战功能
目录下的文件继承目录的所有组
chmod g+s
chmod 2???
如果给目录赋予SGID权限,目录下新建的文件将继承目录的所有组。
使文件不能被删除、改名和更改
chattr +i
执行chattr +/-i命令后,即使使用管理员用户也无法对文件进行删除、改名和更改操作。
锁定文件读时间
chattr +A
由于有些文件每读一次更新读时间意义不大,执行chattr +A命令可以锁定文件atime,无法修改文件读时间。
6. 访问控制列表
(1) 定义
ACL,实现灵活的权限管理。
以+表示。
除了文件的所有者、所属组和其他人,可以对更多的用户设置权限。
一旦启用ACL,传统的组权限会变成特殊的权限(mask)。
(2) 生效顺序
所有者、自定义用户、自定义组、其他人;
如果用户所属的多个组都被定义了ACL,则该用户的权限叠加。
(3) mask
定义:
只影响除所有者和other的之外的人和组的最大权限。
需要与用户、组的权限进行逻辑与运算后,才能变成有限的权限。
(4) 启动ACL功能
tune2fs -o acl /dev/分区
mount -o acl /dev/分区 /目录
CentOS7默认创建的xfs和ext4文件系统具有ACL功能;
CentOS7之前版本,默认手工创建的ext4文件系统无ACL功能,需手动增加。在CentOS6上,安装操作系统时创建并挂载目录的分区支持ACL功能,采用ext系列的文件系统;而后续再创建的分区默认不支持ACL功能,需要手工添加ACL功能。
(5) 备份、恢复文件ACL步骤
cp -a命令、cp -p命令和mv命令都支持ACL。
getfacl -R FILE > ACL.txt
备份文件ACL
setfacl -R -b FILE
清空文件ACL
setfacl -R --set-file=ACL.txt FILE
恢复文件ACL
setfacl --restore=ACL.txt FILE
恢复文件ACL
getfacl -R FILE
查看文件ACL