Ubuntu

在沒有root使用者的情況下通過SSH rsync遠端機器的所有文件?

  • April 28, 2021

我有這個命令來備份遠端機器。問題是我需要 root 權限才能讀取和複製所有文件。出於安全原因,我沒有啟用 root 使用者並使用sudoUbuntu 方式。我需要一些很酷的管道或其他東西來做到這一點嗎?

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

無論如何,基本上都提供了rsyncuserroot權限。你問:

@MartinvonWittich 很容易獲得完整的 root shell,因為rsync使用sudo? 走

$$ m $$和$$ through $$那請。

嗯,很簡單。使用推薦的配置,rsyncuser現在可以rsync以 root 身份執行,甚至不需要輸入密碼。rsync是一個非常強大的文件操作工具,所以現在rsyncuser有了一個非常強大的工具來操作具有root權限的文件。找到一種利用它的方法只花了我幾分鐘(在 Ubuntu 13.04 上測試,需要dashbash沒有用):

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. 我的利用是在二進製文件上設置setuiddash;它使 Linux 始終以所有者的權限執行該二進製文件,在本例中為 root。

擁有真正的根不是

$$ recommended $$有充分的理由。– redanimalwar 15 小時前

不,在絕對適合使用 root 帳戶的情況下笨拙地處理它不是有充分理由的。這只是貨物崇拜程式的另一種形式——你並不真正理解 sudo 與 root 背後的概念,你只是盲目地應用“root 是壞的,sudo 是好的”的信念,因為你已經在某個地方讀過。

一方面,在某些情況下sudo絕對是適合這項工作的工具。例如,當您在圖形 Linux 桌面上互動工作時,比如說 Ubuntu,那麼sudo在您有時需要 root 訪問權限的極少數情況下,必須使用就可以了。Ubuntu 故意禁用了 root 帳戶,並強制您sudo預設使用,以防止使用者總是使用 root 帳戶登錄。當使用者只想使案例如 Web 瀏覽器時,以 root 身份登錄將是一件危險的事情,因此預設情況下沒有 root 帳戶會阻止愚蠢的人這樣做。

另一方面,在您的情況下,自動腳本需要對某些內容具有 root 權限,例如進行備份。現在用sudoroot賬戶來操作不僅沒有意義,而且很危險:乍一看rsyncuser就像一個普通的非特權賬戶。但正如我已經解釋過的,如果攻擊者已經獲得了訪問權限,那麼他很容易獲得完全的 root 訪問rsyncuser權限。所以本質上,你現在有一個額外的 root 帳戶,看起來根本不像 root 帳戶,這不是一件好事。

引用自:https://unix.stackexchange.com/questions/92123