1、sudo
命令的作用
sudo
(全稱 superuser do
)是 Linux/Unix 系統中權限管理的核心工具。
允許普通用戶在授權下以其他用戶(默認是 root
)的權限執行命令,而無需直接登錄賬戶。
2、sudo
命令的典型使用場景
sudo
覆蓋了系統管理的幾乎所有高權限操作場景,以下是常見示例:
2.1、安裝/卸載軟件
sudo apt-get install nginx # Ubuntu/Debian系安裝
sudo yum remove httpd # CentOS/RHEL系卸載
2.2、管理系統服務
sudo systemctl start nginx # 啟動Nginx服務
sudo systemctl restart mysql # 重啟MySQL服務
2.3、修改系統配置文件
sudo nano /etc/nginx/nginx.conf # 編輯Nginx主配置文件
2.4、 管理用戶與權限
sudo adduser newuser # 添加新用戶
sudo passwd olduser # 修改指定用戶密碼
3、sudo
命令的選項
sudo
除了無選項以root用戶執行指令的操作,還支持許多其他的選項,可靈活控制執行環境、目標用戶等。
以下是常用選項的介紹:
3.1、 -u <用戶>
:指定目標用戶
通過 -u
選項可指定其他目標用戶。
示例:
# 以 `www-data` 用戶身份查看 Nginx 日志(需 `sudoers` 授權)
sudo -u www-data cat /var/log/nginx/access.log
3.2、-i
(--login
):模擬目標用戶的登錄環境
-i
(--login
):模擬目標用戶的登錄環境,加載其完整的登錄配置文件(如 ~/.bash_profile、~/.profile
),并切換到目標用戶的家目錄。
示例:
# 以 root 身份模擬登錄環境(需輸入當前用戶密碼)
sudo -i
效果等同于
su - 目標用戶
后執行命令,關于su
命令看這篇文章:Linux_su命令
3.3、-s
(--shell
):啟動目標用戶的 shell
-s
(--shell
):啟動目標用戶的非登錄交互式 shell,僅加載非登錄配置文件(如 ~/.bashrc
),保持原用戶的當前工作目錄。
示例:
# 以 root 身份啟動 shell(需輸入當前用戶密碼)
sudo -s
3.4、-l
(--list
):查看當前用戶的 sudo 權限
-l
可列出當前用戶被允許執行的 sudo
命令(需輸入密碼驗證身份)。
示例:
user@host:~$ sudo -l
Matching Defaults entries for user on host: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin User user may run the following commands on host: (ALL : ALL) ALL # 允許以所有用戶執行所有命令
3.5、-k
(--reset-timestamp
):重置密碼緩存
sudo
默認會緩存用戶密碼(通常 15 分鐘),期間無需重復輸入。-k
強制清除緩存,下次使用 sudo
需重新輸入密碼。
示例:
sudo -k # 清除當前用戶的 sudo 密碼緩存
4、sudo 的核心機制
sudo
的核心是 基于用戶/組的權限授權,所有權限規則存儲在 /etc/sudoers
文件中。
其工作流程如下:
- 用戶執行
sudo 命令
; - 系統檢查
/etc/sudoers
,確認當前用戶是否有權限以目標用戶(默認root
)執行該命令; - 若有權限,用戶需輸入自己的密碼(非目標用戶密碼)驗證身份;
- 驗證通過后,命令以目標用戶權限執行,操作記錄被寫入系統日志(如
/var/log/auth.log
)。
4.1、sudo 的核心配置文件:/etc/sudoers
sudoers
必須通過 visudo
命令編輯,可以自動檢查語法錯誤,避免文件損壞導致無法使用 sudo
.
sudoers
中最核心的部分是權限規則,格式為:
用戶/用戶組 主機=(目標用戶:目標組) 允許執行的命令
示例1:
root ALL=(ALL:ALL) ALL
表示root用戶可以在任何主機上以任何用戶和任何組的身份執行任何命令。
示例2:
%sudo ALL=(ALL:ALL) ALL
%
符號:表示 “用戶組”(Group),而非單個用戶。
這條配置表示“sudo組的成員“可以在 任何主機上 以任何用戶和任何組的身份執行任何命令。
sudo組 是Ubuntu等系統的默認特權組,普通用戶加入此組后即可通過 sudo 執行高權限命令。
4.2、sudo 的其他配置文件:/etc/sudoers.d/
下圖截取自/etc/sudoers
,可以看到,不建議直接修改該文件,可以將自定義配置的內容放在/etc/sudoers.d/
目錄下,并且使用了@includedir
去包含了這個目錄。