
我的目標是寫入 /etc/passwd 以將權限升級到 root。
我為新的 root 使用者產生了密碼「test1」:openssl passwd test1
並且我使用 echo 在 /etc/passwd 檔案中附加一個新條目:sudo echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd
但是當我執行最後一個命令時,它顯示我沒有執行此操作的權限:bash: /etc/passwd: Permission denied
但是當我使用該命令sudo nano /etc/passwd
並複製到root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash
文件末尾時,它就可以工作了!
命令有什麼問題echo
?
答案1
已經透過評論回答了,但請擴展一下:
sudo echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd
翻譯如下:
- 指示 bash(未提升)開啟檔案 /etc/passwd 進行寫入
- 指示 bash(仍未提升)使用一些參數來執行指令
sudo
,並使用步驟 1 中的檔案描述子作為 stdoutecho
指示 sudo(即 setuid root)使用一些參數來 運行命令- 指示 echo(以 root 身份運行,注意這可能類似於 /usr/bin/echo,通常
echo
會呼叫 shell 內建命令),並從 sudo 繼承 stdout)將一些文字輸出到 stdout - 工作完成,echo 退出
- 指示 echo(以 root 身份運行,注意這可能類似於 /usr/bin/echo,通常
- 它的工作完成了, sudo 退出;沒有任何東西以 root 身份運行
- Bash(仍未提升)關閉 /etc/passwd 的檔案描述符(刷新寫入佇列)
- Bash 等待下一個命令
當然,除了步驟 1 失敗之外! Bash 未提升權限,無法開啟 /etc/passwd 進行寫入。因此,bash: /etc/passwd: Permission denied
步驟 2 或 3 的任何部分都不會發生,包括步驟 2 的任何子步驟。
sudo nano /etc/passwd
運作得很好,因為提升的進程(nano,從 sudo 繼承 root 權限)是開啟檔案進行寫入的進程。
如果您想在此處使用 echo,則需要提升 bash 本身。這可以透過在 sudo 中明確調用 bash(或任何其他 shell)然後告訴它要做什麼來完成:
sudo bash -c 'echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd'
或者等效地作為三個單獨的命令(其中後兩個命令提供給 bash 的提升實例):
sudo bash
echo "root2:rmeF3kdnoRw/U:0:0:root:/root:/bin/bash" >> /etc/passwd
exit