この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは、岩本です。
WEBアプリケーションを利用する際に、メンテナンスのためWEBアプリケーションが生成したファイルを メンテナンス用のユーザーで編集したいといった場合があると思います。
その際の、Apache(httpd)とSFTP(sshd)の設定の覚書です。
やりたいこと
- ユーザーにアップロードされたファイルに、WEBアプリケーションから編集を行いたい
- WEBアプリケーションで生成されたファイルを、ユーザーから編集を行いたい
やること
まず、標準の設定では、Apacheで生成されるファイルのパーミッションは下記のようになります。
# ls -lah
-rw-r--r-- 1 apache apache 17 Mar 13 04:55 testfile
上記を踏まえ、SFTP/Apache双方からアクセスが可能な様に、下記の設定を行います。
- SFTPのユーザーのプライマリグループをApacheユーザーグループに変更する
- SFTP(sshd)のUmaskを設定する
- ApacheのUmaskを設定する
- コンテンツのパーミッションを適切に設定する
設定
SFTPのユーザーのプライマリグループをApacheユーザーグループに変更する
SFTPユーザーsftpuser01
がapacheユーザーグループのファイルにアクセスできる様、
対象となるユーザーをapacheユーザーグループに追加します。
sftpuser01
の標準のグループを、apache
へと変更します。
※ユーザー名sftpuser01
は適時変更ください
# usermod -g apache sftpuser01
実施前
# cat /etc/passwd | grep sftpuser01
sftpuser01:x:501:501::/home/sftpuser01:/bin/bash
実施後
# cat /etc/passwd | grep sftpuser01
sftpuser01:x:501:48::/home/sftpuser01:/bin/bash
sftpuser01
のプライマリユーザーグループがGID501
から48(apache)
に変わっていることがわかります。
SFTP(sshd)のUmaskを設定する
SFTPからアップロードされたファイルのパーミッションに、グループからの書き込み権限を持たせるため、SFTPのUmaskを変更します。
/etc/ssh/sshd_config
# Subsystem sftp /usr/libexec/openssh/sftp-server
Subsystem sftp /usr/libexec/openssh/sftp-server –u 002
sshdの再起動
# service sshd restart
Apache(httpd)のUmaskを設定する
Apacheが生成するファイルのパーミッションに、グループからの書き込み権限を持たせるため、SFTPのUmaskを変更します。
/etc/sysconfig/httpd
umask 002 #追記
httpd(apache)の再起動
# service httpd restart
下記の様に、Apacheから生成されたファイルのパーミッションが644から664に変わりました。
# ls -lah
## 設定前
-rw-r--r-- 1 apache apache 17 Mar 13 04:55 testfile
## 設定後
-rw-rw-r-- 1 apache apache 17 Mar 13 05:53 testfile2
コンテンツのパーミッションを適切に設定する
最後に既にあるコンテンツ全体のパーミッションを適切に設定します。
- ファイル664
- ディレクトリ775
全てのファイルを手動で変更するのは限界があるので、コマンドラインで一括で行います。
# cd /var/www/html #対象ディレクトリに移動
# find ./ -type f -exec chmod 664 {} \; #対象ディレクトリ以下の全てのファイルを変更
# find ./ -type d -exec chmod 775 {} \; #対象ディレクトリ以下の全てのディレクトリを変更
備考
今回はsftpuser01
のプライマリユーザグループをapache
へと変更しましたが、Apacheの設定(httpd.conf)にてApacheの実行ユーザーの指定が可能です。
User apache
Group apache
SFTPのユーザー数が多くなると、専用のグループを設けApacheの実行グループの変更を行うとより効率的かと思います。
Nginxを利用する場合も同様の設定で可能です。
今日のわさび様
春が近づいてきました。わさびちゃんの抜け毛がやばいです。