files 디렉토리는 HTTP 파일 서버를 위해 일부러 인덱싱이 허용되어있다.
이 중 test 디렉토리는 모두가 접근 가능하게 만들되, public(/home/Tools/)이라는 디렉토리는 접근 가능한 사용자를 제한하고 싶다.
이를 위해 아파치 HTTP 인증을 서버에 적용해보고자 한다.
1. HTTP 인증을 하고 싶은 디렉터리에 .htaccess 파일 생성
2. HTTP 인증 사용자 생성
Basic 인증을 사용할 시 1), Digest 인증을 사용할 시엔 2)을 수행한다.
1) Basic 인증 시
$ htpasswd -c .htpasswd [사용자 ID]
2) Digest 인증 시
$ htdigest -c .htdigest '[Auth Name]' [사용자 ID]
사용자 ID, 2번의 PW 입력 후 .htpasswd(.htdigest) 파일이 생성된다.
.htpasswd(.htdigest)는 .htaccess와 같은 디렉토리에 위치할 필요는 없다.
3. apache.conf 설정 변경
$ sudo vi /etc/apache2/apache2.conf
설치된 apache2와 OS에 따라 설정파일이 약간씩 다를 수 있으니 참고
해당 설정 파일에서 아래의 코드를 추가해준다.
<Directory /var/www/html/files>
AllowOverride all
Options +Indexes +FollowSymLinks
</Directory>
AccessFileName .htaccess
AllowOverride all 을 통해 files의 하위 디렉토리에서는 HTTP 인증 옵션이 허용된다.
(옵션이 존재하긴 하나 에러가 발생해서 all로 함)
Options +Indexes +FollowSymLinks 는 files 디렉토리(하위 포함)의 인덱싱을 허용해주고, public 디렉토리의 심볼릭 링크를 허용해주기 추가한 것으로 심볼릭링크와 인덱싱을 허용해줄 것이 아니라면 Options None으로 해주거나 삭제해도 된다.
4. .htaccess 파일 수정
빈파일인 .htaccess 파일에 HTTP 인증을 위한 설정을 해준다.
Basic 인증을 사용할 시 1), Digest 인증을 사용할 시엔 2)을 수행한다.
1) Basic 인증 시
AuthName "Test"
AuthType Basic
AuthUserFile "/var/www/html/files/public/.htpasswd"
ErrorDocument 401 "No"
require valid-user
/var/www/html/files/public/.htpasswd 파일을 참조해서 인증하고 인증 방식은 기본 인증(Basic)을 사용한다.
2) Digest 인증 시
AuthName "Test"
AuthType Digest
AuthUserFile "/var/www/html/files/public/.htdigest"
ErrorDocument 401 "No"
require valid-user
require valid-user 를 통해 인증된 사용자로 로그인하지 않으면 접근이 불가하고 로그인을 실패할 시 401에러에 "No"라는 화면을 보여준다.
5. apache2 재시작
$ sudo service apache2 restart
Digest 인증 사용 시 설정대로 했는데 500 에러가 뜨는 경우가 있다.
아파치 에러 로그 파일 (/var/log/apache2/error.log) 에서 다음과 같은 에러가 발생하는지 확인한다.
AH01796: AuthType Digest configured without corresponding module
만약 위와 같은 에러가 발생하면 아래의 명령어를 입력한 후 apache2를 재시작해보도록 한다.
$ sudo a2enmod auth_digest
6. HTTP 인증 테스트
정상적으로 적용이 되면 인증이 필요한 public 디렉토리는 디렉토리리스팅에 노출되지 않는다.
public 디렉터리로 접근하여 로그인을 하게 되면 public 디렉터리와 내부 파일들이 보이게 된다.
기본 인증의 경우 입력한 ID/PW 값이 base64로 인코딩되어 전달되므로 스니핑을 통해 탈취당할 위험이 있다.
AuthType 중 Digest를 사용할 경우 md5 해시로 전달되므로 이쪽이 안전하긴 하다.
보안을 신경써야한다면 Digest를 사용하는 것을 권고한다.
'Server' 카테고리의 다른 글
SFTP Chroot 감옥 사용자 생성 (0) | 2024.04.01 |
---|---|
Github Actions로 push 이벤트 발생 시 내 서버로 배포 자동화하기 (0) | 2023.09.05 |
MYSQL 외부접근 허용하기 (0) | 2019.04.11 |
아파치 보안 설정 (0) | 2018.04.11 |