Linux培訓之系統(tǒng)sudo命令十個技巧方法
2018-04-23 13:39:12
1475瀏覽
sudo表示“superuserdo”。它允許已驗證的用戶以其他用戶的身份來運行命令。其他用戶可以是普通用戶或者超級用戶。然而,大部分時候我們用它來以提升的權(quán)限來運行命令。
sudo命令與安全策略配合使用,默認安全策略是sudoers,可以通過文件/etc/sudoers來配置。其安全策略具有高度可拓展性。人們可以開發(fā)和分發(fā)他們自己的安全策略作為插件。
與su的區(qū)別
在GNU/Linux中,有兩種方式可以用提升的權(quán)限來運行命令:
使用su命令
使用sudo命令
su表示“switchuser”。使用su,我們可以切換到root用戶并且執(zhí)行命令。但是這種方式存在一些缺點:
我們需要與他人共享root的密碼。
因為root用戶為超級用戶,我們不能授予受控的訪問權(quán)限。
我們無法審查用戶在做什么。
sudo以獨特的方式解決了這些問題。
首先,我們不需要妥協(xié)來分享root用戶的密碼。普通用戶使用他們自己的密碼就可以用提升的權(quán)限來執(zhí)行命令。
我們可以控制sudo用戶的訪問,這意味著我們可以限制用戶只執(zhí)行某些命令。
除此之外,sudo用戶的所有活動都會被記錄下來,因此我們可以隨時審查進行了哪些操作。在基于Debian的GNU/Linux中,所有活動都記錄在/var/log/auth.log文件中。
本教程后面的部分闡述了這些要點。
實際動手操作sudo
現(xiàn)在,我們對sudo有了大致的了解。讓我們實際動手操作吧。為了演示,我使用Ubuntu。但是,其它發(fā)行版本的操作應該是相同的。
允許sudo權(quán)限
讓我們添加普通用戶為sudo用戶吧。在我的情形中,用戶名為linuxtechi。
1)按如下所示編輯/etc/sudoers文件:
$sudovisudo
2)添加以下行來允許用戶linuxtechi有sudo權(quán)限:
linuxtechiALL=(ALL)ALL
上述命令中:
linuxtechi表示用戶名
第一個ALL指示允許從任何終端、機器訪問sudo
第二個(ALL)指示sudo命令被允許以任何用戶身份執(zhí)行
第三個ALL表示所有命令都可以作為root執(zhí)行
以提升的權(quán)限執(zhí)行命令
要用提升的權(quán)限執(zhí)行命令,只需要在命令前加上sudo,如下所示:
$sudocat/etc/passwd
當你執(zhí)行這個命令時,它會詢問linuxtechi的密碼,而不是root用戶的密碼。
以其他用戶執(zhí)行命令
除此之外,我們可以使用sudo以另一個用戶身份執(zhí)行命令。例如,在下面的命令中,用戶linuxtechi以用戶devesh的身份執(zhí)行命令:
$sudo-udeveshwhoami[sudo]passwordforlinuxtechi:devesh
內(nèi)置命令行為
sudo的一個限制是——它無法使用Shell的內(nèi)置命令。例如,history記錄是內(nèi)置命令,如果你試圖用sudo執(zhí)行這個命令,那么會提示如下的未找到命令的錯誤:
$sudohistory[sudo]passwordforlinuxtechi:sudo:history:commandnotfound
訪問rootshell
為了克服上述問題,我們可以訪問rootshell,并在那里執(zhí)行任何命令,包括Shell的內(nèi)置命令。
要訪問rootshell,執(zhí)行下面的命令:
$sudobash
執(zhí)行完這個命令后——您將觀察到提示符變?yōu)榫?#)。
技巧
這節(jié)我們將討論一些有用的技巧,這將有助于提高生產(chǎn)力。大多數(shù)命令可用于完成日常任務。
以sudo用戶執(zhí)行之前的命令
讓我們假設(shè)你想用提升的權(quán)限執(zhí)行之前的命令,那么下面的技巧將會很有用:
$sudo!4
上面的命令將使用提升的權(quán)限執(zhí)行歷史記錄中的第4條命令。
在Vim里面使用sudo命令
很多時候,我們編輯系統(tǒng)的配置文件時,在保存時才意識到我們需要root訪問權(quán)限來執(zhí)行此操作。因為這個可能讓我們丟失我們對文件的改動。沒有必要驚慌,我們可以在Vim中使用下面的命令來解決這種情況:
:w!sudotee%
上述命令中:
冒號(:)表明我們處于Vim的退出模式
感嘆號(!)表明我們正在運行shell命令
sudo和tee都是shell命令
百分號(%)表明從當前行開始的所有行
使用sudo執(zhí)行多個命令
至今我們用sudo只執(zhí)行了單個命令,但我們可以用它執(zhí)行多個命令。只需要用分號(;)隔開命令,如下所示:
$sudo--bash-c'pwd;hostname;whoami'
上述命令中
雙連字符(--)停止命令行切換
bash表示要用于執(zhí)行命令的shell名稱
-c選項后面跟著要執(zhí)行的命令
無密碼運行sudo命令
當?shù)谝淮螆?zhí)行sudo命令時,它會提示輸入密碼,默認情形下密碼被緩存15分鐘。但是,我們可以避免這個操作,并使用NOPASSWD關(guān)鍵字禁用密碼認證,如下所示:
linuxtechiALL=(ALL)NOPASSWD:ALL
限制用戶執(zhí)行某些命令
為了提供受控訪問,我們可以限制sudo用戶只執(zhí)行某些命令。例如,下面的行只允許執(zhí)行echo和ls命令。
linuxtechiALL=(ALL)NOPASSWD:/bin/echo/bin/ls
深入了解sudo
讓我們進一步深入了解sudo命令。
$ls-l/usr/bin/sudo-rwsr-xr-x1rootroot145040Jun132017/usr/bin/sudo
如果仔細觀察文件權(quán)限,則發(fā)現(xiàn)sudo上啟用了setuid位。當任何用戶運行這個二進制文件時,它將以擁有該文件的用戶權(quán)限運行。在所示情形下,它是root用戶。
為了演示這一點,我們可以使用id命令,如下所示:
$iduid=1002(linuxtechi)gid=1002(linuxtechi)groups=1002(linuxtechi)
當我們不使用sudo執(zhí)行id命令時,將顯示用戶linuxtechi的id。
$sudoiduid=0(root)gid=0(root)groups=0(root)
但是,如果我們使用sudo執(zhí)行id命令時,則會顯示root用戶的id。
從這篇文章可以看出——sudo普通用戶提供了更多受控訪問。使用這些技術(shù),多用戶可以用安全的方式與GNU/Linux進行交互。最后想要了解更多關(guān)于Linux發(fā)展前景趨勢,請關(guān)注扣丁學堂Linux培訓官網(wǎng)、微信等平臺,扣丁學堂IT職業(yè)在線學習教育平臺為您提供權(quán)威的Linux視頻教程系統(tǒng),通過千鋒扣丁學堂金牌講師在線錄制的Linux視頻教程課程,讓你快速掌握Linux從入門到精通開發(fā)實戰(zhàn)技能??鄱W堂Linux技術(shù)交流群:422345477。
【關(guān)注微信公眾號獲取更多的學習資料】
查看更多關(guān)于“Linux培訓資訊”的相關(guān)文章>>
標簽:
Linux命令
Linux視頻教程
Linux培訓
Linux在線學習
Linux在線視頻
Linux系統(tǒng)