plurk 2010-3-2 17:07
Linux sudo 和 su 有什麼不同
<P>
<P><SPAN style="FONT-SIZE: 14pt"><STRONG>簡介</STRONG></SPAN></P></P>
<P>有時會需要特殊的權限來完成特殊的事,通常的對應是,用自己的帳號登入,但需要切換root的權限來執行某些指令,如dpkg,apt-get等。這時候,要考量的是:可不可以切,怎麼切,如何切。</P>
<P> </P>
<P>兩個方式: sudo和su。ubuntu常用sudo,因其預設root是無法登入,而debian,fedora則較常用su。</P>
<P> </P>
<P><SPAN style="FONT-SIZE: 14pt"><STRONG>su</STRONG></SPAN></P>
<P>su: switch user。切換成其他使用者,預設是root,不同的option有不同的結果,見下述。因其切換到其他使用者,所以需其密碼。好像還蠻合理,但若是切換到root,那不就要root的密碼! 這顯然不太妙。因此多人使用的系統,就會難以管理,建議使用sudo來解決這個問題。這是其一,有些user是屬於nologin的,也就無法切換,此其二。</P>
<P> </P>
<P>su的用法如下:</P>
<P>su -: 這是指<SPAN style="COLOR: #ff0000">登入</SPAN>到root,需打root的密碼,屬於login shell,因此是有login的重作,有沒有login會有些影響,如環境變數。</P>
<P>su -l: 也是有login,但是登入到另一個使用者</P>
<P> </P>
<P>user@user-ubuntu:~$ su -l smbguest<BR>Password: <BR>smbguest@user-ubuntu:~$ exit<BR><SPAN style="COLOR: #ff0000">logout</SPAN><BR>user@user-ubuntu:~$ su smbguest<BR>Password: <BR>smbguest@user-ubuntu:/home/user$ exit<BR><SPAN style="COLOR: #ff0000">exit</SPAN><BR>一個是logout,一個是exit,可看出其登入與否,有興趣的話,可以比較一下環境變數的差異。</P>
<P> </P>
<P><SPAN style="FONT-SIZE: 14pt"><STRONG>sudo</STRONG></SPAN></P>
<P>sudo的用途有些不同,是用其他身份來執行命令,而非切換,而且是使用自己的密碼,這也是su與sudo的主要差異。</P>
<P>sudo用法如下:</P>
<P>sudo -u: 使用某使用者的身份來做事</P>
<P>user@user-ubuntu:~$ sudo -u smbguest mkdir /tmp/guest-dir<BR>user@user-ubuntu:~$ ls -al /tmp/ | grep guest-dir<BR>drwxr-xr-x 2 <SPAN style="COLOR: #ff0000">smbguest smbguest </SPAN> 4096 2009-06-24 16:20 guest-dir</P>
<P> </P>
<P>系統預設是只有root能執行sudo,但也可以透過修改設定檔 (/etc/soduers)來做些改變。</P>
<P>這個檔有專用工具visudo,會檢查語法是否有誤,但硬要用vi編輯也是可以,用wq!。</P>
<P> </P>
<P>該檔案內容為:</P>
<P># User privilege specification</P>
<P>帳號 來源主機 可切換為 可執行<BR>root ALL = (ALL) ALL</P>
<P>這個意思是root這個帳號,不管是從哪裡連進來,都可以切換成系統上所有的使用者,且可執行所有命令。因此也可把自己的帳號加進去,就變成</P>
<P>root ALL=(ALL) ALL</P>
<P>user ALL=(ALL) ALL</P>
<P> </P>
<P>帳號的部份也可以是group,用%識別,如%group1。</P>
<P>懶的打密碼,也可以這樣寫</P>
<P>user ALL=NOPASSWD: ALL</P>
<P>但每次要切成root時,都要加個一sudo,很煩,常常容易忘記。可以把sudo 與 su組合,變成sudo su,直接切換為root,並使用自己的密碼,當然前提是/etc/sudoers要讓自己有這個權限啦!</P>
<P>最後,要記得login shell的問題,sudo su與sudo su -是不同的:</P>
<P>user@user-ubuntu:~$ sudo su<BR>root@user-ubuntu:/home/user# exit<BR><SPAN style="COLOR: #ff0000">exit</SPAN><BR>user@user-ubuntu:~$ sudo su -<BR>root@user-ubuntu:~# exit<BR><SPAN style="COLOR: #ff0000">logout</SPAN></P>
<P>最最後,sudo的expire time是5分鐘。5分鐘內,使用sudo只在第一次需要敲密碼。</P>
<P> </P>
<P><STRONG>[轉載請註明出處] http://kezeodsnx.pixnet.net/blog</STRONG></P>
<P><STRONG>作者: kezeodsnx</STRONG></P>
wisdomleo 2011-7-1 17:27
回復 1# 的帖子
:lol :lol :lol :lol ^^ 多謝分享!