linux權(quán)限之su和sudo的區(qū)別
su是最簡單的身份切換名,用su我們可以進行任何用戶的切換,一般都是su - username,然后輸入密碼就ok了,接下來是小編為大家收集的linux權(quán)限之su和sudo的區(qū)別,歡迎大家閱讀:
linux權(quán)限之su和sudo的區(qū)別
候是不需要輸入密碼的。起初我都是用su來切換的,后來老大看見了說我這種方式切換是不好的,你可以嘗試其他的方式來切換。我覺得這樣切換很方便啊,那到底是不好在哪里呢,后面再看第二種身份的切換方式就知道了。
一般我們切換身份都是切換到root,然后進行一些只有root能干的事,比如修改配置文件,比如下載安裝軟件,這些都只能是root才有權(quán)限干的事,切換到root可以是單純的su,或者是su -和su - root,后面兩個是一樣的意思。
單純使用su切換到root,讀取變量的方式是non-login shell,這種方式下很多的變量都不會改變,尤其是PATH,所以root用的很多的命令都只能用絕對路徑來執(zhí)行,這種方式只是切換到root的身份。而用su -這種方式的話,是login shell方式,它是先以root身份登錄然后再執(zhí)行別的操作。
如果我們只要切換到root做一次操作就好了,只要在su后面加個-c參數(shù)就好了,執(zhí)行完這次操作后,又會自動切換回我們自己的身份,很方便。
那么如果有很多人管理這個主機的話,那不是很多人都要知道root的密碼嗎,而且可能有的人只是單純的進行一次root操作就可以了,這個時候,su方式就不是很好,root密碼越少人知道越好,越少人知道就越安全,這時就需要第二種方式了。
2.sudo
相比于su切換身份需要用戶的密碼,經(jīng)常性的是需要root密碼,sudo只是需要自己的密碼,就可以以其他用戶的身份來執(zhí)行命令,經(jīng)常是以root的身份執(zhí)行命令,也并非所有人都可以用sudo:
這里我要查看/etc/shadow這個文件的前三行,但是卻發(fā)現(xiàn)看不了,提示的錯誤是說我當前這個用戶不在sudoers這個文件,所以sudo是依賴于/etc/sudoers這個配置文件的。sudo的執(zhí)行有這樣一個流程:
1).當用戶執(zhí)行sudo時,系統(tǒng)于/etc/sudoers文件中查找該用戶是否有執(zhí)行sudo的權(quán)限;
2).若用戶具有可執(zhí)行sudo的權(quán)限,那么讓用戶輸入用戶自己的密碼,注意這里輸入的是用戶自己的密碼;
3).如果密碼正確,變開始進行sudo后面的命令,root執(zhí)行sudo是不需要輸入密碼的,切換到的身份與執(zhí)行者身份相同的時候,也不需要輸入密碼。
下面看看/etc/sudoers這個配置文件:
為何剛開始只有root能執(zhí)行sudo,切換到root身份通過visudo查看/etc/sudoers這個配置文件,如果是vim /etc/sudoers是可以查看的,但是不能修改,因為sudoers這個文件是由語法的,只能通過visudo來修改。第一個紅色方框那行代碼,這行代碼是什么意思呢,第一列root不用多說,是用戶賬號,第二列的ALL意思是登陸者的來源主機名,第三列等號右邊小括號中的ALL是代表可以切換的身份,第四列ALL是可執(zhí)行的命令。
1).單個用戶的sudoers語法:
如果我要我當前這個用戶能執(zhí)行root的所有操作,那么我只要加一行l(wèi)earnpython ALL=(ALL) ALL。那么如果有很多人需要執(zhí)行sudo,那不是要寫編寫很多行啊,這樣不是很麻煩,這樣就要用到用戶組了。
2).利用用戶組處理visudo:
看看第二個紅色方框那行代碼,%wheel代表wheel用戶組,如果我們將需要執(zhí)行root所有操作的用戶都加入到wheel用戶組,或者我們自定義的用戶組,然后添加一行代碼,那么就不用一個用戶一個用戶的添加進來了,這樣不是很省事啊。
3).限制用戶sudo的權(quán)限:
但是經(jīng)常我們不需要用戶有那么大的權(quán)限,只要讓他們具有他們負責(zé)范圍的權(quán)限就可以了,比如有的有的人來管理密碼,我們就只讓他能進行密碼的管理,而不讓他有別的權(quán)限,這樣就需要權(quán)限的控制了。如果我讓我當前用戶來管理密碼,即learnpython這個用戶能使用passwd這個命令來幫root修改用戶密碼,只要加這行l(wèi)earnpython ALL=(root) /usr/bin/passwd,那么learnpython這個用戶就可以使用passwd這個命令了:
但是如果只是執(zhí)行sudo passwd命令,修改的就是root的密碼,當然我們不希望普通用戶能具有修改root密碼的權(quán)限,那么在visudo的時候就需要將命令的參數(shù)限制好,如改成這樣:
[root@localhost ~]# visudo
learnpython ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
4).通過別名設(shè)置visudo
查看sudoers這個文件的時候,你會看見User_Alias,Host_Alias和Cmnd_Alias這些東西,他們都是一些別名,User_Alias表示具有sudo權(quán)限的用戶列表,就是第一列參數(shù),Host_Alias表示主機的列表,就是第二列參數(shù),Cmnd_Alias表示允許執(zhí)行命令的列表,就是第四列參數(shù),還有個Runas_Alias,我初始的sudoers里是沒有的,這個表示用戶以什么身份登錄,也就是第三列參數(shù)。
所以如果有幾個密碼管理員的話就可以加上如下代碼:
[root@localhost ~]# visudo
User_Alias PWMNG = manager1, manager2, manager3
Cmnd_Alias PWCMD = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
PWMNG ALL=(root) PWCMD
5).sudo搭配su
從上面來看,我們都只是切換到別的用戶然后執(zhí)行命令,接著就切回到我們自己的用戶了,如果我們要像su那樣直接切換到root,然后干自己想干的,這個時候,就要將命令修改成/bin/su -,如下:
[root@localhost ~]# visudo
User_Alias ADMINS = user1, user2, user3
ADMINS ALL=(root) /bin/su -
當然這個是需要慎重了,因為這樣用戶user1,user2,user3等就直接切換到root了,切換后他們就是老大了。
有沒有發(fā)現(xiàn),當我們連續(xù)使用sudo的時候,在一定時間內(nèi)是不用再次輸入我們的密碼,這個其實是系統(tǒng)自己設(shè)定的,在五分鐘之內(nèi)執(zhí)行sudo只需要輸入一次密碼就可以了。
3.總結(jié)
了解完su和sudo,是不是發(fā)現(xiàn)sudo有太多的好處了。su方式切換是需要輸入目標用戶的密碼,而sudo只需要輸入自己的密碼,所以sudo可以保護目標用戶的密碼不外流的。當幫root管理系統(tǒng)的時候,su是直接將root所有權(quán)利交給用戶,而sudo可以更好分工,只要配置好/etc/sudoers,這樣sudo可以保護系統(tǒng)更安全,而且分工明確,有條不紊。
看了“linux權(quán)限之su和sudo的區(qū)別”還想看:
2.Linux系統(tǒng)中怎么限制用戶su-權(quán)限