回答:
そもそもルートアカウントを使用することをお勧めします。このように設定した場合:
sshd_configターゲットマシンでをに設定しますPermitRootLogin without-password。ssh-keygenバックアップを取得するマシンで使用して、SSH秘密鍵を作成します(SSH鍵がまだない場合のみ)。パスフレーズを設定しないでください。この詳細が必要な場合は、Googleでチュートリアルを作成してください。/root/.ssh/id_rsa.pubバックアップマシンのコンテンツを/root/.ssh/authorized_keysターゲットマシンのコンテンツに追加します。その結果、セットアップはかなり安全になります。
sudo、特にNOPASSWDコメントで推奨されているように組み合わせると、ルートアカウントを使用するだけではセキュリティ上の利点はありません。たとえば、この提案:
/etc/sudoersファイルに次を追加します。rsyncuser ALL= NOPASSWD:/usr/bin/rsync
rsyncuserとにかく基本的にルート権限を付与します。あなたが尋ねる:
@MartinvonWittichで
rsync実行されるため、完全なルートシェルを簡単に取得できsudoます。お願いします[m] e [through]
まあ、簡単です。推奨構成でrsyncuserはrsync、パスワードを要求されることなく、rootとして実行できるようになりました。rsyncは、ファイルを操作するための非常に強力なツールであるため、現在rsyncuser、ルート権限でファイルを操作するための非常に強力なツールがあります。これを悪用する方法を見つけるのにほんの数分しかかかりませんでした(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アカウントをルートとして識別し、でファイルを作成でき、/etcから読み取ることができます/etc/shadow。私の悪用は、バイナリにsetuidビットを設定することでしたdash。これにより、Linuxは常に所有者(この場合はroot)の許可でそのバイナリを実行します。
正当な理由により、実際のルートを持つことは推奨されません。– redanimalwar 15時間前
いいえ、それを使用することが絶対に適切な状況でrootアカウントを不器用に操作するのは、正当な理由ではありません。これは貨物カルトプログラミングのもう1つの形式です。sudoとrootの背後にある概念を本当に理解していないので、「rootは悪い、sudoは良い」という信念を盲目的に適用します。
一方でsudo、仕事に間違いなく適切なツールである状況があります。たとえば、グラフィカルなLinuxデスクトップでインタラクティブに作業している場合、Ubuntuを使用するsudoと、ルートアクセスが必要なまれなケースで使用する必要があります。Ubuntuは意図的に無効化されたルートアカウントを持ち、sudoユーザーがログインするために常にルートアカウントを使用することを防ぐためにデフォルトで使用することを強制します。 、したがって、デフォルトでルートアカウントを持っていないため、愚かな人々はこれを行うことができません。
一方、あなたのような状況では、自動化されたスクリプトが何かに対するルート権限を必要とする場合があります。たとえば、バックアップを作成する場合です。sudoルートアカウントを回避するために使用することは無意味であるだけでなく、危険でもありrsyncuserます。一見すると、通常の特権のないアカウントのように見えます。しかし、既に説明したように、攻撃者が既にrsyncuserアクセスを取得していれば、完全なルートアクセスを取得することは非常に簡単です。したがって、基本的に、ルートアカウントのように見えない追加のルートアカウントがありますが、これは良いことではありません。
/root/.ssh/authorized_keysので、各ユーザーが自分の殻、家と持つことができますさまざまな家庭を持つ複数のルートアカウントを作成しても、あるいは.ssh/authorized_keys:)
sshd通常、アカウントへの接続に使用された認証キーは記録されないため、そのように接続するとbob、のキーで直接sudo接続する場合よりも優れた監査証跡が得られます。rootbob
--rsync-pathオプションを使用して、リモートrsyncコマンドをsudo特権で実行します。コマンドは次のようになります。
rsync -chavzP --rsync-path="sudo rsync" --stats user@192.168.1.2:/ .
sudoパスワードの入力を求められた場合はNOPASSWD、リモートユーザーアカウントで特権を使用することで(rootには無意味で、他のユースケースでは意味があるかもしれません)、またはそれを行いたくない場合は、それを回避する必要があります:
tty_ticketseg sudo visudo -f /etc/sudoers.d/local-rsync
を実行し、次のように入力して、使用しているユーザーのオプションが無効になっていることを確認します。
Defaults:your.username.for.rsync !tty_tickets
requiretty使用しているユーザーのオプションが無効になっていることを確認してください-デフォルトでオフになっている可能性があります。方法は上記と同じです。
sudoたとえば、次のコマンドを実行して、リモートマシンのパスワードをシードします。
ssh -t user@192.168.1.2 sudo
sudoパスワードではなく、sshパスワード
sudo /usr/bin/rsyncはパスフレーズを要求せずに次のことができます。man sudoersこれを行う方法を確認してください。このために追加のバックアップユーザーを作成することをお勧めします。
sudo /usr/bin/rsyncパスワードとして要求せずに実行できるよう にするには、/etc/sudoersファイルに次を追加します。rsyncuser ALL= NOPASSWD:/usr/bin/rsyncこれにより、ユーザーrsyncuser(上記のように専用のバックアップユーザーを作成することをお勧めします)に必要なユーザー名を追加できます。
rsync基本的に常にルート権限が付与されます。そのアカウントで完全なルートシェルを取得するのはおそらく非常に簡単です。そもそも実際のルートアカウントを使用する方が良いと思います。
echo "password" | something私が実際にこれを使用したことは決してなく、rsyncのsudoless実行(これもここでは推奨されていません)を許可することで生じるセキュリティ問題に同意するという答えは決して悪いことではありません。何をtty_tickets私は実際には考えているん、必要なようで、セキュリティ上の問題。これは、sshでsodoを実行してからコマンドを実行するだけで、何も微調整することなく安全に動作しますか?しかし、スクリッピングの目的でその質問をしたので、pwなしのキーベースのsshが安全であり、正しいことであることに完全に同意します。代わりに、マーティンズの回答を受け入れました。
これを行う簡単な方法の1つは、でグラフィカルssh-askpassプログラムを使用することです。これにより、ターミナルに接続されていないsudoという事実を回避しsudo、パスワードを安全に入力できます。
rsync -chavzPe 'ssh -X' --stats \
--rsync-path='SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A rsync' \
user@192.168.1.2:/ .
もちろん、ssh-askpassプログラムは指定された場所にインストールする必要があり、作業中のマシンでXセッションを実行する必要があります。ssh-askpass動作するはずのプログラムにはいくつかのバリエーションがあります(Gnome / KDEバージョン)。また、グラフィカルなsudo交換プログラムのようなgksuまたはkdesudoも動作するはずです。
rsync --rsh='ssh -X' --rsync-path='gksudo -- rsync' user@host:/ .動作しません。 rsync error: syntax or usage error (code 1) at main.c(1634) [server=3.1.1]。ああ、ubuntuはgnome-ssh-askpassを出荷しますが/usr/bin/ssh-askpass、ではなく、/usr/lib/ssh/x11...です。だからそれは働いた:)
ssh-askpassます。私は、の意味を調べなければならなかったので、-chavzPeこれらを長いオプションとして説明するのは素晴らしいことです。
xeyesSSH を使用して実行することで確認しました。
ユーザーがすでにパスワードで保護されているsudo特権を持っている場合、私はそれらをそのままにして、パスワードなしでrsyncを使用するためのスタンザを追加するだけです。
%admin ALL=(ALL) ALL
%admin ALL= NOPASSWD:/usr/bin/rsync
今日、この問題に遭遇し、構成ファイルを変更したり、ユーザーアカウントにルートレベルのアクセス許可を付与したりすることなく解決しました。私の特定のセットアップでは、Aマシン上fooのユーザーは、ユーザーが所有するディレクトリ内のすべてのユーザーディレクトリfooをマシンbarにコピーbackupする必要Aがありました。(ユーザーにAはsudo特権がありfooます。)
使用したコマンドは次のとおりです。上Aの/homeディレクトリでユーザーによって呼び出されましたfoo。
sudo rsync -avu -e "ssh -i /home/A/.ssh/id_rsa -l A" * B:/home/backup
これにより、rsyncがsudoとして実行され、すべてのユーザーディレクトリにfooアクセスできますが、barユーザーAの資格情報を使用してsshを使用してマシンにアクセスするようにrsyncに指示します。私のニーズは上記の質問とは少し異なりましたが、これにより、システムの構成に手を加えることなく、管理している特定のマシンのすべてのユーザーディレクトリのバックアップをすばやく取得できました。
-iオプションを忘れましたssh。--rsync-path="sudo /usr/bin/rsync" machineにsudoがある場合に使用できますbar。次に、asの読み取りとasのroot@foo書き込みをroot@bar行いますが、A@foo-> を介して転送しB@barます。ありがとう!
私の解決策は使用--rsync-path="sudo rsync"することですが、パスワードを要求します、回避策:
rsync -chavzP --stats --rsync-path="echo <SUDOPASS> | sudo -Sv && sudo rsync" user@192.168.1.2:/ .
$( cat my_password.txt )わずかに良いものに置き換えることがありますが、通常は、CLIでパスワードが不要になるように、どちらかの側でアクセス許可を構成するか、SSHキーを使用することをお勧めします
rootそもそもアカウントを使用するだけです。sudo、特にNOPASSWDコメントで推奨されているように組み合わせても、マシンのセキュリティは実際には向上しません。