リモートマシンをバックアップするこのコマンドがあります。問題は、すべてのファイルを読み取ってコピーするにはroot権限が必要なことです。セキュリティ上の理由でrootユーザーを有効にしておらず、Ubuntuの方法であるSudo
を使用しています。これを行うには、クールな配管や何かが必要ですか?
rsync -chavzP --stats [email protected]:/ /media/backupdisk/myserverbackup/
そもそも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権限を付与します。あなたが尋ねる:
@MartinvonWittich
rsync
はSudo
で実行されるため、完全なルートシェルを簡単に取得できます。それを歩いてください。
まあ、簡単です。推奨構成により、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アクセス権を取得することは非常に簡単です。つまり、基本的に、ルートアカウントのようには見えない追加のルートアカウントが作成されます。これは良いことではありません。
--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
これを行う簡単な方法の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バージョン)。また、Sudo
やgksu
のようなグラフィカルなkdesudo
置換プログラムも機能するはずです。
ユーザーがすでにパスワードで保護されているSudo権限を持っている場合は、そのままにして、パスワードなしでrsyncを使用するためのスタンザのみを追加します。
%admin ALL=(ALL) ALL
%admin ALL= NOPASSWD:/usr/bin/rsync
今日この問題に遭遇し、構成ファイルを変更したり、ユーザーアカウントにルートレベルのアクセス許可を付与したりすることなく解決しました。私の特別な設定は、マシンA
上のユーザーfoo
が、foo
からマシンbar
にすべてのユーザーディレクトリをbackup
ユーザーA
が所有するディレクトリ(ユーザーA
はfoo
に対して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に指示します。私のニーズは上記の質問とは少し異なりましたが、これにより、システムの構成を変更することなく、管理している特定のマシン上のすべてのユーザーディレクトリのバックアップをすばやく取得できました。
ターゲットマシンでデーモンとしてrsyncを実行すると、必要な操作を実行できます。
私の解決策は--rsync-path="Sudo rsync"
ですが、パスワードを求められます。回避策:
rsync -chavzP --stats --rsync-path="echo <SUDOPASS> | Sudo -Sv && Sudo rsync" [email protected]:/ .