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