0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

su與sudo命令介紹及主要用法

jf_TEuU2tls ? 來源:浩道linux ? 2023-11-27 09:31 ? 次閱讀

前言

大家在自己實驗服務器上可能不會用到su與sudo命令,因為一直用著root用戶進行操作。但是在實際生產(chǎn)環(huán)境,運維人員是不會拿到root的權限的。尤其在甲方,更加的難給到運維root權限。我就遇到過此類現(xiàn)象,之前實習生讓安裝部署個mysql、redis等中間件時,他還傻傻問人家甲方用root用戶密碼,這不被甲方噴就算好的了。實際上通過su與sudo是足夠完成的了。本文也帶大家一起來使用su與sudo,避免你有一天被人家噴不懂用!

su命令介紹及主要用法

首先需要解釋下su代表什么意思。

之前一直以為su是super user,查閱資料之后才知道原來表示switch user。

知道su是由什么縮寫來的之后,那么它提供的功能就顯而易見了,就是切換用戶。

-參數(shù)

su的一般使用方法是:

su``

或者

su-``

兩種方法只差了一個字符-,會有比較大的差異:

如果加入了-參數(shù),那么是一種login-shell的方式,意思是說切換到另一個用戶之后,當前的 shell 會加載對應的環(huán)境變量和各種設置;

如果沒有加入-參數(shù),那么是一種non-login-shell的方式,意思是說我現(xiàn)在切換到了,但是當前的 shell 還是加載切換之前的那個用戶的環(huán)境變量以及各種設置。

光解釋會比較抽象,我們看一個例子就比較容易理解了。

我們首先從 ubuntu 用戶以non-login-shell的方式切換到 root 用戶,比較兩種用戶狀態(tài)下環(huán)境變量中PWD的值(su命令不跟任何,默認切換到 root 用戶):

rumenz@local:~$env|grepubuntu
USER=ubuntu
PWD=/home/ubuntu#是/home/ubuntu
HOME=/home/ubuntu
#省略......
rumenz@local:~$su#non-login-shell方式
Password:#輸入root用戶登錄密碼
rumenz@local:/home/ubuntu#env|grepubuntu
PWD=/home/ubuntu#可以發(fā)現(xiàn)還是/home/ubuntu
rumenz@local:/home/ubuntu#

我們的確是切換到 root 用戶了,但是 shell 環(huán)境中的變量并沒有改變,還是用之前 ubuntu 用戶的環(huán)境變量。

接著我們從 ubuntu 用戶以login-shell的方式切換到 root 用戶,同樣比較兩種用戶狀態(tài)下環(huán)境變量中PWD的值:

rumenz@local:~$env|grepubuntu
USER=ubuntu
PWD=/home/ubuntu#是/home/ubuntu
HOME=/home/ubuntu
#省略.......
rumenz@local:~$su-#是login-shell方式
Password:
rumenz@local:~#env|greproot
USER=root
PWD=/root#已經(jīng)變成/root了
HOME=/root
MAIL=/var/mail/root
LOGNAME=root
rumenz@local:~#

可以看到用login-shell的方式切換用戶的話,shell 中的環(huán)境變量也跟著改變了。

總結:具體使用哪種方式切換用戶看個人需求:

如果不想因為切換到另一個用戶導致自己在當前用戶下的設置不可用,那么用non-login-shell的方式;

如果切換用戶后,需要用到該用戶的各種環(huán)境變量(不同用戶的環(huán)境變量設置一般是不同的),那么使用login-shell的方式。

切換到指定用戶

前面已經(jīng)介紹了,如果su命令后面不跟任何,那么默認是切換到 root 用戶:

rumenz@local:~$su-
Password:#root用戶的密碼
rumenz@local:/home/ubuntu#

因為我們在1. 準備工作部分已經(jīng)新建了一個 test_user 用戶,并且我們也知道 test_user 用戶的登錄密碼(root 用戶設置的),我們就能從 ubuntu 用戶切換到 test_user 用戶:

rumenz@local:~$su-test_user
Password:#test_user用戶的密碼
$

-c參數(shù)

前面的方法中,我們都是先切換到另一個用戶(root 或者 test_user),在哪個用戶的狀態(tài)下執(zhí)行命令,最后輸入exit返回當前 ubuntu 用戶。

還有一種方式是:不需要先切換用戶再執(zhí)行命令,可以直接在當前用戶下,以另一個用戶的方式執(zhí)行命令,執(zhí)行結束后就返回當前用戶。這就得用到-c參數(shù)。

具體使用方法是:

su--c"指令串"#以root的方式執(zhí)行"指令串"

看個例子:

rumenz@local:~$cat/etc/shadow
cat:/etc/shadow:Permissiondenied#ubuntu用戶不能直接查看/etc/shadow文件內(nèi)容

rumenz@local:~$su--c"tail-n4/etc/shadow"
Password:#輸入root用戶密碼
ubuntu:$1$fZKcWEDI$uwZ64uFvVbwpHTbCSgim0/07:::
ntp1775299999::
mysql1837699999::
test_user:$6$.ZY1lj4m$ii0x9CG8h.JHlh6zKbfBXRuolJmIDBHAd5eqhvW7lbUQXTRS//89jcuTzRilKqRkP8YbYW4VPxmTVHWRLYNGS/07:::
rumenz@local:~$#執(zhí)行完馬上返回ubuntu用戶而不是root用戶

這種執(zhí)行方式和后面要介紹的sudo很像,都是臨時申請一下 root 用戶的權限。但還是有差異,我們接著往后看。

sudo命令介紹及主要用法

sudo的英文全稱是super user do,即以超級用戶(root 用戶)的方式執(zhí)行命令。這里的sudo和之前su表示的switch user是不同的,這點需要注意,很容易搞混。

我們先介紹sudo命令能做什么事情,然后說明為何能做到這些,以及如何做到這些。

主要用法

我們在 Linux 中經(jīng)常會碰到Permission denied這種情況,比如以 ubuntu 用戶的身份查看/etc/shadow的內(nèi)容。因為這個文件的內(nèi)容是只有 root 用戶能查看的。

那如果我們想要查看怎么辦呢?這時候就可以使用sudo:

rumenz@local:~$tail-n3/etc/shadow
tail:cannotopen'/etc/shadow'forreading:Permissiondenied#沒有權限
rumenz@local:~$sudo!!#跟兩個驚嘆號
sudotail-n3/etc/shadow
ntp1775299999::
mysql1837699999::
test_user:$6$.ZY1lj4m$ii0x9CG8h.JHlh6zKbfBXRuolJmIDBHAd5eqhvW7lbUQXTRS//89jcuTzRilKqRkP8YbYW4VPxmTVHWRLYNGS/07:::
rumenz@local:~$

實例中,我們使用了sudo !!這個小技巧,表示重復上面輸入的命令,只不過在命令最前面加上sudo。

因為我已經(jīng)設置了sudo命令不需要輸入密碼,所以這里sudo !!就能直接輸出內(nèi)容。如果沒有設置的話,需要輸入當前這個用戶的密碼,例如本例中,我就應該輸入 ubuntu 用戶的登錄密碼。

兩次相鄰的sudo操作,如果間隔在5min之內(nèi),第二次輸入sudo不需要重新輸入密碼;如果超過5min,那么再輸入sudo時,又需要輸入密碼。所以一個比較省事的方法是設置sudo操作不需要密碼。后面介紹如何設置。

sudo除了以 root 用戶的權限執(zhí)行命令外,還有其它幾個用法,這里做簡單介紹。

切換到 root 用戶:

sudosu-

這種方式也能以login-shell的方式切換到 root 用戶,但是它和su -方法是有區(qū)別的:

前者輸入sudo su -后,需要提供當前用戶的登錄密碼,也就是 ubuntu 用戶的密碼;

后者輸入su -后,需要提供 root 用戶的登錄密碼。

還有一個命令:

sudo-i

這個命令和sudo su -效果一致,也是切換到 root 用戶,也是需要提供當前用戶(ubuntu 用戶)的登錄密碼。

我們現(xiàn)在切換到 test_user 用戶,嘗試顯示/etc/shadow文件的內(nèi)容:

rumenz@local:~$su-test_user
Password:#test_user的密碼
$sudocat/etc/shadow
[sudo]passwordfortest_user:#test_user的密碼
test_userisnotinthesudoersfile.Thisincidentwillbereported.
$

我們會看到倒數(shù)第二行中的錯誤提示信息,我們無法查看/etc/shadow的內(nèi)容,這是為什么?為什么 ubuntu 可以使用sudo但是 test_user 不行呢?

這就涉及到sudo的工作原理了。

sudo工作原理

一個用戶能否使用sudo命令,取決于/etc/sudoers文件的設置。

從 3.1 節(jié)中我們已經(jīng)看到,ubuntu 用戶可以正常使用sudo,但是 test_user 用戶卻無法使用,這是因為/etc/sudoers文件里沒有配置 test_user。

/etc/sudoers也是一個文本文件,但是因其有特定的語法,我們不要直接用vim或者vi來編輯它,需要用visudo這個命令。輸入這個命令之后就能直接編輯/etc/sudoers這個文件了。

需要說明的是,只有 root 用戶有權限使用visudo命令。

我們先來看下輸入visudo命令后顯示的內(nèi)容。

輸入(root 用戶):

rumenz@local:~#visudo

輸出:

#Userprivilegespecification
rootALL=(ALL:ALL)ALL

#Membersoftheadmingroupmaygainrootprivileges
%adminALL=(ALL)ALL

#Allowmembersofgroupsudotoexecuteanycommand
%sudoALL=(ALL:ALL)ALL

#Seesudoers(5)formoreinformationon"#include"directives:

#includedir/etc/sudoers.d
ubuntuALL=(ALL:ALL)NOPASSWD:ALL

解釋下每一行的格式:

第一個表示用戶名,如root、ubuntu等;

接下來等號左邊的ALL表示允許從任何主機登錄當前的用戶賬戶;

等號右邊的ALL表示:這一行行首對一個的用戶可以切換到系統(tǒng)中任何一個其它用戶;

行尾的ALL表示:當前行首的用戶,能以 root 用戶的身份下達什么命令,ALL表示可以下達任何命令。

我們還注意到ubuntu對應的那一行有個NOPASSWD關鍵字,這就是表明 ubuntu 這個用戶在請求sudo時不需要輸入密碼,到這里就解釋了前面的問題。

同時我們注意到,這個文件里并沒有test_user對應的行,這也就解釋了為什么 test_user 無法使用sudo命令。

接下來,我們嘗試將 test_user 添加到/etc/sudoers文件中,使 test_user 也能使用sudo命令。我們在最后一行添加:

test_userALL=(ALL:ALL)ALL#test_user使用sudo需要提供test_user的密碼

接下來我們再在 test_user 賬戶下執(zhí)行sudo:

rumenz@local:~$su-test_user
Password:
$tail-n3/etc/shadow
tail:cannotopen'/etc/shadow'forreading:Permissiondenied
$sudotail-n3/etc/shadow#加上sudo
ntp1775299999::
mysql1837699999::
test_user:$6$.ZY1lj4m$ii0x9CG8h.JHlh6zKbfBXRuolJmIDBHAd5eqhvW7lbUQXTRS//89jcuTzRilKqRkP8YbYW4VPxmTVHWRLYNGS/07:::
$

可以看到,現(xiàn)在已經(jīng)可以使用sudo了。

思考

我們已經(jīng)看到了,如果一個用戶在/etc/sudoers文件中,那么它就具有sudo權限,就能通過sudo su -或者sudo -i等命令切換到 root 用戶了,那這時這個用戶就變成 root 用戶了,那這不對系統(tǒng)造成很大的威脅嗎?

實際上的確是這樣的。所以如果在編輯/etc/sudoers文件賦予某種用戶sudo權限時,必須要確定該用戶是可信任的,不會對系統(tǒng)造成惡意破壞,否則將所有 root 權限都賦予該用戶將會有非常大的危險。

當然,root 用戶也可以編輯/etc/sudoers使用戶只具備一部分權限,即只能執(zhí)行一小部分命令。有興趣的讀者可以參考 Reference 部分第二條,這篇文章不再贅述。

二者的差異對比

我們已經(jīng)看到:

使用su -,提供 root 賬戶的密碼,可以切換到 root 用戶;

使用sudo su -,提供當前用戶的密碼,也可以切換到 root 用戶

兩種方式的差異也顯而易見:如果我們的 Linux 系統(tǒng)有很多用戶需要使用的話,前者要求所有用戶都知道 root 用戶的密碼,這顯然是非常危險的;后者是不需要暴露 root 賬戶密碼的,用戶只需要輸入自己的賬戶密碼就可以,而且哪些用戶可以切換到 root,這完全是受 root 控制的(root 通過設置/etc/sudoers實現(xiàn)的),這樣系統(tǒng)就安全很多了。

一般都是推薦使用sudo方式。







審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux系統(tǒng)

    關注

    4

    文章

    593

    瀏覽量

    27397
  • Shell
    +關注

    關注

    1

    文章

    365

    瀏覽量

    23378
  • Ubuntu系統(tǒng)

    關注

    0

    文章

    91

    瀏覽量

    3942

原文標題:如果你不懂su與sudo用法,可能會被甲方噴的!

文章出處:【微信號:浩道linux,微信公眾號:浩道linux】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    常見的shell命令之其他命令

    :elf@ubuntu:~$ man ls3、su/sudo用戶切換命令sudo:暫時切換到超級用戶以執(zhí)行超級用戶權限su:切換到某某用戶4
    發(fā)表于 08-21 09:49

    嵌入式學習-常見的shell命令之其他命令

    :elf@ubuntu:~$ man ls3、su/sudo用戶切換命令sudo:暫時切換到超級用戶以執(zhí)行超級用戶權限su:切換到某某用戶4
    發(fā)表于 08-22 09:42

    在 Linux 中運行 sudo 命令不需要密碼

    命令在運行時而不輸入密碼。此設置在?/etc/sudoers?文件中完成,這是使用 sudo 命令的默認安全策略;在用戶權限指定部分。重要:在?sudeors?文件中,默認打開
    發(fā)表于 04-02 14:48 ?1125次閱讀

    Linux中易混淆命令的區(qū)別

    素材來源:Linux迷 sudosu 兩個命令的最大區(qū)別是:sudo 命令需要輸入當前用戶的密碼,
    的頭像 發(fā)表于 09-25 14:25 ?1785次閱讀
    Linux中易混淆<b class='flag-5'>命令</b>的區(qū)別

    Linux中susudo命令有什么區(qū)別

    ? 之前一直對 susudo 這兩個命令犯迷糊,最近專門搜了這方面的資料,總算是把兩者的關系以及用法搞清楚了,這篇文章來系統(tǒng)總結一下。 1. 準備工作 因為本篇博客中涉及到用戶切
    的頭像 發(fā)表于 11-19 09:19 ?1608次閱讀

    如何使用sudo命令以及選項

    sudo命令允許您以其他用戶身份運行命令與程序,默認是root用戶。如果您是個命令行用戶,那么sudo是您將經(jīng)常使用的
    的頭像 發(fā)表于 12-09 17:47 ?5101次閱讀

    值得考慮的4個最佳Linux sudo命令替代方案

    對于那些不喜歡 sudo 并覺得它臃腫的人,可以嘗試使用幾種 sudo 替代方法。 sudo 可能是最常用的 Linux 命令之一。它允許您在 Linux 機器上獲得管理或提升的權限。
    的頭像 發(fā)表于 01-06 10:54 ?2098次閱讀

    unzip命令的作用及用法

    unzip 命令往往用于解壓縮 zip 文件,但它能做的不僅僅是如此。今天我們主要介紹一下該命令的作用及用法
    的頭像 發(fā)表于 01-30 15:57 ?7996次閱讀

    Linux中root和sudo用法與區(qū)別

    Linux 下面有兩個概念可能大家接觸的比較多,一個是 sudo 命令,還有一個是 root 賬戶。Sudo 命令可以以最高權限執(zhí)行命令,而
    的頭像 發(fā)表于 03-29 09:17 ?1005次閱讀

    Linux系統(tǒng)維護命令用法

    Linux有很多命令,每個命令基本可以用一篇文章介紹,本文僅簡單總結一些常用系統(tǒng)維護命令用法
    的頭像 發(fā)表于 04-17 14:57 ?1054次閱讀
    Linux系統(tǒng)維護<b class='flag-5'>命令</b>的<b class='flag-5'>用法</b>

    Linux命令susudo的區(qū)別

    在 Linux 系統(tǒng)中,有兩個常用的命令用于切換用戶身份和執(zhí)行特權操作,它們分別是 susudo。雖然它們都可以實現(xiàn)權限提升,但在使用方式、安全性和適用場景等方面存在一些區(qū)別。本文將介紹
    發(fā)表于 08-14 14:14 ?303次閱讀

    首個Rust版sudo發(fā)布!

    sudo-rs項目則是用 Rust 編寫的 sudosu 的、面向安全和內(nèi)存安全的實現(xiàn)。官網(wǎng)聲明中顯示,sudo-rs 目前僅針對基于 Linux 的操作系統(tǒng);運行
    的頭像 發(fā)表于 09-01 15:59 ?803次閱讀
    首個Rust版<b class='flag-5'>sudo</b>發(fā)布!

    什么是sudo rm -rf?為什么這個命令如此危險?

    sudo rm -rf 是一個linux的命令命令,用于在系統(tǒng)中刪除文件和目錄。sudo表示以管理員權限運行該命令。
    的頭像 發(fā)表于 10-24 18:25 ?3171次閱讀

    linux常用命令用法

    Linux是一種開源的操作系統(tǒng),它以穩(wěn)定、高效和安全的特點受到廣大用戶的喜愛。掌握Linux的常用命令及其用法對于操作系統(tǒng)的管理和開發(fā)都至關重要。本文將詳盡、詳實、細致地介紹Linux常用命令
    的頭像 發(fā)表于 11-17 09:47 ?671次閱讀

    總結linux命令行的主要用法

    Linux命令行是一種在Linux操作系統(tǒng)中通過文本界面來執(zhí)行指令和管理系統(tǒng)的方式。它提供了豐富的功能和靈活性,幫助用戶完成各種任務。本文將詳細介紹Linux命令行的主要用法,包括常見
    的頭像 發(fā)表于 11-17 10:19 ?670次閱讀