For Multi Users Apache2 Configuration in Ubuntu
학회를 위한 홈페이지를 만들 일이 생겼다. 일단 Linux Ubuntu 13.04가 설치된 고정 IP에 도메인을 이미 가진 서버 컴퓨터가 있고, 여기 proFTPd와 Apache2가 설치되어 있다. 이 노트의 목적은 홈페이지를 위한 계정을 하나 새로 만들어서 ftp접속을 이용한 홈페이지 관리를 할 수 있도록 하는 것이 목적이다.
Add User
Terminal을 이용해서 작업한다. 다음 명령어로 smallorbig
ID를 만들자.
$sudo adduser smallorbig
adduser
명령어를 이용하면 home폴더가 자동으로 생성되는데 홈페이지 파일을 넣을 폴더를 따로 하나 생성해두자. 나는 www
로 생성했다.
$sudo mkdir /home/smallorbig/www
Apache2 Configuration
s2junn님의 글에 자세한 설명이 있어서 많은 정보를 얻었다. 사실 내가 작업할 서버에는 이미 다른 아이디로 홈페이지가 따로따로 할당되어 있었기 때문에 파일 하나만 설정하면 되었다. userdir.conf
라는 파일인데 설정 방법은 Apache Module mod_userdir에서 참고했다. 파일 위치는 /etc/apache2/mods-available/
다.
<IfModule mod_userdir.c>
UserDir /home/www/*
UserDir disabled
UserDir enabled user1 user2 smallorbig
<Directory /home/www/*>
AllowOverride All
Options ExecCGI
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
</IfModule>
위 내용이 말하는 것은 다음과 같다.
/home/www/"users"
폴더에 각 사용자들의 홈페이지를 연결
기존에 설정되어 있는 환경을 이야기 하자면, /home/www/
아래 각 사용자들에게 폴더를 할당해서 각 사용자들의 홈폴더에 ~/www
폴더를 만든 다음에 두 폴더를 마운트시켜 동기화 해 두었다. 이렇게 하면 ftp로 접속한 각 사용자가 자기 www
폴더에 속해있는 파일만 수정하면 각자의 홈페이지는 /home/www/"users"
의 동기화된 파일을 읽어서 보여주는 식이다. 따라서 다음 설명을 추가한다.
Folder Binding
smallorbig
사용자의 ~/www
폴더를 /home/www/smallorbig
에 연결하려면 다음 명령어를 실행한다. Ubuntu manuals를 참고했다.
$sudo mount -rw --bind /home/www/smallorbig /home/smallorbig/www none rw,bind 0 0
-rw
는 읽고 쓰기가 가능하게 하는 옵션이고, --bind
는 폴더간의 마운트를 위한 옵션이다. 여기까지 입력하면 홈페이지가.... 안뜰 수도 있다;;
DirectoryIndex
/etc/apache2/mods-available/
에 dir.conf
라는 파일이 있다. 이 파일을 열어보면 DirectoryIndex
를 설정할 수 있다. 자세한 내용은 Apache Module mod_dir를 참고하면 되겠다.
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
일단 서버의 파일에는 다음과 같이 설정되어 있는데 뒷 부분에 원하는 파일 명을 입력하면 우선적으로 그 파일을 홈페이지 첫 화면으로 띄우게 된다. 만약에 저 파일명들이 없으면 아래 문구를 볼 수가 있다.
Forbidden
You don’t have permission to access /~smallorbig/ on this server.
Apache/2.2.22 (Ubuntu) Server at "address" Port "number"
마운트를 시키고 나서 재부팅을 하면 마운트가 해제된다. 그래서 재부팅시 자동으로 마운트가 되도록 명령어를 입력하고 싶었는데, 검색을 해보니 fstab
과 mtab
의 차이가 궁금해진다. Experts-Exchange에 올라온 답변이 가장 이해하기 쉬워보여 노트해둔다.
fstab
contains all filesystems known to your system (which can be mounted) and mtab
contains all filesystems which are actually mounted.
그렇다면 mtab
을 보면 현재 마운트 된 리스트를 알 수 있을 뿐이므로 fstab
을 사용해야 할 것 같은데 우리 서버에는 이 파일에 폴더 마운트 명령어가 없다;; 어디서 찾아야 할까;;
[Solve] crontab
을 이용한다. terminal에서 다음을 입력.
$sudo crontab -e -uroot
그리고 리부팅시 마운트 바인딩 명령어를 추가한다.
@reboot /bin/mount --bind /home/www/smallorbig /home/smallorbig/www
끝.