【问题标题】:Is it possible to run RSYNC as root on a remote server while connecting with a different user?与其他用户连接时,是否可以在远程服务器上以 root 身份运行 RSYNC?
【发布时间】:2021-09-02 19:50:26
【问题描述】:

我想将我的服务器日志 (/var/log/httpd/) 备份到我家的本地磁盘。问题是日志目录由专门无法通过 SSH 连接到机器的帐户拥有。

我可以使用我的常规帐户通过 SSH 连接到远程计算机,然后我可以 sudo 访问这些日志文件。有没有一种方法可以让我在我的家用计算机上运行 RSYNC,但让它以 root 身份运行,以便它具有访问这些日志文件并将它们发回给我所需的权限?

一个典型的例子(在我家的本地机器上运行):

rsync -avz [user]@[server]:/var/log/httpd/* ./logs

显然,如果 [user] 的帐户有权访问 /var/log/httpd/,这将起作用,但它没有(而且我宁愿不授予该帐户权限)。

所以我想知道是否可以在 RSYNC 请求的中间注入一些其他命令,即使登录是通过 [user] 进行的,最终也会强制远程用户以 root 身份操作?

我还应该注意,我不想倒退。换句话说,我意识到我可以登录远程机器,切换到 root,然后以另一种方式运行 RSYNC。问题是出于各种原因,我不想将家用机器配置为接受远程登录。所以我只想把文件拉下来,而不是把它们发上来,可以这么说。

提前致谢!

【问题讨论】:

  • 您不能将日志文件复制到您有权访问和拥有的目录中吗?
  • 我绝对可以做到,是的。我只是希望能够完全从我的本地端自动化这个过程,而不必影响远程服务器。如果绝对不可能,那么是的,在远程服务器上设置一个脚本,将它们移动到我拥有的目录中肯定会解决这个问题。由于 RSYNC 将保留文件,一旦它们从该临时位置删除,我仍然会拥有它们。我只是想也许有一种方法可以实现目标,而无需创建中间步骤。

标签: logging server root rsync


【解决方案1】:

你有两种方法来实现你想要的。

第一个:在远程主机上使用 rsyncd 并添加配置文件(/etc/rsyncd.conf):

[httpd_logs]
uid=0
gid=0
read only = yes
path = /var/log/httpd/

保存更改并启动 rsyncd。 然后,在本地机器上运行:

rsync -avz remote_server::httpd_logs/* ./logs

第二个:基于我在 stackoverflow 和此类门户网站上找到的答案

创建帮助文件:

cat > ssh_sudo << 'EOF'
{
  echo $sudoPWD;
  cat - ;
} | ssh -A $* &
EOF
chmod u+x ssh_sudo

然后和rsync一起使用:

read -s -p "Sudo password: " sudoPWD; rsync -aAHe ./ssh_sudo --rsync-path "sudo -S 2&gt; /dev/null rsync" remote_norootuser@remote_host:/var/log/httpd/* ./logs/

当然,“remote_norootuser”必须对“remote_host”有sudo权限。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-27
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多