adduser 是一个用户友好的用户创建工具,相比 useradd 命令,它提供了更简单的交互式界面和更完整的默认配置。adduser 会自动设置用户主目录、默认 shell、用户组等,使新用户创建过程更加便捷。
大多数 Linux 发行版默认已经安装 adduser。如果没有,可以使用以下命令安装:
# 通常已预装,如果需要重新安装
sudo apt install adduser
注意:RHEL/CentOS 系统通常使用 useradd 命令,但可以通过 shadow-utils 包获得类似功能:
# 安装相关工具
sudo yum install shadow-utils
# 基本语法
adduser [选项] 用户名
# 添加系统用户
adduser --system [选项] 用户名
# 添加用户到指定组
adduser 用户名 组名
参数说明:
用户名 - 要创建的新用户的登录名组名 - 将用户添加到的现有组名(可选)| 选项 | 说明 |
|---|---|
--home 目录 |
指定用户主目录 |
--shell SHELL |
指定用户的登录shell |
--ingroup 组名 |
指定用户的主要组 |
--disabled-login |
创建后立即禁用账户 |
--disabled-password |
创建无密码账户 |
--gecos "描述" |
设置用户描述信息(全名等) |
--quiet |
安静模式,减少输出 |
--system |
创建系统用户(无主目录) |
--force-badname |
允许使用非常规用户名 |
--uid UID |
指定用户ID |
--gid GID |
指定组ID |
--help |
显示帮助信息 |
# 交互式创建用户
sudo adduser john
# 交互过程示例:
# Adding user `john' ...
# Adding new group `john' (1002) ...
# Adding new user `john' (1002) with group `john' ...
# Creating home directory `/home/john' ...
# Copying files from `/etc/skel' ...
# Enter new UNIX password:
# Retype new UNIX password:
# passwd: password updated successfully
# Changing the user information for john
# Enter the new value, or press ENTER for the default
# Full Name []: John Smith
# Room Number []: 101
# Work Phone []: 555-1234
# Home Phone []: 555-5678
# Other []: Developer
# Is the information correct? [Y/n] Y
# 使用选项一次性创建用户
sudo adduser --home /home/john \
--shell /bin/bash \
--gecos "John Smith,Developer,555-1234" \
john
# 设置密码(交互式)
sudo passwd john
# 或使用chpasswd
echo "john:password123" | sudo chpasswd
# 创建系统用户(通常用于服务账户)
sudo adduser --system \
--no-create-home \
--shell /usr/sbin/nologin \
nginx-user
# 验证系统用户
id nginx-user
# 输出:uid=113(nginx-user) gid=117(nginx-user) groups=117(nginx-user)
# 首先创建组(如果不存在)
sudo groupadd developers
# 创建用户并指定主组
sudo adduser --ingroup developers \
--shell /bin/bash \
--gecos "Jane Doe" \
jane
# 同时将用户添加到其他组
sudo adduser jane sudo # 添加到sudo组
sudo adduser jane docker # 添加到docker组
sudo adduser jane www-data # 添加到www-data组
# 验证用户组
groups jane
# 输出:jane : developers sudo docker www-data
# 创建无密码账户(用于特定用途)
sudo adduser --disabled-password \
--gecos "Service Account" \
service-user
# 创建后立即禁用账户
sudo adduser --disabled-login \
--shell /usr/sbin/nologin \
backup-user
# 创建账户但不允许登录
sudo adduser --shell /sbin/nologin \
--no-create-home \
restricted-user
#!/bin/bash
# 批量创建用户脚本
USER_FILE="users.txt"
PASSWORD="default123"
# 用户文件格式:用户名:全名:组名:描述
# john:John Smith:developers:Senior Developer
# jane:Jane Doe:developers:Junior Developer
while IFS=':' read -r username fullname group description; do
echo "创建用户: $username"
# 创建组(如果不存在)
if ! getent group "$group" > /dev/null; then
sudo groupadd "$group"
fi
# 创建用户
sudo adduser --ingroup "$group" \
--gecos "$fullname,,,$description" \
--disabled-password \
"$username"
# 设置密码
echo "$username:$PASSWORD" | sudo chpasswd
# 强制用户首次登录修改密码
sudo passwd --expire "$username"
echo "用户 $username 创建完成"
done < "$USER_FILE"
| 配置文件 | 说明 | 用途 |
|---|---|---|
/etc/passwd |
用户账户信息 | 存储用户基本信息(UID、GID、shell等) |
/etc/shadow |
用户密码信息 | 存储加密密码和密码策略 |
/etc/group |
组信息 | 存储组定义和组成员 |
/etc/gshadow |
组密码信息 | 存储组密码和管理信息 |
/etc/skel/ |
骨架目录 | 创建用户时复制的默认配置文件 |
/etc/adduser.conf |
adduser配置 | adduser命令的默认配置 |
/etc/login.defs |
登录定义 | 用户创建的默认值(UID范围等) |
# 查看骨架目录内容
ls -la /etc/skel/
# 典型内容:
# .bashrc - Bash shell配置文件
# .profile - 用户环境配置文件
# .bash_logout - 退出shell时执行的命令
# 自定义骨架目录
# 1. 创建自定义文件
echo "alias ll='ls -la'" > /etc/skel/.bash_aliases
# 2. 创建自定义配置文件
cat > /etc/skel/.vimrc << 'EOF'
syntax on
set tabstop=4
set shiftwidth=4
set expandtab
EOF
# /etc/adduser.conf - adduser配置文件
# 默认值
DSHELL=/bin/bash
DHOME=/home
GROUPHOMES=no
LETTERHOMES=no
SKEL=/etc/skel
# UID范围
FIRST_UID=1000
LAST_UID=29999
# GID范围
FIRST_GID=1000
LAST_GID=29999
# 用户创建选项
USERGROUPS=yes
DIR_MODE=0755
SETGID_HOME=no
# 密码设置
PASS_MIN_DAYS=0
PASS_MAX_DAYS=99999
# 默认用户配置
USERS_GID=100
ADD_EXTRA_GROUPS=0
# 确定用户名、组、权限
USERNAME="newuser"
PRIMARY_GROUP="developers"
SHELL="/bin/bash"
HOME_DIR="/home/$USERNAME"
# 创建用户和主目录
sudo adduser --ingroup $PRIMARY_GROUP \
--shell $SHELL \
--home $HOME_DIR \
$USERNAME
# 设置密码
sudo passwd $USERNAME
# 添加到附加组
sudo adduser $USERNAME sudo
sudo adduser $USERNAME docker
# 设置目录权限
sudo chmod 750 $HOME_DIR
错误信息: adduser: The user `username' already exists.
解决方案:
# 1. 检查用户是否已存在
id username
getent passwd username
# 2. 如果存在,删除用户(如果需要)
sudo deluser username
# 3. 或者创建不同的用户名
sudo adduser username2
# 4. 检查用户残留文件
ls -la /home/ | grep username
ls -la /var/mail/ | grep username
错误信息: mkdir: cannot create directory '/home/username': Permission denied
解决方案:
# 1. 检查父目录权限
ls -ld /home/
# 2. 修复目录权限
sudo chmod 755 /home
# 3. 手动创建目录并设置权限
sudo mkdir /home/username
sudo chown username:username /home/username
sudo chmod 700 /home/username
# 4. 复制骨架文件
sudo cp -r /etc/skel/. /home/username/
sudo chown -R username:username /home/username
错误信息: passwd: Authentication token manipulation error
解决方案:
# 1. 检查密码复杂性要求
# 查看PAM配置
cat /etc/pam.d/common-password
# 2. 使用更强的密码
echo "username:StrongP@ssw0rd123" | sudo chpasswd
# 3. 检查磁盘空间
df -h /
# 4. 检查/etc/shadow权限
ls -l /etc/shadow
sudo chmod 640 /etc/shadow
sudo chown root:shadow /etc/shadow
# 5. 使用passwd命令交互式设置
sudo passwd username
#!/bin/bash
# 高级用户创建模板
create_user_with_profile() {
local username=$1
local fullname=$2
local groups=$3
# 创建用户
sudo adduser --disabled-password \
--gecos "$fullname" \
"$username"
# 设置随机密码
local password=$(openssl rand -base64 12)
echo "$username:$password" | sudo chpasswd
# 添加到组
IFS=',' read -ra group_array <<< "$groups"
for group in "${group_array[@]}"; do
sudo adduser "$username" "$group"
done
# 配置SSH密钥
local ssh_dir="/home/$username/.ssh"
sudo mkdir -p "$ssh_dir"
sudo touch "$ssh_dir/authorized_keys"
sudo chmod 700 "$ssh_dir"
sudo chmod 600 "$ssh_dir/authorized_keys"
sudo chown -R "$username:$username" "$ssh_dir"
# 记录创建信息
echo "用户: $username" >> /var/log/user_creation.log
echo "密码: $password" >> /var/log/user_creation.log
echo "组: $groups" >> /var/log/user_creation.log
echo "---" >> /var/log/user_creation.log
}
# 使用模板创建用户
create_user_with_profile "alice" "Alice Wonderland" "sudo,developers,docker"
# 创建LDAP兼容用户
sudo adduser --uid 10000 \
--gid 10000 \
--home /home/ldapuser \
--shell /bin/bash \
--gecos "LDAP User" \
ldapuser
# 禁用本地密码验证
sudo passwd -l ldapuser
# 配置LDAP认证
sudo authconfig --enableldap \
--enableldapauth \
--ldapserver=ldap.example.com \
--ldapbasedn="dc=example,dc=com" \
--update
useradd低级用户添加
deluser删除用户
usermod修改用户
groupadd添加组
passwd密码管理
chage密码策略
id用户信息
whoami当前用户