웹사이트에서 파일에 쓸 수 없거나 디렉터리를 생성할 수 없습니다.

웹사이트에서 파일에 쓸 수 없거나 디렉터리를 생성할 수 없습니다.

나는 약 6개월 이상 TeemIP를 설치하려고 노력했지만 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-product-' 디렉터리를 생성할 수 없습니다. -Construct"에서 '빌드'를 수행합니다.

  • TeemIp에 쓰기 가능하려면 "/var/www/temip/public_html/web/conf" 디렉터리가 필요합니다. 애플리케이션은 존재하지 않고 '/var/www/teemp/public_html/web/'에 쓸 수 없는 '/var/www/teemp/public_html/web/conf' 디렉토리에 '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(반복적으로)로 변경했습니다. 또한 아파치 데몬을 위해 특별히 www-data 사용자와 그룹을 생성했지만 adduser usergroupadd group.

추가 정보가 필요하면 알려주시기 바랍니다. 나는 Linux 시스템에 대한 중급 또는 전문가 수준의 지식이 없기 때문에 어디를 봐야할지 모르겠습니다.

답변1

SELinux가 존재하는 데에는 이유가 있습니다. 표준 파일 시스템 권한 이상의 액세스 제한을 적용하여 서버를 더욱 안전하게 만듭니다.

~해야 한다SELinux를 통해 이를 강제해 보세요 :-)

어느 TeemIP 웹 디렉터리가 읽기 전용이고 어느 것이 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웹루트에서 실행하고 마법이 일어나는 것을 지켜보세요.

ausearch -ts recent -m avc -i허용 모드( )에서 실행할 때와 같은 명령을 사용하면 setenforce 0SELinux 감사 로그에서 액세스 문제를 확인할 수 있습니다. audit2why -a에 요청을 제출할 수도 있습니다 audit2why.

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. "다시 시작" 명령을 입력하세요.

관련 정보