自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linux 的 sudo 指令,背后做了什么?

開發(fā) Linux
本文我們?nèi)娣治隽藄udo?,它作為 Linux系統(tǒng)管理中的關(guān)鍵工具,提供了靈活、安全的權(quán)限管理機(jī)制。

在實際工作中,我們經(jīng)常使用 Linux的sudo指令進(jìn)行操作。那么,sudo是什么?它背后做了什么?為什么使用sudo而不是直接使用root,它對安全性有什么影響?這篇文章,我們將全面分析sudo。

一、什么是sudo?

sudo(superuser do的縮寫)是一個允許授權(quán)用戶以別的用戶身份(通常是root)運行程序的程序。它最初由Bob Coggeshall和Cliff Spencer在1980年代開發(fā),旨在提供一種比傳統(tǒng)的su(切換用戶)更安全、更靈活的權(quán)限管理方式。

二、為什么使用 sudo而不是直接使用root?

直接使用root賬戶存在諸多風(fēng)險:

  • 安全性:root賬戶缺乏保護(hù),一旦泄露,攻擊者將擁有系統(tǒng)的完全控制權(quán)。
  • 審計和日志:通過root執(zhí)行的操作難以追蹤來源,不利于審計和問題排查。
  • 誤操作風(fēng)險:長期使用root賬戶容易導(dǎo)致誤操作,可能對系統(tǒng)造成不可逆轉(zhuǎn)的損害。

sudo通過以下方式緩解上述問題:

  • 最小權(quán)限原則:僅授予必要的權(quán)限,減少誤操作和潛在的安全風(fēng)險。
  • 日志記錄:所有使用sudo執(zhí)行的命令都會被記錄,便于審計和追蹤。
  • 細(xì)粒度控制:可以針對不同用戶或用戶組,設(shè)置不同的權(quán)限規(guī)則。

三、基本用法

1. 基本語法

sudo [選項] 命令

常用選項:

  • -u 用戶:以指定用戶的身份運行命令,默認(rèn)為root。
  • -s:以shell形式運行命令。
  • -i:模擬完整的登錄環(huán)境。
  • -k:無視和清除之前的認(rèn)證緩存。

2. 使用示例

以root身份執(zhí)行命令:

sudo apt update
sudo yum install nginx

以其他用戶身份執(zhí)行命令:

sudo -u www-data ls /var/www

以shell形式切換到root:

sudo -s

以登錄shell形式切換到指定用戶:

sudo -i -u username

四、配置sudo

sudo的行為和權(quán)限由/etc/sudoers文件控制。直接編輯此文件存在風(fēng)險,為避免語法錯誤導(dǎo)致的系統(tǒng)問題,建議使用visudo命令進(jìn)行編輯。

sudoers文件主要由以下部分組成:

  • 別名定義:定義用戶、主機(jī)、命令等別名,便于管理。
  • 權(quán)限規(guī)則:指定哪些用戶或用戶組可以執(zhí)行哪些命令。

1. 別名定義

別名定義包括用戶別名,主機(jī)別名和命令別名。

  • User_Alias:定義用戶別名。如下示例:
User_Alias ADMINS = alice, bob
  • HOST_Alias:定義主機(jī)別名。如下示例:
Host_Alias SERVER = server1, server2
  • COMMAND_Alias:定義命令別名。如下示例:
Cmnd_Alias WEB_CMDS = /usr/bin/systemctl start nginx, /usr/bin/systemctl stop nginx

2. 權(quán)限規(guī)則

權(quán)限規(guī)則指定哪些用戶可以在特定主機(jī)上執(zhí)行特定命令,以何種方式執(zhí)行。

# 格式
用戶 別名 = (運行身份) 命令別名

# 示例:允許用戶alice在主機(jī)SERVER上以root身份執(zhí)行WEB_CMDS中的命令,而且無需輸入密碼。
alice SERVER = (root) NOPASSWD: WEB_CMDS

3. 常見配置示例

(1) 允許用戶組sudo執(zhí)行任何命令:

%sudo ALL=(ALL:ALL) ALL

其中,%sudo表示用戶組sudo,ALL表示所有主機(jī),(ALL:ALL)表示以所有用戶和組身份運行,最后的ALL表示所有命令。

(2) 允許特定用戶執(zhí)行特定命令:

john ALL=(ALL) /usr/bin/systemctl restart nginx, /usr/bin/systemctl status nginx

上述規(guī)則允許用戶john在所有主機(jī)上以任何用戶身份執(zhí)行systemctl restart nginx和systemctl status nginx命令。

(3) 允許用戶無需輸入密碼執(zhí)行命令:

jane ALL=(ALL) NOPASSWD: /usr/bin/apt update, /usr/bin/apt upgrade

這樣配置后,用戶jane無需輸入密碼即可執(zhí)行apt update和apt upgrade命令。

五、管理sudo權(quán)限

1. 添加用戶到sudo組

在許多 Linux發(fā)行版中,默認(rèn)的sudo權(quán)限是授予特定用戶組(如 sudo或 wheel)。通過將用戶添加到相應(yīng)的組,可以賦予其sudo權(quán)限。

  • 在Debian/Ubuntu上將用戶添加到sudo組:
sudo usermod -aG sudo username
  • 在Red Hat/CentOS/Fedora上將用戶添加到wheel組:
sudo usermod -aG wheel username

有時,需要為不同的權(quán)限需求創(chuàng)建專門的用戶組??梢园凑障旅娴姆绞絹韺崿F(xiàn):

  • 創(chuàng)建一個新組
sudo groupadd devadmins
  • 將用戶添加到新組
sudo usermod -aG devadmins username
  • 在sudoers文件中配置新組的權(quán)限
%devadmins ALL=(ALL) /usr/bin/systemctl, /usr/bin/apt

2. 移除用戶的sudo權(quán)限

要移除用戶的sudo權(quán)限,可以將其從sudo組(或相應(yīng)的權(quán)限組)中移除。

sudo deluser username sudo  # Debian/Ubuntu
sudo gpasswd -d username wheel  # Red Hat/CentOS/Fedora

六、sudo高級功能

1. sudoers中的別名

別名使得sudoers文件更具可讀性和可維護(hù)性。利用User_Alias、Host_Alias和Command_Alias,可以將復(fù)雜的權(quán)限規(guī)則簡化為簡潔的配置。

2. 組合使用別名

User_Alias ADMINS = alice, bob
Host_Alias DATABASE_SERVERS = db1, db2
Cmnd_Alias DB_CMDS = /usr/bin/mysql, /usr/bin/mysqldump

ADMINS DATABASE_SERVERS = (dbadmin) DB_CMDS

上述配置允許ADMINS組中的用戶在DATABASE_SERVERS主機(jī)上以dbadmin身份執(zhí)行DB_CMDS中的命令。

3. 環(huán)境變量的管理

sudo可以控制用戶在執(zhí)行命令時繼承的環(huán)境變量,以提高安全性。使用env_keep和env_reset:

  • env_keep:指定允許保留的環(huán)境變量。
  • env_reset:重置環(huán)境變量,僅保留默認(rèn)允許的變量。
Defaults env_reset
Defaults env_keep += "PATH LANG"

4. 計時戳和超時設(shè)置

sudo有一個計時戳,用于管理認(rèn)證緩存。默認(rèn)情況下,用戶在一定時間內(nèi)無須重新輸入密碼。

可以通過設(shè)置timestamp_timeout來調(diào)整超時時間(單位:分鐘)。

Defaults timestamp_timeout=10

上述配置將超時時間設(shè)置為10分鐘。設(shè)置為0將每次都要求輸入密碼,設(shè)置為-1則禁用超時機(jī)制。

5. 運行別名用戶

sudo允許用戶以不同的用戶身份運行命令,不僅限于root。這對于需要以特定用戶身份執(zhí)行某些任務(wù)的場景非常有用。

sudo -u www-data /usr/bin/systemctl restart nginx

6. 運行別名組

除單個用戶外,還可以設(shè)置組別的權(quán)限。

%webadmins ALL=(www-data) /usr/bin/systemctl restart nginx

這樣,webadmins組中的所有用戶都可以以www-data身份重啟nginx服務(wù)。

七、排查常見sudo問題

1. 權(quán)限不足:權(quán)限被拒絕

原因:

  • 用戶未在sudoers文件中配置。
  • 用戶未在正確的用戶組中。
  • sudoers文件配置錯誤。

解決方法:

  • 確認(rèn)用戶所在的組是否賦予了sudo權(quán)限。
  • 使用visudo檢查sudoers配置是否正確。
  • 查看系統(tǒng)日志了解詳細(xì)錯誤信息。

2. sudoers文件語法錯誤

原因:

  • 手動編輯sudoers文件時出現(xiàn)語法錯誤。
  • 誤用別名或權(quán)限規(guī)則。

解決方法:

  • 始終使用visudo編輯sudoers文件,避免語法錯誤。
  • 如果語法錯誤導(dǎo)致無法使用sudo,可以使用root用戶或通過單用戶模式修復(fù)sudoers文件。

3. 碼緩存問題

有時,用戶可能會發(fā)現(xiàn)sudo不再要求輸入密碼,或總是要求輸入密碼。

解決方法:

  • 檢查sudoers文件中的NOPASSWD選項。
  • 檢查timestamp_timeout設(shè)置。
  • 確認(rèn)用戶的認(rèn)證緩存正常工作。

4. 用戶無法運行指定命令

原因:

sudoers文件中未正確配置允許用戶執(zhí)行的命令。

命令的路徑不正確。

解決方法:

  • 確認(rèn)sudoers中命令的絕對路徑是否正確。
  • 使用別名或通配符正確配置命令權(quán)限。

八、sudo的替代方案

雖然sudo功能強(qiáng)大,但在某些場景下,可能需要其他工具作為替代或補充。

1. su

su(switch user)允許用戶切換到另一個用戶身份,默認(rèn)切換到root。然而,su需要知道目標(biāo)用戶的密碼,不如sudo靈活和安全。

2. doas

doas是OpenBSD開發(fā)的一個輕量級的權(quán)限提升工具,語法簡潔,配置簡單。近年來在Linux社區(qū)也逐漸受到關(guān)注,被認(rèn)為是sudo的一個簡潔替代方案。

(1) 安裝doas:

# 在Debian/Ubuntu上
sudo apt install opendoas

# 在Arch Linux上
sudo pacman -S opendoas

(2) 配置doas

配置文件通常位于/etc/doas.conf,示例配置:

permit :wheel
permit john as root cmd /usr/bin/systemctl

3. Polkit

Polkit(PolicyKit)是一個用于定義非特權(quán)進(jìn)程與特權(quán)進(jìn)程之間交互的框架,常用于桌面環(huán)境中權(quán)限管理,與sudo不同,更多用于系統(tǒng)服務(wù)的權(quán)限控制。

4. pkexec

pkexec是Polkit的一部分,允許用戶以另一個用戶身份(通常是root)執(zhí)行命令。與sudo類似,但依賴于Polkit進(jìn)行權(quán)限管理。

九、總結(jié)

本文,我們?nèi)娣治隽藄udo,它作為 Linux系統(tǒng)管理中的關(guān)鍵工具,提供了靈活、安全的權(quán)限管理機(jī)制。通過合理配置 sudoers文件,結(jié)合用戶組管理和最小權(quán)限原則,可以有效提升系統(tǒng)的安全性和管理效率。同時,了解sudo的高級功能和常見問題的解決方法,有助于更好地應(yīng)對實際工作中的各種挑戰(zhàn)。

責(zé)任編輯:趙寧寧 來源: 猿java
相關(guān)推薦

2009-11-13 09:03:43

微軟Sudo指令專利申請

2023-04-03 15:05:00

自然語言AI

2022-12-14 17:26:43

2011-01-13 09:44:19

Linuxsudo技巧

2011-04-19 10:04:25

NeopPIshell網(wǎng)站后門

2021-09-23 16:43:48

Linux黑話解釋

2021-01-26 15:11:22

華為城市數(shù)字化轉(zhuǎn)型

2022-10-18 19:24:37

Linuxssh命令

2021-11-01 10:05:32

Linuxsusudo

2018-07-10 14:46:04

LinuxShellsudo

2021-03-15 08:40:42

Vue組件函數(shù)

2012-04-05 09:44:21

2022-02-23 16:49:19

Linux內(nèi)存數(shù)據(jù)結(jié)構(gòu)

2010-03-31 13:41:46

證券市場Linux

2010-10-12 13:40:54

Linuxsudo

2018-04-20 09:58:10

Linux命令sudo

2011-11-29 09:10:11

Hadoop

2018-09-04 10:04:13

Linux命令sudo

2017-03-23 15:17:20

Linuxsudo棋盤

2015-04-09 10:18:21

網(wǎng)卡配置
點贊
收藏

51CTO技術(shù)棧公眾號