useradd
命令创建用户(如useradd username
),随后用passwd username
为其设置密码,最后可通过id username
验证用户是否创建成功。在 Linux 系统中创建新用户是一项基础且关键的管理任务,无论是用于多用户环境、服务账户隔离还是权限管理,本文将详细介绍两种最常用、最推荐的方法:useradd
命令和 adduser
脚本(在 Debian/Ubuntu 及其衍生版中),并涵盖重要的后续配置和安全注意事项。
核心前提:你需要 root
权限
创建用户需要修改系统级的文件和目录(如 /etc/passwd
, /etc/shadow
, /etc/group
, /home
等)。你必须拥有 root
权限,通常通过以下两种方式之一实现:
- 直接以
root
用户登录: 不推荐日常使用,安全性较低。 - 使用
sudo
命令: 强烈推荐,这允许被授权(通常在sudoers
文件中配置)的普通用户临时以root
权限执行命令,本文后续命令将默认使用sudo
。
使用 useradd
命令(通用、灵活)
useradd
是 Linux 发行版中最基础、最通用的用户创建工具,它提供了精细的控制选项。
基本语法:
sudo useradd [选项] 用户名
常用选项详解:
-m
或--create-home
:至关重要! 为新用户创建其主目录(通常是/home/用户名
),如果省略此选项,用户将没有主目录,登录后可能遇到问题。-d /path/to/home
或--home /path/to/home
:指定自定义的主目录路径(而不是默认的/home/用户名
),通常与-m
一起使用。-s /path/to/shell
或--shell /path/to/shell
:指定用户的登录 Shell,常见的 Shell 有:/bin/bash
:功能强大的 Bourne-Again Shell (Bash),大多数发行版的默认 Shell。/bin/sh
:Bourne Shell 或其兼容链接(通常是 Dash 或 Bash)。/usr/sbin/nologin
或/sbin/nologin
:用于服务账户,禁止该用户通过 Shell 登录系统,但进程可以以其身份运行。创建服务用户时常用。/bin/false
:类似nologin
,立即退出,效果相同。
-g 主组名
或--gid 主组名/GID
:指定用户的初始登录组(主组),组名或 GID(组 ID)必须已存在,如果省略,系统通常创建一个与用户名同名的新组作为其主组(在 RHEL/CentOS 等上),或者在 Debian/Ubuntu 上默认使用一个名为users
的组(具体行为取决于/etc/login.defs
配置)。-G 附加组1,附加组2,...
或--groups 附加组1,附加组2,...
:指定用户所属的附加组(辅助组),多个组名用逗号分隔,不要有空格,这赋予用户额外的权限(由这些组的权限定义)。sudo -G sudo,developers newuser
将newuser
加入sudo
和developers
组。-c "注释"
或--comment "注释"
:为用户添加一段描述性注释,通常是全名或描述(会出现在/etc/passwd
的 GECOS 字段)。-c "John Doe, DevOps Engineer"
。-u UID
或--uid UID
:手动指定用户的 UID(用户 ID),通常系统会自动分配一个未使用的最小 UID(>= 1000 或 500 用于普通用户),仅在特殊需求(如 UID 映射)时使用。-p 加密密码
或--password 加密密码
:极其不推荐直接使用! 此选项要求提供 已经加密 的密码字符串(如$6$salt$hashedpassword
),直接在命令行传递明文密码或加密密码存在安全风险(命令历史记录)。强烈建议使用passwd
命令单独设置密码(见下文)。-k /path/to/skel
或--skel /path/to/skel
:指定一个包含默认配置文件(如.bashrc
,.profile
)的骨架目录(Skeleton Directory),复制到新用户的主目录,默认通常是/etc/skel
,修改/etc/skel
可以定制所有新用户的默认环境。-e YYYY-MM-DD
或--expiredate YYYY-MM-DD
:设置用户账户的过期日期,过期后用户将无法登录,格式:YYYY-MM-DD
。-f INACTIVE
或--inactive INACTIVE
:设置密码过期后,账户被永久禁用前的天数(宽限期),0 表示密码一过期就立即禁用,-1 表示禁用此功能(默认值)。
典型示例:
-
创建用户
johndoe
,创建主目录,使用 Bash Shell:sudo useradd -m -s /bin/bash johndoe
- 系统会自动创建一个名为
johndoe
的组作为其主组。 - 主目录
/home/johndoe
会被创建,并从/etc/skel
复制基本配置文件。
- 系统会自动创建一个名为
-
创建用户
webserver
,创建主目录/srv/web
,禁止登录 Shell(用于服务):sudo useradd -m -d /srv/web -s /usr/sbin/nologin webserver
-
创建用户
sarah
,创建主目录,指定主组为developers
,附加组为designers
和sudo
,添加全名注释:sudo useradd -m -s /bin/bash -g developers -G designers,sudo -c "Sarah Connor" sarah
- 确保
developers
,designers
,sudo
这些组已经存在(可用groupadd
创建)。
- 确保
使用 adduser
脚本(Debian/Ubuntu 等 – 交互式、用户友好)
在 Debian、Ubuntu 及其衍生发行版中,adduser
是一个更高级、交互式的 Perl 脚本,它封装了 useradd
和其他命令(如 passwd
, chfn
),并提供了更友好的提示式界面,它自动执行了 useradd -m
的行为(创建主目录),并引导你设置密码和用户信息。
基本语法:
sudo adduser [选项] 用户名
常用选项:
--system
:创建一个系统用户(UID < 1000,无主目录,Shell 为/usr/sbin/nologin
或/bin/false
),适用于服务账户。--disabled-login
:创建用户但不设置密码(密码字段在/etc/shadow
为 或 ),禁止密码登录,稍后可通过passwd
启用。--gecos "注释"
:同useradd
的-c
,非交互式设置注释信息。--ingroup 组名
:指定主组(同useradd
的-g
)。--home /path/to/home
:指定主目录路径(同useradd
的-d
)。--shell /path/to/shell
:指定 Shell(同useradd
的-s
)。--uid UID
:指定 UID(同useradd
的-u
)。--quiet
:减少输出信息。
典型交互过程:
sudo adduser johndoe
执行后,脚本会提示你:
- 设置并确认新用户的密码(输入时不可见)。
- 输入用户的全名(GECOS 字段)和其他信息(房间号、工作电话、家庭电话),这些字段通常可以按 Enter 跳过。
- 最后确认信息是否正确(输入
Y
)。
重要后续步骤:设置密码
无论使用 useradd
还是 adduser
(除非使用了 --disabled-login
或 -p
),为新用户设置一个安全的密码是必须的:
sudo passwd 用户名
系统会提示你输入并确认新密码,输入时密码不可见。
- 安全最佳实践:
- 使用强密码(长度、复杂度)。
- 定期要求用户更改密码(通过
/etc/login.defs
的PASS_MAX_DAYS
等配置)。 - 对于服务账户(使用
nologin
/false
Shell),不需要也不应该设置可登录的密码,账户状态应保持为锁定( 或 在/etc/shadow
的密码字段),服务应通过其他机制(如密钥、服务管理器配置)运行。
验证用户创建
检查用户信息:
id 用户名 # 显示 UID, GID, 所属组 finger 用户名 # 显示用户信息(可能需要安装 `finger` 包) grep '^用户名' /etc/passwd # 查看 /etc/passwd 中的条目 ls -ld /home/用户名 # 检查主目录是否存在及权限 (如果创建了)
关键配置文件和目录
/etc/passwd
:存储用户账户信息(用户名、UID、GID、注释、主目录、Shell)。/etc/shadow
:存储加密后的用户密码及密码策略(仅root
可读)。/etc/group
:存储组信息。/etc/login.defs
:定义用户创建的默认设置(如 UID/GID 范围、主目录权限模版UMASK
、密码策略默认值等),修改此文件会影响后续所有useradd
命令的行为。/etc/skel/
:骨架目录,当使用-m
选项时,此目录下的文件和子目录会被复制到新用户的主目录中,管理员可以在此放置标准的配置文件(如.bashrc
,.profile
,.vimrc
)。
安全与最佳实践 (E-A-T 重点)
- 最小权限原则: 只赋予用户完成其工作所必需的最小权限,避免轻易将用户加入
sudo
组,如果需要管理员权限,考虑更细粒度的sudo
规则配置(使用visudo
编辑/etc/sudoers
)。 - 强密码策略: 强制执行密码长度、复杂度和有效期(配置
/etc/login.defs
和/etc/pam.d/common-password
)。 - 服务账户: 为运行应用程序或服务的进程创建专用用户(使用
-r
/--system
或-s /usr/sbin/nologin
)。永远不要给服务账户设置可登录的 Shell 或密码。 - 禁用未使用账户: 对于不再需要的用户,使用
sudo usermod -L 用户名
锁定账户(在/etc/shadow
密码字段前加 ),或者使用sudo userdel 用户名
删除账户(userdel -r 用户名
会同时删除主目录和邮件假脱机文件)。 - 定期审计: 定期检查
/etc/passwd
、/etc/shadow
、/etc/group
和sudo
权限,确保没有未授权或配置错误的账户。 - 主目录权限: 确保用户主目录权限正确(通常应为
700
或drwx------
),使其仅对所有者可读、写、执行,检查/etc/login.defs
中的UMASK
设置(如UMASK 022
会创建权限为755
的目录)。 - 使用
sudo
: 避免直接使用root
账户进行日常操作和管理,使用sudo
并配置好sudoers
文件。 - 了解发行版差异: 不同发行版(如 RHEL/CentOS vs Debian/Ubuntu)在默认组、
/etc/login.defs
设置和adduser
可用性上可能有细微差别,查阅你的发行版文档。
选择哪种方法?
useradd
: 通用、灵活、脚本友好,适合需要精确控制所有参数、编写自动化脚本或在所有发行版上工作的情况。务必记住-m
选项来创建主目录。adduser
(Debian/Ubuntu): 交互式、用户友好、自动化了多个步骤(创建主目录、设置密码、提示信息),适合手动在 Debian/Ubuntu 系统上创建用户,简化了流程。
引用说明:
- Linux
useradd
手册页 (man useradd
) - Linux
adduser
手册页 (man adduser
– 在支持它的系统上) - Linux
passwd
手册页 (man passwd
) - Linux
usermod
手册页 (man usermod
) - Linux
groupadd
手册页 (man groupadd
) - Linux
id
手册页 (man id
) - Linux 文件格式手册页 (
man 5 passwd
,man 5 shadow
,man 5 group
,man 5 login.defs
) - Debian
adduser
文档 - Red Hat / CentOS 系统管理员指南中关于用户管理的章节
- Linux 基金会 (Linux Foundation) 和各大发行版官方文档中关于用户和组管理的权威指南。
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/31434.html