2012-06-20 52 views
0

嗨,我確定有某種方法可以做我想做的事,但也許我只是在用錯誤的方式攻擊它。希望有人能幫忙。如何在SSH連接上編輯由root用戶擁有的文件

我有一個開發箱,我SSH從其他幾臺機器。爲了遠程調試,我需要使用客戶端機器的IP來配置我的調試器,當我從不同的機器登錄時,IP會發生變化。我對所有這些手動操作感到厭倦,所以我想嘗試自動化它。

我正在創建一個在SSH連接中自動運行的腳本,它將修改PHP ini文件中的配置設置。問題是PHP的ini文件全部由root擁有,所以我不知道如何修改這些文件,如果我只是以普通用戶身份登錄。

我的開發箱沒有真正的安全問題,所以我可以更改ini文件的所有者,但我希望它比這更自動化。

我當前的嘗試是一個位於我的家庭目錄中的python腳本,當我通過SSH連接時,它是從.bashrc調用的。我沒有看到我可以從那裏獲得root權限,但我對Linux很新。我想也許會有其他一些我不知道的方法。

回答

1

您擁有一個由root擁有的文件。您顯然需要找到一種將文件標記爲可修改的方法;或者提升你的特權,讓你可以修改它的方法。

這導致了兩種傳統的unix方法來做到這一點。它們是:

  1. 要創建一個組標記文件,即。 initdebug; chgrp/chmod該文件,因此它具有initdebug組並且是可寫組的;並將自己添加到initdebug組中,以便您可以使用組寫入權限來修改該文件。

  2. 要創建一個非常小的,審計過的二進制可執行文件(這不會與腳本一起工作),它將執行您想要的特定修改(爲了簡單起見,我建議將根選擇的一個PHP ini文件複製到正確的地方)。然後將文件chown在歸root所有,並將suid位設置爲可執行文件,以便它以root身份執行。

您也可以結合這兩種方法,要麼:

  1. 不使自己的可執行initdebug組或SUID中的一員,而是設置組可執行的,以initdebug和設置它的sid位;或者,

  2. 保留可執行文件suid root,但只能通過initdebug執行,因此只能由添加到該組的用戶執行。

如果有人破解了您的賬戶,安全性權衡就會增加權限升級的難易程度/風險。如果可執行文件中存在堆棧/堆溢出或類似漏洞,並且它以root用戶身份執行,那麼您已經離開了。如果可以修改PHP ini文件來打開遠程漏洞,那麼如果他們可以直接訪問ini文件,就會消失。

正如我懷疑後者是可能的,你可能最好用一個小的可執行文件。

注意:正如我上面提到的,unix不承認腳本上的s [ug] id位(定義爲任何使用#!...解釋器語法的位)。因此,你將不得不使用一些你可以編譯成二進制的東西。所以這可能意味着C,C++,Java(使用gcj),ML,Scheme(mit),Haskell(ghc)。

如果您之前沒有做過任何C或C++編程,我會推薦其他人之一,因爲suid二進制文件不是用來學習C/C++的項目。如果你不知道任何其他語言,我會建議ML或Java作爲最簡單的寫簡單的東西。只要確保它編譯爲本地,而不是字節碼,就操作系統而言,字節碼vm只是另一個解釋器。)。編譯器可以編譯爲本地,而不是字節碼。

+0

嗨,這聽起來像是在閱讀其他線程中的一些類似的想法後,我的問題的最佳答案。我想我可能會像你提到的那樣創建一些C腳本。首先,雖然我時間緊張,但我只是改變文件權限,看看我現在能否以這種方式工作。有興趣做一些C雖然:) – chrismacp

+0

這裏有一個類似的鏈接建議我讀:http://unix.stackexchange.com/a/369 – chrismacp

+0

就像說我去你的建議,並創建一個小型的C程序這正是我所需要的。沒有密碼提示或需要修改權限。 – chrismacp

相關問題