參考:http://blog.useasp.net/archive/2015/07/29/run-command-as-different-user-on-linux.aspx
在實際中,我們有時候想在一個腳本中指定用戶來運行另一個程序,從而更好地管理進程。可以通過runuser、su和sudo來實現。
runuser
runuser命令使用一個替代的用戶或者組ID運行一個Shell。這個命令僅在root用戶時有用。僅以會話PAM鈎子運行,並且沒有密碼提示。如果用一個非root用戶,並且該用戶沒有權限設置user ID,這個命令將會因為程序沒有setuid而失敗。因runuser不會運行認證和賬戶PAM鈎子,它比su更底層。
語法:
runuser [options] -u user command [argument...]
runuser [options] [-] [ user [argument...] ]
示例:
runuser - Ruby -g Ruby -c "sh my.sh"
su
su命令允許你成為一個超級用戶或者替代用戶(substitute user),欺騙用戶(spoof user),設置用戶(set user)或者切換用戶(switch user)。它允許一個Linxu用戶切換當前用戶到那些你知道密碼的目標用戶,切換包括與之關聯的運行中的控制台(console)或者Shell。
語法:
su [options...] [-] [user [args...]]
示例:
su - Ruby -c "sh my.sh"
sudo
sudo以另外的用戶來執行一個命令,但是它跟着一組關於那些用戶可以以那些其他用戶執行那些命令的規則(有點繞口——譯注)。這個規則在/etc/sudoers這個文件中被定義。不像su,sudo驗證用戶是靠用戶自己的密碼而不是那個要切換的用戶密碼。
語法:
sudo command
示例:
sudo sh my.sh
