Rsyncを使用して、ローカルマシンのバックアップフォルダを毎日別のマシンにコピーしようとしています(データの損失や誤った削除の場合)。これはcronジョブとして実行されます。
私はただの命令
rsync -av --rsh='ssh -p90' --delete /backup/ [email protected]:~/dabackup/
サーバー1のroot
アカウントから(tent
)。
ただし、最初のサーバーでは、各サブディレクトリの権限が設定されているため、rootでなければ(フォルダーに対する実行権限はありません)、サブディレクトリにアクセスできません。これは、バックアップソフトウェアであるため、簡単に変更できません。動作します。
つまり、2番目のサーバー(mydomain.com
)では、アカウントtentbackup
に、rsyncが作成しているフォルダーに移動する権限がないため、次のエラーが発生します。
root@tent:~$ rsync -av --rsh='ssh -p92' --delete /backup/ [email protected]:~/dabackup/
building file list ... done
03-05-11/Apache/
rsync: recv_generator: mkdir "/home/tentbackup/dabackup/03-05-11/Apache" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
03-05-11/bind/
rsync: recv_generator: mkdir "/home/tentbackup/dabackup/03-05-11/bind" failed: Permission denied (13)
*** Skipping any contents from this failed directory ***
03-05-11/custom/
rsync: recv_generator: mkdir "/home/tentbackup/dabackup/03-05-11/custom" failed: Permission denied (13)
etc...
[email protected]
(server two
)を使用してこの問題を回避することはできますが、明らかにserver one
(tent
)に保存されているrootアカウントのsshキーは必要ありません。
どうすれば安全にこれらのサブフォルダーとファイルを作成するためのrsync
権限を許可しますか?
Tentbackupとしてサーバー2に直接ログインした場合でも、ディレクトリに移動したり、ディレクトリ内にファイルを作成したりすることはできません。
tentbackup@brave:~/dabackup$ cd 03-20-11/
bash: cd: 03-20-11/: Permission denied
tentbackup@brave:~/dabackup$ mkdir 03-20-11/test -p
mkdir: cannot create directory `03-20-11': Permission denied
tentbackup@brave:~/dabackup$ touch 03-20-11/test
touch: cannot touch `03-20-11/test': Permission denied
これを行う正しい方法は(アクセス許可が変更されるため、これらが重要な場合はバックアップから復元することはできませんが)、rsyncコマンドに次を追加することです。
--no-p --no-g --chmod=ugo=rwX
どこ
--no-p
権限のコピーを無効にします
--no-g
グループのコピーを無効にし、
--chmod=ugo=rwX
は、すべての非マスクビットが有効になることを保証します
設定された権限によって特に禁止されていることを実行しようとしています。設定した権限を変更するか、プログラムに特別な権限を与える必要があります。 1つの修正は、ディレクトリのアクセス許可を修正するサーバーでcron
ジョブを作成することです。または、root
スクリプトからのコマンドを待機し、ディレクトリの権限を修正するssh
として実行されるプログラムを使用することもできます。
これを行うには、rsyncから-aフラグを削除し、代わりに必要なフラグを使用します。論理的には、これをrootとして実行したくない構成から、宛先側のアクセス許可を無視する必要があることを意味します。 rsyncコマンドに-pを含めないようにしてください。そうすれば、ファイルをroot @serveroneからuser @ servertwoに安全にコピーでき、dirなどを作成できるはずです。アクセス許可ツリーはバックアップから復元する必要がある場合、servertwoにあります。修正するスクリプトを書くのはかなり簡単です。
そうでない場合は、servertwoでファイルを作成および管理するための特別なアクセス権を取得する必要があります。これは、rsyncd.confを設定し、デーモンモードでrsyncを使用して、2つのホスト間でsshを許可する必要がないようにすることで実現できます(おそらく他のユーザーがホストにアクセスできるので、十分に安全ではない可能性があるかどうかという質問)。