我們都知道非常多的文件都僅僅有root有權(quán)限來(lái)改動(dòng),那么在我們平時(shí)的開(kāi)發(fā)過(guò)程中都建議使用一般賬號(hào)來(lái)登錄進(jìn)行開(kāi)發(fā)。還記得前面說(shuō)到的ssh嗎。我們也是將同意root登錄設(shè)置成no。到必要的時(shí)候再切換到root來(lái)進(jìn)行操作,這樣就不至于有風(fēng)險(xiǎn)。
那么我們?cè)鯓忧袚Q身份呢。
1.su
su是最簡(jiǎn)單的身份切換名,用su我們能夠進(jìn)行不論什么用戶的切換,一般都是su - username,然后輸入password就ok了,可是root用su切換到其它身份的時(shí)候是不須要輸入password的。起初我都是用su來(lái)切換的,后來(lái)老大看見(jiàn)了說(shuō)我這樣的方式切換是不好的。你能夠嘗試其它的方式來(lái)切換。我認(rèn)為這樣切換非常方便啊,那究竟是不好在哪里呢。后面再看另外一種身份的切換方式就知道了。
一般我們切換身份都是切換到root,然后進(jìn)行一些僅僅有root能干的事,比方改動(dòng)配置文件。比方下載安裝軟件。這些都僅僅能是root才有權(quán)限干的事。切換到root能夠是單純的su,或者是su -和su - root,后面兩個(gè)是一樣的意思。
單純使用su切換到root,讀取變量的方式是non-login shell,這樣的方式下非常多的變量都不會(huì)改變。尤其是PATH。所以root用的非常多的命令都僅僅能用絕對(duì)路徑來(lái)運(yùn)行。這樣的方式僅僅是切換到root的身份。
而用su -這樣的方式的話,是login shell方式,它是先以root身份登錄然后再運(yùn)行別的操作。
假設(shè)我們僅僅要切換到root做一次操作就好了,僅僅要在su后面加個(gè)-c參數(shù)就好了。運(yùn)行完這次操作后。又會(huì)自己主動(dòng)切換回我們自己的身份。非常方便。
那么假設(shè)有非常多人管理這個(gè)主機(jī)的話,那不是非常多人都要知道root的password嗎,并且可能有的人僅僅是單純的進(jìn)行一次root操作就能夠了,這個(gè)時(shí)候,su方式就不是非常好,rootpassword越少人知道越好,越少人知道就越安全,這時(shí)就須要另外一種方式了。
2.sudo
相比于su切換身份須要用戶的password,常常性的是須要rootpassword,sudo僅僅是須要自己的password,就能夠以其它用戶的身份來(lái)運(yùn)行命令。常常是以root的身份運(yùn)行命令。也并不是全部人都能夠用sudo:
這里我要查看/etc/shadow這個(gè)文件的前三行,可是卻發(fā)現(xiàn)看不了,提示的錯(cuò)誤是說(shuō)我當(dāng)前這個(gè)用戶不在sudoers這個(gè)文件,所以sudo是依賴于/etc/sudoers這個(gè)配置文件的。
sudo的運(yùn)行有這樣一個(gè)流程:
1).當(dāng)用戶運(yùn)行sudo時(shí),系統(tǒng)于/etc/sudoers文件里查找該用戶是否有運(yùn)行sudo的權(quán)限;
2).若用戶具有可運(yùn)行sudo的權(quán)限。那么讓用戶輸入用戶自己的password,注意這里輸入的是用戶自己的password。
3).假設(shè)password正確。變開(kāi)始進(jìn)行sudo后面的命令,root運(yùn)行sudo是不須要輸入password的,切換到的身份與運(yùn)行者身份同樣的時(shí)候。也不須要輸入password。
以下看看/etc/sudoers這個(gè)配置文件:
為何剛開(kāi)始僅僅有root能運(yùn)行sudo,切換到root身份通過(guò)visudo查看/etc/sudoers這個(gè)配置文件,假設(shè)是vim /etc/sudoers是能夠查看的,可是不能改動(dòng),由于sudoers這個(gè)文件是由語(yǔ)法的,僅僅能通過(guò)visudo來(lái)改動(dòng)。第一個(gè)紅色方框那行代碼,這行代碼是什么意思呢。第一列root不用多說(shuō),是用戶賬號(hào),第二列的ALL意思是登陸者的來(lái)源主機(jī)名,第三列等號(hào)右邊小括號(hào)里的ALL是代表能夠切換的身份。第四列ALL是可運(yùn)行的命令。
1).單個(gè)用戶的sudoers語(yǔ)法:
假設(shè)我要我當(dāng)前這個(gè)用戶能運(yùn)行root的全部操作,那么我僅僅要加一行l(wèi)earnpython ALL=(ALL) ALL。那么假設(shè)有非常多人須要運(yùn)行sudo。那不是要寫(xiě)編寫(xiě)非常多行啊,這樣不是非常麻煩,這樣就要用到用戶組了。
2).利用用戶組處理visudo:
看看第二個(gè)紅色方框那行代碼。%wheel代表wheel用戶組。假設(shè)我們將須要運(yùn)行root全部操作的用戶都加入到wheel用戶組,或者我們自己定義的用戶組。然后加入一行代碼。那么就不用一個(gè)用戶一個(gè)用戶的加入進(jìn)來(lái)了,這樣不是非常省事啊。
3).限制用戶sudo的權(quán)限:
可是常常我們不須要用戶有那么大的權(quán)限。僅僅要讓他們具有他們負(fù)責(zé)范圍的權(quán)限就能夠了。比方有的有的人來(lái)管理password,我們就僅僅讓他能進(jìn)行password的管理,而不讓他有別的權(quán)限,這樣就須要權(quán)限的控制了。
假設(shè)我讓我當(dāng)前用戶來(lái)管理password。即learnpython這個(gè)用戶能使用passwd這個(gè)命令來(lái)幫root改動(dòng)用戶password。僅僅要加這行l(wèi)earnpython ALL=(root) /usr/bin/passwd,那么learnpython這個(gè)用戶就能夠使用passwd這個(gè)命令了:
可是假設(shè)僅僅是運(yùn)行sudo passwd命令,改動(dòng)的就是root的password,當(dāng)然我們不希望普通用戶能具有改動(dòng)rootpassword的權(quán)限,那么在visudo的時(shí)候就須要將命令的參數(shù)限制好。如改成這樣:
[root@localhost ~]# visudolearnpython ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
4).通過(guò)別名設(shè)置visudo
查看sudoers這個(gè)文件的時(shí)候。你會(huì)看見(jiàn)User_Alias。Host_Alias和Cmnd_Alias這些東西,他們都是一些別名,User_Alias表示具有sudo權(quán)限的用戶列表,就是第一列參數(shù)。Host_Alias表示主機(jī)的列表。就是第二列參數(shù)。Cmnd_Alias表示同意運(yùn)行命令的列表,就是第四列參數(shù)。還有個(gè)Runas_Alias。我初始的sudoers里是沒(méi)有的,這個(gè)表示用戶以什么身份登錄。也就是第三列參數(shù)。
所以假設(shè)有幾個(gè)password管理員的話就能夠加上例如以下代碼:
[root@localhost ~]# visudoUser_Alias PWMNG = manager1, manager2, manager3Cmnd_Alias PWCMD = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd rootPWMNG ALL=(root) PWCMD
5).sudo搭配su
從上面來(lái)看。我們都僅僅是切換到別的用戶然后運(yùn)行命令,接著就切回到我們自己的用戶了。假設(shè)我們要像su那樣直接切換到root。然后干自己想干的。這個(gè)時(shí)候,就要將命令改動(dòng)成/bin/su -。例如以下:
[root@localhost ~]# visudoUser_Alias ADMINS = user1, user2, user3ADMINS ALL=(root) /bin/su -
當(dāng)然這個(gè)是須要謹(jǐn)慎了,由于這樣用戶user1。user2,user3等就直接切換到root了,切換后他們就是老大了。
有沒(méi)有發(fā)現(xiàn),當(dāng)我們連續(xù)使用sudo的時(shí)候,在一定時(shí)間內(nèi)是不用再次輸入我們的password,這個(gè)事實(shí)上是系統(tǒng)自己設(shè)定的,在五分鐘之內(nèi)運(yùn)行sudo僅僅須要輸入一次password就能夠了。
3.總結(jié)
了解完su和sudo,是不是發(fā)現(xiàn)sudo有太多的優(yōu)點(diǎn)了。su方式切換是須要輸入目標(biāo)用戶的password。而sudo僅僅須要輸入自己的password,所以sudo能夠保護(hù)目標(biāo)用戶的password不外流的。當(dāng)幫root管理系統(tǒng)的時(shí)候,su是直接將root全部權(quán)利交給用戶。而sudo能夠更好分工,僅僅要配置好/etc/sudoers,這樣sudo能夠保護(hù)系統(tǒng)更安全,并且分工明白,有條不紊。
聯(lián)系客服