我应该为 rsync 启用 root 帐户吗?

Oli*_*nde 10 rsync user-management

如何启用 root 帐户?我知道通常不推荐这样做,但我想设置一个非交互式脚本来使用 rsync 备份我的服务器。我可以使用,--rsync-path="sudo rsync"但随后我需要将我的 sudo 密码以明文形式存储,这似乎比启用 root 帐户要糟糕得多。

sla*_*den 10

  1. mybackup在客户端和服务器上创建新的独立用户帐户
  2. 锁定sudo passwd -l mybackup这些帐户的密码以防止直接登录
  3. 允许通过sudo,这些新帐户来运行一个非常具体的/usr/bin/rsync/ --some-long-command /from/here /to/there命令,作为根与NOPASSWD:/etc/sudoers使用sudo visudo
  4. 使用以下命令为本地到远程主机创建新的无密码 SSH 密钥 sudo -u mybackup ssh-keygen
  5. 添加到sudo -u crontab -e一端或另一端以运行远程rsync使用ssh和密钥作为传输

这样,唯一可以以 root 身份运行的命令是您明确允许的命令,唯一可以激活它的远程用户是已安装 ssh 密钥对的另一半的持有者,因为它也有密码锁定只能是具有 sudo 访问权限的人,或者您设置的 crontab。

  • +1 表示“一个非常具体的......命令”。否则,授予用户运行 `sudo rsync` 的权限并允许用户选择传递给 rsync 的选项意味着用户可以使用 rsync 读取/写入 `/etc/sudoers` 文件,例如,并授予自己完整权限须藤访问。 (2认同)

Oli*_*Oli 7

  1. 您可以编辑/etc/sudoers以允许任何正在运行命令的用户(或所有用户)在root没有密码的情况下运行它(使用 rsync 可能有点危险)。

  2. 你不能只运行整个命令/脚本/随便什么root?我假设这将通过 cron 运行,因此只需root通过以下方式添加作业:

    sudo crontab -e
    
    Run Code Online (Sandbox Code Playgroud)

    注意:您可以通过将 cron 命令包装在bash -e "..."大括号中或仅在单独的脚本中执行来执行相当复杂的操作。假设它不是 setuid'd,如果root运行它(通过cron),它将运行,root这样应该可以解决您的权限问题。


Fra*_*ank 6

你可以(但不应该)给 root 用户一个密码

sudo passwd root
Run Code Online (Sandbox Code Playgroud)

编辑:Setuid 位不适用于脚本。否则,您可以在备份程序上使用 setuid 位。

sudo chown root backup
sudo chmod u+s backup
Run Code Online (Sandbox Code Playgroud)

也许,您甚至想将备份作为 cron 作业运行?