Linux 基礎教程 43-su和sudo命令

来源:https://www.cnblogs.com/surpassme/archive/2018/08/29/9556999.html
-Advertisement-
Play Games

    在使用Linux系統中,有時候還需要做身份切換,這是為什麼? 使用普通賬號 :系統日常操作的好習慣   雖然使用root對系統進行各種操作不受許可權等方面的限制,但卻存在重大的安全隱患,假如有人不小心輸入的命令 rm rf / 。因此為了安全,一般都建議儘量以普通 ...


    在使用Linux系統中,有時候還需要做身份切換,這是為什麼?

  • 使用普通賬號:系統日常操作的好習慣
      雖然使用root對系統進行各種操作不受許可權等方面的限制,但卻存在重大的安全隱患,假如有人不小心輸入的命令 rm -rf /。因此為了安全,一般都建議儘量以普通用戶身份來進行系統日常操作,而在需要用戶超級許可權來管理和配置系統時才需要切換到 root用戶。
  • 用較低許可權啟動系統服務
      相對於系統安全,我們必須要以某些系統賬號執行某些程式。如MySQL,我們則可以新建一個mysql賬號來專門執行MySQL服務或程式。這樣可以最大限度的保證系統安全。
  • 系統安全策略限制
      為了系統安全,禁止遠程以root賬戶登錄系統是基本的安全策略手段

    基於以上考慮,在日常應用中都是使用普通賬戶進行登錄和常用操作。如果需要維護系統或安裝、更新軟體時,則需要切換到root身份進行操作。而常用的方式主要有兩個:

  • su:可以切換到指定的用戶,如果切換到root,則需要知道root的密碼
  • sudo:提前設置好sudo許可權,執行以sudo 命令,則可以以root身份執行命令,相比於su而言,可以保證root密碼不會泄漏。

su

    su全稱為:switch user,其主要功能為進行任何身份的切換,其常用用法如下所示:

基本用法

su [選項] [用戶名]
su -c 命令

常用選項如下所示:

選項 解釋
-,-l 切換身份的同時初始化HOME/SHELL/USER/LOGNAME/PATH等變數
-c command 僅執行一次指定的命令,而後恢複原來的身份
-m 使用當前的環境設置而不讀取新用戶的配置文件
-s SHELL 運行指定的SHELL,僅支持/etc/shells中支持的SHELL

su註意事項

  • 若要完整切換到新用戶的環境,必須要使用su - username或su -l username。這種功能類似於Windows註銷當前用戶再登錄到指定用戶
  • su -,-l:如果後面不指定用戶名,則預設切換至root賬戶。
  • 使用root切換到任意其他賬戶,不需要輸入密碼,而反過來則需要輸入密碼。

用法示例

1、切換到root

[admin@localhost ~]$ su -
密碼:
上一次登錄:六 8月 18 18:10:46 CST 2018pts/2 上
最後一次失敗的登錄:六 8月 18 18:17:04 CST 2018從 58.218.92.37ssh:notty 上
最有一次成功登錄後有 142 次失敗的登錄嘗試。
[root@localhost ~]# id
uid=0(root) gid=0(root) 組=0(root)

root用戶的尾碼是 # ,而普通用戶為 $

2、執行指定命令行後即返回原來的身份

[admin@localhost ~]$ head -n 2  /etc/shadow
head: 無法打開"/etc/shadow" 讀取數據: 許可權不夠
[admin@localhost ~]$ su - -c "head -n 2  /etc/shadow"
密碼:
root:$6$UbRYE8f8cxI757Lw$BJjLlD./2Om51RcIQadxZ8LbKpWzaVDISDpXd5rNPergZQWH2VAPF7LXRp/HCjx95xk2rd.Lw2Tiggs8Cr1WG0::0:99999:7:::
bin:*:17632:0:99999:7:::

sudo

    su使用起來非常方便,但同樣也存在安全隱患。在一臺伺服器上面,如果有多人使用,在使用su命令切換到root後,則大家都知道了root密碼,那麼以後其他用戶均可以以root用戶身份登錄和維護伺服器,則安全策略形同虛設了。那該如何是好?Linux系統中則提供了另外一個命令sudo

基本用法

    sudo主要功能是以其他用戶身份執行命令,而要輸入的密碼也僅僅是當前用戶身身的密碼而非root賬戶密碼,類似於Windows系統中的以管理員身份運行。其常用用法如下所示:

sudo [選項] [命令]

常用選項如下所示:

選項 解釋
-b 在後臺執行指定的命令
-u 以指定用戶身份運行,如不指定則預設為root
-e 編輯文件而不是運行命令

執行流程

  • 1、當用戶執行sudo時,系統會在/etc/sudoers文件查找該用戶是否有執行sudo的許可權。
  • 2、若用戶擁有執行sudo許可權後,則輸入用戶自身的密碼確認
  • 3、若密碼確認成功,即可執行sudo後面的命令
  • 4、若切換身份與執行者身份相同,則無需要輸入密碼
      基於以上流程,能否使用sudo則要看/etc/sudoers中的設置

基本配置

  • 1、單一用戶可執行root所有命令
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL # 系統預設
admin   ALL=(ALL)       ALL # 用戶增加

各項解釋如下所示:
root/admin:用戶賬號,指定哪些賬號可使用sudo命令
ALL=(ALL):登錄者的來源主機名=可切換的身份
  登錄者的來源主機名:設置賬號可由哪一臺網路主機連接過來,即設置可信任主機。
  可切換的身份:賬號可以切換成什麼身份來執行後續的命令
ALL:可執行的命令:這個路徑必須以絕對路徑來填寫
  ALL是特殊關鍵字,代表任何身份、任何主機和任何命令的意思。

  • 2、利用用戶組和免密碼的功能
      相比較於通過單個用戶而言,通過用戶組來控制更加方便靈活。
# 修改用戶的屬組,只用戶屬於wheel則可以執行sudo命令
[root@localhost ]# usermod -a -G wheel admin

[root@localhost ~]# visudo
## Allows people in group wheel to run all commands
%wheel  ALL=(ALL)       ALL # %wheel:代表任何組

# 使用sudo 命令而不需要輸入密碼
%wheel  ALL=(ALL)       NOPASSWD: ALL
  • 3、有限制的命令操作
      以上兩種方法,可以方便用戶利用root身份執行任何事情,如果想給用戶分配部分許可權執行命令,該如何配置?
[root@localhost ~]# visudo
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
# 該用戶僅有執行 ls 的許可權,路徑必須為絕對路徑
admin   ALL=(ALL)       /usr/bin/ls
# 添加用戶的執行sudo命令的排除許可權,! 表示不可執行
admin   ALL=(ALL)   !/usr/bin/ls,!/usr/bin/passwd,!/usr/bin/passwd root
  • 4、通過別名批量設置許可權
[root@localhost ~]# visudo
# 批量設置別名
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = admin,test,surpassme

# 批量設置命令許可權
## Command Aliases
Cmnd_Alias SOFTWARE = !/usr/bin/rpm,!/usr/bin/up2date,!/usr/bin/yum

# 設置sudo的限制命令
ADMINS ALL=(root) SOFTWARE

通過別名進行許可權設置均需要使用大寫字元

  • 5、搭配su使用
        在很多時間我們需要大量執行很多root的工作,所以一直使用sudo會覺得很麻煩,那有沒有簡單的辦法使sudo搭配su,一次性轉換為root,而且還是用戶自身的密碼?方法如下所示:
[root@localhost ~]# visudo
# 批量設置別名
# User_Alias ADMINS = jsmith, mikem
User_Alias ADMINS = admin,test,surpassme

# 設置sudo的限制命令
ADMINS ALL=(root) /usr/bin/su -
# 使用按以下輸入即可,即可直接切換為root用戶
[root@localhost ~]# sudo su -

本文同步在微信訂閱號上發佈,如各位小伙伴們喜歡我的文章,也可以關註我的微信訂閱號:woaitest,或掃描下麵的二維碼添加關註:
MyQRCode.jpg


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

-Advertisement-
Play Games
更多相關文章
  • 0.使用背景 因為現在的項目都是基於 .NET Core 的,但是某些需要調用第三方的 WebService 服務,故有了此文章。其基本思路是通過微軟提供的 Svcutil 工具生成代理類,然後通過 System.ServiceModel 來調用代理類所提供的對象與方法。 1.配置準備 1.1 新建 ...
  • 1. 批量插入 public async Task CreateBusinessItemAsync(IEnumerable<BusinessItemsEntity> businessItemsEntities) { var bizid = businessItemsEntities.First(). ...
  • 1 在主視窗中實例化子視窗 在主視窗中實例化子視窗,而不是在按鈕中實例化子視窗對象。 2 通過按鈕來顯示主視窗 在按鈕中需要實現的是視窗的顯示 3 關閉子視窗而不釋放子視窗對象的方法 4 在父視窗關閉時銷毀子視窗對象 由於需要在父視窗關閉是銷毀子視窗對象,因此,在父視窗的關閉動作FormClosed ...
  • 1 namespace RemoveTheSame 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 List list = new List() 8 { 9 new Use... ...
  • [TOC] CVE 2018 8120 分析 1、實驗環境 1.1、操作系統 windows 7 sp1 x86 未打補丁 "磁力鏈接" 1.2、用到的分析工具 windbg 32位 "下載地址" IDA pro 7.0 "正版鏈接" PCHunter "下載地址" ProcessHacker "下 ...
  • 1.什麼是進程的內核棧? 在內核態(比如應用進程執行系統調用)時,進程運行需要自己的堆棧信息(不是原用戶空間中的棧),而是使用內核空間中的棧,這個棧就是進程的內核棧 2.進程的內核棧在電腦中是如何描述的? linux中進程使用task_struct數據結構描述,其中有一個stack指針 task_ ...
  • 一、 進程創建: Unix 下的進程創建很特別,與許多其他操作系統不同,它分兩步操作來創建和執行進程: fork() 和 exec() 。首先,fork() 通過拷貝當前進程創建一個子進程;然後,exec() 函數負責讀取可執行文件並將其載入地址空間開始運行。 1、fork() :kernel/fo ...
  • 網路管理 一 基本網路配置 linux操作系統,乙太網卡用“eth”表示網卡;序號從零開始eth0代表到系統能夠識別的第一個網卡eth1....第2個網卡 查看網卡信息 查看網卡信息 查看當前系統所連接的所有網卡(包括已經驅動了和沒有驅動) 確認網線已經連接好,以eth0 為例 樣圖 ifconfi ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...