아파치 웹호스팅을 위해 개별 유저간에 다른 디렉토리 접근제한 방법
웹서버로 구성하여 웹호스팅 서비스를 하기위해 apache에서 도메인 기반의 virtual host를 설정하려 하는데, /home/user/docs을 각 개인별 홈페이지로 설정을 하고 있다.
이 개별 유저들이 다른 디렉토리로 접근을 못하게 하려 하는데 설정방법은?
------------>>>>>
사용자별로 웹컨텐츠를 보안적으로 사용하고자 하는 내용입니다. 그에 대한 설정예와 방법을 설명드리겠습니다.
사용자별로 자신의 home 디렉토리에 contents(파일)를 두고 각각의 사용자가 인증을 거쳐 컨텐츠를 확인할 수 있는 설정에 대한
설명과 설정예입니다.
우선 웹서버가 동작하여 OS상의 디렉토리의 컨텐츠(HTML,이미지등의 파일) 를 웹상에 보여줄 때
기본설정에서는 apache 라는 계정으로 작동하기때문에 반드시 apache라는 계정이(apache프로세스를 동작시키는 계정 ps -ef | grep httpd 로 확인가능)
컨텐츠(파일)를 읽을 수 있는 권한이 반드시 있어야 합니다.
만약 각 디렉토리마다 접근권한을 달리하고자 할때에는 .htaccess 라는 파일과 htpasswd 로 인증에 대한 파일을 만들어서 운영해야 합니다.
(사용자별 인증에 대한 다른 방법은 프로그램 소스코드를 통한 인증과 그에 따른 분기방법이 일반적이라고 하겠습니다. 그 내용은 다루지 않겠습니다.)
설정방법은 아래와 같습니다.
>>>설정예입니다.
사용자별 html content가 위치하는 디렉토리 : /home/사용자계정/public_html
만들어야 하는 파일 : .htaccess (/home/사용자계정/public_html 하위에 복사할것,인증이 필요한 디렉토리에 둠)
/var/www/passwordfile (각 사용자별로 만들수도 있고 하나만 만들수도 있음)
디렉토리의 권한설정 필요 :
/home/사용자계정 은 711로 변경
/home/사용자계정/public_html 은 755로 변경
사용자별 웹페이지 접근방법 : http://ip/~사용자계정/aaa.html
>>>httpd.conf 의 설정변경
AccessFileName .htaccess (이미 좌측과 같이 설정되어 있을 것입니다.)
<IfModule mod_userdir.c>
#
# UserDir is disabled by default since it can confirm the presence
# of a username on the system (depending on home directory
# permissions).
#
#UserDir disable (좌측과 같이 주석처리합니다)
#
# To enable requests to /~user/ to serve the user's public_html
# directory, remove the "UserDir disable" line above, and uncomment
# the following line instead:
#
UserDir public_html (/home/~사용자계정/public_html 디렉토리명을 의미합니다.- 설정함)
</IfModule>
# 아래가 주석처리 되어 있는 것을 주석을 해제해 줍니다.
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
>>>사용자별 계정에 따른 패스워드 만드는 방법
htpasswd -c passwordfile ijkim
htpasswd passwordfile ddddd
htpasswd passwordfile jboss
(각 계정별로 파일을 새로 만들기 위해서는 passwordfile명을 달리해야합니다.)
실제 설정된 아래의 디렉토리 구조를 보시면 이해하시기 쉬울 것 같습니다.
>>>디렉토리구조 와 파일의 퍼미션
[root@OSS /]# cd /home
[root@OSS home]# ls -al
total 36
drwxr-xr-x 7 root root 4096 Mar 20 20:01 .
drwxr-xr-x 29 root root 4096 Mar 6 01:01 ..
drwx--x--x 8 ddddd ddddd 4096 Mar 20 19:59 ddddd
drwx--x--x 4 ijkim ijkim 4096 Mar 20 19:59 ijkim
drwx--x--x 6 jboss jboss 4096 Mar 20 20:00 jboss
drwx--x--x 9 leewj admin 4096 Mar 20 19:08 leewj
drwx--x--x 4 sunuser sunuser 4096 Mar 20 19:08 sunuser
[root@OSS home]# cd ddddd
[root@OSS ddddd]# ls -al
total 80
drwx--x--x 8 ddddd ddddd 4096 Mar 20 19:59 .
drwxr-xr-x 7 root root 4096 Mar 20 20:01 ..
-rw------- 1 ddddd ddddd 1886 Mar 5 00:10 .bash_history
-rw-r--r-- 1 ddddd ddddd 24 Feb 12 00:12 .bash_logout
-rw-r--r-- 1 ddddd ddddd 176 Feb 12 00:12 .bash_profile
-rw-r--r-- 1 ddddd ddddd 124 Feb 12 00:12 .bashrc
drwxr-xr-x 2 ddddd ddddd 4096 Mar 20 19:59 public_html
[root@OSS ddddd ]# cd public_html/
[root@OSS public_html]# ls -al
total 16
drwxr-xr-x 2 ddddd ddddd 4096 Mar 20 19:59 .
drwx--x--x 8 ddddd ddddd 4096 Mar 20 19:59 ..
-rwx------ 1 ddddd ddddd 6 Mar 20 19:08 aaa.html
-rwxr-xr-x 1 ddddd ddddd 87 Mar 20 19:56 .htaccess
-----------------------------------------------------------
[root@OSS jboss]# pwd
/home/jboss
[root@OSS jboss]# ls -al
total 489064
drwx--x--x 6 jboss jboss 4096 Mar 20 20:00 .
drwxr-xr-x 7 root root 4096 Mar 20 20:01 ..
-rw------- 1 jboss jboss 108 Jan 4 19:16 .bash_history
-rw-r--r-- 1 jboss jboss 24 Jan 3 16:54 .bash_logout
-rw-r--r-- 1 jboss jboss 176 Jan 3 16:54 .bash_profile
-rw-r--r-- 1 jboss jboss 124 Jan 3 16:54 .bashrc
drwxr-xr-x 2 root root 4096 Mar 20 20:00 public_html
[root@OSS jboss]# cd public_html/
[root@OSS public_html]# ls -al
total 16
drwxr-xr-x 2 jboss jboss 4096 Mar 20 19:59 .
drwx--x--x 8 jboss jboss 4096 Mar 20 19:59 ..
-rwx------ 1 jboss jboss 6 Mar 20 19:08 aaa.html
-rwxr-xr-x 1 jboss jboss 87 Mar 20 19:56 .htaccess
-----------------------------------------------------------
[root@OSS public_html]# cat .htaccess
AuthType Basic
AuthName "manage"
AuthUserFile /var/www/passwordfile
Require valid-user
[root@OSS]# cd /var/www
[root@OSS www]# ls -al
total 68
drwxr-xr-x 8 root root 4096 Mar 20 19:52 .
drwxr-xr-x 26 root root 4096 Dec 12 02:34 ..
drwxr-xr-x 2 root root 4096 Aug 6 2007 cgi-bin
drwxr-xr-x 3 root root 4096 Dec 12 02:26 error
drwxr-xr-x 2 root root 4096 Aug 6 2007 html
drwxr-xr-x 3 root root 4096 Dec 12 02:27 icons
drwxr-xr-x 14 root root 4096 Dec 12 02:30 manual
-rw-r--r-- 1 root root 61 Mar 20 19:52 passwordfile
drwxr-xr-x 2 webalizer root 4096 Mar 4 04:02 usage
[root@OSS www]# cat passwordfile
ijkim:ClW.gG5afJKaQI
ddddd :Hdaaw2Z33M
jboss:hrwdda.A2Q
만약 사용자별로 자신들의 디렉토리만 접근가능하도록 하려면 위에 생성한 passwordfile을 각 계정마다 만들어야하며
/home/~사용자계정/public_html/.htaccess 파일의 내용중 AuthUserFile /var/www/passwordfile 부분이 각 계정별로 다른 파일을 지정해야 합니다.
>>>참고URL
http://httpd.apache.org/docs/2.0/howto/htaccess.html
http://httpd.apache.org/docs/2.0/howto/public_html.html
http://httpd.apache.org/docs/2.0/howto/auth.html