回答:
そもそもルートアカウントを使用することをお勧めします。このように設定した場合:
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
接続する場合よりも優れた監査証跡が得られます。root
bob
--rsync-path
オプションを使用して、リモートrsync
コマンドをsudo
特権で実行します。コマンドは次のようになります。
rsync -chavzP --rsync-path="sudo rsync" --stats user@192.168.1.2:/ .
sudo
パスワードの入力を求められた場合はNOPASSWD
、リモートユーザーアカウントで特権を使用することで(rootには無意味で、他のユースケースでは意味があるかもしれません)、またはそれを行いたくない場合は、それを回避する必要があります:
tty_tickets
eg 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
これらを長いオプションとして説明するのは素晴らしいことです。
xeyes
SSH を使用して実行することで確認しました。
ユーザーがすでにパスワードで保護されている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
コメントで推奨されているように組み合わせても、マシンのセキュリティは実際には向上しません。