スタッフブログ

  • カテゴリ 技術全般 の最新配信
  • RSS

所有者がrootのファイルを一般ユーザでrsyncする

 : 技術全般 2009/8/10 19:09

Blogger's Avatar

最近、必要に追われてサーバをいじっている時間が増えているgusagiです
今日は、掲題のとおりrsyncに関連した記事を書こうと思います。

複数台のサーバを管理していると、所有者がrootのファイルを別のサーバにrsyncする必要が出てきたりします。
このとき、SSHなどでrootがログイン出来るように設定されているサーバの場合は特に面倒はないのですが、セキュリティの関係などもあってrootがSSHログイン出来る環境は早々ないと思います。

ググってみたところ、こちらのブログのように「同期元のサーバ(以下、元サーバ)から同期先のサーバ(以下、先サーバ)にファイルを送る」形で同期させれば何とかなりそうだったのですが、幾つかの理由から「先サーバから元サーバにファイルを受け取りに来る」形だったので、ちょっとばかり手こずってしまいました。
最終的に、mixiでマイミクの方にアドバイスを頂いたりしながら色々と試したところ、何とか実現出来たので書いてみます。
所有者がrootの /usr/local/etc/pkgtools.conf をrsyncするサンプル

前提条件
  • 元サーバ:from.example.com
  • 先サーバ:to.example.com
  • rsyncを実行するユーザは一般ユーザgusagiとする
  • 一般ユーザgusagiは、元サーバ・先サーバの両方に存在している
  • 一般ユーザgusagiは、パスフレーズ無しのsshログインが設定されている
  • sshd_configの"PermitRootLogin"は、"no"に設定している
  • rsyncに限定して、sudoを許可している


元サーバ:sudoers
gusagi ALL=(ALL) NOPASSWD: /usr/local/bin/rsync

先サーバ:/home/gusagi/rsync.sh
#!/bin/sh

# set PATH
PATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:${PATH}
export PATH

# rsync call with sudo
sudo rsync $*

先サーバ:/home/gusagi/syncer.sh
#!/bin/sh

# set PATH
PATH=/bin:/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:${PATH}
export PATH

# init process
TARGET_HOST="from.example.com"
CURRENT_HOST=`hostname`
RSYNC_SH="/home/gusagi/rsync.sh"

# rsync pkgtools.conf
PKGTOOLS_CONF="/usr/local/etc/pkgtools.conf"
ssh ${TARGET_HOST} rsync -apz --rsync-path="${RSYNC_SH}" \
 -e ssh ${PKGTOOLS_CONF} ${CURRENT_HOST}:${PKGTOOLS_CONF}

上記のファイルを元サーバ・先サーバに保存して、先サーバのgusagiのcrontabにsyncer.shを登録すれば、意図したとおりにpkgtools.confが同期されるはずです。
私の場合、元サーバのイメージをコピーして先サーバを構築することを前提としていたので、syncer.shの最初に「元サーバだったら処理を終了する」という分岐を追加した上で、どちらのファイルも元サーバに保存し、元サーバでcron設定まで行っています。

トラックバック

スタッフブログ最新
カテゴリ一覧

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.