LoginSignup
0
1

More than 3 years have passed since last update.

俺のgcsfuseがSELinuxのせいで動かないわけがない

Last updated at Posted at 2020-06-29

SELinuxと共に生きるためのTips。
(SFTPがよかったんじゃが諸事情)

要望

・GCP Cloud StoreageをGCEインスタンスにマウントして、指定ユーザー("ftp-user"とする)にFTP操作可能にさせたい
・ユーザーには /home 直下の情報をみせたくない
・ユーザーには /home/ftp-user/csv(マウント先)以下のみファイル操作可能にさせたい

結論

・FTPサーバ(vsftp)を立てて、Chrootするだけでは、GCSマウント先のデータ転送に失敗する
・SELinuxをDisableにすると、/home 直下が見れてしまう
・SELinuxを有効のまま、要件を満たすには、SELinuxのアクセス制御が必要

環境

OS

CentOS Linux release 7.8.2003 (Core) on GCP

Tools

gcsfuse version 0.28.1 (Go version go1.9.7)
vsftpd: version 3.0.2

手順

FTPサーバ構築

GCPにGCEインスタンスを立てて、FTPサーバを用意する

GCEちょい技 – FTPサーバを構築する
https://www.apps-gcp.com/gce-casual-knowhow-02/
※pasv_address=...にGloacIPの追記が必要な点に注意

chroot環境設定

FTPユーザーのホーム以下をchroot環境に設定する

centos7のvsftpdでchroot環境を作る
https://qiita.com/mugi-tea/items/b6ee5d9127409667bc7c

GCSをマウント

gcsfuseインストール。

マウント設定をfstabに仕込んで、mountで確認。
問題なければ、mount -a

vi /etc/fstab

[YOUR_STORAGE_NAME] [YOUR_MOUNT_DIR] gcsfuse implicit_dirs,user,rw,_netdev,allow_other,uid=100X,gid=100Y,dir_mode=0755,file_mode=0644,only_dir=[YOUR_STORAGE_PATH] 0 0

以下のように設定すると、hogeバケットの foo/bar パスのコンテンツを /home/ftp-user/bar にマウントできます。

Key Value
[YOUR_STORAGE_NAME] GCSバケット名 hoge
[YOUR_MOUNT_DIR] GCE側マウントディレクトリ /home/ftp-user/bar
[YOUR_STORAGE_PATH] GCSバケットのマウント対象パス foo/bar

gcsfuseコマンドのパラメータに迷ったら公式を参照。

GoogleCloudPlatform gcsfuse
https://github.com/GoogleCloudPlatform/gcsfuse/blob/master/docs/mounting.md
Mounting google storage bucket folder using gcsfuse
https://stackoverflow.com/questions/34390730/mounting-google-storage-bucket-folder-using-gcsfuse

SELinux 設定

課題

この時点でSELinuxが有効だと、FTPユーザーはマウントディレクトリが空に見える(データ転送に失敗している)
LinuxユーザーのパーミッションがFTPユーザーにひも付き、仮にマウントディレクトリを777にしても現象は解消しない。

SELinuxを無効にすると、マウントディレクトリの実体が見える…が 上位ディレクトリ /home の内容も見えてしまう。

対策

ポリシーの検索用にツールを入れる

yum install selinux-policy-devel selinux-policy-doc
sepolicy booleans -a | grep fuse

SELinuxは有効にした状態で、アクセス制御を変更する(再起動不要)

setsebool -P ssh_chroot_rw_homedirs on
setsebool -P ftpd_use_fusefs on

以上。


Many thanks (;

「SELinuxのせいで動かない」撲滅ガイド
https://qiita.com/yunano/items/857ab36faa0d695573dd
SELINUXが有効になっているサーバではvsftpdのデータ転送が使用できない
https://pentan.info/server/linux/selinux_vsftpd.html
CentOSとchrootの設定
http://nothing-titile.hatenablog.jp/entry/2014/08/24/005436
【SELinux】Boolean の仕組みと getsebool / setsebool コマンドの使い方
https://milestone-of-se.nesuke.com/sv-advanced/selinux/boolean-getsebool-setsebool/
gcs-fuseでマウントしたディレクトリをWebDAVで公開しようとしてハマった話
https://consulting.blog.rakumo.com/entry/20180426/gcsfuse-webdav

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1