命令解析sudo useradd -m -s /bin/bash 新用户名
1. sudo
作用:以超级用户(root)权限执行命令
为什么需要:创建用户需要修改系统文件(/etc/passwd, /etc/shadow等),普通用户没有这个权限
替代方案:如果已经是root用户,可以不加sudo
2. useradd
作用:Linux系统添加用户的核心命令
相关命令:
adduser:某些发行版(如Debian)提供的更友好的交互式工具
newusers:批量创建用户的工具
3. -m 选项
全称:–create-home
作用:为用户创建家目录(home directory)
目录位置:通常在/home/用户名
包含的文件:会从/etc/skel目录复制默认配置文件(bashrc、profile等)
如果不加:用户将没有家目录,登录后可能遇到问题
4. -s /bin/bash 选项
全称:–shell
作用:指定用户的默认登录shell
/bin/bash:Bourne-Again Shell,功能最丰富的常用shell
其他常见shell:
/bin/sh:Bourne Shell,更轻量
/bin/zsh:Z Shell,功能更强大
/sbin/nologin:禁止登录的shell(常用于系统账户)
5. 新用户名
命名规则:
通常小写字母开头
可以包含数字和下划线
长度一般不超过32字符
避免使用特殊字符和空格
系统保留名:避免使用root、daemon、bin等系统保留名称
命令执行后的系统变化
/etc/passwd:添加一行用户记录
新用户名❌UID:GID:用户描述:/home/新用户名:/bin/bash
/etc/shadow:创建密码记录(初始无密码)
/etc/group:创建与用户名相同的私有组
文件系统:创建/home/新用户名目录
完整用户创建流程示例
1. 创建用户
sudo useradd -m -s /bin/bash john
2. 设置密码(会提示输入两次)
sudo passwd john
谨慎操作!!!!!!
3. 可选:将用户加入sudo组(授予管理员权限)
sudo usermod -aG sudo john
4. 验证用户
id john
应显示类似: uid=1001(john) gid=1001(john) groups=1001(john),27(sudo)
5. 常见问题解决
(1)用户已存在错误:
useradd: user 'john' already exists
解决方案:先删除旧用户sudo userdel -r john
,或选择其他用户名
(2)家目录未创建:
检查是否遗漏了-m选项,可以手动创建:
sudo mkdir /home/john
sudo cp -r /etc/skel/. /home/john
sudo chown -R john:john /home/john
(3)shell不可用:
确保指定的shell存在于/etc/shells文件中
6. 安全建议
创建用户后立即设置强密码
对于不需要登录的账户(如服务账户),使用-s /sbin/nologin
定期审查用户列表cat /etc/passwd
考虑使用-u选项明确指定用户ID,避免自动分配冲突
这条命令是Linux系统管理中最基础也是最重要的命令之一,掌握它可以有效管理系统用户权限。
命令解析sudo usermod -aG sudo 新用户名
1. usermod
全称:user modify(用户修改)
功能:修改现有用户账户属性
相关命令:
useradd:创建新用户
userdel:删除用户
passwd:修改密码
2. -aG 选项组合
-a (append):
保持用户现有的所属组不变
只追加新的组关系
如果不加此选项,用户会被移出其他所有次要组
-G (groups):
指定要修改的附加组(secondary groups)
可以同时指定多个组,用逗号分隔
3. sudo
目标组名:通常指管理员权限组
不同发行版差异:
Ubuntu/Debian:sudo组
RHEL/CentOS:wheel组
其他发行版可能使用admin或operators
4. 新用户名
要求:必须是已存在的用户账户
验证方法:id 新用户名 或 grep 新用户名 /etc/passwd
5. 命令执行效果
(1)/etc/group文件修改:
sudo❌27:user1,user2,新用户名
在sudo组的用户列表末尾追加新用户名
(2)用户权限变化:
获得使用sudo命令的权限
可以执行需要root权限的操作
(3)立即生效:
修改后不需要重启或重新登录即可使用新权限
完整示例流程
1. 创建用户(如果不存在)
sudo useradd -m -s /bin/bash testuser
2. 授予sudo权限
sudo usermod -aG sudo testuser
3. 验证权限
sudo -l -U testuser
#应显示:User testuser may run the following commands on this host:
# (ALL : ALL) ALL
4. 检查组成员
groups testuser
# 应显示:testuser : testuser sudo
5. 常见问题解决
(1)"group ‘sudo’ does not exist"错误:
CentOS/RHEL系统应使用wheel组:
sudo usermod -aG wheel 新用户名
或者创建sudo组:sudo groupadd sudo
(2)权限不生效:
检查/etc/sudoers文件是否允许该组:
sudo grep '%sudo' /etc/sudoers
应有类似:%sudo ALL=(ALL:ALL) ALL
(3)误移除其他组:
确保使用了-a选项,否则用户会被移出其他所有次要组
6. 安全最佳实践
(1)最小权限原则:只给真正需要管理员权限的用户sudo权限
(2)定期审计:检查sudo权限用户列表:grep '^%sudo' /etc/group
(3)使用visudo:修改sudoers文件时永远使用:sudo visudo
而不是直接编辑/etc/sudoers
(4)限制sudo权限:可以为特定用户限制可执行的命令:
新用户名 ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl
这条命令是Linux系统管理中赋予用户管理员权限的标准方法,正确使用可以既保证系统安全又提供必要的管理灵活性。
[root@localhost home]# ls
user wulu1 XAlab_F16_1
[root@localhost home]# cd XAlab_F16_1/
[root@localhost XAlab_F16_1]# ls
[root@localhost XAlab_F16_1]# cd ../
[root@localhost home]# ls
user wulu1 XAlab_F16_1
[root@localhost home]# rm -rf XAlab_F16_1/
[root@localhost home]# ls
user wulu1
[root@localhost home]# sudo whoami
root
[root@localhost home]# cd ~
[root@localhost ~]# visudo
visudo: /etc/sudoers.tmp 未更改
只有root用户可以访问home目录下的所有文件夹
[root@localhost ~]# sudo useradd -m -s /bin/bash yhm #添加用户
[root@localhost ~]# sudo passwd yhm
更改用户 yhm 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 不包括足够不同的字符
重新输入新的 密码:
抱歉,密码不匹配。
passwd: 鉴定令牌操作错误
[root@localhost ~]# sudo passwd yhm
更改用户 yhm 的密码 。
新的 密码:
重新输入新的 密码:
抱歉,密码不匹配。
passwd: 鉴定令牌操作错误
[root@localhost ~]# sudo passwd yhm
更改用户 yhm 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 它基于一个字典中的词
重新输入新的 密码:
[root@localhost ~]# sudo whoami
root
[root@localhost ~]# sudo passwd yhm
更改用户 yhm 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# sudo whoami
root
[root@localhost ~]# sudo useradd -m -s /bin/bash XAlab_F16_1
useradd:用户“XAlab_F16_1”已存在
[root@localhost ~]# sudo passwd XAlab_F16_1
更改用户 XAlab_F16_1 的密码 。
新的 密码:
重新输入新的 密码:
抱歉,密码不匹配。
passwd: 鉴定令牌操作错误
[root@localhost ~]# sudo passwd XAlab_F16_1
更改用户 XAlab_F16_1 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# sudo usermod -aG sudo XAlab_F16_1
usermod:“sudo”组不存在
[root@localhost ~]# sudo usermod -aG sudo yhm
usermod:“sudo”组不存在
[root@localhost ~]# sudo visudo
visudo: /etc/sudoers.tmp 未更改
[root@localhost ~]# sudo usermod -aG sudo XAlab_F16_1
usermod:“sudo”组不存在
[root@localhost ~]# lsb_release -a
bash: lsb_release: 未找到命令...
安装软件包“redhat-lsb-core”以提供命令“lsb_release”? [N/y] y
* 正在队列中等待...
下列软件包必须安装:
mailx-12.5-29.el8.x86_64 Enhanced implementation of the mailx command
ncurses-compat-libs-6.1-10.20180224.el8.x86_64 Ncurses compatibility libraries
redhat-lsb-core-4.1-47.el8.x86_64 LSB Core module support
redhat-lsb-submod-security-4.1-47.el8.x86_64 LSB Security submodule support
spax-1.5.3-13.el8.x86_64 Portable archive exchange
下列软件包必须更新:
ncurses-6.1-10.20180224.el8.x86_64 Ncurses support utilities
ncurses-base-6.1-10.20180224.el8.noarch Descriptions of common terminals
ncurses-libs-6.1-10.20180224.el8.x86_64 Ncurses libraries
继续更改? [N/y] y
* 正在队列中等待...
* 正在等待认证...
* 正在队列中等待...
* 正在下载软件包...
* 正在请求数据...
* 正在测试更改...
* 正在安装更新...
* 正在安装软件包...
* 正在安装更新...
* 正在安装软件包...
* 正在安装更新...
* 正在清理软件包...
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: Rocky
Description: Rocky Linux release 8.7 (Green Obsidian)
Release: 8.7
Codename: GreenObsidian
[root@localhost ~]# lsb_release -a
LSB Version: :core-4.1-amd64:core-4.1-noarch
Distributor ID: Rocky
Description: Rocky Linux release 8.7 (Green Obsidian)
Release: 8.7
Codename: GreenObsidian
[root@localhost ~]# sudo usermod -l yhm XAlab_F16_1
usermod:用户“yhm”已存在
[root@localhost ~]# sudo usermod -l XAlab_F16_1 yhm
usermod:用户“XAlab_F16_1”已存在
[root@localhost ~]# sudo userdel -r XAlab_F16_1
userdel:未找到 XAlab_F16_1 的主目录“/home/XAlab_F16_1”
[root@localhost ~]# sudo usermod -l XAlab_F16_1 user
usermod: user user is currently used by process 9912
[root@localhost ~]# [root@localhost ~]# sudo usermod -l XAlab_F16_1 user
bash: [root@localhost: 未找到命令...
[root@localhost ~]# usermod: user user is currently used by process 9912
bash: usermod:: 未找到命令...
相似命令是: 'usermod'
[root@localhost ~]# [root@localhost ~]# sudo pkill -u user
bash: [root@localhost: 未找到命令...
[root@localhost ~]# [root@localhost ~]# sudo pkill -9 -u user
bash: [root@localhost: 未找到命令...
[root@localhost ~]# ps -u user
PID TTY TIME CMD
9912 ? 00:00:01 systemd
9916 ? 00:00:00 (sd-pam)
9932 ? 00:00:00 pulseaudio
9937 ? 00:00:00 gnome-keyring-d
9946 tty2 00:00:00 gdm-x-session
9977 ? 00:00:32 dbus-daemon
10033 tty2 00:00:02 gnome-session-b
10133 ? 00:00:00 at-spi-bus-laun
10138 ? 00:00:00 dbus-daemon
10141 ? 00:00:00 at-spi2-registr
10224 tty2 00:29:03 gnome-shell
10263 ? 00:00:00 gvfsd
10268 ? 00:00:00 gvfsd-fuse
10285 tty2 00:00:33 ibus-daemon
10289 tty2 00:00:00 ibus-dconf
10290 tty2 00:00:00 ibus-extension-
10292 tty2 00:00:00 ibus-x11
10295 ? 00:00:00 ibus-portal
10299 ? 00:00:00 xdg-permission-
10312 ? 00:00:00 gnome-shell-cal
10317 ? 00:00:00 evolution-sourc
10324 ? 00:00:30 goa-daemon
10336 ? 00:00:00 gvfs-udisks2-vo
10345 ? 00:00:00 gvfs-mtp-volume
10349 ? 00:00:00 gvfs-gphoto2-vo
10353 ? 00:00:00 gvfs-goa-volume
10361 ? 00:02:25 goa-identity-se
10368 ? 00:00:00 gvfs-afc-volume
10381 tty2 00:00:25 gsd-power
10383 tty2 00:00:00 gsd-print-notif
10384 tty2 00:00:11 gsd-rfkill
10385 tty2 00:00:00 gsd-screensaver
10386 tty2 00:00:40 gsd-sharing
10388 tty2 00:00:00 gsd-sound
10395 tty2 00:00:00 gsd-xsettings
10396 tty2 00:00:00 gsd-wacom
10398 tty2 00:02:00 gsd-smartcard
10401 tty2 00:00:02 gsd-account
10415 tty2 00:00:00 gsd-a11y-settin
10416 tty2 00:00:00 gsd-clipboard
10417 tty2 00:00:22 gsd-color
10421 tty2 00:00:00 gsd-datetime
10424 tty2 00:01:25 gsd-housekeepin
10426 tty2 00:00:00 gsd-keyboard
10429 tty2 00:00:00 gsd-media-keys
10431 ? 00:00:00 evolution-calen
10434 tty2 00:00:00 gsd-mouse
10479 tty2 00:00:00 gsd-disk-utilit
10484 tty2 01:57:19 gnome-software
10495 ? 00:00:00 tracker-store
10509 tty2 00:00:00 ibus-engine-sim
10516 tty2 00:00:00 tracker-miner-a
10522 tty2 00:00:00 tracker-miner-f
10546 ? 00:00:32 evolution-calen
10583 ? 00:00:31 dconf-service
10588 ? 00:00:00 evolution-addre
10607 ? 00:00:33 evolution-addre
10634 tty2 00:00:00 gsd-printer
10829 tty2 00:00:00 ibus-engine-lib
11288 ? 00:00:00 gvfsd-metadata
11432 ? 00:01:28 xdg-desktop-por
11436 ? 00:00:00 xdg-document-po
11445 ? 00:00:03 xdg-desktop-por
11456 ? 00:00:00 pipewire
11458 ? 00:00:00 pipewire-media-
3418164 ? 00:00:00 sshd
3418176 pts/1 00:00:00 bash
3418244 ? 00:00:00 dbus-daemon
3418247 ? 00:00:00 dbus-kill-proce
3418253 ? 00:00:00 gio
3418262 ? 00:00:00 gvfsd
3425019 ? 00:00:00 sshd
3425031 pts/3 00:00:00 bash
3425104 ? 00:00:00 dbus-daemon
3425107 ? 00:00:00 dbus-kill-proce
3425114 ? 00:00:00 gio
3425122 ? 00:00:00 gvfsd
[root@localhost ~]# sudo kill -9 9912
[root@localhost ~]# sudo usermod -l XAlab_F16_1 user
usermod: user user is currently used by process 3418164
[root@localhost ~]# sudo kill -9 3418164
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(翔安) at 17:50:17.
Type `help' to learn how to use Xshell prompt.
[C:\~]$
Connecting to 10.26.248.239:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu May 15 05:35:32 2025 from 10.26.255.81
(base) [user@localhost ~]$ su -
密码:
[root@localhost ~]# sudo usermod -l XAlab_F16_1 user
usermod: user user is currently used by process 3425019
[root@localhost ~]# sudo pkill -u user
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(翔安) at 17:53:38.
Type `help' to learn how to use Xshell prompt.
[C:\~]$
Connecting to 10.26.248.239:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu May 15 05:51:17 2025 from 10.26.255.81
(base) [user@localhost ~]$ sudo pkill -u user
[sudo] user 的密码:
user 不在 sudoers 文件中。此事将被报告。
(base) [user@localhost ~]$ su -
密码:
[root@localhost ~]# sudo pkill -u user
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(翔安) at 18:41:52.
Type `help' to learn how to use Xshell prompt.
[C:\~]$
Connecting to 10.26.248.239:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu May 15 06:40:01 2025 from 10.26.255.81
(base) [user@localhost ~]$ su -
密码:
su: 鉴定故障
(base) [user@localhost ~]$ su -
密码:
[root@localhost ~]# nohup sudo pkill -u user &
[1] 3469106
[root@localhost ~]# nohup: 忽略输入并把输出追加到'nohup.out'
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(翔安) at 18:46:13.
Type `help' to learn how to use Xshell prompt.
[C:\~]$
Connecting to 10.26.248.239:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu May 15 06:42:30 2025 from 10.26.255.81
(base) [user@localhost ~]$ who
wulu1 pts/0 2025-05-15 03:47 (10.26.248.44)
user pts/1 2025-05-15 06:46 (10.26.255.81)
yhm pts/2 2025-05-15 05:24 (10.26.255.81)
(base) [user@localhost ~]$ su -
密码:
[root@localhost ~]# who
wulu1 pts/0 2025-05-15 03:47 (10.26.248.44)
user pts/1 2025-05-15 06:46 (10.26.255.81)
yhm pts/2 2025-05-15 05:24 (10.26.255.81)
[root@localhost ~]# sudo pkill -u user
Connection closing...Socket close.
Connection closed by foreign host.
Disconnected from remote host(翔安) at 18:48:56.
Type `help' to learn how to use Xshell prompt.
[C:\~]$ ssh root@10.26.248.239
Connecting to 10.26.248.239:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Thu May 15 06:48:04 2025
/usr/bin/xauth: file /root/.Xauthority does not exist
[root@localhost ~]# sudo pkill -u user
[root@localhost ~]# sudo usermod -l XAlab_F16_1 user
usermod: user user is currently used by process 3469143
[root@localhost ~]# sudo pkill -u user
[root@localhost ~]# sudo usermod -l XAlab_F16_1 user
usermod: user user is currently used by process 3469143
[root@localhost ~]# sudo kill -9 3469143
[root@localhost ~]# sudo usermod -l XAlab_F16_1 user
[root@localhost ~]# who
wulu1 pts/0 2025-05-15 03:47 (10.26.248.44)
root pts/1 2025-05-15 06:49 (10.26.255.81)
yhm pts/2 2025-05-15 05:24 (10.26.255.81)
[root@localhost ~]# sudo passwd XAlab_F16_1
更改用户 XAlab_F16_1 的密码 。
新的 密码:
重新输入新的 密码:
抱歉,密码不匹配。
passwd: 鉴定令牌操作错误
[root@localhost ~]# sudo passwd XAlab_F16_1
更改用户 XAlab_F16_1 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# who
wulu1 pts/0 2025-05-15 03:47 (10.26.248.44)
root pts/1 2025-05-15 06:49 (10.26.255.81)
yhm pts/2 2025-05-15 05:24 (10.26.255.81)
[root@localhost ~]# who
wulu1 pts/0 2025-05-15 03:47 (10.26.248.44)
root pts/1 2025-05-15 06:49 (10.26.255.81)
yhm pts/2 2025-05-15 05:24 (10.26.255.81)
XAlab_F16_1 pts/3 2025-05-15 07:05 (10.26.255.81)
XAlab_F16_1 pts/4 2025-05-15 07:20 (10.26.255.81)
[root@localhost ~]# who
wulu1 pts/0 2025-05-15 03:47 (10.26.248.44)
root pts/1 2025-05-15 06:49 (10.26.255.81)
yhm pts/2 2025-05-15 05:24 (10.26.255.81)
XAlab_F16_1 pts/3 2025-05-15 07:05 (10.26.255.81)
XAlab_F16_1 pts/4 2025-05-15 07:20 (10.26.255.81)
[root@localhost ~]# sudo visudo
visudo: /etc/sudoers.tmp 未更改
[root@localhost ~]#