在沒有root使用者的情況下通過SSH rsync遠端機器的所有文件?
我有這個命令來備份遠端機器。問題是我需要 root 權限才能讀取和複製所有文件。出於安全原因,我沒有啟用 root 使用者並使用
sudo
Ubuntu 方式。我需要一些很酷的管道或其他東西來做到這一點嗎?rsync -chavzP --stats user@192.168.1.2:/ /media/backupdisk/myserverbackup/
我建議您首先使用 root 帳戶。如果你這樣設置:
- 將您
sshd_config
在目標機器上的配置為PermitRootLogin without-password
.- 在提取備份的機器上使用
ssh-keygen
以創建 SSH 私鑰(僅當您還沒有 SSH 密鑰時)。不要設置密碼。如果您需要這方面的詳細資訊,請Google教程,應該有很多。/root/.ssh/id_rsa.pub
將備份電腦的內容附加到/root/.ssh/authorized_keys
目標電腦的內容。- 現在您的備份機器對您的目標機器具有 root 訪問權限,而無需使用密碼驗證。
那麼由此產生的設置應該是相當安全的。
sudo
,特別是與NOPASSWD
評論中推薦的結合使用,與僅使用 root 帳戶相比沒有安全優勢。例如這個建議:將以下內容添加到您的
/etc/sudoers
文件中:rsyncuser ALL= NOPASSWD:/usr/bin/rsync
無論如何,基本上都提供了
rsyncuser
root權限。你問:@MartinvonWittich 很容易獲得完整的 root shell,因為
rsync
使用sudo
? 走$$ m $$和$$ through $$那請。
嗯,很簡單。使用推薦的配置,
rsyncuser
現在可以rsync
以 root 身份執行,甚至不需要輸入密碼。rsync
是一個非常強大的文件操作工具,所以現在rsyncuser
有了一個非常強大的工具來操作具有root權限的文件。找到一種利用它的方法只花了我幾分鐘(在 Ubuntu 13.04 上測試,需要dash
,bash
沒有用):martin@martin ~ % sudo rsync --perms --chmod u+s /bin/dash /bin/rootdash martin@martin ~ % rootdash # whoami root # touch /etc/evil # tail -n1 /etc/shadow dnsmasq:*:15942:0:99999:7:::
如您所見,我為自己創建了一個 root shell;
whoami
將我的帳戶標識為 root,我可以在 中創建文件/etc
,並且可以從/etc/shadow
. 我的利用是在二進製文件上設置setuid位dash
;它使 Linux 始終以所有者的權限執行該二進製文件,在本例中為 root。擁有真正的根不是
$$ recommended $$有充分的理由。– redanimalwar 15 小時前
不,在絕對適合使用 root 帳戶的情況下笨拙地處理它不是有充分理由的。這只是貨物崇拜程式的另一種形式——你並不真正理解 sudo 與 root 背後的概念,你只是盲目地應用“root 是壞的,sudo 是好的”的信念,因為你已經在某個地方讀過。
一方面,在某些情況下
sudo
絕對是適合這項工作的工具。例如,當您在圖形 Linux 桌面上互動工作時,比如說 Ubuntu,那麼sudo
在您有時需要 root 訪問權限的極少數情況下,必須使用就可以了。Ubuntu 故意禁用了 root 帳戶,並強制您sudo
預設使用,以防止使用者總是使用 root 帳戶登錄。當使用者只想使案例如 Web 瀏覽器時,以 root 身份登錄將是一件危險的事情,因此預設情況下沒有 root 帳戶會阻止愚蠢的人這樣做。另一方面,在您的情況下,自動腳本需要對某些內容具有 root 權限,例如進行備份。現在用
sudo
root賬戶來操作不僅沒有意義,而且很危險:乍一看rsyncuser
就像一個普通的非特權賬戶。但正如我已經解釋過的,如果攻擊者已經獲得了訪問權限,那麼他很容易獲得完全的 root 訪問rsyncuser
權限。所以本質上,你現在有一個額外的 root 帳戶,看起來根本不像 root 帳戶,這不是一件好事。