本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。
用户管理
- 前言
- 一、用户管理
- 二、组管理
-
- 2.1、groupadd、groupdel、groupmod
- [2.2、主组Primary Group、私有组Private Group、附加组Secondary Groups](#2.2、主组Primary Group、私有组Private Group、附加组Secondary Groups)
- 三、组内添加、删除成员
- 四、usermod、groupmod和gpasswd的区别
- 五、缺省权限umask
- 六、文件的ACL权限
- 七、权限委派
-
- 7.1、最常见的委派方法
-
- [7.1.1、sudo(让普通用户运行 root 才能执行的命令)](#7.1.1、sudo(让普通用户运行 root 才能执行的命令))
- 7.1.2、ACL(文件权限委派)
前言
今天学习的主要是关于用户、用户组增删改查知识的理解和应用
①用户的增删改查
②用户组的增删改查
③用户密码的增删改查
④用户组密码的增删改查
用户管理在Linux中使用频率并不高。
虽然Linux是一个多用户管理的操作系统。但是很少有非常多的用户(用户名)
同时操作一个系统的情况。
对于一个标准的Linux系统来说,就是一个普通用户,一个root用户
一、用户管理
1.1、useradd、usermod、userdel
bash
使用useradd命令添加用户,会在/etc/passwd里面产生信息。
/etc/passwd里面的信息分为7列,被6个冒号隔开。
第一列表示username(login name)
第二列表示密码列,但是该列已经被移除,用x表示,密码信息已经存放在了/
etc/shadow文件
第三列表示用户的UID(userID),和身份证号差不多,绝对不能重复。
第四列表示用户所属组的ID,用户的private groupID。
private group, primary group, attached group
任何用户都是要属于一个用户组的。
第五列表示描述信息,邮箱啊,电话
第六列表示用户的家目录信息
第七列表示用户的登录shell
useradd wjx -u 5000 -d /wjx -s /bin/sh
usermod wjx -u 6000 -d /wjx1 -s /bin/bash
-u表示UID,-d(direct)表示家目录,-s(shell)表示用户登录的shell目录
注意:
RHEL系统创建用户是自动创建家目录的,原因是系统参照了/etc/login.defs配
置里面的内容对用户创建参数有默认的行为。
useradd创建用户成功之后的默认行为是创建这个用户的家目录和邮箱
userdel删除用户,默认不会删除用户的家目录和邮箱(菜鸡保护机制)
用户的查看,grep username /etc/passwd
id username查看
二、组管理
2.1、groupadd、groupdel、groupmod
bash
/etc/group:存储组信息,格式为:groupname:password:GID:user_list,
每一个冒号分隔了一个内容
第一列表示组名
第二列表示组密码,x表示密码存放在/etc/gshadow$文件里
第三列表示组ID
第四表示"组成员"
新建的组信息都保存在/etc/group中
其中 password 通常为 x 或空,实际密码(如果设置)存于 /etc/gshadow
bash
创建组(-gid)
groupadd groupname
groupadd groupname -g 1000
删除组
groupdel groupname
修改组信息(-name)
groupmod -n newname oldname
查看用户所属的所有组
groups [username]
查看某个组
group [groupname]
查看所有组的列表
cat /etc/group
2.2、主组Primary Group、私有组Private Group、附加组Secondary Groups
-g是修改用户的主组,-G是设置用户的附加组(会清除原有附加组),-aG是"追加"到附加组,而不是覆盖(不会清除原有附加组)
每个用户新建的时候都必须属于一个组,否则无法新建用户,平时我们新建用户时没有指定属于哪个组是因为在配置文件/etc/login.defs中配置了用户创建参数有默认行为,创建时会自动执行某些行为。
当创建用户时没有指定用户组那么就会根据配置文件自动创建一个与用户名和用户ID都同名的用户组,且这个组只有这个用户一个人,这个组就是该用户的私有组private group。
当创建用户时指定了用户组时那么就不会创建同名的用户组。也不存在私有组,此时该用户组叫做该用户的主组primary group
bash
附加组就是除主组之外的第二个组就称之为附加组,
groups username
输出: alice : alice developers docker
alice 是主组(通常与用户名相同),developers 和 docker 是附加组。
添加用户到附加组
usermod -aG groupname username
-a 表示 append(追加),绝不能省略!,如果省略则会清除原有附加组
-G 指定附加组。
三、组内添加、删除成员
3.1、gpasswd
bash
1.添加用户到组(-append 不会覆盖用户原有的附加组)
gpasswd -a username groupname
2.从组中删除用户(-delete)
gpasswd -d username groupname
3.设置组密码
gpasswd groupname
gpasswd 的操作会自动更新 /etc/group 和 /etc/gshadow 文件
bash
gpasswd vs usermod
添加用户到附加组:gpasswd -a user group usermod -aG group user
从组移除用户:gpasswd -d user group 无直接命令(需重设-G)
四、usermod、groupmod和gpasswd的区别
bash
usermod:
1.用于修改已有用户的各项设置(不能创建用户)
-l newname 修改用户名(不改家目录)
-d /new/home/dir 修改家目录路径
-m 配合-d,移动原家目录内容到新位置
-s /bin/bash 修改默认 shell
-g groupname 修改主组(Primary Group)
-G group1,group2 设置附加组列表(会覆盖原有附加组!)
-aG groupname 追加到附加组(安全!保留原有组)
-L/-U 锁定 / 解锁用户账户
五、缺省权限umask
rwx的二进制分别是421
umask临时修改方法:umask xxxx,临时修改仅对当前shell会话生效,退出后将恢复原值
永久修改:编辑/etc/bashrc文件,添加umask值,生效条件:需重新加载配置文件或新建会话
未设置umask值是默认为000,目录权限为777,文件权限为666
- umask用于设置系统缺省权限,root用户执行umask返回002,普通用户返回0002
- umask只需要关注后三位数字
- 目录默认创建权限为777(rwxrwxrwx)
- 普通文件默认创建权限为666(rw-rw-rw-),禁止执行权限以保证安全性
- 最终权限计算规则:
目录权限=777-umask后三位
文件权限=666-umask后三位
例如:root用户umask为0022时:
目录权限=777-022=755(rwxr-xr-x)
文件权限=666-022=644(rw-r--r--)
普通用户umask为0002时:
目录权限=777-002=755(rwxrwxr-x)
文件权限=666-002=644(rw-rw-r--)
5.1、login.defs文件
bash
MAIL_DIR /var/spool/mail 邮件目录
PASS_MAX_DAYS 99999 密码有效期(PASS_MAX_DAYS / PASS_MIN_DAYS)
PASS_MIN_DAYS 0 密码有效期(PASS_MAX_DAYS / PASS_MIN_DAYS)
PASS_MIN_LEN 5 密码最短长度(PASS_MIN_LEN)
PASS_WARN_AGE 7 密码到期提醒天数(PASS_WARN_AGE)
UID_MIN 1000 普通用户 UID 起始/结束值(UID_MIN / UID_MAX)
UID_MAX 60000 普通用户 UID 起始/结束值(UID_MIN / UID_MAX)
GID_MIN 1000 系统用户 UID 范围(SYS_UID_MIN / SYS_UID_MAX)
GID_MAX 60000 系统用户 UID 范围(SYS_UID_MIN / SYS_UID_MAX)
CREATE_HOME yes 使用useradd时是否创建家目录
UMASK 022 用户默认 umask
六、文件的ACL权限
传统权限只能设置:文件所有者(owner),文件所属组(group),其他人(other);如果你想给 多个特定用户 或 多个组 单独分配权限,就必须用 ACL。
ACL的底层逻辑是扩展标准UNIX权限模型:
- 基础权限:仅限owner/group/others三类
- ACL扩展:⽀持为任意指定⽤户/组设置独⽴权限
- 典型应⽤场景:需要为特定个体配置差异化权限时
特殊规则:
- 当user条⽬中⽤户名为空时,表示设置的是⽂件拥有者的权限
- 当group条⽬中组名为空时,表示设置的是⽂件所属组的权限
- others条⽬始终位于最后⼀⾏,表示对其他⽤户的权限设置
- 权限匹配机制:ACL采⽤⾃上⽽下⾸次匹配原则,当某⽤户访问⽂件时,系统会从第
⼀条规则开始逐条匹配,命中即停⽌后续匹配
bash
## 1.如何查看文件是否启用ACL:
ls -l或者getfacl test.txt
如果权限后面有 + 号,说明文件有 ACL,例如:-rw-r--r--+ 1 root root 10 test.txt
## setfacl(set file acl)命令⽤于设置ACL权限:
命令结构:setfacl -m [类型]:[对象]:[权限][⽂件]
参数说明:
o -m:modify修改标记
o u::⽤户类型标识
o g::⽤户组类型标识
## ACL权限⽣效特征:
视觉标识:⽂件权限列末尾显示+号(rwxrwx)
权限验证:必须通过getfacl命令查看真实权限
冲突处理:ACL权限优先于基础权限⽣效
## 1.给某个用户设置权限:
setfacl -m u:tom:rwx test.txt
## 查看:
getfacl test.txt
## 2.给某个组设置权限:
setfacl -m g:dev:r-- test.txt
## 3.删除某个用户的 ACL 权限
setfacl -x u:tom test.txt
## 删除某个组的 ACL 权限
setfacl -x g:dev test.txt
## 4.删除用户 ACL
setfacl -x u:user file
## 5.删除所有 ACL(-b = remove all ACL entries(除了基础权限外全部删除),
## 彻底清除ACL权限痕迹需使⽤setfacl -b命令,该操作会移除所有历史ACL设置并使加号标记消失。
## 常规删除操作(-x参数)仅移除特定权限条⽬,不会消除加号标记)
setfacl -b file
七、权限委派
ChatGPT 说:
Linux 权限委派(Privilege Delegation) 是指把某些管理权限,有限度地交给普通用户执行,而不需要让他成为 root
它的目标是:
提升特定权限
限制权限范围
避免把 root 密码到处给
常见用法:让普通用户执行,systemctl 重启服务,管理 network,使用某个命令,拥有某个目录的权限,运行脚本,执行需要 root 的任务(但受限制)
7.1、最常见的委派方法
7.1.1、sudo(让普通用户运行 root 才能执行的命令)
bash
1.把普通用户加入 sudo(wheel)组(CentOS)
usermod -aG wheel username
之后用户可以运行:
sudo 命令
2.给用户授予特定命令权限(不允许执行其它命令)
编辑sudoers:
visudo
添加(username 可以执行 systemctl restart httpd,不需要输入密码,只能执行这一条命令):
username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart httpd
之后用户可以运行:
sudo systemctl restart httpd
也可以授予多个命令
username ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl start nginx
7.1.2、ACL(文件权限委派)
这个的底层其实还是让root去执行,并不是说用户暂时拥有了root权限,所以叫做委派,委派给root去做
bash
给 user1 访问 /var/log 内容:
setfacl -m u:user1:r /var/log/messages
委派整个目录:
setfacl -R -m u:user1:rwX /data
💕 原创不易,还希望各位大佬支持一下 \textcolor{blue}{原创不易,还希望各位大佬支持一下} 原创不易,还希望各位大佬支持一下
👍 点赞,你的认可是我创作的动力! \textcolor{orange}{点赞,你的认可是我创作的动力!} 点赞,你的认可是我创作的动力!
⭐ 收藏,你的青睐是我努力的方向! \textcolor{red}{收藏,你的青睐是我努力的方向!} 收藏,你的青睐是我努力的方向!
🥕 评论,你的意见是我进步的财富! \textcolor{green}{评论,你的意见是我进步的财富!} 评论,你的意见是我进步的财富!