每天一个 Linux 知识:useradd和usermod命令

在学习命令前,需先明确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 对比

原文链接:,转发请注明来源!