5.4. 設定例
5.4.1. FTP サイトにアップロードする
特定のユーザーがファイルのアップロード専用として使用できる FTP サイトを作成している例を示します。 ディレクトリ構造を作成し、 必要となる SELinux 設定の変更を行なっています。
- root ユーザーで
setsebool ftp_home_dir=1
を実行して FTP ホームディレクトリへのアクセスができるようにします。 - root ユーザーで
mkdir -p /myftp/pub
を実行して新規ディレクトリを最上位に作成します。 - Linux ユーザーの書き込みアクセスを許可するため、
/myftp/pub/
ディレクトリで Linux パーミッションの設定を行ないます。以下の例では、所有者とグループを root から所有者 user1 とグループ root に変更します。書き込みアクセスを与えたいユーザーを「user1」の部分に入れてください。# chown user1:root /myftp/pub # chmod 775 /myftp/pub
chown
コマンドで所有者とグループのパーミッションを変更しています。chmod
コマンドではモードを変更し、user1 ユーザーには読み取り、書き込み、実行のパーミッションを許可、root グループのメンバーには読み取り、書き込み、実行のパーミッションを許可しています。これ以外のユーザーには読み取りと実行のパーミッションを許可しています。このディレクトリ配下にあるファイルの読み込みを Apache HTTP Server に許可する必要があります。 - SELinux を実行する場合は、ファイルやディレクトリにアクセス許可のラベルを適切に付ける必要があります。Linux パーミッションの設定だけでは不十分です。ファイルに
public_content_t
タイプのラベルが付いている場合は、FTP、Apache HTTP Server、Samba による読み込みおよび再同期が可能です。ファイルにpublic_content_rw_t
タイプのラベルが付いている場合は、FTP による書き込みが可能です。 Samba など FTP 以外のサービスによるpublic_content_rw_t
タイプのラベルが付いているファイルへの書き込みについては、書き込みを行なう前にまず Boolean を設定しておく必要があります。最上位のディレクトリ (/myftp/
) にpublic_content_t
タイプのラベルを付け、/myftp/
配下にコピーまたは新規作成されたファイルに対してサービスによる書き込みや変更が行なわれないようにします。root ユーザーで次のコマンドを実行し、ラベルの変更をファイルコンテキスト設定に追加します。semanage fcontext -a -t public_content_t /myftp
restorecon -R -v /myftp/
を実行してラベルの変更を適用します。# restorecon -R -v /myftp/ restorecon reset /myftp context unconfined_u:object_r:default_t:s0->system_u:object_r:public_content_t:s0
/myftp
にはpublic_content_t
タイプのラベル、/myftp/pub/
にはdefault_t
タイプのラベルが付いているか確認します。$ ls -dZ /myftp/ drwxr-xr-x. root root system_u:object_r:public_content_t:s0 /myftp/ $ ls -dZ /myftp/pub/ drwxrwxr-x. user1 root unconfined_u:object_r:default_t:s0 /myftp/pub/
- ユーザーが FTP 経由でファイルをアップロードできるようにするため、 まず先に FTP にディレクトリへの書き込みを許可する必要があります。 SELinux で FTP に書き込みを許可しているのは、
public_content_rw_t
タイプのラベルが付いたディレクトリです。ここでは、FTP に書き込みを許可するディレクトリとして/myftp/pub/
を使用しています。root ユーザーで次のコマンドを実行し、ラベルの変更をファイルコンテキスト設定に追加します。semanage fcontext -a -t public_content_rw_t "/myftp/pub(/.*)?"
- root ユーザーで
restorecon -R -v /myftp/pub
を実行してラベルの変更を適用します。# restorecon -R -v /myftp/pub restorecon reset /myftp/pub context system_u:object_r:default_t:s0->system_u:object_r:public_content_rw_t:s0
allow_ftpd_anon_write
Boolean をオンにして、vsftpd
によるpublic_content_rw_t
タイプのラベルが付いたファイルへの書き込みを許可する必要があります。root ユーザーで次のコマンドを実行し、この Boolean をオンにします。setsebool -P allow_ftpd_anon_write on
再起動後、 変更を維持したくない場合は-P
オプションを使用しないでください。
FTP でログインしてからファイルをアップロードする例を以下に示します。 ユーザーは前述の例と同じ user1 ユーザーを使用しています。
/myftp/pub/
ディレクトリは user1 が専用所有者となるディレクトリです。
cd ~/
を実行してホームディレクトリに移動します。 次に、mkdir myftp
を実行して FTP 経由でアップロードするファイルを格納するディレクトリを作成します。cd ~/myftp
を実行して~/myftp/
ディレクトリに移動します。 このディレクトリ内にftpupload
ファイルを作成します。 以下の内容をこのファイルにコピーします。File upload via FTP from a home directory.
getsebool allow_ftpd_anon_write
を実行して、allow_ftpd_anon_write
Boolean がオンになっているか確認します。$ getsebool allow_ftpd_anon_write allow_ftpd_anon_write --> on
この Boolean がオフになっている場合は、 root ユーザーでsetsebool -P allow_ftpd_anon_write on
を実行し Boolean をオンにします。 再起動後、 変更を維持したくない場合は-P
オプションを使用しないでください。- root ユーザーで
service vsftpd start
を実行し、vsftpd
を起動します。# service vsftpd start Starting vsftpd for vsftpd: [ OK ]
ftp localhost
を実行します。 ユーザー名の入力が求められたら、 書き込みアクセスを持っているユーザーのユーザー名を入力し、 そのユーザーの正しいパスワードを入力します。$ ftp localhost Connected to localhost (127.0.0.1). 220 (vsFTPd 2.1.0) Name (localhost:username): 331 Please specify the password. Password: Enter the correct password 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd myftp 250 Directory successfully changed. ftp> put ftpupload local: ftpupload remote: ftpupload 227 Entering Passive Mode (127,0,0,1,241,41). 150 Ok to send data. 226 File receive OK. ftp> 221 Goodbye.
allow_ftpd_anon_write
Boolean が有効になっているためアップロードが成功します。