Apacheで所有権や書き込み権限があるにも関わらずPermissions deniedが出る場合
Apacheで所有権や書き込み権限があるにも関わらずPermissions deniedが出る場合は、SELinuxが有効になっていて制限がかかっていることが考えられます。
[参考記事] SELinuxを無効にする方法
[参考記事] SELinuxのpermissiveとdisableの違い
chconの使用方法
所有権やパーミッションの確認
所有権の変更
パーミッションの変更
Apacheの実行ユーザー・グループの設定
Apacheの設定ファイル一覧
Apacheの設定値一覧
SELinuxが有効になっているかを確認するには、getenforce コマンドです。
$ getenforce Enforcing
有効になっている場合は Enforcing、無効になっている場合は PermissiveまたはDisabled です。
Enforcingと返されていたら、SELinuxを無効にするとPermissions deniedが解消されます。
[参考記事] SELinuxを無効にする方法
ただこれではセキュリティレベルを下げてしまうことになります。
SELinuxを有効にした状態で、Apacheによる書き込み権限を付与するには chconコマンドでhttpd_sys_rw_content_tを付与します。
# chcon -R -t httpd_sys_rw_content_t /var/www/tmp または # chcon -R --type=httpd_sys_rw_content_t /var/www/tmp
これ以外にSELinuxはApacheのネットワーク接続の動作を制限しています。
現在の設定を確認するには
# getsebool httpd_can_network_connect httpd_can_network_connect --> off
ネットワーク接続を可能(ON)にするには
# setsebool -P httpd_can_network_connect on
chconの使用方法
$ chcon --help 使用法: chcon [OPTION]... CONTEXT FILE... または: chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE... または: chcon [OPTION]... --reference=RFILE FILE... 各 FILE の SELinux セキュリティコンテキストを CONTEXT に変更します。 --reference がある場合、各 FILE のセキュリティコンテキストを RFILE のものに 変更します。 Mandatory arguments to long options are mandatory for short options too. --dereference シンボリック自体の代わりに、シンボリックリンクを辿っ た先に適用する (この動作が既定)、 -h, --no-dereference 参照先のファイルの代わりにシンボリックリンクに適用する -u, --user=USER set user USER in the target security context -r, --role=ROLE set role ROLE in the target security context -t, --type=TYPE set type TYPE in the target security context -l, --range=RANGE set range RANGE in the target security context --no-preserve-root '/' を特別扱いしない (既定) --preserve-root '/' に対する再帰的な操作を失敗させる --reference=RFILE CONTEXT 値を指定するのに代わって RFILE の セキュリティコンテキストを使用する -R, --recursive ファイルとディレクトリを再帰的に操作する -v, --verbose 各ファイルを処理した時の診断を出力する 以下のオプションは -R オプションと併せて指定されたときにどのように階層を 横断するかの動作を変更します。2個以上指定されたときは最後のオプションの み有効になります。 -H コマンドライン引数がディレクトリに対するシンボ リックリンクの場合に、リンクを辿る -L ディレクトリに対するシンボリックリンクに遭遇し た時には全て辿る -P シンボリックリンクを辿らない (デフォルト) --help この使い方を表示して終了する --version バージョン情報を表示して終了する GNU coreutils online help: <https://www.gnu.org/software/coreutils/> Report chcon translation bugs to <https://translationproject.org/team/> Full documentation at: <https://www.gnu.org/software/coreutils/chcon> or available locally via: info '(coreutils) chcon invocation'
所有権やパーミッションの確認
所有権やパーミッション(書き込み権限)を確認するには ls -al
$ ls -al 【確認するパス】 例 $ ls -al /var/www 合計 3 drwxr-xr-x. 5 root root 46 11月 12 2021 . drwxr-xr-x. 22 root root 4096 7月 7 03:29 .. drwxr-xr-x. 2 root root 6 11月 12 2021 cgi-bin drwxr-xr-x. 2 root root 24 11月 12 2021 html
所有権の変更
所有権を変更するには chown
$ chown 【ユーザー名】:【グループ名】 【変更するパス】 例 $ chown apache:apache /var/www/tmp
下層のパスも含めて再帰的に所有権を変更するには chown に -R オプションを付けます
$ chown -R 【ユーザー名】:【グループ名】 【変更するパス】 例 $ chown -R apache:apache /var/www/tmp
パーミッションの変更
パーミッションを変更するには chmod
$ chmod 【パーミッション】 【変更するパス】 例 $ chmod 0777 /var/www/tmp
下層のパスも含めて再帰的にパーミッションを変更するには chmod に -R オプションを付けます
$ chmod -R 【パーミッション】 【変更するパス】 例 $ chmod -R 0777 /var/www/tmp
Apacheの実行ユーザー・グループの設定
Apacheの実行ユーザー・グループの設定はhttpd.confのUser・Groupです。
/etc/httpd/conf/httpd.conf
# # If you wish httpd to run as a different user or group, you must run # httpd as root initially and it will switch. # # User/Group: The name (or #number) of the user/group to run httpd as. # It is usually good practice to create a dedicated user and group for # running httpd, as with most system services. # User apache Group apache
Apacheの設定ファイル一覧
Apacheの設定ファイルの一覧を確認するには
httpd -t -D DUMP_CONFIG 2>/dev/null | grep '# In' | awk '{print $4}' $ httpd -t -D DUMP_CONFIG 2>/dev/null | grep '# In' | awk '{print $4}' /etc/httpd/conf/httpd.conf /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/welcome.conf
Apacheの設定値一覧
Apacheの設定値の一覧を確認するには
httpd -t -D DUMP_CONFIG 2>/dev/null | grep -v '#' $ httpd -t -D DUMP_CONFIG 2>/dev/null | grep -v '#' Listen 80 User apache Group apache ServerAdmin root@localhost <Directory /> AllowOverride none Require all denied </Directory> DocumentRoot "/var/www/html"
関連記事
- SELinuxのpermissiveとdisableの違い
- SELinuxを無効にする方法
- SELinuxの管理で使用するsemanageコマンドをインストールする方法
- 画面のバックライトを消す方法(モニタ電源を消す) vbetool
- SELinuxが有効になっているサーバではvsftpdのデータ転送が使用できない
- yumを自動で更新チェックする、自動で更新する
- PHP
- Ruby
- Linux [Red Hat/CentOSなど]
- CakePHP4
- CakePHP
- Fatal error: Maximum execution time of 30 seconds exceededの対処法
- RFC2142で定められた「組織で用意したほうがよいメールアドレス」のガイドライン
- NTFSフォーマットのストレージの読み書きが異常に遅い場合
- target is busyやdevice is busyをumountする方法
- Softbankの携帯で文字の色を白にするときは注意
- 2TBを超えるHDDを増設する方法(パーティション・フォーマット)
- Linuxのカーネル情報やディストリビューションを調べるコマンド
- ユーザーとグループ
- コマンドやプロセス名から検索して一括でkillする方法
- Apacheをyumでインストールする
- HDDやSSDなどのストレージのUUIDを調べる方法
- /dev/random と /dev/urandom の違い
- $_SERVER['PHP_SELF']は危険?
- VirtualBox Interfaceが起動していてシャットダウンができないとき
- quoted-printable文字列の変換
- OpenSSL
- OpenTask [バグ追跡システム]
- Apacheで出力されるログを変更する方法 レスポンスにかかった時間やリファラ、ユーザーエージェントを記録する
- スペシャルファイル
- CakePHP4系の入手方法・インストール方法
- POSTでアップロードできるファイルサイズの制限を変更する方法
- magic_quotes_gpc = On の対策
- php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolutionの対応
- == と === の違い(比較演算子)
スポンサーリンク