用户和组管理命令
- 用户和组管理命令
- 1. getent
- 2. useradd
- 3. usermod
- 4. userdel
- 5. id
- 6. su
- 7. passwd
- 8. chage
- 9. groupadd
- 10. groupmod
- 11. groupdel
- 12. gpasswd
- 13. groupmems
用户和组管理命令
用户和组的主要配置文件
- /etc/passwd:用户及其属性信息(名称、UID、主组ID等)
- /etc/shadow:用户密码及其相关属性
- /etc/group:组及其属性信息
- /etc/gshadow:组密码及其相关属性
1. getent
# 根据用户名查看配置项
getent passwd|shadow|group|gshadow [uname]
2. useradd
★ 创建新的Linux用户
useradd [options] LOGIN
useradd -D
useradd -D [options]-u|--uid UID # 指定UID
-g|--gid GID # 指定用户组,-g groupname|--gid GID
-c|--comment COMMENT # 新账户的 GECOS 字段
-d|--home-dir HOME_DIR # 指定家目录,可以是不存在的,指定家目录,并不代表创建家目录
-s|--shell SHELL # 指定 shell,可用shell在/etc/shells 中可以查看
-r|--system # 创建系统用户,CentOS 6之前 ID<500,CentOS7 以后ID<1000,不会创建登录用户相关信息
-m|--create-home # 创建家目录,一般用于登录用户
-M|--no-create-home # 不创建家目录,一般用于不用登录的用户
-p|--password PASSWORD # 设置密码,这里的密码是以明文的形式存在于/etc/shadow 文件中
-o|--non-unique # 允许使用重复的 UID 创建用户
-G|--groups GROUP1[,GROUP2,...] # 为用户指明附加组,组须事先存在
-N|--no-user-group # 不创建同名的组,使用users组做主组
-D|--defaults # 显示或更改默认的 useradd 配置,默认配置文件是/etc/default/useradd
-e|--expiredate EXPIRE_DATE # 指定账户的过期日期 YYYY-MM-DD 格式
-f|--inactive INACTIVE # 密码过期之后,账户被彻底禁用之前的天数,0 表示密码过期立即禁用,-1表示不使用此功能
-k|--skel SKEL_DIR # 指定家目录模板,创建家目录,会生成一些默认文件,如果指定,就从该目录复制文件,默认是/etc/skel/,要配合-m
-K|--key KEY=VALUE # 不使用 /etc/login.defs 中的默认值,自己指定,比如 -K UID_MIN=100
-l|--no-log-init # 不将用户添加到最近登录和登录失败记录,前面讲到的3a认证审计,就在此处lastlog|lastb|cat /var/log/secure[root@rocky8 ~]# useradd tom
[root@rocky8 ~]# getent passwd tom
tom:x:1001:1001::/home/tom:/bin/bash
[root@rocky8 ~]# getent shadow tom
tom:!!:19752:0:99999:7:::
[root@rocky8 ~]# getent group tom
tom:x:1001:
[root@rocky8 ~]# getent gshadow tom
tom:!::# 新建用户的相关文件
/etc/default/useradd
/etc/skel/*
/etc/login.defs
3. usermod
★ 修改用户属性
usermod [options] LOGIN-c|--comment COMMENT # 修改注释
-d|--home HOME_DIR # 修改家目录
-e|--expiredate EXPIRE_DATE # 修改过期的日期,YYYY-MM-DD 格式
-f|--inactive INACTIVE # 密码过期之后,账户被彻底禁用之前的天数,0 表示密码过期立即禁用,-1表示不使用此功能
-g|--gid GROUP # 修改组
-G|--groups GROUPS # groupName|GID... 新附加组,原来的附加组将会被覆盖;若保留原有,则要同时使用-a选项
-a|--append GROUP # 将用户追加至上边 -G 中提到的附加组中,并不从其它组中删除此用户
-l|--login LOGIN # 新的登录名称
-L|--lock # 锁定用户帐号,在/etc/shadow 密码栏的增加 !
-m|--move-home # 将家目录内容移至新位置,和 -d 一起使用
-o|--non-unique # 允许使用重复的(非唯一的) UID
-p|--password PASSWORD # 修改密码,这里是明文,如果要在此处修改密码,则要用加密后的字符串
-s|--shell SHELL # 修改 shell
-u|--uid UID # 修改 UID
-U|--unlock # 解锁用户帐号,将 /etc/shadow 密码栏的!拿掉[root@rocky8 ~]# getent shadow nan
nan:$6$bqKkb17ECiAyoWFn$s8rd8DYDLWMBL1TGczKMjg1D18B4nDYHY84mNMetEwFC6tr1WIPyvVVorN68Dq1U/rNNhpeNkltZ2DAqZPk9R0::0:99999:7:::
[root@rocky8 ~]# usermod -L nan
[root@rocky8 ~]# getent shadow nan
nan:!$6$bqKkb17ECiAyoWFn$s8rd8DYDLWMBL1TGczKMjg1D18B4nDYHY84mNMetEwFC6tr1WIPyvVVorN68Dq1U/rNNhpeNkltZ2DAqZPk9R0::0:99999:7:::
[root@rocky8 ~]# usermod -U nan
[root@rocky8 ~]# getent shadow nan
nan:$6$bqKkb17ECiAyoWFn$s8rd8DYDLWMBL1TGczKMjg1D18B4nDYHY84mNMetEwFC6tr1WIPyvVVorN68Dq1U/rNNhpeNkltZ2DAqZPk9R0::0:99999:7:::
4. userdel
★ 删除Linux 用户
userdel [options] LOGIN-f|--force # 强制删除,哪怕用户正在登录状态
-r|--remove # 删除家目录和邮件目录
5. id
★ 查看用户的UID,GID等信息
id [OPTION]... [USER]-a # 显示详细信息,默认选项
-Z|--context # 仅显示安全上下文信息,要开启selinux 配置才有
-g|--group # 仅显示GID,就是只显示主组ID
-G|--groups # 显示主组和附加组ID,就是所有组ID
-n|--name # 显示用户名或组名,要组合使用 -nu|-ng|-nG
-u|--user # 仅显示UID[root@rocky8 ~]# id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@rocky8 ~]# id -a
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@rocky8 ~]# id -nu
root
[root@rocky8 ~]# id postfix
uid=89(postfix) gid=89(postfix) groups=89(postfix),12(mail)
[root@rocky8 ~]# id -G postfix
89 12
[root@rocky8 ~]# id -nG postfix
postfix mail
6. su
★ 切换用户或以其他用户身份执行命令
su [options...] [-] [user [args...]]-m|-p|--preserve-environment # 不重置环境变量
-g|--group group # 指定主组,只有root 切普通用户才能指定此参数
-|-l|--login # 完全切换
-c|--command command # 不切换用户,而是临时使用该用户权限和环境执行命令
--session-command command # 使用上同 -c 选项,但不会创建会话
-f|--fast # 向shell 传递 -f 选项(csh 或 tcsh)
-s|--shell shell # 切换用户后,指定新环境的shell环境,必须在 /etc/shells 中存在
-P|--pty # 开一个新的终端切换用户的方式:su UserName:非登录式切换,即不会读取目标用户的配置文件,不改变当前工作目录,即不完全切换su - UserName:登录式切换,会读取目标用户的配置文件,切换至自已的家目录,即完全切换
说明:root su至其他用户无须密码;非root用户切换时需要密码
注意:su 切换新用户后,使用 exit 退回至旧的用户身份,而不要再用 su 切换至旧用户,否则会生成很多的bash子进程,环境可能会混乱。★ 完全切换和不完全切换的区别
[nan@rocky8 ~]$ pwd
/home/nan
[nan@rocky8 ~]$ su root
Password:
[root@rocky8 nan]# pwd
/home/nan
[root@rocky8 nan]# exit
exit
[nan@rocky8 ~]$ pwd
/home/nan
[nan@rocky8 ~]$ su - root
Password:
[root@rocky8 ~]# pwd
/root★ 直接以另一个用户执行命令,而不切换用户
[root@rocky8 ~]# su - nan
[nan@rocky8 ~]$ touch nan1.txt
[nan@rocky8 ~]$ exit
logout
三步变一步
[root@rocky8 ~]# su - nan -c "touch nan2.txt"
[root@rocky8 ~]# ll /home/nan/nan*
-rw-rw-r--. 1 nan nan 0 Jan 30 16:18 /home/nan/nan1.txt
-rw-rw-r--. 1 nan nan 0 Jan 30 16:20 /home/nan/nan2.txt
7. passwd
★ 修改用户密码
passwd [OPTION...] <accountName>-k|--keep-tokens # 保持身份验证令牌不过期
-d|--delete # 删除用户密码,也删除密码锁,仅root有权限操作
-l|--lock # 锁定用户密码,仅root有权限操作
-u|--unlock # 解锁用户密码,仅root有权限操作
-e|--expire # 终止用户密码,此操作完成后,用户下次登录成功后要立马修改,仅root有权限操作
-f|--force # 强制执行操作
-x|--maximum=DAYS # 指定用户密码最长有效期,仅root有权限操作
-n|--minimum=DAYS # 指定用户密码最短有效期,仅root有权限操作
-w|--warning=DAYS # 在密码过期前多少天开始提醒用户,仅root有权限操作
-i|--inactive=DAYS # 当密码过期后经过多少天该用户账号会被禁用,仅root有权限操作
-S|--status # 查询用户的密码状态,仅root有权限操作
--stdin # 从标准输入接收密码,Ubuntu无此选项★ 普通用户修改自己密码
[nan@rocky8 ~]$ passwd
Changing password for user nan.
Current password:
New password:
Retype new password:
passwd: all authentication tokens updated successfully.★ root修改其它用户密码
[root@rocky8 ~]# passwd nan
Changing password for user nan.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
8. chage
★ 修改用户密码策略
chage [options] LOGIN-d LAST_DAY # 更改密码的时间
-m|--mindays MIN_DAYS
-M|--maxdays MAX_DAYS
-W|--warndays WARN_DAYS
-I|--inactive INACTIVE # 密码过期后的宽限期
-E|--expiredate EXPIRE_DATE # 用户的有效期
-l # 显示密码策略[root@rocky8 ~]# chage -l nan
Last password change : Jan 30, 2024
Password expires : never
Password inactive : never
Account expires : never
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
9. groupadd
★ 创建组
groupadd [options] GROUP-f|--force # 如果组已经存在则成功退出
-g|--gid GID # 新建组时指定组ID,默认是系统分配,指定值不要超过[GID_MIN,GID_MAX]
-K|--key KEY=VALUE # 不使用 /etc/login.defs 中的默认值,自己指定,比如 -K GID_MIN=100
-o|--non-unique # 允许创建有重复 GID 的组
-p|--password PASSWORD # 为新组使用此加密过的密码,这里要用加密后的密文,不然就是直接是明文在/etc/gshadow 里面
-r|--system # 创建一个系统组 CentOS 6之前: ID<500,CentOS 7以后: ID<1000[root@rocky8 ~]# groupadd -g 48 -r apache
[root@rocky8 ~]# getent group apache
apache:x:48:
★ 不加 -f 会提示己存在,加 -f 直接结束
[root@rocky8 ~]# groupadd apache
groupadd: group 'apache' already exists
[root@rocky8 ~]# groupadd -f apache
10. groupmod
★ 修改组属性
groupmod [options] GROUP-g|--gid GID # 将组 ID 改为 GID
-n|--new-name NEW_GROUP # 改名为 NEW_GROUP
-o|--non-unique # 允许使用重复的 GID
-p|--password PASSWORD # 将密码更改为(加密过的) PASSWORD[root@rocky8 ~]# getent group apache
apache:x:48:
[root@rocky8 ~]# groupmod -g 123 apache
[root@rocky8 ~]# getent group apache
apache:x:123:
[root@rocky8 ~]# groupmod -n apache2 apache
[root@rocky8 ~]# getent group apache
[root@rocky8 ~]# getent group apache2
apache2:x:123:
11. groupdel
★ 删除组
groupdel [options] GROUP-f|--force # 强制删除,即使是用户的主组也强制删除组,但会导致无主组的用户不可用无法登录
强制删除之后,显示该组名的地方,只能显示该组ID,如果此时新建与组ID相同的新组,则被删除的组的数据会被新组关联[root@rocky8 ~]# groupdel apache2
[root@rocky8 ~]# getent group apache2删除组:如果该组下有用户将组作为主组,则不能删除
删除用户:会把与其同ID的主组也给删了,前提是该组下没有其它用户
12. gpasswd
★ 更改组密码,也可以修改附加组的成员关系组没有密码的情况下,加组只能由root来操作
gpasswd [option] GROUP-a|--add USER # 向组中添加用户
-d|--delete USER # 从组中移除用户
-r|--delete-password # 删除组密码
-R|--restrict # 向其成员限制访问组 GROUP
-M|--members USER,... # 批量加组
-A|--administrators ADMIN,... # 批量设组管理员[root@rocky8 ~]# groupadd group1
[root@rocky8 ~]# getent gshadow group1
group1:!::
[root@rocky8 ~]# groups nan
nan : nan
[root@rocky8 ~]# id nan
uid=1000(nan) gid=1000(nan) groups=1000(nan)
[root@rocky8 ~]# gpasswd -a nan group1
Adding user nan to group group1
[root@rocky8 ~]# getent gshadow group1
group1:!::nan
[root@rocky8 ~]# groups nan
nan : nan group1
[root@rocky8 ~]# id nan
uid=1000(nan) gid=1000(nan) groups=1000(nan),1002(group1)★ 设置组密码
[root@rocky8 ~]# gpasswd group1
Changing the password for group group1
New Password:
Re-enter new password:
[root@rocky8 ~]# getent gshadow group1
group1:$6$7rWweq0F$UQKecLT2gfpuXMg1pzdcchuUjAaQdVKvRXxcbqB2rw2wYKmaBBPSFl9aQSy0p9/WkqGZK6Jq1gpXdjnX3gOSl0::nan★ 移除组成员
[root@rocky8 ~]# gpasswd -d nan group1
Removing user nan from group group1
[root@rocky8 ~]# groups nan
nan : nan★ 补充:groups 可查看用户组关系(查看用户所属组列表)groups [OPTION].[USERNAME]...
13. groupmems
★ 管理附加组的成员关系(更改和查看组成员)
groupmems [options] [action]-g|--group groupname # 更改为指定组 (只有root)
-a|--add username # 指定用户加入组
-d|--delete username # 从组中删除用户
-p|--purge # 从组中清除所有成员
-l|--list # 显示组成员列表★ 列出以group1 组为附加组的用户
[root@rocky8 ~]# groupmems -g group1 -l★ 将jose 加到group1 组
[root@rocky8 ~]# groupmems -g group1 -a jose
[root@rocky8 ~]# groupmems -g group1 -l
jose
[root@rocky8 ~]# id jose
uid=1000(jose) gid=1000(jose) groups=1000(jose),1004(group1)