sudo命令詳解

来源:https://www.cnblogs.com/qianyuliang/archive/2017/12/26/8119770.html
-Advertisement-
Play Games

sudo命令 系統安全sudo命令用來以其他身份來執行命令,預設的身份為root。在/etc/sudoers中設置了可執行sudo指令的用戶。若其未經授權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,之後有5分鐘的有效期限,超過期限則必須重新輸入密碼。 語法 ...


sudo命令

系統安全sudo命令用來以其他身份來執行命令,預設的身份為root。在/etc/sudoers中設置了可執行sudo指令的用戶。若其未經授權的用戶企圖使用sudo,則會發出警告的郵件給管理員。用戶使用sudo時,必須先輸入密碼,之後有5分鐘的有效期限,超過期限則必須重新輸入密碼。

語法

sudo(選項)(參數)

選項

-b:在後臺執行指令;
-h:顯示幫助;
-H:將HOME環境變數設為新身份的HOME環境變數;
-k:結束密碼的有效期限,也就是下次再執行sudo時便需要輸入密碼;。
-l:列出目前用戶可執行與無法執行的指令;
-p:改變詢問密碼的提示符號;
-s<shell>:執行指定的shell;
-u<用戶>:以指定的用戶作為新的身份。若不加上此參數,則預設以root作為新的身份;
-v:延長密碼有效期限5分鐘;
-V :顯示版本信息。

參數

指令:需要運行的指令和對應的參數。

實例

配置sudo必須通過編輯/etc/sudoers文件,而且只有超級用戶才可以修改它,還必須使用visudo編輯。之所以使用visudo有兩個原因,一是它能夠防止兩個用戶同時修改它;二是它也能進行有限的語法檢查。所以,即使只有你一個超級用戶,你也最好用visudo來檢查一下語法。

visudo預設的是在vi里打開配置文件,用vi來修改文件。也可以在編譯時修改這個預設項。visudo不會擅自保存帶有語法錯誤的配置文件,它會提示你出現的問題,並詢問該如何處理,就像:

>>> sudoers file: syntax error, line 22 <<

此時我們有三種選擇:鍵入“e”是重新編輯,鍵入“x”是不保存退出,鍵入“Q”是退出並保存。如果真選擇Q,那麼sudo將不會再運行,直到錯誤被糾正。


現在,一起來看一下神秘的配置文件,學一下如何編寫它。從一個簡單的例子開始:讓用戶qasim可以通過sudo執行所有root可執行的命令。以root身份用visudo打開配置文件,可以看到類似下麵幾行:

# Runas alias specification
# User privilege specificationroot ALL=(ALL)ALL我們一看就明白個差不多了,root有所有許可權,只要仿照現有root的例子就行,我們在下麵加一行(最好用tab作為空白):
qasim ALL=(ALL) ALL 

保存退出後,切換到qasim用戶,我們用它的身份執行命令:

[qasim@localhost ~]$ ls /root
ls: /root: 許可權不夠
[qasim@localhost ~]$ sudo ls /root
PassWord:
anaconda-ks.cfg Desktop install.log install.log.syslog 

好了,限制一下qasim的權利,不能為所欲為。比如只想讓他像root那樣使用ls和ifconfig,把那一行改為:

qasim localhost= /sbin/ifconfig, /bin/ls 再來執行命令:
[qasim@localhost ~]$ sudo head -5 /etc/shadow
Password:
Sorry, user qasim is not allowed to execute '/usr/bin/head -5 /etc/shadow' as root on localhost.localdomain.

[qasim@localhost ~]$ sudo /sbin/ifconfigeth0 Linkencap:Ethernet HWaddr 00:14:85:EC:E9:9B...

現在來看一下那三個ALL到底是什麼意思

第一個ALL是指網路中的主機,後面把它改成了主機名,它指明qasim可以在此主機上執行後面的命令。
第二個括弧里的ALL是指目標用戶,也就是以誰的身份去執行命令。
最後一個ALL當然就是指命令名了。

例如,想讓qasim用戶在linux主機上以jimmy或rene的身份執行kill命令,這樣編寫配置文件:

qasim linux=(jimmy,rene) /bin/kill

但這還有個問題,qasim到底以jimmy還是rene的身份執行?這時應該想到了sudo -u了,它正是用在這種時候。 qasim可以使用sudo -u jimmy kill PID或者sudo -u rene kill PID,但這樣挺麻煩,其實可以不必每次加-u,把rene或jimmy設為預設的目標用戶即可。再在上面加一行:

Defaults:qasim runas_default=rene

Defaults後面如果有冒號,是對後面用戶的預設,如果沒有,則是對所有用戶的預設。就像配置文件中自帶的一行:
Defaults env_reset

 

另一個問題是,很多時候,本來就登錄了,每次使用sudo還要輸入密碼就顯得煩瑣了。可不可以不再輸入密碼呢?當然可以,這樣修改配置文件:

qasim localhost=NOPASSWD: /bin/cat, /bin/ls

再來sudo一下:

[qasim@localhost ~]$ sudo ls /rootanaconda-ks.cfg Desktop install.log
install.log.syslog

當然,你也可以說“某些命令用戶qasim不可以運行”,通過使用!操作符,但這不是一個好主意。因為,用!操作符來從ALL中“剔出”一些命令一般是沒什麼效果的,一個用戶完全可以把那個命令拷貝到別的地方,換一個名字後再來運行。

 

日誌與安全


sudo為安全考慮得很周到,不僅可以記錄日誌,還能在有必要時向系統管理員報告。但是,sudo的日誌功能不是自動的,必須由管理員開啟。這樣來做:

touch /var/log/sudo
vi /etc/syslog.conf
在syslog.conf最後面加一行(必須用tab分割開)並保存:
local2.debug /var/log/sudo

 

重啟日誌守候進程,

ps aux grep syslogd

把得到的syslogd進程的PID(輸出的第二列是PID)填入下麵:

kill –HUP PID

這樣,sudo就可以寫日誌了:

[qasim@localhost ~]$ sudo ls /rootanaconda-ks.cfg
Desktop install.log
install.log.syslog
$cat /var/log/sudoJul 28 22:52:54 localhost sudo: qasim :
TTY=pts/1 ; pwd=/home/qasim ; USER=root ; command=/bin/ls /root

 

不過,有一個小小的“缺陷”,sudo記錄日誌並不是很忠實:

[qasim@localhost ~]$ sudo cat /etc/shadow > /dev/null
cat /var/log/sudo...Jul 28 23:10:24 localhost sudo: qasim : TTY=pts/1 ;
PWD=/home/qasim ; USER=root ; COMMAND=/bin/cat /etc/shadow

 

重定向沒有被記錄在案!為什麼?因為在命令運行之前,shell把重定向的工作做完了,sudo根本就沒看到重定向。這也有個好處,下麵的手段不會得逞:

[qasim@localhost ~]$ sudo ls /root > /etc/shadowbash: /etc/shadow: 許可權不夠

 

sudo 有自己的方式來保護安全。以root的身份執行sudo -V,查看一下sudo的設置。因為考慮到安全問題,一部分環境變數並沒有傳遞給sudo後面的命令,或者被檢查後再傳遞的,比如:PATH,HOME,SHELL等。當然,也可以通過sudoers來配置這些環境變數。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Orchard Core Framework:ASP.NET Core 模塊化,多租戶框架 上一篇編寫Orchard Core一分鐘搭建ASP.NET Core CMS ,介紹ASP.NET Core CMS ,Orchard的ASP.NET Core版,同時對應有一個ASP.NET Core框架。 ...
  • 1. 前言 "上一篇文章" 介紹了各種WPF本地化的入門知識,這篇文章介紹UWP本地化的入門知識。 2. 使用resw資源文件實現本地化 在以前的XAML平臺,resx資源文件是一種很方便的本地化方案,但在UWP中微軟又再次推薦x:Uid方案,預設的資源文件也變成resw資源文件。雖然尾碼名只差了一 ...
  • 背水一戰 Windows 10 之 全球化: Demo, 格式化數字 ...
  • 一、為什麼會用到網頁實時監控 LZ最近在無錫買房了,雖然在上海工作,但是上海房價實在太高無法承受,所以選擇還可以接受的無錫作為安身之地。買過房的小伙伴可能知道買房的流程,買房中間有一步很重要的就是需要商品房備案,簡單點說就是你買房時可以在政府商品房備案網站處查看你購買房的備案情況,如果是已經備案了開 ...
  • 一、統一賬號管理 1.LDAP 統一管理各種平臺帳號和密碼,包括但不限於各種操作系統(Windows、Linux),Linux系統sudo集成,系統用戶分組,主機登入限制等;可與Apache,HTTP,FTP,SAMBA,ZABBIX,Jenkins等集成;支持密碼策略(密碼強度、密碼過期時間、強制 ...
  • 無監控,不運維。好了,廢話不多說,下麵都是乾貨。 流量黨勿入,圖片太多!!! 項目實戰系列,總架構圖 http://www.cnblogs.com/along21/p/8000812.html 一、User parameters 用戶參數 1、介紹和用法 ① 介紹 自定義用戶參數,也就是自定義key ...
  • python簡介: 一、什麼是python Python(英國發音:/ pa θ n/ 美國發音:/ pa θɑ n/),是一種面向對象、直譯式的電腦程式語言。 每一門語言都有自己的哲學: pythonde 設計哲學是:“優雅”、“明確”、“簡單” 二、python由來 1989年的聖誕節期間,吉 ...
  • 本文目錄:1. 入門示例:虛擬主機提供web服務2. tomcat體繫結構基本說明3. tomcat的appBase和docBase詳細說明4. webapp體繫結構5. tomcat進階:tomcat配置文件server.xml詳解 5.1 頂級元素server 5.2 頂級元素service 5 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...