Linux 中新增用户的方法

TomHanck4
2026-01-07 / 0 评论 / 1 阅读 / 正在检测是否收录...

Linux 中新增用户的方法

目录


1. 使用 useradd 命令(推荐)

1.1 基本语法

useradd [选项] 用户名

1.2 常用选项

  • -m--create-home: 创建用户主目录
  • -d--home-dir HOME_DIR: 指定用户主目录路径
  • -s--shell SHELL: 指定用户的默认 shell
  • -g--gid GROUP: 指定用户的主要组
  • -G--groups GROUPS: 指定用户的附加组(多个组用逗号分隔)
  • -u--uid UID: 指定用户 ID
  • -c--comment COMMENT: 添加用户注释(通常是全名)

1.3 示例

# 创建用户并自动创建主目录
sudo useradd -m username

# 创建用户并指定 shell
sudo useradd -m -s /bin/bash username

# 创建用户并指定主目录
sudo useradd -m -d /home/customdir username

# 创建用户并指定组
sudo useradd -m -g users -G sudo,www-data username

# 创建用户并指定 UID
sudo useradd -m -u 1001 username

# 创建用户并添加注释
sudo useradd -m -c "User Full Name" username

2. 使用 adduser 命令(交互式,Debian/Ubuntu)

2.1 基本用法

sudo adduser username

2.2 特点

  • 交互式创建用户
  • 自动创建主目录
  • 自动设置密码
  • 自动创建同名组
  • 提示输入用户信息(全名、房间号、工作电话等)

2.3 示例

# 交互式创建用户
sudo adduser username

# 非交互式创建用户(跳过提示)
sudo adduser --disabled-password --gecos "" username

3. 创建用户后的必要操作

3.1 设置密码

# 使用 passwd 命令设置密码
sudo passwd username

3.2 赋予 sudo 权限(可选)

# 方法1: 添加到 sudo 组
sudo usermod -aG sudo username

# 方法2: 编辑 sudoers 文件
sudo visudo
# 添加以下行:
# username ALL=(ALL:ALL) ALL

3.3 验证用户创建

# 查看用户信息
id username

# 查看用户详细信息
finger username  # 如果安装了 finger
getent passwd username

3.4 用户主目录管理

3.4.1 创建用户主目录

# 创建用户时自动创建主目录(推荐)
sudo useradd -m username

# 如果创建用户时没有创建主目录,手动创建
sudo mkdir -p /home/username
sudo chown username:username /home/username
sudo chmod 755 /home/username

3.4.2 复制默认配置文件到主目录

# 复制默认配置文件(.bashrc, .profile 等)
sudo cp /etc/skel/.bashrc /home/username/
sudo cp /etc/skel/.profile /home/username/
sudo cp -r /etc/skel/. /home/username/

# 设置正确的所有者和权限
sudo chown -R username:username /home/username
sudo chmod -R 755 /home/username

3.4.3 修改用户主目录

# 修改用户主目录路径
sudo usermod -d /new/home/path username

# 移动现有主目录到新位置
sudo mv /home/username /new/home/path
sudo chown -R username:username /new/home/path

3.4.4 设置主目录权限

# 设置主目录权限(只有所有者可访问)
sudo chmod 700 /home/username

# 设置主目录权限(所有者可读写执行,组和其他用户无权限)
sudo chmod 755 /home/username

# 递归设置主目录下所有文件权限
sudo chmod -R 700 /home/username
sudo chown -R username:username /home/username

3.4.5 查看用户主目录

# 查看用户主目录路径
grep username /etc/passwd | cut -d: -f6

# 或者使用 getent
getent passwd username | cut -d: -f6

# 查看主目录详细信息
ls -ld ~username
ls -la /home/username

3.5 设置登录时的默认账号

3.5.1 设置默认登录用户(图形界面)

3.5.1.1 使用 systemd 的自动登录(systemd 系统)
# 编辑自动登录配置
sudo nano /etc/systemd/logind.conf

# 找到并修改以下行(取消注释并设置)
# NAutoVTs=6
# ReserveVT=6
# KillUserProcesses=no

# 编辑 getty 服务配置
sudo systemctl edit getty@tty1.service

# 添加以下内容:
[Service]
ExecStart=
ExecStart=-/sbin/agetty --autologin username --noclear %I $TERM
3.5.1.2 使用 LightDM(Ubuntu/Linux Mint)
# 编辑 LightDM 配置文件
sudo nano /etc/lightdm/lightdm.conf

# 在 [Seat:*] 部分添加:
autologin-user=username
autologin-user-timeout=0
3.5.1.3 使用 GDM(GNOME 显示管理器)
# 编辑 GDM 配置文件
sudo nano /etc/gdm3/custom.conf

# 在 [daemon] 部分添加:
AutomaticLogin=username
AutomaticLoginEnable=true
3.5.1.4 使用 SDDM(KDE Plasma)
# 编辑 SDDM 配置文件
sudo nano /etc/sddm.conf

# 添加以下内容:
[Autologin]
User=username
Session=plasma.desktop

3.5.2 设置默认 Shell

# 创建用户时指定默认 shell
sudo useradd -m -s /bin/bash username

# 修改现有用户的默认 shell
sudo chsh -s /bin/bash username

# 或者使用 usermod
sudo usermod -s /bin/bash username

# 查看可用的 shell
cat /etc/shells

# 查看用户的当前 shell
grep username /etc/passwd | cut -d: -f7

3.5.3 设置默认用户组

# 创建用户时指定主要组
sudo useradd -m -g users username

# 修改用户的主要组
sudo usermod -g groupname username

# 查看用户的组信息
groups username
id username

3.5.4 设置默认环境变量

# 编辑用户的 .bashrc 文件
nano ~/.bashrc

# 或者编辑全局配置文件
sudo nano /etc/bash.bashrc
sudo nano /etc/profile

# 添加环境变量示例:
export PATH=$PATH:/usr/local/bin
export EDITOR=nano
export LANG=zh_CN.UTF-8

3.5.5 设置默认工作目录

# 在用户的 .bashrc 中添加
cd /path/to/default/directory

# 或者在 .profile 中添加
cd $HOME/projects

3.5.6 配置 SSH 默认登录用户

# 编辑 SSH 客户端配置
nano ~/.ssh/config

# 添加以下内容:
Host myserver
    HostName server.example.com
    User username
    Port 22
    IdentityFile ~/.ssh/id_rsa

# 这样可以直接使用:ssh myserver

3.5.7 设置系统默认用户(系统服务)

# 查看系统默认用户设置
cat /etc/default/useradd

# 编辑默认设置
sudo nano /etc/default/useradd

# 常见配置项:
# GROUP=100          # 默认组 ID
# HOME=/home         # 默认主目录位置
# INACTIVE=-1        # 密码过期后的宽限天数
# EXPIRE=            # 账户过期日期
# SHELL=/bin/bash    # 默认 shell
# SKEL=/etc/skel     # 骨架目录
# CREATE_MAIL_SPOOL=yes  # 是否创建邮件目录

3.5.8 禁用自动登录(安全考虑)

# 移除自动登录配置
sudo nano /etc/lightdm/lightdm.conf
# 注释掉或删除 autologin-user 行

# 或者
sudo nano /etc/gdm3/custom.conf
# 注释掉或删除 AutomaticLogin 行

# 重启显示管理器
sudo systemctl restart lightdm
# 或
sudo systemctl restart gdm3

4. 切换用户的方法

4.1 使用 su 命令

4.1.1 基本语法

su [选项] [用户名]

4.1.2 常用选项

  • --l--login: 完全登录(加载目标用户的环境变量)
  • -c--command: 以目标用户身份执行单个命令
  • -s--shell: 指定要使用的 shell
  • -m-p--preserve-environment: 保持当前环境变量

4.1.3 示例

# 切换到 root 用户(需要输入 root 密码)
su

# 切换到 root 用户并加载完整环境
su -

# 切换到指定用户
su username

# 切换到指定用户并加载完整环境
su - username

# 以目标用户身份执行单个命令
su -c "command" username

# 切换到用户并保持当前环境变量
su -m username

4.2 使用 sudo 命令

4.2.1 基本语法

sudo [选项] 命令

4.2.2 切换到其他用户

# 切换到 root 用户(需要当前用户有 sudo 权限)
sudo su

# 切换到 root 用户并加载完整环境
sudo su -

# 切换到指定用户
sudo su username

# 切换到指定用户并加载完整环境
sudo su - username

# 以指定用户身份执行命令
sudo -u username command

4.3 使用 sudo -i 命令

# 切换到 root 用户并启动交互式登录 shell
sudo -i

# 切换到指定用户并启动交互式登录 shell
sudo -i -u username

4.4 使用 sudo -s 命令

# 切换到 root 用户并启动 shell(不加载完整环境)
sudo -s

# 切换到指定用户并启动 shell
sudo -s -u username

4.5 退出切换的用户

# 退出当前用户会话,返回到之前的用户
exit

# 或者使用快捷键
Ctrl + D

4.6 查看当前用户

# 查看当前登录的用户名
whoami

# 查看当前用户 ID
id

# 查看当前用户详细信息
id -a

# 查看所有登录的用户
who

# 查看当前用户和切换历史
w

4.7 su 和 sudo 的区别

特性susudo
密码要求需要目标用户的密码需要当前用户的密码
权限控制切换到目标用户后拥有其所有权限可以精细控制权限
审计日志基本日志详细的审计日志
安全性需要共享 root 密码更安全,不需要共享密码
使用场景完全切换用户身份临时提升权限执行命令

4.8 实际应用场景

4.8.1 临时切换到 root 执行管理任务

# 方法1: 使用 sudo(推荐)
sudo command

# 方法2: 使用 su
su -c "command"

# 方法3: 切换到 root 后执行
sudo su -
# 执行命令
# exit

4.8.2 切换到普通用户测试

# 从 root 切换到普通用户
su - username

# 从普通用户切换到另一个普通用户(需要目标用户密码)
su - username

4.8.3 以其他用户身份运行服务

# 以 www-data 用户运行命令
sudo -u www-data command

# 以 postgres 用户运行命令
sudo -u postgres psql

4.9 安全注意事项

  1. 避免使用 su 切换到 root: 推荐使用 sudo 而不是 su,因为:

    • 不需要共享 root 密码
    • 有详细的审计日志
    • 可以精细控制权限
  2. 使用 sudo 的最佳实践:

    # 只执行需要的命令,而不是切换到 root
    sudo command  # 推荐
    
    # 避免长时间以 root 身份运行
    sudo su -  # 不推荐,除非必要
  3. 限制 sudo 权限: 在 /etc/sudoers 中只授予必要的权限
  4. 使用 sudo 超时: sudo 默认在 15 分钟内记住密码,超时需要重新输入

5. 完整创建用户流程示例

5.1 使用 useradd 的完整流程

# 1. 创建用户
sudo useradd -m -s /bin/bash -c "John Doe" john

# 2. 设置密码
sudo passwd john

# 3. 添加到 sudo 组(可选)
sudo usermod -aG sudo john

# 4. 验证
id john

5.2 使用 adduser 的完整流程

# 一步完成(交互式)
sudo adduser john
# 按提示输入密码和信息即可

6. 高级选项

6.1 指定用户 ID 范围

# 查看当前系统用户 ID 范围
grep UID_MIN /etc/login.defs
grep UID_MAX /etc/login.defs

# 创建系统用户(UID < 1000)
sudo useradd -r -s /bin/false systemuser

6.2 创建用户时指定多个附加组

sudo useradd -m -G sudo,docker,www-data username

6.3 设置用户过期时间

# 使用 chage 命令
sudo chage -E 2024-12-31 username

7. 相关配置文件

7.1 用户信息文件

  • /etc/passwd: 用户账户信息
  • /etc/shadow: 用户密码信息(加密)
  • /etc/group: 组信息
  • /etc/gshadow: 组密码信息

7.2 默认设置文件

  • /etc/login.defs: 用户创建的默认设置
  • /etc/default/useradd: useradd 的默认配置

8. 删除用户

8.1 删除用户但保留主目录

sudo userdel username

8.2 删除用户及其主目录

sudo userdel -r username

9. 修改用户信息

9.1 使用 usermod 命令

# 修改用户 shell
sudo usermod -s /bin/zsh username

# 修改用户主目录
sudo usermod -d /new/home/path username

# 修改用户组
sudo usermod -g newgroup username

# 添加附加组
sudo usermod -aG groupname username

# 锁定用户账户
sudo usermod -L username

# 解锁用户账户
sudo usermod -U username

10. 注意事项

  1. 权限要求: 创建用户需要 root 权限,使用 sudo 或切换到 root 用户
  2. 用户名规则:

    • 只能包含小写字母、数字、下划线和连字符
    • 不能以连字符开头
    • 通常建议使用小写字母
  3. 主目录: 使用 -m 选项确保创建主目录,否则用户无法正常登录
  4. Shell 设置: 确保指定的 shell 存在于 /etc/shells 文件中
  5. 系统用户 vs 普通用户:

    • 系统用户通常 UID < 1000,用于运行服务
    • 普通用户 UID >= 1000,用于登录系统

11. 常见问题排查

11.1 用户无法登录

# 检查用户 shell 是否正确
grep username /etc/passwd

# 检查主目录是否存在
ls -la /home/username

# 检查主目录权限
sudo chown -R username:username /home/username

11.2 查看用户所属组

groups username
id username

11.3 查看所有用户

# 查看所有用户
cat /etc/passwd

# 只查看普通用户(UID >= 1000)
awk -F: '$3 >= 1000 {print $1}' /etc/passwd

总结:

  • Debian/Ubuntu 系统: 推荐使用 adduser(更简单)
  • 其他 Linux 发行版: 使用 useradd(更灵活)
  • 创建后记得设置密码和必要的权限
0

评论 (0)

取消