[가상서비스]RedHat 6.0기반 가상웹-메일-FTP운영하기 김칠봉 1999-08-18 : 1차 (최초작성) 1999-09-16 : 2차 1999-10-09 : 3차 1999-11-29 : 4차 (메일서버에 대한 DNS MX 레코드 수정) 1999-12-08 : 5차 (가상 FTP Anonymous 설정 수정) 2000-02-22 : 6차 (내용 보완 및 FAQ 추가) --------------------------------------------------------------- 이 글의 내용은 1대의 리눅스박스에 같은 IP 주소, 서로 다른 IP 주소, 같은 도메인, 서로 다른 여러개의 도메인에 대해서 가상웹-메일-FTP 운영을 다루 는 기초적이고 예시적인 방법으로 서술한 내용입니다. 그리고 내부 IP 주소를 이용하여 테스트에 성공한 예입니다. --------------------------------------------------------------- 이 문서는 HTML 문서로도 지원합니다. http://linuxer.suwon.ac.kr/linux_docs/virtual_services/ http://urban.suwon.ac.kr/~san2/linux_docs/virtual_services/ 주) 개념적이고 원론적인 내용은 모두 빠져있습니다. 웹상에 많은 문서가 존재하 므로 이런 문서를 찾아 먼저 습득하고 본 문서를 읽어나가면 쉽게 이해하리 라 생각됩니다. 또한 이 문서는 좋은 문서가 아닙니다. 다만 하나의 예시 일 뿐입니다. 그러나 예시를 통해 자신의 상황에 맞게 수정하면 누구나 쉽게 가상웹-메일- FTP를 운영하리라 생각했기 때문에, 그리고 본인의 실력이 형편없는 관계로 원론적이고 개념적인 내용을 설명하자면 어쩔 수 없이 도용(?)해야만 하기 때문에 개념적이고 원론적인 정의는 모두 뺐습니다. 따라서 이하 서술된 내용은 리눅스 전문서적이나 기존에 존재하는 문서를 그 대로 배끼는 그런 우매한 짓은 하지 않을 것이며 이런 문서의 지식을 바탕으로 본인이 직접 테스트하고 느낀 점을 토대로 서술해 나갈 것이며, 설사 본인의 지식이 모자라 기존의 문서의 힘을 빌릴 경우에는 정확한 출처를 밝히고 기술 해 나갈 것입니다. 이하 관례적으로 "경어" 생략합니다. --------------------------------------------------------------- 목차 1. 들어가기 전에 1-1. 상세한 세부분야 내용(참고자료)-링크 1-2. 나의 테스트 환경 및 목표 2. DNS(도메인 네임서비스) 설정 2-1. Bind 설치하기 2-2. 나의 목표에 맞게 DNS 설정 2-2-1. /etc/named.boot 2-2-2. /etc/named.conf 2-2-3. /var/named/named.ca 2-2-4. /var/named/named.local 2-2-5. /var/named/zone-10.168.192 2-2-6. /var/named/zone-linux.ac.kr 2-2-7. /var/named/zone-linuxer.com 2-2-8. /var/named/zone-linuxer.net 2-2-9. /var/named/zone-sonamu.co.kr 3. 가상 웹서버 (아파치 1.3.9 경우) 3-1. 아파치설치(생략) 3-2. 아파치 설정파일(httpd.conf) 4. 가상 메일서버 4-1. sendmail 설치하기 4-2. qpopper 설치하기 4-3. /etc/sendmail.cf 4-4. /etc/sendmail.cw 4-5. /etc/sendmail.cm 4-6. /etc/mail/access 4-7. /etc/mail/virtusertable 5. 가상 FTP서버 (ProFTPd) 5-1. ProFTPd 설치하기 5-2. /etc/proftpd.conf 6. 자주 질문되는 내용(3차 보완시 추가) 7. 마치며 --------------------------------------------------------------- 1. 들어가기 전에 1-1. 상세한 세부분야 내용(참고자료)링크 - Net-3 HOWTO(KLDP) - Network Adminstrator Guide(KLDP) - 김병찬(적수)님의 네임서버강좌(KLDP) - 김승영님의 DNS(도메인네임 및 네임서버구축)(KLDP) - DNS HOWTO(KLDP) - 리눅스에서 IP Aliasing 세팅하기 mini HOWTO(KLDP) - Sendmail 이야기(KLDP) - Virtual Services HOWTO(KLDP) - 가상웹 mini HOWTO(KLDP) - 아파치 1.3 메뉴얼 Virtualhost(영문) - Proftpd Configuration(영문) - Proftpd Reference (영문) - POP3 daemon 설치 및 활용가이드 -네번째 판(박재호님 홈페이지) - 김정균님의 홈페이지 1-2. 나의 테스트환경 및 목표 [서버환경] - OS: 알짜리눅스6.0(커널2.2.12) - 3Com 900B-TPO Ethernet Card 1개 - Intel eepro 10 ISA Ethernet Card 1개 - apache 1.3.9-1kr - Sendmail 8.9.3-10kr - qpopper 3.0 - bind 8.2-6 - Proftpd 1.2.0Pre6(99.09.11일자) - 사용한 IP 주소: 192.168.10.3~5 (내부IP 주소) [클라이언트환경] - OS: 윈98 - 3Com 905B-TPO Ethernet Card 1개 - 사용한 IP 주소: 192.168.10.11 (내부IP 주소) [나의 목표] - 서버 : 리눅스박스1대 - 사용할 IP 주소 : 192.168.10.3 192.168.10.4 192.168.10.5(3개) - 앞으로 계속 도메인이 추가시에는 192.168.10.5 하나만 사용할 예정이다. - linux.ac.kr 도메인은 현 리눅스박스의 주 도메인이고 game(계정 : game) 호스트만 제외하고 모두 root가 관리한다. game 호스트 관리자인 game은 웹 문의에 대한 메일을 gamedori@hanmail.net로 사용하고자 한다. - linuxer.com 도메인을 사용하는 자는 고객이며 2개의 웹호스트 (www. stock)를 운영하기를 원하고 'stock' 웹호스트 대한 웹문의는 별도로 stock@linuxer.com으로 받고 싶어하며 Anonymous FTP도 운영하고자 한 다. 계정은 com이며 1명이 관리하고자 한다. - linuxer.net 도메인을 사용하는 자는 고객이며 역시 2개의 웹호스트 (www. meeting)을 운영할 계획이고 meeting 웹호스트의 이용자가 많아 'www' 웹호스트의 Admin이 관리할 수 없어 다른 사람이 관리하기를 원한다. 따라서 'www' 웹 호스트에 대해서는 Admin(계정 : net)과 'meeting' 웹호스 트에 대해서는 다른 사람(account : meet)이 관리하고자 한다. 'meeting' 웹호스트에 대한 웹문의는 meeting@linuxer.net로 사용하므로 결국 2명이 관리하는 셈이다. - sonamu.co.kr 도메인을 사용하는 자는 고객이며 오직 하나의 웹호스트 ('www')만 운영하고자 한다. 또한 메일은 webmaster@sonamu.co.kr 이 아닌 admin@sonamu.co.kr로 사용하고자 한다. 또한 이 고객이 몸담고 있고 회사에서는 4개의 e-mail을 더 사용하기를 원한다. 즉 이 회사의 사장은 namu@sonamu.co.kr, 나머지 3명의 사원은 각각 'kim', 'park', 'lee' 라는 ID로 메일을 이용하고자 한다. 따라서 웹 Admin과 메일사용자인 4명을 합하면 5명의 사용자가 된다. 그리고 사장과 3명의 사원은 http://www.sonamu.co.kr/~namu 와 같은 홈페이지를 각자 가지고 싶어한다. - 주) 필자는 웹호스팅업체에 몸담고 있지 않기 때문에 많은 도메인을 실제로 관리 해본 경험은 없다. 다만 고민 끝에 2대의 PC(리눅스, 윈98)를 다른 PC들과 함께 HUB로 연결하여 내부 IP 주소(C클래스)를 사용하였으며 각각의 여러개의 도메인에 대해서 실제로 내부 IP 주소 1개로 사용하여 네임서버 및 www, mail, ftp, telnet 테스트하는데 성공했을 뿐이다. - 세부사항(*이 글을 이해하는데 필수) ======================+==============+============================== == 호스트+도메인 IP 계정 (Admin E-mail) ======================+==============+============================== == (주도메인)linux.ac.kr 192.168.10.3 root (webmaster@linux.ac.kr) ns.linux.ac.kr 192.168.10.3 root (webmaster@linux.ac.kr) www.linux.ac.kr 192.168.10.3 root (webmaster@linux.ac.kr) mail.linux.ac.kr 192.168.10.3 root (webmaster@linux.ac.kr) ftp.linux.ac.kr 192.168.10.3 root (ftp@linux.ac.kr) study.linux.ac.kr 192.168.10.4 root (study@linuxer.ac.kr) study-app.linux.ac.kr 192.168.10.4 root (study-app@linuxer.ac.kr) study-net.linun.ac.kr 192.168.10.4 root (study-net@linuxer.ac.kr) game.linux.ac.kr 192.168.10.5 game (gamedori@hanmail.net) ======================+==============+============================== == (고객) linuxer.com 192.168.10.5 com (webmaster@linuxer.com) ns.linuxer.com 192.168.10.5 com (webmaster@linuxer.com) www.linuxer.com 192.168.10.5 com (webmaster@linuxer.com) ftp.linuxer.com 192.168.10.5 com (ftp@linuxer.com) stock.linuxer.com 192.168.10.5 com (stock@linuxer.com) ======================+==============+============================== == (고객) linuxer.net 192.168.10.5 net (webmaster@linuxer.net) ns.linuxer.net 192.168.10.5 net (webmaster@linuxer.net) www.linuxer.net 192.168.10.5 net (webmaster@linuxer.net) ftp.linuxer.net 192.168.10.5 net (ftp@linuxer.net) meeting.linuxer.net 192.168.10.5 meet (meeting@linuxer.net) ======================+==============+============================== == (고객)www.sonamu.co.kr 192.168.10.5 sonamu (admin@sonamu.co.kr) (일반계정) namu (namu@sonamu.co.kr) (일반계정) kim (kim@sonamu.co.kr) (일반계정) park (pakr@sonamu.co.kr) (일반계정) lee (lee@sonamu.co.kr) ======================+==============+============================== == 먼저 계정을 발급해 주자. linux.ac.kr 도메인은 시스템 관리자인 root 가 관리하므로 별도로 계정을 만들지 않고 일반유저인 'san2' 가 관리한다는 가정이다. # adduser san2 # passwd san2 password ******* # adduser com # passwd com password ******* # adduser net # passwd net password ******* # adduser meet # passwd meet password ******* # adduser sonamu # passwd sonamu password ******* # adduser namu # passwd namu password ******* # adduser kim # passwd kim password ******* # adduser park # passwd park password ******* # adduser lee # passwd lee password ******* 2. DNS(도메인 네임서비스) 설정 가상 웹호스팅을 원하고자 하는 이는 무엇보다 도메인 네임서버를 잘 설정 해야한다. 네임서버를 어떻게 잘 설정하느냐 못하느냐에 따라서 웹호스팅 가능유무가 결정된다. 또한 IP 주소가 부족하여 1개의 IP 주소로 여러개의 도메인을 한대의 리눅스박스에 운영하는 것도 역시 마찬가지이다. 다음에 보여주는 네임서버 설정의 예는 어디까지나 필자의 예이다. 즉 얼 마든지 같은 결과로 다른 예가 있기 마련이므로 네임서버 설정에 대한 문 서를 꼭 읽어보기 바란다. 여기에서는 첫머리에 말했듯이 개념이나 정의를 설명하지는 않는다. 다만 위의 목표에 부합되기 위해서 네임서버를 설정할 뿐이다.(필자는 네임서버 전문가가 아님) 2-1. Bind 설치하기 네임서버를 구축(또는 설정)하려면 Bind 설치는 필수적이다. Bind와 caching-nameserver는 꼭 설치해야 한다. 우선 자신의 리눅스박스에 설치(rpm)되어 있는지 확인하자. [san2@www san2]$ rpm -qa | grep bind bind-8.2-6 bind-utils-8.2-6 [san2@www san2]$ [san2@www san2]$ rpm -qa | grep name caching-nameserver-6.0-2 [san2@www san2]$ 필자의 리눅스박스에는 bind-8.2 와 caching-nameserver-6.0이 설치 되어 있다. 설치되어 있지 않다면 다음과 같이 CD-ROM이나 FTP싸이트 에서 다운로드하여 설치하기 바란다. 예: CD-ROM으로 설치하기 [san2@www san2]$ su Password: ******** [root@www san2]# mount /mnt/cdrom [root@www san2]# cd /mnt/cdrom/RedHat/RPMS [root@www RPMS]# rpm -Uvh bind* bind ############################## bind-devel ############################## bind-utils ############################## [root@www RPMS]# rpm -Uvh caching-nameserver* caching-nameserver ############################## [root@www RPMS]# 이제 네임서버를 구축하기 위한 밑바탕은 되어있다. 다음단계에는 직접 '나의 목표'에 부합되게 네임서버를 구축(이하 '설정')해 보자. 2-2. 나의 목표에 맞게 DNS 설정 위의 2-1과정을 무사히 끝냈다면 [root@www /etc]# ls -l named* -rw-r--r-- 1 root root 407 Sep 13 08:24 named.boot -rw-r--r-- 1 root root 1508 Sep 13 08:26 named.conf [root@www /etc]# cd /var/named [root@www named]# ls -l total 8 -rw-r--r-- 1 root root 2769 Mar 22 04:49 named.ca -rw-r--r-- 1 root root 422 Mar 22 04:49 named.local [root@www named]# 위의 파일들이 존재할 것이다. 이제 본격적으로 네임서버를 1-2에서 말한 목표대로 설정해 보자. 참고로 필자의 리눅스박스에는 현재 다음과 같이 IP-Aliasing 되어 있다. [san2@www san2]$ /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:10:4B:18:17:77 inet addr:192.168.10.3 Bcast:192.168.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1297308 errors:6 dropped:0 overruns:0 frame:7 TX packets:9037 errors:0 dropped:0 overruns:0 carrier:0 collisions:404 txqueuelen:100 Interrupt:9 Base address:0xe800 eth0:0 Link encap:Ethernet HWaddr 00:10:4B:18:17:77 inet addr:192.168.10.4 Bcast:192.168.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:9 Base address:0xe800 eth0:1 Link encap:Ethernet HWaddr 00:10:4B:18:17:77 inet addr:192.168.10.5 Bcast:192.168.10.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:9 Base address:0xe800 eth1 Link encap:Ethernet HWaddr 00:A0:C9:0C:89:A5 inet addr:210.123.59.66 Bcast:210.123.59.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1121139 errors:0 dropped:0 overruns:0 frame:9 TX packets:35404 errors:1 dropped:0 overruns:0 carrier:2 collisions:732 txqueuelen:100 Interrupt:3 Base address:0x210 eth1:0 Link encap:Ethernet HWaddr 00:A0:C9:0C:89:A5 inet addr:210.123.59.72 Bcast:210.123.59.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 Interrupt:3 Base address:0x210 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:3924 Metric:1 RX packets:1294 errors:0 dropped:0 overruns:0 frame:0 TX packets:1294 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 [san2@www san2]$ [san2@www san2]$ cat /etc/sysconfig/network NETWORKING=yes FORWARD_IPV4=no HOSTNAME=www.linux.ac.kr DOMAINNAME=linux.ac.kr GATEWAY=210.123.59.1 #<----실제 존재하는 GW (본 내용과 상관없음) GATEWAYDEV=eth1 #<----실제 인터넷을 사용하기 위해서 2번째 #이더넷 (본 내용과 상관없음) [san2@www san2]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 IPADDR=192.168.10.3 NETMASK=255.255.255.0 NETWORK=192.168.10.0 BROADCAST=192.168.10.255 ONBOOT=yes BOOTPROTO=none [san2@www san2]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0:0 DEVICE=eth0:0 USERCTL=no ONBOOT=yes BOOTPROTO=none BROADCAST=192.168.10.255 NETWORK=192.168.10.0 NETMASK=255.255.255.0 IPADDR=192.168.10.4 [san2@www san2]$ cat /etc/sysconfig/network-scripts/ifcfg-eth0:1 DEVICE=eth0:1 USERCTL=no ONBOOT=yes BOOTPROTO=none BROADCAST=192.168.10.255 NETWORK=192.168.10.0 NETMASK=255.255.255.0 IPADDR=192.168.10.5 [san2@www san2]$ 필자의 bind 버전은 8.x대이다. 따라서 named.boot파일은 손댈 필요는 없지만 학습의 목적상 named.boot 파일도 포함한다. 또한 2차 네임서버 설정은 생략한다. 2-2-1. /etc/named.boot (bind 4.x) ----------/etc/named.boot -------------------------------- ; ; a caching only nameserver config ; ; 내부 IP사용의 예 directory /var/named cache . named.ca primary 0.0.127.in-addr.arpa named.local primary 10.168.192.in-addr.arpa zone-10.168.192 primary linux.ac.kr zone-linux.ac.kr primary linuxer.com zone-linuxer.com primary linuxer.net zone-linuxer.net primary sonamu.co.kr zone-sonamu.co.kr ---------end --------------------------------------------- 2-2-2. /etc/named.conf (bind 8.x) ----------/etc/named.conf --------------------------------- // generated by named-bootconf.pl options { directory "/var/named"; /* * If there is a firewall between you and nameservers you want * to talk to, you might need to uncomment the query-source * directive below. Previous versions of BIND always asked * questions using port 53, but BIND 8.1 uses an unprivileged * port by default. */ // query-source address * port 53; }; // // a caching only nameserver config // zone "." { type hint; file "named.ca"; }; zone "0.0.127.in-addr.arpa" { type master; file "named.local"; }; zone "10.168.192.in-addr.arpa" { type master; file "zone-10.168.192"; }; zone "linux.ac.kr" { type master; file "zone-linux.ac.kr"; }; zone "linuxer.com" { type master; file "zone-linuxer.com"; }; zone "linuxer.net" { type master; file "zone-linuxer.net"; }; zone "sonamu.co.kr" { type master; file "zone-sonamu.co.kr"; }; ---------end ---------------------------------------------- 2-2-3. /var/named/named.ca --------/var/named/named.ca------------------------------- 생략 (★ 편집할 필요없음) ---------end ---------------------------------------------- 2-2-4. /var/named/named.local ★ 편집할 필요없음 ------/var/named/named.local ------------------------------ @ IN SOA localhost. root.localhost. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS localhost. 1 IN PTR localhost. ---------end ---------------------------------------------- 2-2-5. /var/named/zone-10.168.192 ------/var/named/zone-10.168.192 -------------------------- @ IN SOA ns.linux.ac.kr. admin.linux.ac.kr. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns.linux.ac.kr. 3 IN PTR linux.ac.kr. 4 IN PTR mail.linux.ac.kr. 4 IN PTR study.linux.ac.kr. 5 IN PTR game.linux.ac.kr. 5 IN PTR linuxer.com. 5 IN PTR linuxer.net. 5 IN PTR sonamu.co.kr. ;<---끝에 점(Dot) 필수 ---------end ---------------------------------------------- 2-2-6. /var/named/zone-linux.ac.kr -------/var/named/zone-linux.ac.kr -------------------------- @ IN SOA ns.linux.ac.kr. admin.linux.ac.kr. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns.linux.ac.kr. IN A 192.168.10.3 IN HINFO "x86 Pentium" "Alzza Linux 6.0" ; IN MX 10 linux.ac.kr. ; 이 부분은 주석처리 localhost IN A 127.0.0.1 mail IN A 192.168.10.3 study IN A 192.168.10.4 game IN A 192.168.10.5 ns IN CNAME @ www IN CNAME @ ftp IN CNAME @ study-app IN CNAME study study-net IN CNAME study ---------end ---------------------------------------------- 2-2-7. /var/named/zone-linuxer.com ----- /var/named/zone-linuxer.com ------------------------- @ IN SOA ns.linuxer.com. admin.linuxer.com. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns.linuxer.com. IN A 192.168.10.5 IN HINFO "x86 Pentium" "Alzza Linux 6.0" ; IN MX 10 linuxer.com. ; 이 부분은 주석처리 ns IN A 192.168.10.5 www IN A 192.168.10.5 stock IN A 192.168.10.5 ftp IN A 192.168.10.5 ;ns IN CNAME @ ;www IN CNAME @ ;ftp IN CNAME @ ;stock IN CNAME @ ---------end ----------------------------------------- 2-2-8. /var/named/zone-linuxer.net ------/var/named/zone-linuxer.net --------------------------- @ IN SOA ns.linuxer.net. admin.linuxer.net. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns.linuxer.net. IN A 192.168.10.5 IN HINFO "x86 Pentium" "Alzza Linux 6.0" ; IN MX 10 linuxer.net. ; 이 부분은 주석처리 ns IN CNAME @ www IN CNAME @ ftp IN CNAME @ meeting IN CNAME @ ---------end ------------------------------------------- /var/named/zone-linuxer.com 파일에서와 같이 CNAME 레코드를 사용하지 않고 A 레코드를 써도 상관없다. 그리고 필자는 MX 레코드에 대해서 모두 주석으로 처리해 놓았다. 물론 주석을 제거해도 상관없다. 관련 전문 문서(또는 서적)에는 각각의 호스트(여기에서는 독립된 기계)에 최소한 하나 정도의 MX 레코드를 권장하고 있다. 그러나 이 문서의 예제에서는 오직 한대의 리눅스 박스로 모든 인터넷 서비스를 해결해야하므로 굳지 MX 레코드는 필요하지 않다고 본다. 왜냐하면 하나의 리눅스 박스 차체 메일 서비스 기능이 있으므로 굳지 MX 레코드를 이용하여 포워딩할 필요가 없기 때문이다. MX 레코드를 사용하는 대부분의 이유가 순수 도메인과 같은 메일 주소를 다른 메일 서버로 포워딩할 때 그 가치가 있다. 굳지 원한다면 다음과 같이 설정할 수 있다. linux.ac.kr. IN MX 10 linux.ac.kr. 또는 @ IN MX 10 @ MX 레코드 다음에 나오는 숫자는 포워딩할 mail 호스트가 여러개 있 을 경우에 필요하다. 즉, 숫자가 작으면 그 우선권이 있다. 앞의 경우처럼 오직 하나의 호스트로 포워딩할 경우에는 숫자 "0"과 양의 정수 어느 값을 주어도 상관없다. 2-2-9. /var/named/zone-sonamu.co.kr ------/var/named/zone-sonamu.co.kr ------------------------ @ IN SOA ns.sonamu.co.kr. admin.sonamu.co.kr. ( 1997022700 ; Serial 28800 ; Refresh 14400 ; Retry 3600000 ; Expire 86400 ) ; Minimum IN NS ns.sonamu.co.kr. IN A 192.168.10.5 IN HINFO "x86 Pentium" "Alzza Linux 6.0" ; IN MX sonamu.co.kr. ; 이 부분은 주석처리 www IN CNAME @ ---------end ----------------------------------------------- 설정(편집)이 끝났으면 네임서버를 재가동한다. [root@www san2]# /etc/rc.d/init.d/named restart 또는 [root@www san2]# ndc stop [root@www san2]# ndc start 설정 파일만 다시 갱실할 경우에는 [root@www san2]# ndc reload 또는 [root@www san2]# killall -HUP named 3. 가상 웹서버 (아파치 1.3.9 경우) 아파치 서버는 가상 웹서버를 지원한다. 보통 가상 웹호스트는 크게 - IP-based Virtual Hosts - Name-based Virtual Hosts 로 볼 수 있다. 본 내용에서는 둘 다 포함하고 있다. 3-1. 아파치 설치(생략) 웹상이나 자신이 사용하는 배포본의 FTP에서 최신의 버전을 받아와서 RPM으로 설치하든지 소스를 직접 컴파일하여 설치하든지 이건 여러분의 선택이다. 아파치 설치는 RPM으로 설치했다는 가정 하에 /etc/httpd/conf/httpd.conf 파일이 아파치의 설정파일이다. 3-2. 아파치 설정파일(httpd.conf) 드디어 가상 웹 호스팅을 위한 작업이다. RPM으로 설치했을 경우는 /etc/httpd/conf/httpd.conf 파일을 편집기로 열어 다음과 같이 여러분의 환경에 맞추어 편집한다. 가능한 불필요한 지시자는 사용하지 않도록 하며, 많은 가상 호스트를 운영할 계획이고 같은 내용의 설정이라면 한 줄이라도 설정을 줄이는 방향으로 설정하기 바란다. 설정이 많은 만큼 아파치 웹 서버는 더 느려지기 때문이다. ------/etc/httpd/conf/httpd.conf ----------------------------- # 중략 ServerType standalone ServerRoot "/etc/httpd" # # 중략 # #ResourceConfig conf/srm.conf #AccessConfig conf/access.conf # # 중략 # ServerAdmin webmaster@linux.ac.kr ServerName www.linux.ac.kr # # IP 주소는 192.168.10.3 이다. DocumentRoot "/home/httpd/html" # # 중략 # UserDir Public_html # # 중략 # HostnameLookups Off # off 로 해 놓은게 조금 빠르다. # # 중략 # ErrorLog logs/error_log # # 중략 # CustomLog logs/access_log common # # 중략 # ServerSignature Email # 선택은 여러분의 자유이다. # 중략 ##########[가상 웹 호스트 설정 부분]##################### # NameVirtualHost 192.168.10.4 # 192.168.10.4의 IP 주소를 사용하는 모든 호스트의 기본이 되는 호스트 # ServerName study.linux.ac.kr ServerAdmin study@linux.ac.kr DocumentRoot /home/linux.ac.kr/study ErrorLog logs/study.linux.ac.kr-error_log CustomLog logs/study.linux.ac.kr-access_log common ServerName study-app.linux.ac.kr ServerAdmin study-app@linux.ac.kr DocumentRoot /home/linux.ac.kr/study-app ErrorLog logs/study-app.linux.ac.kr-error_log CustomLog logs/study-app.linux.ac.kr-access_log common ServerName study-net.linux.ac.kr ServerAdmin study-net@linux.ac.kr DocumentRoot /home/linux.ac.kr/study-net ErrorLog logs/study-net.linux.ac.kr-error_log CustomLog logs/study-net.linux.ac.kr-access_log common # NameVirtualHost 지시자는 어느 곳에 위치하여도 결과는 똑같다. # 즉 여기에서 부연 설명하자면 # 192.168.10.5를 사용하는 호스트에 대해서는 game.linux.ac.kr # 호스트가 기본이 되는 호스트이다. 예를 들어 네임서버에 # ns.linuxer.com이 등록되어 있지만 가상호스트 설정부분에서 # ns.linuxer.com 을 정의해 주지 않으면 ns.linuxer.com으로 접속하면 # game.linux.ac.kr 의 Document를 보여준다. # 꼭 네임서버에 정의한 모든 호스트에 대해서 가상호스트에 정의해 # 주어야 어색함이 없다. # 이때 사용하는 것이 ServerAlias 지시자이다. 아래의 내용을 좀더 # 살펴보자. # NameVirtualHost 192.168.10.5 # 192.168.10.5 의 IP 주소를 사용하는 모든 호스트의 기본이 되는 호스트 # ServerName game.linux.ac.kr ServerAdmin game@linux.ac.kr DocumentRoot /home/linux.ac.kr/game ErrorLog logs/game.linux.ac.kr-error_log CustomLog logs/game.linux.ac.kr-access_log common ServerName stock.linuxer.com ServerAdmin stock@linuxer.com # admin은 com 계정으로 메일을 받는다. DocumentRoot /home/com/wwwhome_stock ScriptAlias /cgi-bin/ "/home/com/wwwhome_stock/cig-bin/" # 특히 심볼릭 링크하여 홈을 운영한다면 ScriptAlias 정의는 꼭 해주어야 # 한다. ErrorLog logs/stock.linuxer.com-error_log CustomLog logs/stock.linuxer.com-access_log common ServerName www.linuxer.com ServerAdmin webmaster@linuxer.com # admin은 com 계정으로 메일을 받는다. ServerAlias *.linuxer.com DocumentRoot /home/com/wwwhome ErrorLog logs/www.linuxer.com-error_log CustomLog logs/www.linuxer.com-access_log common # 중요 ################################## # ServerAlias 에 대해서 부연 설명하면, # # ServerName linuxer.com # ServerAlias *.linuxer.com # # 앞의 두 줄의 의미는 *(모든).linuxer.com 호스트는 모두 # linuxer.com 호스트로 별칭을 주었다. # 여기에서 "*"의 의미는 네임서버에 등록되어 있고, # "linuxer.com" 도메인으로 등록된 모든 호스트를 말하며, # 앞의 가상 호스트로 정의되지 않은 호스트를 의미한다. # 즉, ftp.linuxer.com과 ns.linuxer.com과 같은 호스트이다. # # ServerAlias ftp.linuxer.com # ServerAlias ns.linuxer.com # # 즉, 앞의 두 줄을 한 줄에 표현한 경우이다. # # 따라서 각각의 각상 도메인이 끝나는 마지막 가상 호스트에 # ServerAlias 지시자를 사용해야하며, 일반적으로 기본이 되는 # 호스트가 "www"호스트이라는 점에서 각각의 도메인 끝나는 # 마지막에 가상 호스트로 설정하고 ns, ftp 호스트에 대해서 # Alias를 한다. # # DocumentRoot ~com/wwwhome # 위와 같이 ~(틸트)로 경로를 지정하면 웹서버는 찾질 못한다. # 꼭 절대경로로 정의. ServerName meeting.linuxer.net ServerAdmin meeting@linuxer.net # admin은 meet 계정으로 메일을 받는다. DocumentRoot /home/meet/wwwhome ErrorLog logs/meeting.linuxer.net-error_log CustomLog logs/meeting.linuxer.net-access_log common ServerName linuxer.net ServerAdmin webmaster@linuxer.net ServerAlias *.linuxer.net # admin은 net 계정으로 메일을 받는다. DocumentRoot /home/net/wwwhome ErrorLog logs/www.linuxer.net-error_log CustomLog logs/www.linuxer.net-access_log common ServerName www.sonamu.co.kr ServerAdmin admin@sonamu.co.kr # admin은 sonamu 계정으로 메일을 받는다. # 여기에서는 ServerAlias를 할 필요가 없다 왜냐하면 네임서버에 오직 # www.sonamu.co.kr 하나 만 정의해 놓았기 때문이다. # 위의 zone-sonamu.co.kr 의 파일을 확인해 보기 바란다. DocumentRoot /home/sonamu/wwwhome UserDir Pubic_home # 다른 도메인과 다르게 UserDir 을 정의한다. # 주 도메인(linux.ac.kr)의 UserDir가 Public_html이므로 # 주 도메인과 다른 도메인과 혼합되지 않게 위해서는 완전히 다른 # 디렉토리를 위와 같이 정의해 준다. # 가상호스트에 대한 UserDir를 지정해 주지 않으면 # 주 도메인(linux.ac.kr)에 대한 유저인 "Public_html"로 인식하려 # 하기 때문에 Document를 보여줄 수 없다. # 또한 Public_html 이란 디렉토리가 있다면 www.linux.ac.kr/~namu # 와 www.sonam.co.kr/~namu 는 같은 문서를 보여준다. # 때문에 고객이 개인 홈페이지를 갖고 싶어 할 경우에는 # UserDir을 다르게 정의 해 주어야 한다. ErrorLog logs/www.sonamu.co.kr-error_log CustomLog logs/www.sonamu.co.kr-access_log common #NameVirtualHost 192.168.10.5 # 위와 같이 맨 나중에 NameVirtualHost를 정의해 주어도 된다. # 앞서 얘기했지만 192.168.10.5 을 사용하는 모든 호스트에 대해서는 # 맨 앞에 가상호스트로 지정한 호스트가 기본이 되는 호스트이다. # 여기에서는 game.linux.ac.kr 의 호스트가 이에 해당된다. ---------end --------------------------------------------- 이름 기반 가상 호스트 설정을 요약하면 다음과 같다.(192.168.10.5) ServerName www.linux.ac.kr DocumentRoot /home/httpd/html ... NameVirtualHost 192.168.10.5 # 192.168.10.5의 IP 주소를 사용하는 가상 호스트 중 기본이 되는 호스트 # ServerName game.linux.ac.kr ... # # linuxer.com 가상 도메인 부분 # ServerName stock.linuxer.com ... # ServerName linuxer.com ServerAlias *.linuxer.com ... # # linuxer.net 가상 호스트 부분 ServerName meeting.linuxer.net ... # ServerName linuxer.net ServerAlias *.linuxer.net ... # # sonamu.co.kr 가상 호스트 부분 ServerName www.sonamu.co.kr ... # 만약 하나의 IP 주소로 오직 하나의 도메인에 대해서 비교적 많은 가상 호스트를 설정한다면 다음과 같이 설정할 수 있다 (예:linux.ac.kr 도메인) # ServerName www.linux.ac.kr DocumentRoot /home/httpd/html ... NameVirtualHost 192.168.10.5 # ns, ftp 호스트에 대한 미련이 없다면 다음과 같이 # 기본이 되는 www 호스트를 단 3줄로 간결하게 할 수 있다. # 그러나 필자는 제일 마지막에 ServerAlias와 함께 설정하기를 # 권장한다. # # # ServerName www.linux.ac.kr # # ServerName aaa.linux.ac.kr ... # ServerName bbb.linux.ac.kr ... # ServerName ccc.linux.ac.kr ... ... 계속 # # 마지막 가상 호스트에 ServerAlias 활용 ServerName www.linux.ac.kr ServerAlias *.linux.ac.kr ... 이로써 가상웹서버 설정이 모두 끝났다. 이제 남은 것은 DocumentRoot 가 될 디렉토리를 설정하는 것만 남아 있다. # mkdir /home/linux.ac.kr # mkdir /home/linux.ac.kr/study # mkdir /home/linux.ac.kr/study-app # mkdir /home/linux.ac.kr/study-net # mkdir /home/linux.ac.kr/game # chmod 705 -R /home/linuxa.c.kr # su com $ mkdir ~com/wwwhome $ chmod -R 705 ~com $ su net password ******* $ mkdir ~net/wwwhome $ chmod -R 705 ~net $ su meet password ******* $ mkdir ~meet/wwwhome $ chmod -R 705 ~meet $ su sonamu password ******* $ mkdir ~sonamu/wwwhome $ chmod -R 705 ~sonamu $ su namu password ******* $ mkdir ~net/Public_home $ chmod -R 705 ~namu $ su kim password ******* $ mkdir ~kim/Public_home $ chmod -R 705 ~kim $ su park password ******* $ mkdir ~park/Public_home $ chmod -R 705 ~park $ su lee password ******* $ mkdir ~lee/Public_home $ chmod -R 705 ~lee $ 4. 가상 메일서버 가상 메일 서비스는 아파치 설정파일과 같이 그리 복잡하지 않다. 단, 네임서버만 잘 설정하고 access 파일과 Virtusertable파일과 잘 편집해 주면 무리가 없다. 그리고 POP3 데몬도 함께 설치해 주어야 한다. 4-1. sendmail 설치하기 먼저 sendmail이 설치되어 있는지 확인해 보자. [san2@www san2]$ rpm -qa |grep sendmail sendmail-8.9.3-10kr [san2@www san2]$ 필자의 시스템에는 버전이 8.9.3 인 RPM으로 설치되어 있다. 설치되어 있지 않다면 CD-ROM이나 해당 배포본의 FTP싸이트에서 다운로드하여 설치하자. 예: CD-ROM으로 설치하는 경우 [san2@www san2]$ su Password: ******** [root@www san2]# mount /mnt/cdrom [root@www san2]# cd /mnt/cdrom/RedHat/RPMS [root@www RPMS]# rpm -Uvh sendmail* sendmail ################################# [root@www RPMS]# [root@www RPMS]# /etc/rc.d/init.d/sendmail start [root@www RPMS]# 4-2. qpopper 설치하기 메일을 보내기만 하면 안되겠죠?? 클라이언트에서 메일을 받을 수 있어야 한다. 즉 클라이언트에서 받을 수 있게 하기 위해서는 POP3같은 데몬을 서버에 설치해 주어야 한다. 레드햇 배포본은 기본적으로 pop3을 제공한다. 그러나 단독으로 pop3 패키 지로 되어 있지 않고 imap 와 함께 제공된다. # rpm -qi imap 위의 명령으로 imap와 pop3가 설치되어 있는지 확인하기 바란다. 설치가 되어 있다면 굳지 이하 아래에 설명하는 qpopper를 설치할 필요는 없다. imap 패키지로 설치되어 있는데 메일을 받을 수 없다면 /etc/inetd.conf 파일과 /etc/serveecs 파일에서 pop3(정확히 pop-3)에 관련된 주석(#)을 제거하면 된다. 필자는 직접 qpopper 3.0 소스를 받아 컴파일하여 설치하였다. 박재호님 홈페이지(http://www.kies.co.kr/~jhpark/Sendmail/popper.html) 에 자세한 정보가 있으니 꼭 방문하도록 한다. 여기에서는 모든 개념적인 설명은 제외하고 오직 설치에만 언급한다. 일단 qpopper 3.0을 다운로드하자. ftp://ftp.qualcomm.com/eudora/servers/unix/popper/ 에 접속하면 2.53 버전과 3.0b17, 3.0b18 버전이 있다. 필자는 qpopper3.0b18.tar.Z (2,432KB)을 다운로드 하였고, /usr/local/src 에 그 소스를 컴파일하고 /usr/local/qpopper 라는 디렉토리에 설치할 것이다. # cp qpopper3.0b18.tar.Z /usr/local/src/ # cd /usr/local/src # ls qpopper3.0b18.tar.Z # uncompress qpopper3.0b18.tar.Z # tar xvf qpopper3.0b18.tar # cd qpopper3.0 # ./configure --enable-specialauth \ --enable-bulletins=/var/spool/bulls \ --enable-servermode # make # cp popper/popper /usr/local/lib/ # 레드햇6.0은 기본적으로 쉐도우패스워드를 사용하므로 "--enable-specialauth" 옵션을 주고 꼭 컴파일하기 바란다. /etc/services 파일을 다음과 같이 편집한다. ----------------------------------------------------------- #pop-2 109/tcp postoffice # POP version 2 #pop-2 109/udp #pop-3 110/tcp # POP version 3 #pop-3 110/udp pop3 110/tcp # popper ----------------------------------------------------------- 참고로, pop3 110/tcp pop-3 # POP3 와 같이 설정했을 경우 오른쪽의 "pop-3"은 왼쪽의 "pop3" 서비스 이름에 대한 별칭이름이다. 따라서 다음과 같이 모두 접속할 수 있다. [root@www san2]# telnet localhost 110 [root@www san2]# telnet localhost pop3 [root@www san2]# telnet localhost pop-3 /etc/inetd.conf 파일도 다음과 같이 편집한다. ----------------------------------------------------------- #pop-2 stream tcp nowait root /usr/sbin/tcpd ipop2d #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d pop3 stream tcp nowait root /usr/local/lib/popper popper -s ----------------------------------------------------------- 참고로, 포트 번호가 1024 보다 작은 포트는 오직 root 레벨에서만 접근할 수 있다. 이 포트를 맨 페이지에 의하면 일명 "low numbered" 포트라고 부른다. 슈퍼데몬을 재실행한다. # /etc/rc.d/init.d/inet restart 제대로 동작하는지 테스트해보자. [root@www san2]# telnet localhost pop3 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. +OK QPOP (version 3.0b18) at www.linux.ac.kr starting. user san2 #<---이 부분은 직접 입력한다. +OK Password required for san2. pass 12345678 #<---이 부분은 직접 입력한다. +OK san2 has 42 messages (595757 octets). quit #<---이 부분은 직접 입력한다. +OK Pop server at www.linux.ac.kr signing off. Connection closed by foreign host. [root@www san2]# 위와 같이 메시지가 나오면 성공한 것이다. 필자 QPOP 버전은 3.0b18 이고 42개의 mail 이 있는 셈이다. imap 패키지의 pop3(pop-3)으로 테스트하려면 # telnet localhost pop-3 나 # telnet localhost 110으로 접속해야 한다. imap 는 143번으로 접속한다. 이제 여러분의 리눅스 박스는 클라이언트에서 메일을 받을 준비가 되어 있다. 다음은 sendmail 설정파일의 예이다. 꼭 이해하고 넘어가야 한다. 4-3. /etc/sendmail.cf -------------------------------------------------------------- # anything else is bogus R$* $#error $@ 5.7.1 $: "550 Relaying denied" #<------[주의] # 중략 Cwlocalhost # file containing names of hosts for which we receive email Fw/etc/sendmail.cw -------------------------------------------------------------- 부연 설명하자면 [주의]부분을 주석으로 처리하면 spam 메일 문제가 있다. 주석으로 처리되어 있다면 어쩌면 여러분의 리눅스박스는 Spamer의 본거지가 될 수 도 있다는 것이다. 주석으로 처리되어 있다면 주석을 위와 같이 제거하고 access파일을 아래와 같이 편집해 준다. 그리고 Fw/etc/sendmail.cw 와 같이 주석처리가 되어 있지 않아야 한다. 참고로, 센드메일 설정 파일에서 F 설정 명령어와 C 설정 명령어로 정의한 "w" 클래스는 서로 동일하다. F 설정 명령어는 파일을 정의하는데 사용하고 C 설정 명령어는 문자열을 정의하는데 사용한다. 따라서, Cwlocalhost linux.ac.kr mail.linux.ac.kr mail.sonamu.co.kr sonamu.co.kr 와 같이 직접 길게 나열해도 상관없다. 4-4. /etc/sendmail.cw -------------------------------------------------------------- # sendmail.cw - include all aliases for your machine here. # 네임서버에 등록된 모든 도메인을 이 파일에 다음과 같이 적어준다. linux.ac.kr mail.linux.ac.kr linuxer.net linuxer.com sonamu.co.kr -------------------------------------------------------------- 참고로 이 파일은 하나의 리눅스 박스로 메일이 들어올 경우 각각의 메일을 받아줄 수신자를 설정하는 내용이다. 만약, sonamu.co.kr 도메인이 없다면 ID@sonamu.co.kr로 메일을 보내면 센드메일은 sonamu.co.kr 수신자가 없으므로 메일을 받지 못한다. 또한 sonamu.co.kr 호스트에 대해서 MX 레코드로 지정했다면 자체 큐잉상태가 되어 버린다. 이때 반송되는 메일 헤더의 메시지는 다음과 같다. 553 sonamu.co.kr. config error: mail loops back to me (MX problem?) 554 ... Local configuration error 다음은 메일서버(mail.sonamu.co.kr)가 독립적으로 존재할 경우 554 MX list for xxx.kr. points back to mail.sonamu.co.kr 554 ... Local configuration error 따라서 하나의 리눅스 박스로 네임서버와 메일서버를 같이 운영한다면 /etc/sendmai.cw 파일에는 MX 레코드를 갖는 모든 호스트를 수신자로 설정 해야한다. 또한 순수 도메인을 사용하고자 하므로 각각의 가상 도메인도 수신자로 설정 해야 한다. 4-5. /etc/sendmail.cm 특별하게 편집할 필요는 없다. 그냥 넘어간다. 4-6. /etc/mail/access ------------------------------------------------------------- # 예제: # cyberspammer.com REJECT # sendmail.org OK # 128.32 RELAY # # 주의 사항!!! # # 설정 파일을 작성할 때 sendmail.org 와 OK, 128.32 와 RELAY 사이는 # 스페이스가 아니라 꼭!!! <탭>키를 사용하여 띄워야 합니다. localhost.localdomain RELAY localhost RELAY linux.ac.kr OK linuxer.net OK linuxer.com OK sonamu.co.kr OK 192.168 RELAY # access 파일을 고친 이후에는 # # makemap hash /etc/mail/access < /etc/mail/access # # 명령으로 갱신해 주어야 합니다. ---------------------------------------------------------- 참고로 /etc/mail/access 파일은, 센드메일 입장에서 센드메일이 메일 중계를 허용할 것인가(RELAY), 또는 허용하지 않을 것인가(REJECT)를 결정하는데 그 초점이 있다. 메일 중계라는 의미는 그 통로를 열어줄 것인지 아니면 열어주지 않을 것인지 에 대한 중계의 의미이다. 메일 중계의 대상은 센드메일로 들어오는 메일이다. 따라서 로컬 사용자의 POP3 유저와 다른 SMTP 서버가 이에 해당된다. 4-7. /etc/mail/virtusertable 매우 중요한 설정파일이다. 이 파일을 어떻게 잘 편집하느냐에 따라서 웹호스팅의 성공여부가 달려 있다고 해도 좋다. 주의 깊게 살펴보자. 필자가 왜 이렇게 설정했는가에 대해서는 맨 위의 '나의 목표'를 다시한번 읽어보기 바란다. ------------------------------------------------------------ # 이 파일을 보면 김정균님이 쓴 예제를 보면 쉽게 이해 할 수 있다. webmaster@linux.ac.kr san2 ftp@linux.ac.kr san2 study@linux.ac.kr san2 study-app@linux.ac.kr san2 study-net@linux.ac.kr san2 game@linux.ac.kr gamedori@hanmail.net @linuxer.com com webmaster@linuxer.net net ftp@linuxer.net net meeting@linuxer.net meet admin@sonamu.co.kr sonamu ---------------------------------------------------------- 부연설명하자면 도메인 linux.ac.kr(메일서버) 에 대해서 game@linux.ac.kr로 오는 메일은 gamedori@hanmail.net으로 메핑하고 나머지 webmaster@linux.ac.kr ftp@linux.ac.kr study@linux.ac.kr study-app@linux.ac.kr study-net@linux.ac.kr 로 오는 메일은 이 서버 관리자인 root의 일반 유저인 'san2' 계정으로 보낸다. @linux.ac.kr san2 로 설정해 버리면 linux.ac.kr 도메인(메일서버)을 사용하여 오는 메일은 모두 'san2'가 받게 되어 버린다. 다른 일반 유저까지도 포함하기 때문에 하나하나씩 지정해 주어야 한다. 도메인 linuxer.com(메일서버) 에 대해서 webmaster@linuxer.com ftp@linuxer.com stock@linuxer.com 으로 오 는 메일은 모두 com 유저가 받아 볼 수 있다. 이것을 이해 할 수 있다면 나머지 linuxer.net 과 sonamu 메일서버에 대해 서는 쉽게 이해 하리라 생각된다. 파일 편집이 끝났으면 다음과 같은 명령을 꼭 실행해 주어야 한다. # makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable 이로써 가상메일서버 설정이 모두 끝났다. 5. 가상 FTP서버 (ProFTPd) 가상 FTP는 FTP데몬만 잘 설치해 주면 크게 문제가 없다. 5-1. ProFTPd 설치하기 CD-ROM이나 각 배포본의 FTP에서 RPM으로 다운로드하든지 http://www.proftpd.org/ 에서 소스로 받든지 간에 여러분의 자유이다. 필자는 가상FTP를 테스트할 즈음에는 1.2.0pre6 의 버전의 소스를 다운로드 하여 설치하였다. ftp://linux.sarang.net/ 에 접속하면 RPM으로 다운로드하여 설치할 수 있다. 소스를 컴파일하여 설치할 경우 소스를 컴파일할 디렉토리는 /usr/local/src 이고 설치할 디렉토리는 /usr/local/proftpd 이다. # cp proftpd-1.2.0pre6.tar.gz /usr/local/src/ # cd /usr/local/src # ls proftpd-1.2.0pre6.tar.gz # tar zxvf proftpd-1.2.0pre6.tar.gz # cd proftpd-1.2.0pre6 # ./configure --prefix=/usr/local/proftpd \ --sysconfdir=/etc --localstatedir=/var/run \ --enable-autoshadow --datadir=/home/ftp # make # make install # mkdir /home/ftp RPM으로 설치하는 경우 # rpm -Uvh proftpd-1.2.0pre6-1.i386.rpm # 소스를 컴파일하여 설치하든지 RPM으로 설치하여 설치하든지 /etc/inetd.conf 파일을 다음과 같이 주석을 추가해 주어야 한다. 즉 웹 호스팅 성격에 맞게 Proftpd를 standalone으로 데몬을 가동하기 위해서이다. -----------/etc/inetd.conf --------------------------------- # 중략 #ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd -l -a #ftp stream tcp nowait root /usr/sbin/tcpd in.ftpd # 중략 ---------------------------------------------------------- 그리고 슈퍼데몬을 재가동한다. # /etc/rc.d/init.d/inet restart 또는 # killall -HUP inetd 5-2. /etc/proftpd.conf 이제 마지막 단계인 ProFTPd 설정파일을 편집해 보자. ---------/etc/proftpd.conf --------------------------------- ServerName "ProFTPD ALZZA Default Installation" ServerType standalone # standalone으로 설정 ServerAdmin ftp@linux.ac.kr # sendmail virtualtable 을 보라. DefaultServer on AuthPAMAuthoritative on Port 21 MaxInstances 30 User nobody Group nobody AllowOverwrite on ##Global 설정 VirtualHost까지 영향을 주므로 자원 낭비가 덜하다. ## Umask 022 # 각 VirtualHost마다 따로 정의해도 된다. DisplayLogin .welcome.msg # 원래는 hidden파일이 아닌 welcome.msg이다. DisplayFirstChdir .message #User ftp # Global로 넣지 않은 게 좋다. #Group ftp # Global로 넣지 않은 게 좋다. #MaxClients 10 # Global로 넣지 않는다. #MaxClientsPerHost 1 # Global로 넣지 않는다 UserAlias anonymous ftp RequireValidShell off # Anonymous 접속허용을 위해서는 off로 꼭 설정. ShowSymlinks on DefaultRoot ~ !san2 # 위와 같이 DefaultRoot를 설정하면 그룹 "san2"를 제외하고 모두 # 일반 유저는 기본 Root가 ~HOME/이 됩니다. # 또한 (!)을 없애면 그 반대가 됩니다. ########Global end ################################### User ftp # 모든 Anonymous 에 꼭 넣어주어야 한다. Group ftp # 모든 Anonymous 에 꼭 넣어주어야 한다. #UserAlias anonymous ftp # Global로 설정되어 있으므로 UserAlias는 넣을 필요없다. MaxClients 10 "죄송합니다. 최대 인원은 %m명입니다." MaxClientsPerHost 1 "호스트당 1회만 접속 가능합니다." DenyAll # 읽기/쓰기/디렉토리 만들기를 허용하기 위해서는 다음 주석제거. # # #AllowALL # # ###### 가상 FTP 호스트설정 부분 ########################## # # ★★★ 주의 ★★★ # # ProFTPd는 현재의 버전 1.2.0pre6(8포함)은 이름 기반 가상호스트를 # 지원하지 않는다.(Anonymous) # 아래에 설정한 예는 IP 기반 가상호스트의 예이다. ##################################################### ServerName "ftp.linuxer.com" ServerAdmin ftp@linuxer.com Umask 002 MaxClients 10 "죄송합니다. 최대 인원은 %m명입니다." MaxClientsPerHost 1 "호스트당 1회만 접속 가능합니다." User ftp Group com # Umask 002 와 관련이 있다. DenyAll AllowStoreRestart on AllowRetrieveRestart on # 위의 2개의 지시자는 이어올리기를 위해서는 추가하십시오. # 이때 "on" 지시자 사이는 <탭>를 이용하십시오. Order Allow,Deny # 컴마(,)다음에 칸을 빈칸을 띄지 않는다. Allow from all Deny from 192.168.15.,haker.com # C클래스 192.168.15.* 와 haker.com 은 쓰기를 금한다. ### Umask 에 대해서 생각해 보자 ++++++incoming 디렉토리####### # umask 는 새로 생성된 디렉토리나 파일에 대해서 퍼미션을 기본적 # 으로 적용시킨다. # 즉 Global 에서 umask 022로 설정되어 있으므로 Anonymous 가 # 접속하여 새로 생성시킬 수 있는 # 디렉토리에 대해서 755의 퍼미션, 그리고 파일에 대해서는 644의 퍼미 # 션을 준다. # 잠깐 디렉토리의 소유자에 관해서도 생각해보자. # Anonymous가 새로 생성된 디렉토리가 755이므로 이 디렉토리의 소유자 # 는 root 나 다른 user가 아니고 "ftp" 소유자가 된다. # 즉 UserAlias Anonymous ftp이므로 모든 Anonymous 에 대해서 # 다른 Anonymous가 생성시킨 디렉토리나 파일을 지우거나 바꿀 수 있다. # 한가지 더.....Anonymous가 아닌 일반 유저로 들어왔을 경우를 생각해보자. # incoming 디렉토리의 퍼미션이 777로 되어 있더라도 Anonymous 가 생성 # 된 디렉토리나 파일은 지우거나 바꿀 수 없다.(755이므로) 단, incoming 디렉 # 토리하에서는 퍼미션이 777이므로 생성할 수 있다. # ftp.linuxer.com 에 대해서 관리자는 "com" 유저이다. 관리자가 Anonymous # 가 생성한 디렉토리나 파일을 지울 수 없다면 관리자라고 할 수 있겠는가? # 여기에 그 해법이 바로 Umask 과 웹호스팅 관리자의 능력에 달려있다. # /home/com/vir-ftp 의 소유자는 ftp가 아닌 "com" 의 소유자로 해야하고, # incoming 하위 디렉토리 에 대해서 Unamsk 070이나 020으로 설정하면 # 퍼미션은 707 이나 757 이 된다. # 즉 소유자가 누가 되든지간에 Others가 지우거나 생성할 수 있는 것이다. # 일반 유저로 들어왔을 경우에 해당한 것이다. # 이런 방법이 싫다면 Anonymous Group 정도를 VirtualHost 관리자인 # "com"으로 대체해도 된다. # 그리고 Umask 002로 설정하면 775의 퍼미션을 생성되어 "com"유저가 # 관리할 수 있다..이때는 com 그룹에 "com"유저가 포함되어 있거나 # 단독으로 "com" 유저만 포함해야 한다. # 이유는 "com" 그룹에 포함된 다른 유저가 피해를 줄 수 있기 때문이다. # 또는 User 와 Group 에 적어도 관리자가 포함되어 있어야 한다. # 왜냐하면 "com" 유저는 고객이고 "root" 권한을 획득할 수 없기 때문이다. # 방법은 여러 가지이다. # 이처럼 Anonymous 가 FTP클라이언트로 접속하여 디렉토리를 생성 # 하고 지울 수 있게 하기 위해서는 소유자와 퍼미션 - incoming 디렉토리 # 에 대한 접근 정책 - 그리고 Umask 의 순서로 관리해야한다. # 예를 들어 아무리 Umask 000으로 설정했더라도 incoming 디렉토리에 # 대한 쓰기 권한이 없다면 Anonymous 는 쓸 수 없다는 것이다..... # 좀더 많은 정보를 원한다면 ProFTPD Reference.html 을 읽어 보기 # 바란다. ###### VirtualHost 의 정의 ################### # # ★★★ 주의 ★★★ # # ProFTPd는 현재의 버전 1.2.0pre6(8포함)은 이름 기반 가상호스트를 # 지원하지 않는다.(Anonymous) # 아래에 설정한 예는 IP 기반 가상호스트의 예이다. ##################################################### ServerName "ftp.linuxer.net" ServerAdmin ftp@linuxer.net #Umask 002 # 주석으로 처리되어 있기 때문에 Global 에서 설정한 022를 따른다. MaxClients 10 "죄송합니다. 최대 인원은 %m명입니다." MaxClientsPerHost 1 "호스트당 1회만 접속 가능합니다." User ftp Group ftp # ftp.linuxe.com처럼 incoming 디렉토리가 정의되어 있지 않기 # 때문에Anonymous는 디렉토리를 생성할 수 없고 따로 지정할 필요도 # 없다. DenyAll -------------end ------------------------------------------- 설정파일 편집이 모두 끝났으면 Anonymous가 접근할 수 있는 디렉토리를 만들어주자. # su com $ mkdir ~com/vir-ftp $ mkdir ~com/vir-ftp/pub incoming $ chmod 705 ~com/vir-ftp/pub $ chmod 707 ~com/vir-ftp/incoming $ $ su net Password : ****** $ mkdir ~com/vir-ftp $ mkdir ~com/vir-ftp/pub $ chmod 705 ~com/vir-ftp/pub $ FTP데몬을 재가동한다. # /etc/rc.d/init.d/proftpd restart 이제 Anonymous 가 접속할 때 보여주는 .welcome.msg 파일도 만들어 주자. vir-ftp 밑에 이 파일이 존재하면 된다. ----------~HOME/vir-ftp/.welcome.msg ---------------------- 환영합니다...... ProFTPd Alzza Linux 6.0 2.2.12(안정) ftp://%L/ o 남은 용량 : %F KB o 현 사용자 수 : %N/%M (하나의 호스트당 1명까지 접속 허가합니다) o %R의 %u(%U)님이 접속한 o 현 시각은 %T년입니다. Admin-mailto:%E -----------end -------------------------------------------- 위의 결과는 ----------------------------------------------------------- 환영합니다...... ProFTPd Alzza Linux 6.0 2.2.12(안정) ftp://ftp.linux.ac.kr/ o 남은 용량 : 302868 KB o 현 사용자 수 : 2/10 (호스트당 1회 접속만 허가합니다) o 192.168.12.5의 UNKNOWN(anonymous)님이 접속한 o 현 시각은 Tue Sep 14 22:05:36 1999년입니다. Admin-mailto:ftp@linux.ac.kr ----------------------------------------------------------- 1.2.pre6 버전을 제외한 그 이상의 버전은 "%F KB" 대신 "%f"로 기입하면 Mb로 출력됩니다. 이로써 가상 FTP 설정도 모두 끝났다. 6. 자주 질문되는 내용 [Q]. 주 도메인(네임서버)의 호스트이름을 어떤 이름으로 정해야 합니까? "www"이나 "ns"로 정하면 무난할 것 같습니다. 이 외에 정하고 싶은 이름으로 설정해도 됩니다. 단 www, ns외의 이름을 정했다면 DNS설정부분에 최소한 웹서버임을 알리는 "www" 호스트명을 설정해 주어야 합니다. 호스트이름을 "www"라고 정하면 삼바나 네트워크 환경에 "www" 로 보입니다. [Q]. 교육기관(ac.kr)에 공인된 IP 주소로 com 이나 co.kr 도메인을 사용할 수 있나요?? 한국전산원의 IP 담당자에게 문의해 본 결과(97년) 사용할 수 있습니다. 즉 IP 주소는 도메인에 부여하는 것이 아니라 교육기관(이때는 ac.kr이 아니고 xxx학교)에 임대하는 것입니다. 하지만, 해당교육기관의 웹마스트에게 먼저 문의와 허락을 받아야 합니다. 약간 도덕적인 문제가 될 수 있습니다. [Q]. 레드햇6.0사용자입니다. /etc/named.boot 파일을 편집해야 합니까? named.boot 파일은 Bind 4.x 용입니다. 레드햇 6.0을 사용하시고 레드햇사에서 제공하는 rpm으로 설치했다면 Bind 8.x 입니다. 따라서 /etc/named.conf 파일 만 편집하면 됩니다. [Q]. 다른 네트웍 주소(C클래스)를 가진 IP 주소로 가상호스트를 운영하려고 합니다. 네임서버 설정은 어떻게 해야 합니까? 네트웍 설정이 끝났으면 named.boot 이나 named.conf 파일에 같은 요령으로 다른 네트웍 주소에 대한 Zone파일을 명시해 줍니다. 예: 현재 IP 주소는 192.168.10.1 다른 네트웍 주소의 IP 주소가 192.168.21.5 라면, /etc/named.boot primary 10.168.192.in-addr.arpa zone-10.168.192 primary 21.168.192.in-addr.arpa zone-21.168.192 /etc/named.conf zone "10.168.192.in-addr.arpa" { type master; file "zone-10.168.192"; }; zone "21.168.192.in-addr.arpa" { type master; file "zone-21.168.192"; }; [Q]. 웹서버에 대한 네트웍 부하가 많이 걸립니다. 네임서버 설정으로 시스템분산을 할 수 있나요? 가능합니다. 이때는 2대 이상의 서버가 필요합니다. 네임서버 설정 중에서 IN 레코드와 PTR 레코드를 사용하여 같은 호스트에 대한 각각 다른 IP 주소로 설정하면 됩니다. [Q]. 자신의 네임서버가 다른 네임서버로부터 가져온 정보가 캐시에 저장된다고 하는데 named.cache 파일에 저장됩니까? 아닙니다. named.cache(또는 named.ca, named.root) 파일 루트 네임서버 정보가 들어 있는 파일입니다. 이 파일에 저장되지 않습니다. 가져온 정보는 시스템 메모리에 저장됩니다. 따라서 네임서버를 재시작(reload 아님)하면 그 전에 가져왔던 정보는 메모리에 더 이상 존재하지 않습니다. [Q]. 가상호스트에 대한 Document 문서를 같은 페이지만 보여줍니다. httpd.conf 설정파일의 어떤 부분을 손 봐야 합니까? Name-based Virtual Hosts 을 운영하다 보면 자주 질문되는 내용입니다. 우선 VirtualHost 지시자 앞이나 맨 뒤에 NameVirtualHost 지시자에 대한 IP 주소를 적어줍니다. 만약 IP 주소 192.168.10.3 하나의 IP 주소로 네임서버 및 기본 도메인과 가상 도메인 및 호스트를 설정했다면 VirtualHost 기본이 되는 호스트를 적어줘야 합니다. 즉 VirtualHost 에는 192.168.10.3에 부여한 모든 호스트를 설정해 주시기 바랍니다. [Q]. 특정 사용자 홈 페이지를 다른 URL로 매핑하고 싶습니다. HTML을 사용하지 않고 아파치 설정으로 가능합니까? 네 가능합니다. Redirect 지시자를 활용하십시오. 예를 들어 사용자("aaa") 홈 디렉토리 전체를 http://www.boo.com/~aaa 로 매핑하고 싶다면 아파치 설정에서 다음의 내용을 추가합니다. Redirect /~aaa http://www.boo.com/~aaa [Q]. CGI 실행이 되지 않고 소스가 보입니다. 어떻게 설정해야 합니까? [A] 개인 사용자 디렉토리일 경우 다음과 같이 ExecCGI 옵션을 추가합니다. .. Options ExecCGI ... 그리고 CGI handler 부분에 주석을 제거해야 합니다. AddHandler cgi-script .cgi .pl [Q]. CGI 실행시 "Internal Server Error 500" 에러가 출력됩니다. 에러코드 500은 스크립트 구문이 잘못되어 출력한 에러입니다. 아파치 서버 에러라기 보다는 스크립트 구문이 틀려서 서버에서 제대로 처리하지 못하는 경우입니다. 스크립트 구문을 다시 한번 확인해 보시길 바랍니다. [Q]. URL 입력 창에 "/"을 입력해야만 접근이 가능합니다. 즉 "~aaa"는 되지 않고 "~aaa/"로는 가능합니다. 둘 다 가능하게 하고 싶습니다. ServerName 지시자에 주석을 제거하고 해당 호스트네임을 설정하기 바랍니다. 만약 DNS에 등록되어 있지 않은 호스트일 경우에는 IP 주소를 입력하기 바랍니다. [Q]. 일부 가상도메인에 대한 메일서버가 제대로 작동하지 않아 메일을 보낼 수 가 없습니다. /etc/sendmail.cf ------------------------------------------- Cwlocalhost #<---기본 값으로만 설정해 놓는다. # file containing names of hosts for which we receive email Fw/etc/sendmail.cw #<---주석처리되어 있다면 주석을 제거한다. ---------------------------------------------------------- /etc/sendmail.cw 에 모든 DNS에 설정한 가상도메인을 나열해야 해야합니다. ("www"라는 호스트를 제외한 순수 가상도메인) [Q]. sendmail에서 메일용량을 제한하고 싶습니다. /etc/sendmail.cf 파일에서 다음과 같은 주석을 제거하십시오. # maximum message size O MaxMessageSize=1024000 이때 "1024000"은 byte단위입니다. 원하는 용량만큼 설정하십시오. 그리고 SMTP입장에서 들어오는 메일에 대해서 용량을 제한하고 싶다면, 같은 파일에 대해서 "Local and Program Mailer specification" 부분에 대해서 Mlocal, P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9, S=10/30, R=20/40, M=1024000, T=DNS/RFC822/X-Unix, A=procmail -Y -a $h -d $u 위와 같이 M=1024000 부분을 추가해 주십시오. 마찬가지로 1024000 는 byte단위이며 원하는 용량만큼 설정해 주십시오. [Q]. 간단하게 소규모 메일링 리스트를 운영하고 싶습니다. /etc/aliases 파일에 newmessage_linux: aaa@linux.ac.kr,bbb@sonamu.co.kr,ccc 과 같이 메일링하고 싶은 메일주소를 컴마(,)로 구분하여 나열하고 "newaliases" 명령을 주십시오. 이 방법 외에 파일로도 리스트를 만들어 운영할 수 있는데 같은 파일에 newmessage_linux::include:/home/san2/mailling.list owner-newmessage_linux: san2 라고 기입하고 /home/san2/mailling.list 파일에 메일링에 가입한 메일주소를 한 줄에 하나씩만 나열하면 됩니다. 이때 mailling.list 파일에 추가하거나 삭제할 때 "newaliases" 명령을 줄 필요가 없습니다. 바로 밑의 owner는 반송된 메일에 대해서 san2계정이 메일을 받습니다. 만약 복수(적은 수의)의 가상도메인을 운영하고 있고 각각에 대해서 메일링을 운영하고 싶다면 /etc/mail/virtusertable 파일을 이용해야 합니다. 즉 위와 같은 경우에 해당하는 도메인이 "linux.ac.kr" 이라면 virusertable 파일에 newmessage@linux.ac.kr newmessage_linux newmessage@linuxer.com newmessage_linuxercom ..... ..... linuxer.com 도메인에 대해서는 같은 방법으로 위와 같이 /etc/aliases 파일에 newmessage_linuxercom 을 추가하고 각각의 메일링하고 싶은 메일을 적어주면 됩니다. 이때 linux.ac.kr 도메인에 대해서 메일을 newmessage@linuxer.ac.kr로 보내면 각각 aaa@linux.ac.kr, bbb@sonamu.co.kr로 가고 "ccc"는 현 리눅스박스의 계정으로 메일이 갑니다. 즉 "ccc"계정에 대해서는 포워딩 되어 있다면 그곳으로 메일이 가게 될 것입니다. 포워딩이나 다른 매핑이 되어 있지 않다면 현 리눅스박스의 도메인에 대해서 메일을 받아 볼 수 있습니다. [Q]. .forward 파일이 작동하지 않은 것 같습니다. /etc/sendmail.cf 파일에서 다음과 같이 설정하십시오 # Forward file search path O ForwardPath=$z/.forward.$w:$z/.forward 그리고 개인 홈디렉토리 밑에 ".forward"파일을 만들고 그곳에 포워딩할 메일주소를 적어주면 됩니다. 기타 자세한 내용은 다음의 싸이트를 방문하기 바랍니다. DontBlameSendmail and Enhanced File Security : http://www.sendmail.org/tips/DontBlameSendmail.html [Q]. virtusertable 과 .forward 의 차이점은 무엇입니까? 서로 매핑이나 포워딩하는 개념은 같습니다. 굳이 그 차이점을 말하면 virtusertable 은 실제로 존재하지 않은 계정에 대해서나, 그리고 들어오는 메일에 대해서 하나하나씩 매핑할 수 있습니다. 그러나 .forward 기능은 현 리눅스박스에 존재하는 계정에 대해서만 자기 계정으로 오는 모든 메일을 다른 계정이나 다른 주소로 보내는 차이점이 있습니다. [Q]. 가상 메일서버에 대해서 메일을 받으면 기본 메일서버로 메일이 옵니다. 가상메일서버로 메일을 받고 싶습니다. 전적으로 메일을 보내는 클라이언트 환경설정이 기본 메일서버로 설정되어 있기 때문입니다. 즉 메일클라이언트의 SMTP서버를 가상메일서버로 설정하십시오. [Q]. pop3(pop-3)에 접속이 되질 않아 메일을 받을 수가 없습니다. imap 패키지로 설치했다면 /etc/inetd.conf 파일과 /etc/services 파일에서 pop-3 에 관련된 주석(#)을 제거하고 inetd를 재가동하 십시오. [Q]. pop3데몬에 접속은 되나 자꾸 패스워드가 틀리다고 나옵니다. 레드햇6.0은 기본적으로 쉐도우 패스워드를 사용하므로 qpopper를 컴파일할 때 "--enable-specialauth" 옵션을 주고 컴파일 해야합니다. [Q]. qpopper를 꼭 컴파일하여 설치해야합니까? 꼭 설치할 필요는 없습니다. 레드햇 패키지로 되어 있는 imap 패키지 를 설치하여 사용할 수 있습니다. 이때 /etc/inetd.conf 파일과 /etc/services 파일에서 pop-3에 관련된 주석(#)을 제거하고 inetd를 재가동한 다음, 다음과 같이 pop-3에 접속해 보십시오 # telnet localhost pop-3 또는 # telnet localhost 110 기본적으로 pop3은 110번의 프로토콜을 사용합니다. imap 는 143번을 사용합니다. 이상없이 접속이 가능하면 메일클라이언 트에서 메일을 받아볼 수 있습니다. [Q]. 메일 호스트를 설정하고 메일서버에 메일을 보내면 다음과 같은 메시지로 반송됩니다. MX레코드 설정이 잘못되었습니까? ----- Transcript of session follows ----- 553 mail.linux.ac.kr. config error: mail loops back to me (MX problem?) 554 ... Local configuration error 센드메일 입장에서 들어오는 메일에 대해서 메일을 받을 수신자가 없기 때문입니다. 즉 자체 큐잉상태에 있는 경우입니다. 이와 같은 문제는 하나의 기계에서 여러 개의 가상 호스트 이름을 같이 사용할 경우 발생합니다. 하나의 기계로 여러 개의 도메인을 관리한다면 메일을 받을 수신자가 필요합니다. 메일을 받을 수신자는 sendmail 경우 /etc/sendmail.cw 파일에 설정합니다. # cat /etc/sendmail.cw (예: MX 레코드를 갖는 가상 호스트를 수신자로 설정) linux.ac.kr mail.linux.ac.kr (← 질문의 내용에 해당됩니다.) ... namu.co.kr mail.namu.co.kr ... # 이와 비슷한 에러가 있는데 다음과 같습니다. Subject: Returned mail: Local configuration error ----- Transcript of session follows ----- 554 MX list for linux.ac.kr. points back to mail.linux.ac.kr ... Deferred: Connection refused by www.linux.ac.kr. 554 ... Local configuration error www.linux.ac.kr 호스트는 정상적으로 큐잉상태에 있지만 정작 최종 목적지 호스트(mail.linux.ac.kr)가 큐잉상태에 있는 경우로 linux.ac.kr 도메인을 수신자로 설정하지 않은 경우이다. 이 같은 경우는 네임서버에서 @(origin)를 www.linux.ac.kr 호스트의 IP 주소를 지정한 경우입니다. 마찬가지로 mail.linux.ac.kr 호스트에 "linux.ac.kr" 도메인을 수신지로 설정해 줘야합니다. [Q]. ProFTPd 슈퍼데몬으로 작동하고 있는 것 같습니다. standalone으로 설정하고 싶습니다. 가상호스트로 운영하려면 ServerType을 "standalone"으로 설정하고 /etc/inetd.conf 파일에 ftp 데몬에 대한 주석을(#)을 처리해 주십시오. [Q]. ProFTPd 에 Anonymous 접속이 허용되지 않습니다. 해당 가상호스트나 Global로 "RequireValidShell off"로 설정하십시오. [Q]. Anonymous 는 incoming 디렉토리에 대한 쓰기가 가능하나 일반 유저는 Anonymous가 쓴 디렉토리 밑에 쓰기가 불가능합니다. 해당 가상호스트에 대한 Umask을 070 이나 050으로 설정하십시오. [Q]. incoming 디렉토리에 대한 이어 올리기를 하고 싶습니다. proftpd.conf 파일에 AllowStoreRestart on AllowRetrieveRestart on 을 추가하십시오. 이때 "on" 지시자 사이는 <탭>를 이용하십시오. [Q]. ProFTPd 에서 Anonymous 로그온 시 welcome.msg에 남은 용량을 표시하고 싶습니다. 1.2.0Pre06 버전에서는 %F 그 이상의 버전에서는 %f로 설정하십시오. %F는 KB로 나타내며 %f는 "MB" 문자를 포함한 MB로 나타납니다. [Q]. FTP 접속시 일반유저의 홈디렉토리를 기본 Root로 설정하고 싶습니다. proftpd.conf 파일에 Global이나 가상호스트에 대해서 "DefaultRoot ~ " 라고 기입하십시오 또한 " ~ " 다음에 그룹을 지정하면 그 그룹에 속한 유저에 대해서만 자신의 홈디렉토리가 기본 Root가 됩니다. 그 반대로 " ~ !san2 "라고 지정하면 "san2" 그룹을 제외한 모든 일반 유저는 자신의 홈디렉토리가 기본이 됩니다. 두 가지를 병행하여 " ~ kkk, !san2 " 라고 설정하면 "kkk"그룹은 자신의 홈디렉토리가 기본 Root가 되고 나머지 그룹과 "san2" 은 제외가 됩니다. 한가지 주의할 점은 웹브라우저로 접속하면 상위 디렉토리로 이동할 수 있다는 단점이 있습니다. 이때는 완벽하지는 않지만 others 유저에 대한 퍼미션을 "1=x" 정도로 주면 됩니다.(보완에 대해서 완벽하지 않음) 즉, # chmod 751 / # chmod 751 /home "san2"는 제외이므로 # chgrp san2 / # chgrp san2 /home 자신의 디렉토리에 대한 보완은 $ chmod 751 /home/san2 로 설정하면 정확한 경로를 알지 못한 이상 내용이 보이질 않을 것입니다. 6. 마치며 휴~~~ 글을 쓴다는 것이 이렇게 힘들 줄은 몰랐습니다. 4일 동안의 테스트 및 문서작성을 끝내고 있는 중입니다. 어떻게 하다보니 시스템을 작살(?)내는 경우가 있어 다시 설치하여 테스 트하는 실수도 있었습니다. 물론 필자는 평상시에 Backup 에 많은 시간을 투자하므로 다시 설치하여 복구하는 데에는 많은 시간을 요하지 않았습니다. 이 글을 쓰겠다고 맘 먹은지 거의 한달 만에 문서를 완료하였습니다. 그 동안 개인적인 사정 등으로 차일피일 미루다 보니 이렇게 되었습니다. 이상의 내용에서 질문이나 의문나는 점 또는 보강이나 잘못된 점이 있으면 http://linuxer.suwon.ac.kr/cgi-bin/CrazyWWWBoard.cgi?db=qna 의 질문과 답변의 게시판을 이용해 주시면 감사하겠습니다. 끝까지 읽어 주셔서 감사합니다. 1999년 9월 16일 "도시 측량실험실" 에서 백수"산이" 씀..........