iOSのアプリ、PhotoSync なのだけど、色々と便利に使っている今日この頃、さらになんかできないかと設定を見ていてふと思った。
FTPサーバーにも接続できるみたいだし、オートトランスファー機能を使って半無限処理を実行してみようと思い立った。
PhotoSyncの細かい設定は今回は省くが、FTPサーバーとの通信設定とオートトランスファーの設定をしてしまえばWi-Fiに接続されて、特定の位置付近になれば自動的にサーバーにアップロードされる仕組み。
Wi-Fi接続ということで自宅のNASには宅内ということもあり、一番平易なFTP接続を行った。
これに関しては特筆すべきものは無いので割愛。
問題は、VPSの方。
本来はこんな用途には専用に用意するか、DropboxやOneDriveなどのクラウドストレージを用意すればいいのだと思うのだけれど、VPSが思ったより容量が余っているので、そこにテストとして組み込んでみることにした。
FTPは、SFTP接続にしてセキュアな環境を保ち、chroot環境にしてホームディレクトリ以下は見れないようにした。
本当はシェルログインも殺してしまいたかったのだけれど、どうも上手くPhotoSyncが作動してくれなかったので、殺せなかった。
共有鍵ログインも行いたかったのだけれど、これは上手く動いたり動かなかったりと不安定だったため、不本意ながらパスワードログインにした。
というわけで、本題。
まずは、サーバーへのユーザー作成なのだが、chroot 環境を構築するので通常の useradd ではなく、カスタムしたスクリプトを使用する。
使用するスクリプトはCentOSで自宅サーバー構築で公開されている、opensshのchrootユーザー作成を参考にさせていただいた。
なお、現在のCentOS 6.5では標準でchroot環境が使えるため、手動でopensslパッケージをインストールする必要は無くなっている。
また、64bit版のCentOSを使うと、こちらで公開されている chroot-useradd スクリプトを若干変更する必要があったので、記述しておく。
#!/bin/bash
#
# Usage: ./chroot-useradd username [shell]
#
# Here specify the apps you want into the enviroment
CMD="bash ls touch mkdir cp mv rm pwd chmod cat vi id rsync ssh scp sftp ping ssh-keygen perl"
APPS=`which $CMD`
APPS="${APPS} /usr/libexec/openssh/sftp-server"
# Sanity check
if [ "$1" = "" ] ; then
echo " Usage: ./chroot-useradd username [shell]"
exit 1
fi
# Obtain username and HomeDir
CHROOT_USERNAME=$1
if [ "$2" = "" ] ; then
useradd $CHROOT_USERNAME
else
useradd -s $2 $CHROOT_USERNAME
fi
chown root:root /home/$CHROOT_USERNAME
chmod 755 /home/$CHROOT_USERNAME
usermod -d /home/$CHROOT_USERNAME/./ $CHROOT_USERNAME
passwd $CHROOT_USERNAME
rm -f /home/$CHROOT_USERNAME/.* > /dev/null 2>&1
cd /home/$CHROOT_USERNAME/./
# Create Directories no one will do it for you
mkdir -p etc
mkdir -p bin
mkdir -p usr/bin
mkdir -p usr/local/bin
mkdir -p usr/libexec/openssh
MAKEDEV -d dev -x null zero
# Create short version to /usr/bin/groups
# On some system it requires /bin/sh, which is generally unnessesary in a chroot cage
echo "#!/bin/bash" > usr/bin/groups
echo "id -Gn" >> usr/bin/groups
chmod 755 usr/bin/groups
# Add some users to ./etc/paswd
grep /etc/passwd -e "^root" -e "^$CHROOT_USERNAME" > etc/passwd
grep /etc/group -e "^root" -e "^$CHROOT_USERNAME" > etc/group
# Copy the apps and the related libs
for prog in $APPS;
do
cp $prog ./$prog
# obtain a list of related libraryes
ldd $prog > /dev/null
if [ "$?" = 0 ] ; then
LIBS=`ldd $prog | awk '{ print $3 }'`
for l in $LIBS;
do
mkdir -p ./`dirname $l` > /dev/null 2>&1
cp $l ./$l > /dev/null 2>&1
done
fi
done
# ※ 以下64bit版の変更箇所
# From some strange reason these 4 libraries are not in the ldd output, but without them
# some stuff will not work, like usr/bin/groups
cp /lib64/libnss_compat.so.2 lib64/
cp /lib64/libnsl.so.1 lib64/
cp /lib64/libnss_files.so.2 lib64/
# ※ 以下の行注意!!
cp /lib64/ld-linux-x86-64.so.2 lib64/
cp /lib64/libc.so.6 lib64/
cp /lib64/libm.so.6 lib64/
cp /lib64/libpthread.so.0 lib64/
cp /lib64/librt.so.1 lib64/
cp /lib64/libthread_db.so.1 lib64/
exit 0
sshd の設定ファイルを変更に際して制限するグループを作成して、sshd_config にChroot 環境になるように、パスワード認証が使えるように書き足す。
vi /etc/ssh/sshd_config
Match Group chrootonly ChrootDirectory /home/%u/./ PasswordAuthentication yes
service sshd restart
ユーザー作成例:
/root/bin/chroot-useradd testuser passwd testuser groupadd chrootupser chmod -G chrootuser testuser
testuser でログインして chroot 環境が正確に実行できるか確認する。
ssh testuser@localhost
PhotoSync用にuploadディレクトリを作成する
chrootしたユーザーはホームディレクトリにディレクトリ作成権限が無いため。
mkdir /home/testuser/upload chown -R testuser:testuser /home/testuser/upload
PhotoSyncの設定
- 転送先の選択(Transfer Targets)
- Configure
- Target
- FTP
Add new configurationを選択
- FTP/SFTP Settings
先ほど作成したユーザーを設定する。
以上でざっくりとPhotoSyncの初期設定まで完了したはずである。
PhotoSyncアプリはこちら
最近のコメント