在学习命令前,需先明确Linux用户管理的几个关键概念,这是理解useradd和usermod操作逻辑的前提:
用户ID(UID)与组ID(GID)
Linux系统通过“数字标识”而非“用户名”识别用户和用户组:
- 用户ID(UID):每个用户唯一的数字标识,root用户的UID固定为0,系统用户(如bin、nginx)的UID通常为1-999,普通用户的UID从1000开始;
- 组ID(GID):每个用户组唯一的数字标识,与UID对应,root组的GID固定为0。
通过id 用户名命令可查看用户的UID和GID,例如查看user1的信息:
id user1
输出类似“uid=1001(user1) gid=1001(user1) groups=1001(user1)”,表示user1的UID和主组GID均为1001。
主组与附加组
每个用户至少属于一个“主组”(创建用户时默认创建,与用户名同名),还可加入多个“附加组”(共享该组的权限):
- 主组:用户登录时默认所属的组,文件创建时的默认组即为用户主组;
- 附加组:用户额外加入的组,用于获取该组的权限(如访问组共享目录)。
用户家目录与登录Shell
- 用户家目录:每个普通用户的专属目录,默认位于/home/用户名(如user1的家目录为/home/user1),用户在此存放个人文件和配置;
- 登录Shell:用户登录后默认使用的命令行环境(如/bin/bash、/bin/sh),/bin/false或/sbin/nologin表示该用户无法登录系统(常用于系统用户)。
useradd
useradd命令的核心功能是“创建新用户账号”,并配置用户的基础属性(如UID、家目录、登录Shell)。默认情况下,useradd会根据/etc/default/useradd配置文件的默认值创建用户,也可通过选项自定义属性,语法格式为:
useradd [选项] 用户名
注意:创建用户需root权限,普通用户需通过sudo执行(如sudo useradd user2)。
1. useradd 核心选项
(1)-d:指定用户家目录
默认情况下,useradd会在/home下创建与用户名同名的家目录(如user3的家目录为/home/user3)。若需自定义家目录路径,可使用-d选项:
useradd -d /data/user4 user4
执行后,user4的家目录被设置为/data/user4(需确保/data目录已存在,否则需先创建)。创建后可通过cat /etc/passwd | grep user4验证:
user4:x:1004:1004::/data/user4:/bin/bash
输出中第6个字段即为家目录路径。
(2)-u:指定用户UID
默认情况下,useradd会自动分配未使用的UID(普通用户从1000开始)。若需指定固定UID(如1005),可使用-u选项:
useradd -u 1005 user5
执行后,user5的UID被固定为1005,通过id user5可验证:
uid=1005(user5) gid=1005(user5) groups=1005(user5)
注意:指定的UID必须未被其他用户占用,否则会报错“UID already exists”。
(3)-g与-G:指定主组与附加组
- -g:指定用户的“主组”(需提前存在该组,可通过groupadd创建);
- -G:指定用户的“附加组”(多个组用逗号分隔)。
例如,创建user6,指定主组为dev(GID=1006),附加组为test(GID=1007)和admin(GID=1008):
# 先创建所需用户组
groupadd -g 1006 dev
groupadd -g 1007 test
groupadd -g 1008 admin
# 创建用户并指定组
useradd -g dev -G test,admin user6
通过id user6验证组配置:
uid=1006(user6) gid=1006(dev) groups=1006(dev),1007(test),1008(admin)
输出中groups字段显示主组(第一个)和附加组(后续)。
(4)-s:指定登录Shell
默认情况下,useradd的登录Shell为/bin/bash(可通过cat /etc/default/useradd | grep SHELL查看默认值)。若需限制用户登录(如创建系统用户nginx),可指定/sbin/nologin或/bin/false:
useradd -s /sbin/nologin nginx
执行后,nginx用户无法通过命令行登录系统(仅用于运行nginx服务),通过cat /etc/passwd | grep nginx验证:
nginx:x:1007:1007::/home/nginx:/sbin/nologin
输出中第7个字段即为登录Shell路径。
(5)-m:强制创建家目录
默认情况下,useradd会为普通用户创建家目录,但部分系统配置或自定义家目录时可能不自动创建。使用-m选项可强制创建家目录,并复制/etc/skel目录下的默认配置文件(如.bashrc、.bash_profile)到新家目录:
useradd -m -d /opt/user7 user7
执行后,/opt/user7目录会被创建,且包含.bashrc等默认配置文件,用户登录后可直接使用个性化环境。
2. useradd 常见操作
useradd仅创建用户账号,默认情况下用户无密码(无法登录),需后续配置:
(1)设置用户密码
通过passwd命令为用户设置密码,例如为user8设置密码:
passwd user8
执行后需输入两次密码(密码输入时不显示,确保一致性),提示“passwd: password updated successfully”表示设置成功。
(2)验证用户登录
设置密码后,可通过su - user8切换到该用户,验证登录环境:
su - user8
# 切换后查看当前用户和家目录
whoami # 输出 user8
pwd # 输出 /home/user8(或自定义家目录)
usermod
usermod命令的核心功能是“修改已有用户的属性”,包括用户名、UID、家目录、组配置等,语法格式与useradd类似:
usermod [选项] 用户名
注意:修改用户属性需root权限,且修改正在登录的用户可能导致异常(建议先让用户退出登录)。
1. usermod 核心选项
(1)-l:修改用户名
若需修改已有用户的用户名(如将user9改为user9_new),使用-l选项:
usermod -l user9_new user9
执行后,用户名从user9改为user9_new,但UID、家目录、组配置等属性保持不变。通过cat /etc/passwd | grep user9_new验证:
user9_new:x:1009:1009::/home/user9:/bin/bash
注意:修改用户名后,建议同步修改家目录名称(配合-d和-m选项),避免路径与用户名不一致。
(2)-d与-m:修改家目录并迁移数据
若需将user10的家目录从/home/user10改为/data/user10_new,并迁移原有数据,需组合使用-d(指定新家目录)和-m(迁移数据)选项:
usermod -d /data/user10_new -m user10
执行后,系统会创建/data/user10_new目录,并将/home/user10下的所有文件迁移到新家目录,同时更新/etc/passwd中的家目录路径。
(3)-u:修改用户UID
若需将user11的UID从1011改为1011_new(确保新UID未被占用),使用-u选项:
usermod -u 1011_new user11
执行后,需同步修改用户家目录及所有文件的所有者(否则文件会因UID不匹配导致权限异常),通过chown -R user11:user11 /home/user11完成同步:
chown -R user11:user11 /home/user11
通过id user11和ls -l /home/user11验证UID和文件所有者是否一致。
(4)-g与-G:修改主组与附加组
- 修改主组:使用-g选项,例如将user12的主组从user12改为dev_new(需提前创建dev_new组):
usermod -g dev_new user12
- 修改附加组:使用-G选项(覆盖原有附加组),若需保留原有附加组并新增,需配合-a选项(a即“append”,追加)。例如为user12新增附加组admin_new,保留原有附加组:
usermod -aG admin_new user12
通过id user12验证组配置是否更新:
uid=1012(user12) gid=1013(dev_new) groups=1013(dev_new),1007(test),1014(admin_new)
(5)-s:修改登录Shell
若需允许nginx用户登录系统(原Shell为/sbin/nologin),将其Shell改为/bin/bash:
usermod -s /bin/bash nginx
反之,若需禁止user13登录,改为/sbin/nologin:
usermod -s /sbin/nologin user13
通过cat /etc/passwd | grep 用户名验证Shell修改结果。
(6)-L与-U:锁定与解锁用户
- -L:锁定用户(禁止登录,密码失效),例如锁定user14:
usermod -L user14
锁定后,/etc/shadow文件中用户密码前会添加!(表示密码失效),用户无法登录。
- -U:解锁用户(恢复登录),例如解锁user14:
usermod -U user14
通过passwd -S user14查看用户锁定状态(L表示锁定,P表示正常)。
2. usermod 注意事项
- 避免修改正在使用的用户:若用户正在登录(通过who或w命令查看),修改UID、家目录等属性可能导致用户当前会话异常,建议先让用户退出。
- 同步文件权限:修改UID或主组后,需通过chown和chgrp命令同步用户原有文件的所有者和所属组,避免权限错误。
- 谨慎修改系统用户:系统用户(如root、bin、nginx)的属性与系统服务关联,随意修改可能导致服务崩溃,除非明确需求,否则不建议修改。
useradd 与 usermod 对比
