lsyncdを使って、ファイル同期(rsync)したい時に、同期先でsudoしたい場合があります!(ownerを同期元と合わせたいとか)
そういう時に、rootじゃなく一般ユーザーでsudoを使って、実現する方法です!
lsyncd使う手順はいくつか見つかるし、
「セキュリティのために、一般ユーザーでsudoやるといいよ!」って書いてある割にはやり方が書いてない!ってことで。
自分のメモ用に残しておこうと思います!
もくじ
前提条件
- OSはAmazon Linux(たぶんほかのLinuxでも大丈夫かと)
- EPELリポジトリを利用(lsyncd インストールのため)
- sudo使う
- sshは「パスフレーズなし」
手順
- rsyncのインストール
- 「パスフレーズなし」のssh-keyを作る
- ssh pubkeyの配置
- (同期先) sudo の設定
- (同期元のみ) lsyncdのインストール(EPEL)
- (同期元のみ) lsyncdの設定
rsyncのインストール
本当はAnsibleでやっているんだけど、とりあえず手順rsyncが必要なので、入れます!
sudo yum install rsync
「パスフレーズなし」のssh-keyを作る
- キーペアを作成
ssh-keygen -b 2048
- ログ
Generating public/private rsa key pair. Enter file in which to save the key (/home/snicker_jp/.ssh/id_rsa): ./rsync.pem Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ./rsync.pem. Your public key has been saved in ./rsync.pem.pub. The key fingerprint is: 07:84:a5:90:cb:ea:81:d4:2e:02:7e:9b:XX:XX:XX:XX snicker_jp@localhost The key's randomart image is: +--[ RSA 2048]----+ | .. oo | | ...o | | o. .. . | |.E .o . | |+.+. S . | |o+oo . | |..+.* | | .= o | | . | +-----------------+
ssh pubkeyの配置
- 公開鍵の配置
ssh-copy-id -i ./rsync.pem.pub user@remote_host
(同期先)sudo の設定
- 同期先でsudoが使えるようにします!(今回はrsyncユーザーを使いました)
(参考設定)
Defaults:rsync !requiretty rsync ALL= NOPASSWD:/usr/bin/rsync
(同期元のみ) lsyncdのインストール(EPEL)
- EPELのリポジトリを使ってインストール
sudo yum install lsyncd --enablerepo=epel※ epelのリポジトリ、なければ設定しておいてくださいね!
(同期元のみ) lsyncdの設定
- /etc/lsyncd.conf (今回のキモ!)
(参考設定)
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd-status.log", statusInterval = 20 } sync { default.rsync, delay = 0, source="/var/www/html", target="rsync@192.168.100.100:/var/www/html/", rsync = { archive = true, rsync_path = "sudo /usr/bin/rsync", rsh = "ssh -i /home/rsync/.ssh/rsync.pem -o StrictHostKeyChecking=no" } }
ここの部分がキモですかね!
rsync_path = "sudo /usr/bin/rsync",rsyncをよくわかっている方なら、すぐできたんでしょうが。。。
よく知らなかったものでw
まとめ
- rsync_pathオプションが要です!
- lsyncdで、rsyncするときに「root」を使わなくてよくなりました!
- これで、パーミッション揃えられます!!(^o^)