(6)sudo命令詳解(每週一個linux命令系列)

首先說句抱歉,最近事情比較複雜,停更了一陣子。我又回來啦

多用戶管理

我們常用的windows個人系統雖然可以設置多用戶,但是實際上是不可以多用戶同時登陸的(這個我實驗過,我以前用windows服務器的時候,多用戶可以同時登陸,自以爲個人版的也可以,結果啪啪打臉啊),這就使得這功能很雞肋,而且大家也很少在windows中使用多用戶這個功能。
而linux是多用戶系統,不同用戶可以同時登陸進行操作,私以爲linux的用戶管理要比windows好太多了,當然也略複雜。其中最主要的就是,並不是每個人都有最高權限,因爲linux系統認爲你有足夠的能力管理自己的系統,系統本身不會對你的行爲做限制,當然也不爲你的行爲買單。
我們認爲用戶一般分爲兩類,一類是root用戶,擁有最高權限,一類是普通用戶,擁有不完全的權限,普通用戶可以在有需要的時候,提升權限來執行命令。

sudo命令

sudo就是這樣一個命令,他可以做的事情就是,可以提權到另一個用戶來執行這個用戶可以執行的任務。

命令格式:

sudo -u <用戶名> <命令> //如果省略-u 則默認爲root用戶

注:如果需要輸入密碼,輸入的是當前用戶的密碼。提權到新用戶身份,命令是以新用戶身份來執行的,因此創建文件和文件夾等屬於此用戶。

su <用戶名> //用來切換用戶  如果需要輸入密碼,輸入的是要切換到的用戶的密碼

給用戶增加sudo權限

useradd命令上一個文章已經提過,這樣創建完用戶就是普通用戶,如果想給此用戶增加sudo權限應該怎麼操作呢?

我們可以使用visudo命令,出於安全考慮,需要在root權限下纔可以運行,這很好理解吧。

輸入命令後打開一個臨時文件:"/etc/sudoers.tmp"

也表明了這個權限的管理是記錄在sudoers文件中,在centos中一般放在 /etc/sudoers文件中,我們也可以通過vi /etc/sudoers來操作,但是不建議這樣做,因爲使用visudo會有錯誤檢測和提示,vi則沒有

文件如下:

## Allow root to run any commands anywhere 
root	ALL=(ALL) 	ALL

## Allows members of the 'sys' group to run networking, software, 
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel	ALL=(ALL)	ALL

## Same thing without a password
# %wheel	ALL=(ALL)	NOPASSWD: ALL

## Allows members of the users group to mount and unmount the 
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

上面並不是全部文件,我們只講解其中一部分

先說一下這兩條

## Allow root to run any commands anywhere 
root	ALL=(ALL) 	ALL
## Allows people in group wheel to run all commands
%wheel	ALL=(ALL)	ALL

這些代碼就是用來控制權限的,代碼格式爲:

源用戶/組    主機 =  [(目的用戶:組)] [是否需要輸入密碼驗證] [命令1,命令2,...]

其中ALL可以代替所有主機,或者所有命令。源用戶/組的位置,如果是帶'%'則代表是組,不帶代表用戶 其中命令和

示例:
    //wheel組中的用戶,通過任意主機登錄,可以切換到任意其他用戶,不需要密碼  可以通過sudo執行所有命令
    %wheel	ALL=(ALL:ALL)	NOPASSWD: ALL   
    //用戶張三 通過任意主機登錄,可以切換到sudo組中的任意用戶,不需要密碼 可以以通過sudo執行所有命令
    zhangsan	ALL=(ALL:sudo)	NOPASSWD: ALL

也可以不寫其中的【目的用戶和組】和【是否需要密碼驗證】的部分 如下:
    root   ALL=(ALL:ALL) ALL
    %wheel ALL=(ALL) ALL
或者控制職能執行一些命令例如只能以通過sudo執行top命令(只是舉個例子,當然普通用戶也可以執行top命令)

    checktop ALL= /usr/bin/top  //這裏最好使用絕對路徑,否則可能會導致可以通過sudo執行一些其他路徑下的同名程序帶來安全隱患
可以使用'*'作爲通配符,可以使用'!'排除
    //可以運行/usr/bin/下的所有程序,但是/usr/bin/top除外
    checktop ALL=/usr/bin/*,!/usr/bin/top

另外我們注意到其中有一行:#includedir /etc/sudoers.d

這使得sudoers文件包含了/etc/sudoers.d中不以~號結尾的文件和不包含.號的文件,這些文件都會被解析成sudoers的配置加載。注意這一句的格式是固定的,就像是c文件中的#include類似。

補充:

查看命令的絕對路徑 使用

which <命令>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章