リモートコンピュータをバックアップするには、このコマンドがあります。問題は、すべてのファイルを読み取り、コピーするにはrootアクセス権が必要であることです。セキュリティ上の理由から、ルートを有効にせずにsudo
Ubuntu方式を使用しました。これを行うには、素晴らしいパイプや他のものが必要ですか?
rsync -chavzP --stats [email protected]:/ /media/backupdisk/myserverbackup/
答え1
まず、rootアカウントを使用することをお勧めします。次のように設定すると:
sshd_config
ターゲットコンピュータの構成をPermitRootLogin without-password
。- バックアップが抽出されたコンピュータから
ssh-keygen
SSH秘密鍵を生成するために使用します(まだSSH鍵がない場合のみ)。パスワードを設定しないでください。これに関する詳細情報が必要な場合は、Googleチュートリアルがたくさんあります。 /root/.ssh/id_rsa.pub
バックアップコンピュータの内容を/root/.ssh/authorized_keys
ターゲットコンピュータの内容に追加します。- これで、バックアップマシンは、パスワード認証を使用せずにターゲットマシンへのルートアクセス権を持つことができます。
これにより、最終設定が非常に安全になります。
sudo
特にNOPASSWD
注釈で提案されているものと組み合わせて、rootアカウントを使用するよりもセキュリティ上の利点はありません。たとえば、次の提案があります。
ファイルに以下を追加します
/etc/sudoers
。rsyncuser ALL= NOPASSWD:/usr/bin/rsync
とにかく、デフォルトでrsyncuser
rootアクセスを許可します。尋ねる:
rsync
@MartinvonWittich ?を使用してフルルートシェルを取得するのは簡単ですsudo
。 go[m]e[through]してください。
まあ、簡単です。推奨設定では、パスワードを入力しなくてもrsyncuser
ルートとして実行できるようになりました。ファイルを操作する非常に強力なツールなので、ルート権限でファイルを操作できる非常に強力なツールがあります。この問題を悪用する方法を見つけるには数分しかかかりませんでした(Ubuntu 13.04でテストされており、必須ですが成功しませんでした)。rsync
rsync
rsyncuser
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
バイナリビットLinuxは常に所有者(この場合はroot)の権限でバイナリを実行します。
実際の根を持つことは妥当な理由のために推奨されません。 – redanimalwar 15時間前
いいえ、rootアカウントが絶対に適切な場合は、不器用に解決する理由はありません。それは別の形に過ぎません。貨物崇拝プログラミング- あなたは実際にはsudoとrootの概念を理解しておらず、どこかで読んだので、「ルートは悪く、sudoは良い」という信念を盲目的に適用しています。
一方では、それがsudo
確かに作業に適したツールである状況があります。たとえば、グラフィカルLinuxデスクトップ(Ubuntuなど)でインタラクティブに作業するときに、rootアクセスが必要なまれなsudo
場合に使用することをお勧めします。 Ubuntuは、sudo
ユーザーが常にrootアカウントにログインするのを防ぐために、rootアカウントを意図的に無効にし、デフォルトでそれを使用するように強制します。 rootとしてログインすることは、ユーザーがWebブラウザのみを使用したい場合には危険です。
一方、あなたのような場合には、自動化スクリプトにバックアップを実行するなどの操作へのルートアクセスが必要です。sudo
問題を解決するためにルートアカウントを使用することは意味がないだけでなく、危険です。rsyncuser
一見すると、権限のない一般アカウントのように見えます。ただし、すでに説明したように、攻撃者がすでにアクセス権を持っている場合は、完全なルートアクセス権を簡単に取得できますrsyncuser
。したがって、本質的にルートアカウントのように見えない追加のルートアカウントがありましたが、これは良いことではありません。
答え2
リモートコマンドが特権で実行される--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
答え3
簡単な方法は、次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バージョン)。または、または同じグラフィック交換プログラムがsudo
機能する必要があります。gksu
kdesudo
答え4
今日この問題は、構成ファイルを変更したり、ユーザーアカウントにrootレベルの権限を付与したりせずに解決しました。私の特別な設定は、A
コンピュータのユーザーがfoo
自分が所有しているディレクトリのすべてのユーザーディレクトリをfoo
コンピュータにコピーする必要があることです。 (ユーザーにsudo権限があります。)bar
backup
A
A
foo
私が使用するコマンドは次のとおりです。A
ディレクトリのユーザーが呼び出します。/home
foo
sudo rsync -avu -e "ssh -i /home/A/.ssh/id_rsa -l A" * B:/home/backup
これはすべてのユーザーディレクトリにアクセスできるようにrsyncをsudoとして実行しますが、rsyncにユーザーの資格情報を使用foo
してシステムにアクセスするにはsshを使用するように指示します。私の要件は上記の質問とは少し異なりますが、これにより、システム構成を損なうことなく、管理している特定のコンピュータのすべてのユーザーディレクトリをすばやくバックアップできます。bar
A