网站无法写入文件或创建目录

网站无法写入文件或创建目录

我已经尝试安装 TeemIP 大约 6 个多月了,但我一直无法在 Centos7 上解决这个问题。

我得到的错误如下:

  • 目录“/var/www/teemp/public_html/web/log”存在,但应用程序不可写。

  • TeemIp 需要目录“/var/www/temip/public_html/web/env-product”可写。目录 '/var/www/teemp/public_html/web/env-product' 不存在且 '/var/www/teemp/public_html/web/' 不可写,应用程序无法创建目录 'env-product'在里面。

  • TeemIp 需要目录“/var/www/temip/public_html/web/env-products-build”可写。目录 '/var/www/teemp/public_html/web/env-product-build' 不存在且 '/var/www/teemp/public_html/web/' 不可写,应用程序无法创建目录 'env-其中的“生产-构建”。

  • TeemIp 需要目录“/var/www/temip/public_html/web/conf”可写。目录“/var/www/teemp/public_html/web/conf”不存在且“/var/www/teemp/public_html/web/”不可写,应用程序无法在其中创建目录“conf”。

  • 目录“/var/www/teemp/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. [email protected]
#
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 user和之外我没有做任何其他事情groupadd group

如果您需要任何其他信息,请告诉我。我不知道还能去哪里寻找,因为我没有 Linux 系统的中级或专家级知识。

答案1

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 -aaudit2why.

一旦 TeemIP 工作且不会触发 SELinux 审核日志中的新条目,您就可以开始了:setenforce 1

祝你好运!

答案2

我今天遇到了类似的问题,并决定为那些对 SELinux 读/写权限不耐烦的人写一个快速答案。

Getenforce # see current mode.
getsebool -a # find al boolean values
Sudo setenforce 0 # shut it down, but its back at reboot -NOT RECOMMENDED other than debug.

永久解决方案如下。第 2 行可以工作,但无法在重命名和恢复操作中幸存(第 3 行将在此类情况下幸存)。

 ls -dZ /var/www/html  # See SELinux context of 
 sudo chcon -R -t httpd_sys_content_t /var/www/html/website-document-root
 sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" 

我过去也做过以下操作来授予 apache 写入权限。

Selinux 允许 httpd 读取和写入 /var/www/html/my-project。

sudo chcon -R -t httpd_sys_script_rw_t /var/www/html/my-project/
sudo chcon -R -t httpd_sys_script_rw_t /var/www/my-Symfony-project/var/log/

SELinux 参考资料: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-managing_confined_services-the_apache_http_server-types

答案3

解决方案是使用命令“setenforce 0”禁用 SELinux。要永久允许写入此目录并更改文件,请禁用 SELinux 或通过执行以下操作将 SELinux 强制设置为宽松模式:

  1. 输入命令:“nano /etc/selinux/config”
  2. 将行“SELINUX=Enforcing”更改为“SELinux=Permissive”或“SELinux=Disabled”(取决于您是否希望 SELinux 记录违反其策略的操作)
  3. 输入命令:“重新启动”

相关内容