SFTPユーザーを追加する S(・∀・)F人T(・∀・)P


8回目の投稿となります。
NHN JAPANの遠藤と申します。

2018.4月からNHN テコラスから転籍しましたが、勤務地も変わらず所属会社が変わっただけな感じで、継続してKUSANAGIを搭載したホスティングサービスのサポートや企画などを担当しています(*ノノ)
※サービスも会社毎承継しています

ここに掲載しているコラム(記事)も大半はお客様から頂戴したお問い合わせを基としておりますが、今回もお問い合わせの中からTips的になりそうなものをご紹介いたします。

 

■特定ディレクトリに限定したSFTPアカウントを追加したい

KUSANAGIはkusanagiというユーザーでSFTPを使うよう案内されています。
参考:KUSANAGIサーバにSFTPクライアントで接続し、ファイルの転送を行う際の接続設定を教えて下さい。
https://kusanagi.tokyo/faq/  より)

しかし、このアカウントはSFTPに限らずSSHでのシェル操作も可能だったり、複数のCMSをプロビジョニングしたりでコンテンツ毎に管理者が異なっていたとしても、権限が広すぎて複数名にアカウントを共有するには躊躇してしまいます。

この問題を回避するため、特定ディレクトリにしかアクセスできないアカウント(ユーザー)を追加したいと言うのがお客様からのお問い合わせでした。

■ 特定ディレクトリに絞ったSFTPアカウントの作成例

この例ではc5c5というプロファイルでCMS(concrete5)を動かしていますが、/siteに静的なコンテンツを設置し、そのディレクトリのみアクセスできる管理者のアカウントが欲しいという、実際にあったお問い合わせを基にしています。

1.特定ディレクトリにアクセスさせたいユーザーを作成します。

※kusanagiと同じuidにするため、kusanagiのidを調べてから作成しました

# id kusanagi 
uid=1003(kusanagi) gid=1003(kusanagi) groups=1003(kusanagi),1002(www)
# useradd -o -u 1003 -G kusanagi,www c5c5siteuser
# id c5c5siteuser
uid=1003(kusanagi) gid=1003(kusanagi) groups=1003(kusanagi),1002(www)
# passwd c5c5siteuser

 

この状態だとSSHもSFTPも使えるため、SSHは許可しないよう制限をします。

# vim /etc/ssh/sshd_config

※ 以下のように編集しました

#Subsystem sftp /usr/libexec/openssh/sftp-server
 Subsystem sftp internal-sftp
 Match User c5c5siteuser
 ChrootDirectory /home/chroot/
 ForceCommand internal-sftp

※反映のため、sshdを再起動します
# systemctl restart sshd

※SSHでの接続が出来なくなったことを確認します

# ssh c5c5siteuser@localhost
c5c5siteuser@localhost's password:
packet_write_wait: Connection to ::1 port 22: Broken pipe

2.chroot用のディレクトリ作成

# mkdir -p /home/chroot/c5c5siteuser
 ※先ほどの /etc/ssh/sshd_config で設定したディレクトリ+次の項目で説明するマウント用のディレクトリとなります
 ※chrootのディレクトリのオーナーはrootでの書き込み権限がある必要があります

3.mountコマンドのbindにより、 /home/kusanagi/c5c5/DocumentRoot/site/  を /home/chroot/c5c5siteuser にマウントします。

# mount -B ~ のコマンドでマウントは可能ですが再起動時に外れてしまうので、
恒久的に設定する場合、マウント設定ファイル( /etc/fstab ) に設定を書き込みます。

# vi /etc/fstab

/home/kusanagi/c5c5/DocumentRoot/site/ /home/chroot/c5c5siteuser none bind 0
 を追記し保存。

# mount -a
 でマウント設定ファイルの反映。

# cat /proc/mounts | grep c5c5
 設定が反映されたを確認します。
 /dev/ploop28499p1 /home/chroot/c5c5siteuser ext4 rw,relatime,barrier=1,data=ordered,balloon_ino=12 0 0

この状態でsftpに接続し、/c5c5siteuser に接続すると、 /home/kusanagi/c5c5/DocumentRoot/site/ に接続されているかのようにファイル一覧などが確認出来、ファイルのアップロード・ダウンロードなども可能となりました。

chrootも /home/chroot/ と設定していますので、他のコンテンツが触られてしまうこともありません。

 


ではまた次回に( ´_ゝ`)/~~


Post Author: 遠藤博樹(NHN JAPAN株式会社)

遠藤博樹(NHN JAPAN株式会社)
前職ではまだヒットチャート上位ランクインがステータスとなる2000年代に某女性3人組バンドのマネージャーを務めていてましたが、解散をきっかけに退社し、2008年にNHNテコラス(旧社名ライブドア)に入社。 2018.4月には親会社となるNHN JAPANに転籍をしていますが、一貫してホスティングサービスのサポートスタッフ・企画運営としてお客様対応を行っています。ここでは主にKUSANAGI搭載ホスティングサービスを提供している中で、お客様からいただきましたお問い合わせをヒントに技術的な内容を書いていければと考えております。