linux用户和组
1.用户配置文件说明
1-1 /etc/passwd文件
字段 | 说明 | 备注 |
---|---|---|
字段1 | 用户名 | |
字段2 | 密码位 | x 表示标识有密码 |
字段3 | UID | 0: 超级管理员 1-449: 系统用户(伪用户) 500-65535: 普通用户 如果把普通用户uid变为0,那么它就相当于管理员了 |
字段4 | GID | |
字段5 | 用户说明 | |
字段6 | 家目录 | root: /root 其他用户: /home/xxx |
字段7 | 默认shell目录 | 默认/bin/bsh ,如果改为/bin/bashasd 那么用户将无法登陆 |
cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
...
1-2 影子文件/etc/shadow文件
这个文件的权限是000,只有root可以操作
字段 | 说明 | 备注 |
---|---|---|
字段1 | 用户名 | |
字段2 | 密码位 | * 和!! 表示没有密码,不能登录 |
字段3 | 最后修改密码日期 | 1970-1-1作为表中,1970-1-1表示19363天后 |
字段4 | 两次密码修改的间隔时间 | 和第三字段做比较 |
字段5 | 密码有效期 | 默认99999天,改为30表示用户没一个月就要改一次密码 |
字段6 | 密码修改到期前的警告天数 | 7天 |
字段7 | 密码到期之后的宽限时间 | 5表示延迟5天,0表示立即失效,-1表示永远不会失效 |
字段8 | 账号失效时间 | 时间戳(天数)表示到了这个时间就失效,不管字段5是多少 |
字段9 | 保留字段 |
# 天数换转时间
date -d "1970-01-01 19363 day"
# 时间换转天数
echo $(($(date --date="2023/01/06" +%s)/86400+1))
cat /etc/shadow
root:asdad12eqweqweqeqqweqweqeqq.Cu/:19361:0:99999:7:::
bin:*:18353:0:99999:7:::
daemon:*:18353:0:99999:7:::
adm:*:18353:0:99999:7:::
...
1-3 组信息文件/etc/group
字段 | 说明 | 备注 |
---|---|---|
字段1 | 组名 | |
字段2 | 组密码 | |
字段3 | GID | |
字段4 | 组中附加的用户 | 不能看到初始用户,可以看到附加用户 |
cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
...
1-4 组密码文件夹/etc/gshadow
字段 | 说明 | 备注 |
---|---|---|
字段1 | 组名 | |
字段2 | 组密码 | |
字段3 | 组管理员用户名 | |
字段4 | 组中附加的用户 |
cat /etc/gshadow
root:::
bin:::
daemon:::
...
2.用户管理相关文件
2-1 用户目录
root在
/root
,其他都在/home/[user_name]
#
开头表示超级用户,$
开头表示普通用户
# 超级用户
[root@xxxx ssh]#
# 普通用户
[lxd@xxxx ~]$
2-2 用户的邮箱
/var/spool/mail/用户名
2-3 用户模板
初始用户家目录下的文件都是用这个
/etc/skel
下的模板
ls -a /etc/skel
.bash_logout .bash_profile .bashrc
3.用户管理命令
3-1 添加用户useradd
useradd test1
命令之后,会更新和创建信息/ect/passwd
、/ect/shadow
、/ect/group
、/ect/gshadow
、/var/spool/mail/test1
、/home/test1
3-1-1 用户默认值文件说明
3-1-1-1 /etc/default/useradd
/etc/default/useradd
文件是在使用useradd
添加用户时的一个需要调用的一个默认的配置文件
# useradd defaults file
GROUP=100 # 用户默认组
HOME=/home # 用户家目录
INACTIVE=-1 # 密码过期宽限天数(shadow字段7)
EXPIRE= # 密码失效时间(shadow字段8)
SHELL=/bin/bash # 默认shell
SKEL=/etc/skel # 模板目录
CREATE_MAIL_SPOOL=yes # 是否建立邮箱
3-1-1-2 /etc/login.defs
/etc/login.defs
文件用于在创建用户时,对用户的一些基本属性做默认设置,例如指定用户 UID 和 GID 的范围,用户的过期时间,密码的最大长度,等等。
MAIL_DIR /var/spool/mail # 创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱
PASS_MAX_DAYS 99999 # 密码有效期,99999 是自1970-1-1起密码有效的天数,相当于273年,可理解为密码始终有效。
PASS_MIN_DAYS 0 # 表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0。
PASS_MIN_LEN 5 # 指定密码的最小长度,默认不小于5位,但是现在用户登录时验证已经被PAM模块取代,所以这个选项并不生效。
PASS_WARN_AGE 7 # 指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为7天。
UID_MIN 500 # 指定最小UID为500,也就是说,添加用户时,默认UID从500开始。注意,如果手工指定了一个用户的UID是 550,那么下一个创建的用户的UID就会从551开始,哪怕500~549之间的UID没有使用。
UID_MAX 60000 # 指定用户最大的UID为60000。
GID_MIN 500 # 指定最小GID为500,也就是在添加组时,组的GID从500开始。
GID_MAX 60000 # 用GID最大为60000。
CREATE_HOME yes # 指定在创建用户时,是否同时创建用户主目录,yes表示创建,no则不创建,默认是yes。
UMASK 077 # 用户主目录的权限默认设置为077。
USERGROUPS_ENAB yes # 删除用户的时候是否同时删除用户组(删除用户的初始组),默认值为yes。
ENCRYPT_METHOD SHA512 # 加密模式,默认采用SHA512,原先使用DES或MD5加密。
3-1-2 命令选项
useradd [选择] 用户名
-u 指定uid号
-u 指定用户家目录,默认(/home/用户名)下
-c 用户说明信息
-g 指定用户的初始组
-G 指定用户的附加组
-s 指定shell,默认/bin/bash
3-2 修改用户密码passwd
超级用户可以改所有用户密码,普通用户只能改自己的密码
passwd
后直接回车
3-2-1 命令选项
# 超级用户(可以设置很简单的密码)
passwd [选项] 用户名
-S 查询用户密码状态(仅root可用)
-l 暂时锁定用户,用户不能登录(仅root可用)
-u 解锁用户(仅root可用)
--stdin 可以通过管道符输出数据作为用户的密码
# 普通用户(不需要更用户名,需要设置复杂的密码)
passwd
3-2-2 查询密码状态
passwd -S lxd
lxd PS 2023-01-06 0 99999 7 -1 (Password set, SHA512 crypt.)
密码设定时间(2023-01-06)
密码修改间隔(0)
密码有效期(99999)
密码过期时间(-1)
# shadow内容
lxd:密码加密内容:19363:0:99999:7:::
3-2-3 锁定/解锁用户
原理就是把
shadow
文件的密码前加入了!!
# 加锁
passwd -l lxd
Locking password for user lxd.
passwd: Success
# shadow内容
lxd:!!密码加密内容:19363:0:99999:7:::
# 解锁
passwd -u lxd
Unlocking password for user lxd.
passwd: Success
# shadow内容
lxd:密码加密内容:19363:0:99999:7:::
3-2-4 输出密码
批量生成用户
echo "123" | passwd --stdin test
3-3 修改用户信息usermod
usermod
是修改已存在的用户,useradd
设定新用户锁定解锁,原理就是把
shadow
文件的密码前加入了!
usermod [选项] 用户名
-u 修改用户UID
-c 修改用户说明
-G 修改用户附加组
-L 锁定用户
-U 解锁用户
3-4 修改用户密码状态chage
直接使用vim修改
shadow
文件是一样的效果
change [选项] 用户名
-l 列出用户的信息密码状态
-d 修改密码最后一次更改日期(字段3)
-m 两次密码修改间隔(字段4)
-M Miami有效期(字段5)
-W 密码过期警告天数(字段6)
-I 密码过期宽限天数(字段7)
-E 账号失效时间(字段8)
chage -l lxd
Last password change : Jan 06, 2023
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
chage -d 0 lxd
# 这个命令把密码修改日期归0了。(字段3)
# 这样用户一登录就要求修改密码(适用于批量创建用户的时候)
ssh lxd@192.168.0.2
lxd@192.168.0.2's password: 初始密码
You are required to change your password immediately (root enforced)
WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user lxd.
Changing password for lxd.
(current) UNIX password: 初始密码
New password: 新密码(密码中不能带账号)
Retype new password: 新密码
passwd: all authentication tokens updated successfully.
Connection to 192.168.0.2 closed.
3-5 删除用户userdel
原理是
userdel -r test1
命令之后,会删除/ect/passwd
、/ect/shadow
、/ect/group
、/ect/gshadow
文件中内容和删除/var/spool/mail/test1
、/home/test1
目录
userdel [选项] 用户名
-r 删除用户的同时删除用户家目录
3-6查询用户id
能看到uid(用户ID)、gid(初始组ID), groups是用户所在组,这里既可以看到初始组,如果有附加组,则也能看到附加组
id lxd
uid=1000(lxd) gid=1000(lxd) groups=1000(lxd)
3-7 用户切换su
su [选项] 用户名
- 代表连带用户的环境变量一起切换
-c 仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。
3-7-1 不加-
切换用户的错误方法
-
选项,切换用户身份更彻底;反之,只切换了一部分,这会导致某些命令运行出现问题或错误(例如无法使用 service 命令)
[lxd@xxx ~]$ su root
Password: 输入root密码
[root@xxx lxd]# env
XDG_SESSION_ID=691
HOSTNAME=xxx
SHELL=/bin/bash
HISTSIZE=1000
USER=lxd
MAIL=/var/spool/mail/lxd
PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/lxd/.local/bin:/home/lxd/bin
PWD=/home/lxd
3-7-2 需要加-
切换
[lxd@xxx ~]$ su - root
Password: 输入root密码
[root@xxx ~]# env
XDG_SESSION_ID=691
HOSTNAME=xxx
SHELL=/bin/bash
HISTSIZE=1000
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
3-7-3 -c
使用
使用root身份操作命令,但是不切换用户身份
[lxd@xxx ~]$ su - root -c "whoami"
Password: root密码
root
3-8 查看登录用户信息who
执行权限:所有用户
root执行
ps -ef|grep pts
找到 使用虚拟终端的进程
[lxd@xxx ~]$ who
# 登录用户名 登录终端 登录时间 登录的主机的IP地址(未写则表示本机登录,即虚拟机登录)
# tty表示本地终端,pts表示远程终端
root pts/0 2023-01-06 13:20 (192.168.0.1)
lxd pts/1 2023-01-06 14:03 (192.168.0.1)
lxd pts/2 2023-01-06 16:07 (192.168.0.1)
3-9 查看登录用户详细信息w
执行权限:所有用户
root执行
ps -ef|grep pts
找到 使用虚拟终端的进程
[root@xxx ~]# w
16:36:37 up 2 days, 2 min, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 192.168.0.1 13:20 5.00s 0.10s 0.00s w
lxd pts/1 192.168.0.1 14:03 1:47m 0.01s 0.01s -bash
4.用户组管理命令
4-1 添加用户组groupadd
groupadd [选项] 组名
-g 指定GID
4-2 修改用户组groupmod
groupmod [选项] 组名
-g 修改GID
-n 修改组名
# -n用法
# 修改前
test1:x:1001:
[root@xxx ~]# groupmod -n ttt test1
# 修改后
ttt:x:1001:
4-3 删除用户组groupdel
如果这个组有初始用户,那么需要删除这个用户才可以删除这个用户组
groupdel 组名
4-4 把用户加入/删除组
原理是操作了
/etc/group
文件,添加的是附加组
gpasswd [选项] 组名
-a 用户名 把用户添加到组里
-d 用户名 把用户从组里删除
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南