web-dev-qa-db-ja.com

rootユーザーなしでSSH経由でリモートマシンのすべてのファイルをrsyncしますか?

リモートマシンをバックアップするこのコマンドがあります。問題は、すべてのファイルを読み取ってコピーするにはroot権限が必要なことです。セキュリティ上の理由でrootユーザーを有効にしておらず、Ubuntuの方法であるSudoを使用しています。これを行うには、クールな配管や何かが必要ですか?

rsync -chavzP --stats [email protected]:/ /media/backupdisk/myserverbackup/
70
redanimalwar

そもそもrootアカウントを使用することをお勧めします。次のように設定した場合:

  • ターゲットマシンのsshd_configPermitRootLogin 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 rsyncSudoで実行されるため、完全なルートシェルを簡単に取得できます。それを歩いてください。

まあ、簡単です。推奨構成により、rsyncuserはパスワードを要求されることなく、ルートとしてrsyncを実行できるようになりました。 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:::

ご覧のとおり、私は自分でルートシェルを作成しました。 whoamiは私のアカウントをrootとして識別し、/etcにファイルを作成でき、/etc/shadowから読み取ることができます。私の悪用は、dashバイナリに setuid ビットを設定することでした。これにより、Linuxは常にそのバイナリを所有者(この場合はroot)の権限で実行します。

本当の根を持つことは、正当な理由で[推奨されません]。 – 15時間前のredanimalwar

いいえ、rootアカウントを使用することが絶対的に適切な状況でrootアカウントを不必要に操作することは、正当な理由ではありません。これは 貨物カルトプログラミングのもう1つの形式です -Sudoとrootの背後にある概念が本当に理解できず、「root is悪い、スドウはいい」.

一方では、Sudoが間違いなく仕事に適したツールである状況があります。たとえば、グラフィカルなLinuxデスクトップでインタラクティブに作業しているときに、Ubuntuとしましょう。まれに、ルートアクセスが必要な場合は、Sudoを使用する必要があります。 Ubuntuは意図的に無効にされたrootアカウントを持ち、デフォルトでSudoを使用するように強制して、ユーザーが常にrootアカウントを使用してログインすることを禁止します。 Webブラウザでrootとしてログインすると危険なため、デフォルトでrootアカウントがないと、愚かな人がこれを実行できなくなります。

一方、バックアップの作成など、自動化されたスクリプトが何かへのroot権限を必要とする場合があります。 Sudoを使用してrootアカウントを回避することは無意味であるだけでなく、危険でもあります。一見すると、rsyncuserは通常の非特権アカウントのように見えます。しかし、すでに説明したように、攻撃者がrsyncuserアクセス権を既に取得している場合、完全なrootアクセス権を取得することは非常に簡単です。つまり、基本的に、ルートアカウントのようには見えない追加のルートアカウントが作成されます。これは良いことではありません。

93

--rsync-pathオプションを使用すると、リモートrsyncコマンドをSudo特権で実行できます。その場合、コマンドは次のようになります。

rsync -chavzP --rsync-path="Sudo rsync" --stats [email protected]:/ .

Sudoでパスワードの入力を求められた場合は、リモートユーザーアカウントでNOPASSWD特権を使用して(rootでは意味がないため、他の使用例では意味があるかもしれません)、またはあなたはそれをしたくない:

  • オプションtty_ticketsは、使用しているユーザーに対して無効になっています。 Sudo visudo -f /etc/sudoers.d/local-rsyncおよび入力:

    Defaults:your.username.for.rsync !tty_tickets
    
  • オプションrequirettyが使用しているユーザーに対して無効になっていることを確認してください-デフォルトではオフになっている可能性があります。方法は上記と同じです。

  • リモートマシンでSudoパスワードをシードします。 ssh -t [email protected] Sudo

75
M_dk

これを行う簡単な方法の1つは、グラフィカルなssh-askpassプログラムをSudoで使用することです。これにより、Sudoが端末に接続されず、パスワードを入力できるようになります。安全に:

rsync -chavzPe 'ssh -X' --stats \
  --rsync-path='Sudo_ASKPASS=/usr/lib/ssh/x11-ssh-askpass Sudo -A rsync' \
  [email protected]:/ .

もちろん、ssh-askpassプログラムを所定の場所にインストールし、作業中のマシンでXセッションを実行している必要があります。動作するssh-askpassプログラムにはいくつかのバリエーションがあります(Gnome/KDEバージョン)。また、Sudogksuのようなグラフィカルなkdesudo置換プログラムも機能するはずです。

17
Graeme

ユーザーがすでにパスワードで保護されているSudo権限を持っている場合は、そのままにして、パスワードなしでrsyncを使用するためのスタンザのみを追加します。

%admin ALL=(ALL) ALL
%admin ALL= NOPASSWD:/usr/bin/rsync 
7

今日この問題に遭遇し、構成ファイルを変更したり、ユーザーアカウントにルートレベルのアクセス許可を付与したりすることなく解決しました。私の特別な設定は、マシンA上のユーザーfooが、fooからマシンbarにすべてのユーザーディレクトリをbackupユーザーAが所有するディレクトリ(ユーザーAfooに対してSudo権限を持っています。)

私が使用したコマンドは以下のとおりです。 A/homeディレクトリにあるユーザーfooによって呼び出されました。

Sudo rsync -avu -e "ssh -i /home/A/.ssh/id_rsa -l A"  * B:/home/backup

これは、rsyncをSudoとして実行するため、foo上のすべてのユーザーディレクトリにアクセスできますが、ユーザーbarの資格情報を使用してsshを使用してマシンAにアクセスするようにrsyncに指示します。私のニーズは上記の質問とは少し異なりましたが、これにより、システムの構成を変更することなく、管理している特定のマシン上のすべてのユーザーディレクトリのバックアップをすばやく取得できました。

5
Ken Anderson

ターゲットマシンでデーモンとしてrsyncを実行すると、必要な操作を実行できます。

3
Konstantin

私の解決策は--rsync-path="Sudo rsync"ですが、パスワードを求められます。回避策:

rsync -chavzP --stats --rsync-path="echo <SUDOPASS> | Sudo -Sv && Sudo rsync"  [email protected]:/ .
2
Bulat