[보안 설정] HTTP 불필요한 method 취약점 제거 (Disable HTTP Trace)

리눅스/APACHE|2022. 3. 31. 14:29
반응형

TRACE method 는 cross-site tracing, basic 인증 암호를 가로챌 수 있기 때문에 불필요하다고 판단 되므로 꼭 사용해야 하는 환경이 아닐 경우 제거하도록 합니다.

 

 

1. 확인

# curl -k -X TRACE http://localhost
TRACE / HTTP/1.1
User-Agent: curl/7.29.0
Host: localhost
Accept: */*

 

 

2. 조치

간단히 httpd.conf 에 아래 옵션을 추가하여 조치가 가능합니다.

 

# vi /usr/local/apache/conf/httpd.conf

TraceEnable off

 

# /usr/local/apache/bin/apachectl restart

 

 

3. 재확인

# curl -k -X TRACE http://localhost
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>405 Method Not Allowed</title>
</head><body>
<h1>Method Not Allowed</h1>
<p>The requested method TRACE is not allowed for this URL.</p>
</body></html>

 

 

[출처] https://www.youtube.com/watch?v=_zjMrdQoK8g

 

 

 

 

반응형

댓글()

CentOS 7 에서 httpd 2.4.51, PHP 8.0 소스 설치하기

리눅스/APACHE|2021. 12. 7. 14:47
반응형

1. httpd 관련 패키지 설치

# yum -y install gcc gcc-c++  libtermcap-devel gdbm-devel zlib* libxml* freetype* libjpeg* gd-* 

# yum -y install libpng* --skip-broken pcre-devel

 

 

2. apr 설치

# cd /usr/local/src

# wget https://archive.apache.org/dist/apr/apr-1.5.2.tar.gz

# tar xvzf apr-1.5.2.tar.gz

# cd apr-1.5.2

# ./configure --prefix=/usr/local/apr

# make

# make install

 

 

3. apr-util 설치

# cd ..

# wget https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz

# tar xvzf apr-util-1.5.4.tar.gz

# cd apr-util-1.5.4

# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr

# make

# make install

 

 

4. httpd 설치

# cd ..

# wget https://archive.apache.org/dist/httpd/httpd-2.4.51.tar.gz

# tar xvzf 

# cd httpd-2.4.51

# ./configure --prefix=/usr/local/apache --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --enable-rewrite --enable-ssl --enable-so 

# make

# make install

 

 

5. PHP 관련 패키지 설치

# yum -y install sqlite-devel

 

 

6. PHP 설치

# cd ..

# wget https://www.php.net/distributions/php-8.0.12.tar.gz

# tar xvzf php-8.0.12.tar.gz

# cd php-8.0.12.tar.gz

# ./configure --prefix=/usr/local/php --with-mysqli --with-openssl=/usr/local/ssl --with-pdo-mysql=mysqlnd --with-apxs2=/usr/local/apache/bin/apxs --with-config-file-path=/usr/local/apache/conf --with-zlib --disable-debug --enable-calendar --enable-ftp --enable-sockets --enable-sysvsem

# make

# make install

# cp -arp php.ini-production /etc/php.ini

 

 

6. httpd 및 PHP 기본 설정

# vi /usr/local/apache/conf/httpd.conf

ServerName localhost

<Directory /usr/local/apache/htdocs>
        Options FollowSymLinks MultiViews
        AllowOverride All
        Require all granted
</Directory>

 

# vi /etc/php.ini

short_open_tag = On

date.timezone = "Asia/Seoul"

open_basedir = "/usr/local/apache/htdocs"

반응형

댓글()

php 확장자 없이 페이지 접속 가능하게 하기

리눅스/APACHE|2021. 11. 30. 11:53
반응형

주소창에서 특정 URL 호출시 아래와 같이 파일의 확장자를 사용하지 않고

파일명 만으로 접근하게 하는 방법이 있습니다.

 

기존 접속 방식 : http://sysdocu.tistory.com/data.php

 

httpd.conf 파일을 수정하여 디렉토리 옵션에 MultiViews 를 추가합니다.

LoadModule negotiation_module modules/mod_negotiation.so // httpd 2.2 이상 버전에서 활성화 필요

<Directory /RESTAPI/html>
        Options MultiViews
        AllowOverride All
        Require all granted
</Directory>

아파치 재시작 후 아래와 같은 형태로 접근이 가능합니다.

 

 

신규 접속 방식 : http://sysdocu.tistory.com/data

 

반응형

댓글()

[에러] (13)Permission denied: [client ...] AH00035: access to ... denied ... because search permissions are missing on a component of the path

리눅스/APACHE|2021. 11. 8. 16:23
반응형

아파치 에러 로그

[Mon Nov 08 16:04:03.287735 2021] [core:error] [pid 7206] (13)Permission denied: [client 192.168.220.104:41978] AH00035: access to /test.php denied (filesystem path '/RESTAPI/html/test.php') because search permissions are missing on a component of the path

 

디렉토리와 파일 접근 권한은 있는데 위와 같이 에러로그가 남을 경우 해결 방법입니다.

 

 

점검

/var/log/audit/audit.log 로그 파일을 열어 아래 내용이 출력되었는지 살펴봅니다.

 

type=AVC msg=audit(1636355741.333:1432): avc:  denied  { getattr } for  pid=8010 comm="httpd" path="/RESTAPI/logs/test.php" dev="sda2" ino=9568262 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:default_t:s0 tclass=file permissive=0
type=SYSCALL msg=audit(1636355741.333:1432): arch=c000003e syscall=6 success=no exit=-13 a0=7ffe0fa1c170 a1=7ffe0fa1c050 a2=7ffe0fa1c050 a3=ffffff00 items=0 ppid=8007 pid=8010 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)
type=PROCTITLE msg=audit(1636355741.333:1432): proctitle=2F7573722F7362696E2F6874747064002D44464F524547524F554E44

 

 

해결

# chcon -R -t httpd_sys_content_t /RESTAPI/html

 

반응형

댓글()

httpd 특정 파일명 또는 확장자 로그 (access_log) 남기지 않기

리눅스/APACHE|2021. 7. 1. 10:11
반응형

# vi /etc/httpd/conf/httpd.conf

 

SetEnvifNoCase Request_URI (log.html|png)$ FILE=1  // 추가
CustomLog "logs/access_log" common env=!FILE        // 수정

 

위 예제에서는 log.html 파일 접근이나 png 확장자를 가진파일은 access_log 에 남기지 않습니다.

빨간 글씨를 적절히 수정해 빈번히 발생되는 로그는 기록하지 않을 수 있습니다.

 

수정하였으면 적용을 위해 httpd 를 재시작 합니다.

# systemctl restart httpd

 

 

반응형

댓글()

[에러] (43)Identifier removed: AH00144: couldn't grab the accept mutex

리눅스/APACHE|2021. 5. 24. 15:33
반응형

Apache 2.4.29 에서 mod_ssl 을 설정 후 아래와 같이 로그가 기록되며 apache2 데몬이 종료되는 현상이 발생되었습니다.

[Mon May 24 12:15:45.179136 2021] [mpm_prefork:emerg] [pid 21881] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Mon May 24 12:15:45.179332 2021] [mpm_prefork:emerg] [pid 21539] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Mon May 24 12:15:45.179353 2021] [mpm_prefork:emerg] [pid 21555] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Mon May 24 12:15:45.179370 2021] [mpm_prefork:emerg] [pid 21534] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Mon May 24 12:15:45.179394 2021] [mpm_prefork:emerg] [pid 21541] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Mon May 24 12:15:45.179390 2021] [mpm_prefork:emerg] [pid 21537] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Mon May 24 12:15:45.179414 2021] [mpm_prefork:emerg] [pid 22564] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Mon May 24 12:15:45.179437 2021] [mpm_prefork:emerg] [pid 21556] (43)Identifier removed: AH00144: couldn't grab the accept mutex
[Mon May 24 12:15:45.196963 2021] [core:alert] [pid 1325] AH00050: Child 21534 returned a Fatal error... Apache is exiting!
[Mon May 24 12:15:45.197000 2021] [:emerg] [pid 1325] AH02818: MPM run failed, exiting

 

이를 해결하기 위해 설정파일의 옵션을 아래의 값으로 활성화 해주면 됩니다.

/etc/apache2/apache2.conf

Mutex posixsem

 

아파치를 재시작하여 적용합니다.

# systemctl restart apache2

 

 

반응형

댓글()

Apache2 구동 에러 : AH00111: Config variable ${APACHE_RUN_DIR} is not defined

리눅스/APACHE|2020. 11. 25. 15:40
반응형

아파치를 구동이 잘 되지 않아 설정 체크를 해보았더니 아래와 같은 에러 메세지가 출력 되었습니다.


root@sysdocu:/root# systemctl restart apache2

Job for apache2.service failed because the control process exited with error code.

See "systemctl status apache2.service" and "journalctl -xe" for details.


root@sysdocu:/root# apache2 -t

[Wed Nov 25 15:34:44.220065 2020] [core:warn] [pid 52764] AH00111: Config variable ${APACHE_RUN_DIR} is not defined

apache2: Syntax error on line 80 of /etc/apache2/apache2.conf: DefaultRuntimeDir must be a valid directory, absolute or relative to ServerRoot


이 경우 아래와 같이 환경 변수 파일을 다시 적용하면 해결이 됩니다.


root@sysdocu:/root# source /etc/apache2/envvars 


root@sysdocu:/root# apache2 -t

Syntax OK


이상이 없으므로 아파치 재시작을 해줍니다.


root@sysdocu:/root# systemctl restart apache2



반응형

댓글()

CentOS 8 에 YUM 으로 APM 설치하기 (특정 확장자에서 PHP 코드 사용 포함)

리눅스/APACHE|2020. 11. 10. 10:25
반응형

OS 환경 패키지 업데이트

# yum -y update


기본 라이브러리 설치

# yum install -y libjpeg* libpng* freetype* gd-* gcc gcc-c++ gdbm-devel libtermcap-devel


아파치 설치

# yum install -y httpd*


마리아DB 설치

# yum install -y mariadb*


PHP 설치

# yum install -y php php-common php-opcache php-cli php-gd php-curl php-mysqlnd


환경 설정

# vi /etc/httpd/conf/httpd.conf


<IfModule dir_module>

    DirectoryIndex index.html index.php

</IfModule>


# vi /etc/php.ini


short_open_tag = On

date.timezone = "Asia/Seoul"


# vi /etc/my.cnf.d/mariadb-server.cnf


[mysqld] 섹션에 아래 내용 추가 (한글이 웹상에서 잘 표시되도록 설정)

character-set-client-handshake=FALSE

collation-server=utf8_general_ci

character-set-server=utf8 


적용

# systemctl restart httpd

# systemctl restart php-fpm

# systemctl restart mysqld


php 코드를 html 파일에서 사용하려면 아래 작업을 추가로 진행 해줍니다.


# vi /etc/httpd/conf.d/php.conf


<IfModule !mod_php5.c>

  <IfModule !mod_php7.c>

    # Enable http authorization headers

    SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1


    <FilesMatch \.(php|phar|html)$>    // 확장자 추가

        SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"

    </FilesMatch>

  </IfModule>

</IfModule> 


# vi /etc/php-fpm.d/www.conf


security.limit_extensions = .php .php3 .php4 .php5 .php7 .html    // 주석 해제 및 확장자 추가

 listen.allowed_clients = 0.0.0.0    // 수정


적용

# systemctl restart httpd

# systemctl restart php-fpm





반응형

댓글()

아파치 설치 에러 libaprutil-1.so: undefined reference to `XML_SetElementHandler collect2: error: ld returned 1 exit status apache make

리눅스/APACHE|2020. 11. 9. 16:55
반응형

아파치 2.4.46 설치 도중 아래와 같은 메세지를 만났습니다.


(make 에러)

libaprutil-1.so: undefined reference to `XML_SetElementHandler 

collect2: error: ld returned 1 exit status apache make


이경우 아래와 같이 조치합니다.


# vi build/config_vars.mk


AP_LIBS 으로 시작되는 행을 찾아서 맨 뒤에 -lexpat 를  추가하고 다시 컴파일 합니다.


# make clean

# make

반응형

댓글()

Error 403, 404 를 특정 html 페이지로 출력하기

리눅스/APACHE|2020. 11. 4. 08:17
반응형

없는 파일이나 접근 불가능한 페이지에 접근할 경우 특정 html 파일을 출력할 수 있습니다.

각각의 사이트 VirtualHost 설정에 아래 내용을 추가 합니다.


ErrorDocument 403 /404.html

ErrorDocument 404 /404.html


그리고 DocumentRoot (소스 최상위 디렉토리) 에 404.html 파일을 만들어 안내하고 싶은 내용으로 채우면 됩니다.

아파치 데몬을 재시작 하여 적용합니다.


# systemctl restart apache2



반응형

댓글()

error 로그에서 favicon.ico 로그 남기지 않기

리눅스/APACHE|2020. 9. 22. 08:06
반응형

httpd.conf 파일에 아래 내용 삽입하고 데몬 재시작 하면 됩니다.



Redirect 404 /favicon.ico


<Location /favicon.ico>

    ErrorDocument 404 "No favicon"

</Location>


반응형

댓글()