命令解析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 commandncurses-compat-libs-6.1-10.20180224.el8.x86_64 Ncurses compatibility librariesredhat-lsb-core-4.1-47.el8.x86_64 LSB Core module supportredhat-lsb-submod-security-4.1-47.el8.x86_64 LSB Security submodule supportspax-1.5.3-13.el8.x86_64 Portable archive exchange
下列軟件包必須更新:ncurses-6.1-10.20180224.el8.x86_64 Ncurses support utilitiesncurses-base-6.1-10.20180224.el8.noarch Descriptions of common terminalsncurses-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 userPID TTY TIME CMD9912 ? 00:00:01 systemd9916 ? 00:00:00 (sd-pam)9932 ? 00:00:00 pulseaudio9937 ? 00:00:00 gnome-keyring-d9946 tty2 00:00:00 gdm-x-session9977 ? 00:00:32 dbus-daemon10033 tty2 00:00:02 gnome-session-b10133 ? 00:00:00 at-spi-bus-laun10138 ? 00:00:00 dbus-daemon10141 ? 00:00:00 at-spi2-registr10224 tty2 00:29:03 gnome-shell10263 ? 00:00:00 gvfsd10268 ? 00:00:00 gvfsd-fuse10285 tty2 00:00:33 ibus-daemon10289 tty2 00:00:00 ibus-dconf10290 tty2 00:00:00 ibus-extension-10292 tty2 00:00:00 ibus-x1110295 ? 00:00:00 ibus-portal10299 ? 00:00:00 xdg-permission-10312 ? 00:00:00 gnome-shell-cal10317 ? 00:00:00 evolution-sourc10324 ? 00:00:30 goa-daemon10336 ? 00:00:00 gvfs-udisks2-vo10345 ? 00:00:00 gvfs-mtp-volume10349 ? 00:00:00 gvfs-gphoto2-vo10353 ? 00:00:00 gvfs-goa-volume10361 ? 00:02:25 goa-identity-se10368 ? 00:00:00 gvfs-afc-volume10381 tty2 00:00:25 gsd-power10383 tty2 00:00:00 gsd-print-notif10384 tty2 00:00:11 gsd-rfkill10385 tty2 00:00:00 gsd-screensaver10386 tty2 00:00:40 gsd-sharing10388 tty2 00:00:00 gsd-sound10395 tty2 00:00:00 gsd-xsettings10396 tty2 00:00:00 gsd-wacom10398 tty2 00:02:00 gsd-smartcard10401 tty2 00:00:02 gsd-account10415 tty2 00:00:00 gsd-a11y-settin10416 tty2 00:00:00 gsd-clipboard10417 tty2 00:00:22 gsd-color10421 tty2 00:00:00 gsd-datetime10424 tty2 00:01:25 gsd-housekeepin10426 tty2 00:00:00 gsd-keyboard10429 tty2 00:00:00 gsd-media-keys10431 ? 00:00:00 evolution-calen10434 tty2 00:00:00 gsd-mouse10479 tty2 00:00:00 gsd-disk-utilit10484 tty2 01:57:19 gnome-software10495 ? 00:00:00 tracker-store10509 tty2 00:00:00 ibus-engine-sim10516 tty2 00:00:00 tracker-miner-a10522 tty2 00:00:00 tracker-miner-f10546 ? 00:00:32 evolution-calen10583 ? 00:00:31 dconf-service10588 ? 00:00:00 evolution-addre10607 ? 00:00:33 evolution-addre10634 tty2 00:00:00 gsd-printer10829 tty2 00:00:00 ibus-engine-lib11288 ? 00:00:00 gvfsd-metadata11432 ? 00:01:28 xdg-desktop-por11436 ? 00:00:00 xdg-document-po11445 ? 00:00:03 xdg-desktop-por11456 ? 00:00:00 pipewire11458 ? 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.socketLast 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.socketLast 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.socketLast 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.socketLast 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.socketLast 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 ~]#