SftpとApacheの両方からファイルへの書き込みができる様にいい感じに設定する

2017.03.13

この記事は公開されてから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を利用する場合も同様の設定で可能です。

今日のわさび様

春が近づいてきました。わさびちゃんの抜け毛がやばいです。

IMG_9885 (1)