'sudo' 對 root 意味著什麼?

'sudo' 對 root 意味著什麼?

我在 Ubuntu 14.04 中執行以下命令:

root@ubuntu:~# service rpki-ca restart 
stop: Unknown job: rpki-ca
start: Unknown job: rpki-ca
root@ubuntu:~# sudo service rpki-ca restart 
rpki-ca stop/waiting
rpki-ca start/running
root@ubuntu:~#

sudo第二條指令的作用是什麼?為什麼需要root sudo

答案1

好的,谷歌搜索,找到這個U&L 答案,檢查其修訂歷史並遵循中引用的來源修訂#1,這恰好是一個暴發戶錯誤;問題是,當切換到 root 運行時,su環境$UPSTART_SESSION變數是從以前的環境中攜帶的,而不是再次設定。

經過多次敲頭和谷歌搜尋後,我找到了一篇文章(https://unix.stackexchange.com/questions/120050/sudo-service-vsftpd-returns-unknown-job-vsftpd)表明

sudo service xxxx start(或停止,或重新啟動)

有效,同時

`service xxxx start(在 su 會話中)

不起作用。

所以罪魁禍首顯然是環境:如果你使用“su”而不是“sudo su”或“su -”進入root,“service”也無法正常工作,因為“su”將承載大部分正常用戶環境到根會話。

經過一些測試,我發現罪魁禍首是 UPSTART_SESSION 環境變量,該變量在您“su”時設置,但在您“sudo su”或“su -”時未設置。以下是一些測試結果:

-- 不起作用

jsveiga@dell:~$ su
Password:
root@dell:/home/jsveiga# service smbd restart
stop: Unknown job: smbd
start: Unknown job: smbd

-- 甚至可以在 su 會話中工作

root@dell:/home/jsveiga# sudo service smbd restart
smbd stop/waiting
smbd start/running, process 3823

——作品

root@dell:/home/jsveiga# exit
jsveiga@dell:~$ sudo su
root@dell:/home/jsveiga# service smbd restart
smbd stop/waiting
smbd start/running, process 3862

——作品

root@dell:/home/jsveiga# exit
jsveiga@dell:~$ su -
Password:
root@dell:~# service smbd restart
smbd stop/waiting
smbd start/running, process 3905

-- 執行 su 然後取消 UPSTART_SESSION 的設置

root@dell:/home/jsveiga# exit
jsveiga@dell:~$ su
Password:
root@dell:/home/jsveiga# service smbd restart
stop: Unknown job: smbd
start: Unknown job: smbd
root@dell:/home/jsveiga# unset UPSTART_SESSION
root@dell:/home/jsveiga# service smbd restart
smbd stop/waiting
smbd start/running, process 4244

因此,啟動/停止腳本僅因環境變數的存在而失敗UPSTART_SESSION

BR,若昂·S·維加

要解決此問題,只需取消設定$UPSTART_SESSION

unset UPSTART_SESSION

或透過其他方式切換到 root,例如su -sudo susudo -i

答案2

在這種情況下,它沒有任何意義,應該被刪除。在不指定其他用戶的情況下,sudo嘗試成為 root 用戶,因此,如果您已經是 root 用戶,那麼除了創建一個額外的進程(為其sudo自身)之外,該進程會佔用一些資源,直到它運行的命令完成為止,這是一個無操作。

相關內容