rsync を ssh 経由でバックアップなどに用いたりすることは良くあるけど、それだけの為に Linux ユーザーを作成してシェルを与えるのは嫌な場合が多い。そんな時は、 ssh の PubkeyAuthentication と組み合わせて、特定のユーザーは rsync のみを実行できるように制限する事ができる。その設定をした時のメモ。
ちにみにここで紹介する方法は、 su などでそのユーザーになったり、 ssh の PasswordAuthentication が有効になっていてパスワードでログインできたりする場合は意味がなくなるので注意。
まずリモートサーバー上でユーザーを作成する際は普通にシェルを与える。 useradd の場合は
# useradd -s /bin/bash ... user_name
もし既存のユーザーを使用するなら
# usermod -s /bin/bash user_name
次に必要な rsync をとりあえず実行してみる。この際の ssh コマンドに -v を付けて、詳細なメッセージも表示するようにする。
$ rsync -avz -e'ssh -v' rsyncuser@www.enjoitech.com:/target/to/backup ./ OpenSSH_xxx, OpenSSL xxx debug1: Reading configuration data xxx ... snip ... debug1: Sending command: rsync --server --sender -vlogDtprz . /target/to/backup ...
この結果の中の Sending command: の行に注目して、これをリモートサーバー側の rsync 用ユーザーの authorized_keys の中に追加してやる。
$ vi .ssh/authorized_keys command="rsync --server --sender -vlogDtprz . /target/to/backup" ssh-rsa AAAAB3Nza ... key ... pWrlObAdjzB8= ma@milk
これで終了。
ここまでできたら該当のユーザーに ssh で接続して、シェルが返ってこない事を確認。そして rsync はしっかり動く事も確認する。