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の対応
- == と === の違い(比較演算子)
スポンサーリンク





