WordPress更新(SELinux有効)

下の画像は WordPressのオンラインアップデートの画面のSSなんだが・・・ このアップデート機能を使用するにはFTPサーバが機能してないと使えない。 そこでDarkgrayサーバにvsftpをインストールしてみた。

WordPress更新画面
WordPress更新画面

[xcode]
*VSFTPインストール
 CentOSの標準的なFTPサーバであるVSFTPをインストールしてみた。インストール方法&設定方法は説明すると長くなる。 めんどいので[[ここ>http://www.petatec.co.jp/achives/264/]]とか[[ここ>https://centossrv.com/vsftpd.shtml]]を参考にしてほしい。 インストール/設定方法は 上記以外にも ”VSFTP”でググればいくらでも出てくる。

 参考サイトと違う所を簡単に説明すると、Wordpressのアップデートだけできれば良いという事を第一条件にする為、chroot機能は全ユーザに対して有効にする。具体的な方法はvsftpd.confを以下の様に修正する。
#code(baka){{
chroot_local_user=YES # この行だけ有効にして下の3行はコメントアウトのまま
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd/chroot_list
}}
取りあえず動けば良いので パッシブモードやssh機能は有効にしない。 さらに サーバー内だけで機能すればいいので 外に向かってポートはオープンしない。

&font(Red){致命的な説明ミスが発見されたので改稿予定};
***動作テスト
 インストール&vsftpの起動が完了したら端末からftpソフトを使ってテストアクセスしてみる。 外に向かってポートはオープンしていないがFirewalldの設定によりローカルネットからのftpによるアクセスは出来るようになってる。
&ref(Image-FTP_1.png,mw:240,mh:240);
 ログインできたらログインディレクトリから上位のディレクトリに移動できない事を確認する。

 httpd公開ディレクトリは通常の場合 /var/www/以下に設定されているが この状態だと管理し辛いのでDarkgrayサーバーでは httpd管理ユーザーのホームディレクトリ下に設けてある。 ftpソフトでhttpd公開ディレクトリの中へ入ってみると 上のイメージの様にファイルもディレクトリも見えない。SELinuxの設定により FTPではhttpd公開ディレクトリ下のファイル群へのアクセスは制限されている。httpdディクレトリ下へのftpでのアクセスを許可してやる必要がある。
 
 
**httpd公開ディレクトリ下のSELinux設定
 SELinuxを有効にした状態でhttpd公開ディレクトリ下のファイルをftpでアクセスするには 各ファイルorディレクトリにSELinuxによって付加されたアクセス属性を修正してやると共に SELinuxの設定を決める(プログラム的な)スイッチを幾つか操作してやる必要がある。
 
***SELinuxによるファイル属性
 まずは現在のファイルの属性を調べてみる。SELinuxによって付加されたファイル属性は ll(もしくはls)に -Zオプションを付けて実行すると表示される。
&ref(Image-ll_1.png,mw:240,mh:240);
 上の図では 従来のパーミッションの設定、ユーザーIDに続いて SELinuxによるアクセス属性が表示されて その後にファイル/ディレクトリ名が表示されている。
 一番下の行のSELinuxの属性が httpd_sys_content_tという所に注目してほしい。このhtmlディレクトリ下のファイル群が httpdサービスからアクセスが許可されている事を示している。
 場合によっては httpd_xxxxxx_tと xxxxxxxの部分が別の名前になってる事もあるが 頭の”httpd_”の部分だけでhttpdサーバに関係するファイルである事が分かる。
 このhttpd_xxxの属性のついたファイルをftpでアクセスする事はできない。ftpツールでアクセスしようとすると前項のイメージの様に何も表示されない。 表示されないのでファイルをダウンロードする事は出来ないし、このディレクトリに他のファイルをアップする事も出来ない。
 
 httpdサーバから ftpツールからの両方からのアクセスを可能にするには 属性をpublic_content_tに変更する。なおpublic_content_tはアクセス(読み込み)のみ可能になる属性で、読み書き両方を可能にするには 属性をpublic_content_rw_tに変更する。
 
***ファイル属性の変更方法
 属性を変更するにはchconコマンドを使用する。(root資格が必要)
#code(baka){{
[root@]# chcon -t public_content_t ./html <- htmlディレクトリに対してpublic_content_t属性を付与するコマンド例 }} 他にも方法はあるのだが この方法が直接的で分かりやすいので 私はいつもこの方法で属性を操作している。    xoopsにxpressモジュールとしてWordPressを組み込むと wp-contentディレクトリまでのディレクトリ構成は 以下のような感じになる。 #code(baka){{ html/modules/xpress/wp-content/ }}  httpd公開ディレクトリ下の全てのファイルの属性をpublic_content_rw_tにしても良いのだが、今回の目的は wp-contentディレクトリの中にあるテーマファイルやプラグインファイルを更新する事なので 経路上の各ディレクトリにpublic_content_t属性を付与し、wp-contentディレクトリとその中にある全てのファイルにpublic_content_rw_t属性を付与する。ftpツールにwp-contentディレクトリ下のファイルのみの書き込みを許可を与えるには以下の様にコマンドを実行する。  #code(baka){{ [root@]# chcon -t public_content_t ./html [root@]# chcon -t public_content_t ./html/modules [root@]# chcon -t public_content_t ./html/modules/xpress [root@]# chcon -R -t public_content_rw_t ./html/modules/xpress/wp-content }}    以上でファイルの属性の修正作業は終わりだが これだけでは ftpツールでのファイルの読み込みは出来るようになるが 書き込みは出来ない。SELinuxのシステムにftpツールによる書き込みを許可するスイッチ操作が必要だ。 ***SELinuxのスイッチ操作  SELinuxのシステムには 色々なサービスのアクセスの禁止/許可を制御するプログラム的なスイッチがある。まずはftpに関するスイッチを表示してみる。 #code(baka){{ [root@]# getsebool -a | grep ftp ftp_home_dir --> on
ftpd_anon_write –> on
ftpd_connect_all_unreserved –> off
ftpd_connect_db –> off
ftpd_full_access –> off
ftpd_use_cifs –> off
ftpd_use_fusefs –> off
ftpd_use_nfs –> off
ftpd_use_passive_mode –> off
httpd_can_connect_ftp –> on
httpd_enable_ftp_server –> off
sftpd_anon_write –> off
sftpd_enable_homedirs –> off
sftpd_full_access –> off
sftpd_write_ssh_home –> off
tftp_anon_write –> off
tftp_home_dir –> off
[root@]#
}}

 現在のDarkgrayサーバの設定を表示してみた。デフォルトでは全てoffなんだが ftpでの書き込みを許可するために幾つかをonに設定してある。
スイッチをonにするには以下の様にコマンドを実行する。
#code(baka,nomenu){{
[root@]# setsebool -P ftp_home_dir on <- ftp書き込み許可 [root@]# setsebool -P ftp_anon_write on <- ftp書き込み許可 [root@]# setsebool -P ftp_home_dir on <- 書き込み許可 }} (以下 編集途中) [/xcode]

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.