Centos

網站無法寫入文件或創建目錄

  • April 26, 2020

我已經嘗試安裝 TeemIP 大約 6 個多月了,但我一直無法在 Centos7 上解決這個問題。

我得到的錯誤如下:

  • 目錄 ‘/var/www/teemip/public_html/web/log’ 存在,但對應用程序不可寫。
  • TeemIp 需要目錄 ‘/var/www/teemip/public_html/web/env-production’ 是可寫的。目錄“/var/www/teemip/public_html/web/env-production”不存在且“/var/www/teemip/public_html/web/”不可寫,應用程序無法創建目錄“env-production”在裡面。
  • TeemIp 需要目錄 ‘/var/www/teemip/public_html/web/env-production-build’ 是可寫的。目錄’/var/www/teemip/public_html/web/env-production-build’不存在且’/var/www/teemip/public_html/web/‘不可寫,應用程序無法創建目錄’env-生產-建構’裡面。
  • TeemIp 需要目錄 ‘/var/www/teemip/public_html/web/conf’ 是可寫的。目錄“/var/www/teemip/public_html/web/conf”不存在且“/var/www/teemip/public_html/web/”不可寫,應用程序無法在其中創建目錄“conf”。
  • 目錄 ‘/var/www/teemip/public_html/web/data’ 存在,但對應用程序不可寫。

我為 apache httpd 創建了一個名為 www-data 的使用者和組,權限如下:

[root@TeemIP html]# ls -l
total 648     
drwxrwsr-x. 3 www-data www-data     24 Apr  7 21:24 addons
drwxrwsr-x. 3 www-data www-data   4096 Apr  7 21:24 application
-rwxrwxr-x. 1 www-data www-data    245 Apr  7 21:24 approot.inc.php
drwxrwsr-x. 3 www-data www-data   4096 Apr  7 21:24 core
drwxrwsr-x. 6 www-data www-data   4096 Apr  7 21:24 css
drwxrwsr-x. 2 www-data www-data     58 Apr  7 21:24 data
drwxrwsr-x. 3 www-data www-data     17 Apr  7 21:24 datamodels
drwxrwsr-x. 2 www-data www-data   4096 Apr  7 21:24 dictionaries
drwxrwsr-x. 2 www-data www-data     30 Apr  7 21:24 documentation
drwxrwsr-x. 2 www-data www-data     24 Apr  7 21:24 extensions
drwxrwsr-x. 4 www-data www-data   8192 Apr  7 21:24 images
-rwxrwxr-x. 1 www-data www-data   1030 Apr  7 21:24 index.php
drwxrwsr-x. 7 www-data www-data   4096 Apr  7 21:24 js
drwxrwsr-x. 7 www-data www-data     84 Apr  7 21:24 lib
drwxrwsr-x. 2 www-data www-data     58 Apr  7 21:24 log
-rwxrwxr-x. 1 www-data www-data 603311 Apr  7 21:24 manifest.xml
drwxrwsr-x. 2 www-data www-data   4096 Apr  7 21:24 pages
drwxrwsr-x. 3 www-data www-data     55 Apr  7 21:24 portal
drwxrwsr-x. 5 www-data www-data   4096 Apr  7 21:24 setup
drwxrwsr-x. 5 www-data www-data     73 Apr  7 21:24 sources
drwxrwsr-x. 2 www-data www-data    141 Apr  7 21:24 synchro
-rwxrwxr-x. 1 www-data www-data    630 Apr  7 21:24 web.config
drwxrwsr-x. 2 www-data www-data   4096 Apr  7 21:24 webservices

據我了解,應用程序 TeemIP 正在使用 http 守護程序寫入日誌並創建目錄。httpd.conf 文件包括 www-data 使用者和組,配置如下。

# Dynamic Shared Object (DSO) Support
#
# To be able to use the functionality of a module which was built as a DSO you
# have to place corresponding `LoadModule' lines at this location so the
# directives contained in it are actually available _before_ they are used.
# Statically compiled modules (those listed by `httpd -l') do not need
# to be loaded here.
#
# Example:
# LoadModule foo_module modules/mod_foo.so
#
Include conf.modules.d/*.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 www-data
Group www-data

# 'Main' server configuration
#
# The directives in this section set up the values used by the 'main'
# server, which responds to any requests that aren't handled by a
# <VirtualHost> definition.  These values also provide defaults for
# any <VirtualHost> containers you may define later in the file.
#
# All of these directives may appear inside <VirtualHost> containers,
# in which case these default settings will be overridden for the
# virtual host being defined.
#

#
# ServerAdmin: Your address, where problems with the server should be
# e-mailed.  This address appears on some server-generated pages, such
# as error documents.  e.g. admin@your-domain.com
#
ServerAdmin root@localhost

#
# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify

我試過: Apache2權限問題

我還嘗試將使用者和組更改為 sudo 使用者和組,但這並沒有什麼不同。我將 /var/www 目錄的所有者更改為 www-data 並將 /var/www 目錄的權限更改為 775(遞歸)。另外,我專門為 apache 守護程序創建了 www-data 使用者和組,但除了adduser usergroupadd group.

如果您需要任何其他資訊,請告訴我。我不知道還能去哪裡看,因為我沒有關於 Linux 系統的中級或專家級知識。

SELinux 的存在是有原因的。它強制執行高於標准文件系統權限的訪問限制,真正使您的伺服器更安全。

應該嘗試使用 SELinux 強制執行這項工作:-)

您需要確定哪些 TeemIP Web 目錄是只讀的,哪些是 Apache 可寫的。然後,使用https://wiki.centos.org/HowTos/SELinux中的說明(特別是關於重新標記文件的部分

$$ 5.2 $$),相應地重新標記目錄。 您通常會使用semanage fcontext -a -t httpd_sys_content_t "/<pathspec>(/.*)?"只讀目錄和semanage fcontext -a -t httpd_sys_rw_content_t "/<pathspec>(/.*)?"可寫目錄。然後,restorecon -Rv在 webroot 上執行 a 以查看奇蹟發生。

使用ausearch -ts recent -m avc -i在許可模式下執行時 ( setenforce 0) 等命令,您可以檢查 SELinux 審核日誌以查找訪問問題。您甚至可以通過將audit2why -a單個審計日誌條目發布或傳送到audit2why.

一旦 TeemIP 工作而不會觸發 SELinux 審核日誌中的新條目,您就可以開始了:setenforce 1.

祝你好運!

引用自:https://unix.stackexchange.com/questions/511929