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

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

NHN JAPANの遠藤氏が、特定のディレクトリに限定したSFTPアカウントの追加方法について解説しています。一アカウントで複数のCMSを管理している場合、その全操作権が広範であり、複数人で共有するには不安がありました。そこで具体的には、特定のディレクトリにアクセスするためのユーザーを作り、そのユーザーがSSHを使えないよう制限し、更にそのユーザーがアクセス可能なディレクトリを限定する手順を紹介。これにより安全にアカウントを共有できます。

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/ と設定していますので、他のコンテンツが触られてしまうこともありません。

 


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

<< 適当にMroongaを入れようとしては駄目な話 乂(゚д゚`)WAFで攻撃に備える(。・д・)o┫゙;`;:゙;`;: >>

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解