Linux 账号管理与 ACL 权限控制
一、Linux 的账号与群组
1、UID | GID
ll
命令根据用户和群组 id 从/etc/passwd
和/etc/group
进行匹配才能显示组名和用户名- 已经建好的用户不要修改ID号,不然后果很严重
2、用户
/etc/passwd
文件
- 里面存的是系统的用户信息,有管理员用户、系统用户和一般用户
- root 的UID和GID都是0,普通用户的UID centos7里面是从 1000 开始的
/etc/shadow
文件
dmtsai:$1$vyUuj.eX$omt6lKJvMcIZHx4H7RI1V.:14299:5:60:7:5:14419:
- 上面的内容从左到右依次是:用户名、密码、密码最近变动日期、密码不可更改的天数、需要重新更改密码的天数、密码需要更改期限前的警告天数、密码过期后的宽限时间、账号失效日期、保留字段
3、群组
/etc/group | /etc/gshadow
- group文件:
root:x:0:root
从左到右依次是:群组名、密码、GID、群组下的用户 - gshadow文件:
bin: : :root,bin,daemon
左到右依次是:群组、密码、群组管理员、组员 - 一个用户可以有多个群组,一个群组也可以有多个用户
初始群组
- 新建一个用户会自动得到一个和用户名同名群组,这个群组就是该账号的初始群组
- 在 /etc/group 文件中初始群组最后一个字段是空的,不会有同名用户的名字
有效群组
groups
命令可以看到当前用户属于的群组,第一个就是有效群组,新建文件就是属于有效群组newgrp 组名
就可以更改当前的有效群组,这个命令实际上是新开了一个shell,重新加载相关的群组权限,可以用exit
退出
二、账号管理
1、用户新增、修改、删除
useradd
使用
- 创建普通用户:一般情况会自动更新 passwd、group、shadow、gshadow等文件并且创建家目录
useradd vbird1
useradd -u 700 -g users vbird2
- 创建系统用户:不会自动创建家目录
useradd -r vbird3
useradd
参考文件
useradd -D
可以查看文件/etc/default/useradd
的内容,useradd 的一些配置项
GROUP=100 <==默认的群组,基本是无效的,默认的群组是用户同名的
HOME=/home <==默认的家目录所在目录
INACTIVE=-1 <==口令失效日,在 shadow 内的第 7 栏
EXPIRE= <==账号失效日,在 shadow 内的第 8 栏
SHELL=/bin/bash <==默认的 shell
SKEL=/etc/skel <==用户家目录的内容数据参考目录
CREATE_MAIL_SPOOL=yes <==是否主动帮使用者创建邮件信箱(mailbox)
- 其他关于用户和群组的配置项在
/etc/login.defs
文件中,一些项目如下
MAIL_DIR /var/spool/mail <==用户默认邮件信箱放置目录
PASS_MAX_DAYS 99999 <==/etc/shadow 内的第 5 栏,多久需变更口令日数
PASS_MIN_DAYS 0 <==/etc/shadow 内的第 4 栏,多久不可重新配置口令日数
PASS_MIN_LEN 5 <==口令最短的字符长度,已被 pam 模块取代,失去效用!
PASS_WARN_AGE 7 <==/etc/shadow 内的第 6 栏,过期前会警告的日数
UID_MIN 1000 <==使用者最小的 UID,意即小于 1000 的 UID 为系统保留
UID_MAX 60000 <==使用者能够用的最大 UID
GID_MIN 1000 <==使用者自定义组的最小 GID,小于 1000 为系统保留
GID_MAX 60000 <==使用者自定义组的最大 GID
CREATE_HOME yes <==在不加 -M 及 -m 时,是否主动创建用户家目录?
UMASK 077 <==用户家目录创建的 umask ,因此权限会是 700
USERGROUPS_ENAB yes <==使用 userdel 删除时,是否会删除初始群组
MD5_CRYPT_ENAB yes <==口令是否经过 MD5 的加密机制处理
密码修改passwd, chage
- passwd:默认修改自己的密码,要帮其他账号创建或修改密码需要使用
passwd 账号
- chage:用于更改用户密码过期信息
chage -l stan
查看用户账号的状态chage -d 0 stan
强制登录后修改密码
用户修改删除usermod, userdel
- usermod:
usermod -aG stan usertest
这是给usertest用户添加一个群组 stan - userdel:
userdel -r vbird2
连同家目录一起删除
手动创建家目录
cp -a /etc/skel /home/vbird3
chown -R vbird3:vbird3 /home/vbird3
chmod 700 /home/vbird3
2、用户相关功能
finger
查看用户的相关信息chfn
改变用户的指纹(finger)信息chsh
更改用户登录默认取得的shellid
查询用户UID、GID等信息
3、群组新增、删除、修改
groupadd, groupmod, groupdel
- groupmod 通过 g 和 n 选项分别可以修改组ID 和组名,但是最好不要随意修改GID
- groupdel 删除群组,但是最好确认这个群组不是用户的初始群组再进行删除
群组管理gpasswd
- 不加任何选项就是修改群组的密码
- A 选项是用来指定群组的管理员的
- a 选项是管理员用来添加组员的
- d 选项是管理员用来删除组员的
三、权限的细粒度控制:ACL 的使用
1、什么是 ACL
- ACL(Access Control List)的主要作用就是提供传统的 ugo 的 rwx 之外的细部权限管理
- ACL 可以针对单一用户、单一文件或目录来进行 rwx 的权限配置
ACL 主要可以针对以下几个方面来控制权限
- 用户(u):可以针对使用者来配置权限;
- 群组 (g):针对群组为对象来配置其权限;
- 默认属性 (d):还可以针对在该目录下在创建新文件/目录时,规范其默认权限;
2、如何启动 ACL
- centos7 默认是启动 ACL 的
磁盘和文件系统相关命令回顾
- fdisk:可以进行分区等操作
- df:查看文件系统的占用情况
- du:查看文件或者目录的空间占用
- mount:查看当前系统设备的挂载情况
- dumpe2fs:查看 ext 格式的文件系统信息
- xfs_growfs:可以查看 xfs 文件系统的相关信息
3、ACL 配置
setfacl
的主要选项
-m :配置后续的 acl 参数给文件使用,不可与 -x 合用;
-x :删除后续的 acl 参数,不可与 -m 合用;
-b :移除所有的 ACL 配置参数;
-d :配置默认 acl 参数的意思!只对目录有效,在该目录新建的数据会引用此默认值
=> 给指定的用户设置相应的权限
setfacl -m u:vbird1:rx acl_test1
=> 默认是文件的所有者
setfacl -m u::rwx acl_test1
=> 权限后面有 + 的话,就是配置了ACL参数
ll acl_test1
- setfacl可以识别的规则格式
[d[efault]:] [u[ser]:]uid [:perms] 指定用户的权限,文件所有者的权限(如果uid没有指定)。
[d[efault]:] g[roup]:gid [:perms] 指定群组的权限,文件所有群组的权限(如果gid未指定)
[d[efault]:] m[ask][:] [:perms] 有效权限掩码
[d[efault]:] o[ther] [:perms] 其他的权限
getfacl
得到的输出如下
# file: acl00
# owner: root
# group: root
user::rwx
user:stan:rwx #针对特殊用户的权限设置
group::r-x
mask::rwx # 最大的权限范围
other::r-x
default:user::rwx # 设置针对所有者的默认的权限,可继承的
default:user:stan:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
=> 设置最大的权限范围
setfacl -m m:rwx acl00
=> 设置可继承的默认权限
setfacl -m d:u:stan:rwx acl00
四、用户切换
1、用户切换su
- 若要完整的切换到新使