media 發表於 2014-12-21 14:08:00

Linux 下 su v.s sudo 指令比較

本帖最後由 media 於 2014-12-21 14:12 編輯

su=switch user ,轉換到root 帳號
sudo 是以root權限執行相關命令,例如: sudo service mysqld restart,兩者說明如下:

Linux安裝套件與系統設定都需要root的權限,就是super-user privileges (最高權限),也就是管理員權限。如何擁有root的權限?我們可以直接用ssh登入root的帳號,或用su(substitute user)指令來切換使用者,再不然就是使用sudo指令。

1. 使用su指令#用su切換使用者
$ su#使用su切換為root
Password:[輸入root密碼]

# service httpd restart#已切換為root
Stopping httpd:                                          
Starting httpd:                                          

# exit#切換回aaron

#執行單一指令,不需要切換為root
$ su -c "service httpd restart"
Password:[輸入root密碼]
Stopping httpd:                                          
Starting httpd:                                          

#執行su與su -的差別(Shell環境是否跟著切換)
$ su
Password:[輸入root密碼]
# echo $PATH#列印PATH變數,發現還使用aaron的PATH變數
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/aaron/bin

$ su -
Password:[輸入root密碼]
# echo $PATH#列印PATH變數,使用root的PATH變數
/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
2. 設定sudoer
$ su
Password:[輸入root密碼]

# vim /etc/sudoers

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

## Allow users to run any commands anywhere
aaron   ALL=(ALL)       ALL#新增這條允許aaron可以執行管理員權限
3. 範例#沒有最高權限,所以就被擋了
$ service httpd restart
Stopping httpd:
rm: cannot remove `/var/run/httpd/httpd.pid': Permission denied

Starting httpd:
touch: cannot touch `/var/lock/subsys/httpd': Permission denied

#用sudo就可以
$ sudo service httpd restart
password for aaron:[輸入密碼]
Stopping httpd:                                          
Starting httpd:                                          #su與sudo的差別在於是否要讓一般使用者知道root的密碼,如果用su就必須將root密碼分享出去,很有可能造成系統被侵入的危險。而sudo則是讓一般使用者有管理員權限,只要輸入自己的密碼即可,但同樣有風險,因為擁有管理員權限。
可參考http://kezeodsnx.pixnet.net/blog/post/25810396
頁: [1]
查看完整版本: Linux 下 su v.s sudo 指令比較