다음 이전 차례

13. 자주 질문되는 사항들(FAQ)

Q1. sendmail.init과 syslogd.init을 만들었습니다. 이것들을 /usr/local/bin에 넣고 실행시키면 에러가 납니다.

A1. 이 파일들은 init 스크립트라고 한다. 이 프로그램들은 컴퓨터가 처음 부팅될 때 init이라는 프로그램에 의해 실행된다. init 프로그램은 /usr/local 밑의 바이너리 파일을 참조하지 않는다. 시스템에서 init 스크립트를 사용하기 위한 방법은 Linux System Administrators Guide나 Linux Getting Started Guide를 참고하라.

Q2. 다음과 같은 내용을 /etc/sendmail.cf에 넣었습니다.

divert(0)
VERSIONID(`tcpproto.mc')                        
OSTYPE(linux)
FEATURE(redirect)
FEATURE(always_add_domain)
FEATURE(use_cw_file)
FEATURE(local_procmail)
MAILER(local)
MAILER(smtp)

출력 결과가 이상하게 나오는데 그 이유가 무엇입니까?

A2. 이것을 /etc/sendmail.cf에 직접 넣으면 안된다. sendmail.cf는 sendmail이 이해하기 쉽게 쓰여졌기 때문에 보통 사람들이 보고 이해하기는 쉽지 않다. 따라서 보통 m4라는 프로그램이나 이것의 매크로를 이용하여 sendmail.cf 파일을 만들게 함으로써 설정을 보다 쉽게 하는 것이 일반적이다. 위의 라인들은 sendmail의 설정 파일을 위한 매크로이다. 매크로를 이용해서 sendmail을 설정하는 방법을 알고자 한다면 sendmail에 대한 문서를 참조하기 바란다. /etc/sendmail.cf 파일을 만든 다음 virtfs 스크립트를 이용하여 /virtual/domain1.com/etc/sendmail.cf로 파일을 복사하는 것을 잊지 말라. 그리고는 sendmail.cf 파일을 각각의 도메인에 맞게 설정해야 된다.

Q3. virtuald는 어디서 구할수 있습니까? 그것이 과연 무엇에 쓰는 것인가요? 또 그것을 어떻게 사용할 수 있습니까?

A3. Virtuald는 가상 서비스를 제공하기 위한 프로그램으로 내가 만든 C 프로그램이다. 이 프로그램의 소스는 당신이 보고 있는 바로 이 HOWTO에 포함되어 있다. 보통의 C 프로그램처럼 이것도 make virtuald의 방법으로 컴파일할 수 있다. 만들어진 바이너리 파일은 /usr/local/bin에 놓는다. 일반적인 네트워크 서버 프로그램에 대한 포장(wrapper)으로 virtuald를 사용할 때에는 /etc/inetd.conf에 추가해야 할 것이 있다.

Q4. 내 시스템에는 dialog가 없는데요?

A4. dialog는 당신이 셸 스크립트에 다이얼로그 팝업 윈도를 넣을 수 있게 해주는 프로그램이다. 위에서 소개한 나의 virtual 셸 스크립트 예제를 실행시키기 위해서는 이 프로그램이 반드시 필요하다. dialog는 sunsite. 에서 얻을 수 있을 것이다. 이 프로그램의 컴파일은 매우 쉽기 때문에 설치에 별 문제가 없을 것이다.

Q5. 가상의 syslogd가 작동중인지를 어떻게 알 수 있지요?

A5. virtuald가 작동중일 때에는 아래의 메세지가 syslogd(/var/log/messages)에 남게 된다:

Nov 19 17:21:07 virtual virtuald[10223]: Virtuald Starting: $Revision: 1.1.1.1 $
Nov 19 17:21:07 virtual virtuald[10223]: Incoming ip: 204.249.11.136
Nov 19 17:21:07 virtual virtuald[10223]: Chroot dir: /virtual/domain1.com

Chroot dir 메시지는 chroot 시스템 콜이 이루진 다음 virtuald에 의해 보내지게 된다. 만약 이 메시지가 나타난다면 가상의 syslogd는 실행중이라고 할 수 있다. 만약 당신이 가상 시스템으로 만든 서비스의 로그 메시지가 syslogd에 보내진 것을 확인한다면, 이것은 또한 가상의 syslogd가 맞게 설정된 것임을 확인할 수 있다.

만약 당신이 컴파일 시간 옵션 VERBOSELOG를 켜놓지 않았다면 virtuald는 전혀 기록을 남기지 않을 것이다. 이런 경우 가상의 syslogd가 실행되는지를 확인할 수 있는 유일한 방법은 가상 시스템을 구성하는 데몬들이 독립적으로 syslogd에 무엇인가를 기록하는 것을 참고하는 것이다.

Q6. 가상의 파일시스템에 걸쳐 쿼타(quota)를 설정하려면 어떻게 하죠?

A6. 보통 하는 방식으로 쿼타를 설정한다. Quota mini-HOWTO 를 참고하라.

하지만, 도메인이 다른 경우에도 uid에 혼란을 주어서는 안된다는 사실을 기억하라. 만약 uid에 혼란이 온다면 사용자들이 쿼타를 공유하게 될 것이다. 쿼타를 설정할 uid의 범위를 지정하고, 도메인에 쿼타를 설정할 사용자 이외에는 그 범위의 uid를 사용할 수 없게 만들어라.

Q7. inet.conf 엔트리에 있는 \ 표시는 무슨 뜻이죠?

A7. 단지 설정 파일에서 두 줄에 걸쳐 한 내용을 사용할 때 줄바꿈을 표시하는 것이다. 내가 이 표시를 사용한 것은 단어를 적당한 위치에 놓아 보기좋게 하고자 하는 의도였다. \을 없애고 하나의 줄로 설정 파일을 바꾸어도 상관없다.

Q8. passwd나 다른 login 프로그램을 사용할 때 permission denied 메시지가 나옵니다. FTP나 su를 사용할 때에는 no modules loaded for service XXX 라고 나옵니다. 왜 그럴까요?

A8. 이것들은 PAM 에러 메시지들이다. 나는 이 스크립트들을 PAM이 나오기 이전에 작성하였다. 내가 작성한 virtfs 스크립트는 /etc/pam.d, /usr/lib/cracklib_dict.*, /lib/security, 혹은 그밖의 PAM이 요구하는 파일들을 복사하는 부분을 가지고 있지 않다. PAM은 이들 파일들을 필요로 한다. 당신이 virtfs 스크립트를 편집하여 이들 파일들을 복사하게 만든다면 이들 문제는 사라질 것이다.

Q9. virtuald는 tcpd의 hosts.allow와 hosts.deny 파일들을 사용할 수 있나요?

A9. 물론. 약간의 수정으로 가능하다.

우선 소스의 두부분을 바꿔야 한다.

arguments를 확인하는 부분에 아래 내용을 첨가해야 한다.

        if (!argv[3])
        {
                syslog(LOG_ERR,"invalid arguments: no program to run");
                exit(0);
        }
exec 라인 역시 다음과 같이 바뀌어야 한다.

변경 전:

        if (execvp(argv[2],argv+2)<0)

변경 후:

        if (execvp(argv[2],argv+3)<0)

다음으로 inetd.conf 라인을 변경한다.

변경 전:

ftp stream tcp nowait root /usr/local/bin/virtuald \
        virtuald /virtual/conf.ftp wu.ftpd -l -a

변경 후:

ftp stream tcp nowait root /usr/local/bin/virtuald \
        virtuald /virtual/conf.ftp tcpd wu.ftpd -l -a

다음에 /virtual/domain1.com/etc/hosts.allow 와 /virtual/domain1.com/etc/hosts.deny 파일을 설정하여 이용할 수 있다.

Q10. 가상 호스트에서 CGI를 실행시킬 수 있나요?

A10. 물론 실행이 가능하지만, /cgi-bin 을 당신이 접근할 수 있는 chroot 의 밖에 설정할 것을 권한다. 한 예로, /var/www/cgi-bin/domain1.com을 생각해 보자. 클라이언트가 /cgi-bin에 접근할 수 있도록 허용하는 것은 당신의 서버에서 프로그램을 실행시킬 수 있는 기회를 부여하는 것이다. 이것은 보안상 큰 허점이 될 수 있다. 주의하라! 내 경우 버그를 자세히 검사하지 않는 시스템들에 대해서는 아예 cgi가 실행할 수 없도록 설정해 놓았다.

Q11. 내 설정파일들은 이 문서의 예제와 다릅니다. 어떻게 해야 하죠?

A11. 설정 파일에는 기본적으로 두가지 형태가 존재한다: 시스템V와 BSD가 그것이다. 이 문서에서 제공하는 예제는 시스템V 형태의 설정 파일에 기초하고 있다. 두 시스템 모두에서 가상 서비스는 성공적으로 작동한다. BSD 형태의 설정 파일들에 대한 정보는 시스템 구입처에 문의하거나 가까운 LDP 사이트를 참조하라.

Q12. 당신에게 메일을 보냈는데, 회신이 없거나 회신에 아주 오랜 시간이 걸립니다. 왜죠?

A12. 아마 메일의 제목에 VIRTSERVICES HOWTO라는 헤더를 넣지 않아서 그럴 것이다. 내가 네트워크 관리자로 가상 서버들과 그 클라이언트들을 관리하는 데 필요한 많은 일을 하고 있다는 점을 좀 생각해주고, 참아주기 바란다. 이 하우투 문서에 대한 메일을 정확히 보냈다면 2일에서 3일 안에 항상 답장을 받을 수 있을 것이다. 정확히 메일을 보내지 않았다면 나의 VIRTSERVICES 메일박스에 걸러져 들어오지 못했을 것이고, 그러면 며칠 혹은 몇주 동안 내가 모른 채 방치되어 있을지도 모른다.

Q13. virtuald는 100M 비트 환경에서도 작동하나요?

A13 네트워크 카드의 속도는 virtuald가 작동하는지의 여부와 아무 상관이 없다. 10M 비트 환경에서 100M 비트 네트워크 카드를 사용해도 정상적으로 작동한다는 사실을 확인해 보라.

Q14. sendmail의 virthost 테이블을 사용할 수 있나요?

A14. 안된다. 이것은 sendmail이 여러 도메인에 대한 정보를 받기 위한 기능이다. virtuald는 각각의 sendmail에 대해서 분리된 chroot 환경을 제공한다. virtuald를 설치한 후에는 sendmail을 각각의 도메인에 대해서 일반적인 방법으로 설정한다.

Q15. 가상 telnet을 설치할 수 있나요? 가상의 root 계정을 만들어 사용자들이 자신들의 도메인을 관리하게 만들 수 있나요?

A15. 이 질문은 굉장히 자주 나오는 질문이고, 솔직히 말하면 이 질문에 대해 답하는 것은 좀 피곤한 일이다. 이 문서에서 이미 여러번 말했듯이, 그 답은 inetd를 통하는 모든 서비스는 virtuald를 이용하여 가상 서비스로 만들수 있으며 위의 질문에 대해 안될 이유는 하나도 없다는 것이다. 상식적인 것이다. telnet 가상 서비스를 제공하여 얻는 이득이 무엇인지 모르겠지만, 이런 설정은 가상 머신의 보안 등의 문제에 많은 투자를 필요로할 것이다. 여기 이와 관련된 몇가지 내용들이 있다:

기본적으로 가상 시스템에 대해서 login을 허용하는 것은 진짜 안좋은 생각이다. 만약 이것이 허용된다면, 그 머신에서 호스팅하는 모든 사이트가 위험에 빠질 수 있다. 만약 특정 사이트를 사용자에 의해 관리될 수 있도록 설정하고자 한다면, ssh를 통해 로그인할 수 있는 사용자들을 추가, 삭제, 변경 가능하게 해줄 수 있는 가상 프로세스에 대한 프로그램을(스크립트가 아닌) 작성하는 것이 좋을 것이다. 이 프로그램은 메뉴 기동 방식(menu driven)이 되어야 하며, 콘솔을 허가하지 않고, root로 실행되는 것을 금지시켜야 한다. 그러기 위해서는 파일의 소유권을 root에서 몇몇 다른 사용자로 바꿀 필요가 있다. 이런 조치는 가상 시스템을 조금이라도 안전하게 만든다. 절대 root가 telnet이나 ssh를 통해 접속하는 것을 허용하지 말라. 이런 조치는 재앙을 불러올 것이다. 만약 가상 시스템에서 불가피하게 telnet을 사용할 필요가 있다면 피해가 최소화 될 수 있는 머신을 선택하라. 정상적인 관리자라면 이렇게까지 이야기했는데에도 텔넷을 제공하지는 않으리라 믿고, 더이상 시간낭비는 하지 않겠다.

Q16. virtuald나 Virtual-Services HOWTO에 대한 메일링 리스트, 웹페이지, rpm, tar 등의 정보가 있나요?

A16. 현재는 아무것도 없다. 이 HOWTO 문서가 내가 현재 하고있는 가상 서비스와 관련된 프로젝트의 전부이다. 나 역시 내가 다루지 못한 부분에 대한 HOWTO를 찾고 있다.

Q17. 일반 유저로 virtexec를 실행하려 했더니 chroot: operation not permitted 메시지가 나옵니다. 왜죠?

A17. Chroot 는 root에게 제한된 시스템 콜이다. 슈퍼 유저만이 이것을 실행시킬 수 있다. virtexec 스크립트는 chroot 프로그램을 실행시키기 때문에 이 스크립트를 실행시키고자 한다면 슈퍼 유저의 아이디가 필요하다.

Q18. pop과 sendmail을 설정했는데, pop이 제대로 작동하지 않는것 같군요. 어떻게 대처할까요?

A18. 몇몇 pop 프로그램들은 /usr/spool/mail을 메일 파일들을 놓기 위해 사용한다. 내가 알기로는 qpop의 경우 이 문제를 해결하기 위해 수동으로 편집을 해주어야 한다. 소스 코드를 다시 컴파일하거나 /virtual/domain1.com/usr/spool 을 /virtual/domain1.com/var/spool로 하드 링크 시키면 된다.

Q19. 나는 당신이 말한 프로그램을 쓰지 않고, 대신 XXX라는 프로그램을 썼는데, 작동이 되지 않는군요. 왜죠?

A19. 나는 가급적이면 널리 사용되는 일반적인 서버들에 대해 기술하려고 했다. 하지만, 나는 모든 사람들이 자신이 특별히 좋아하는 서버가 있다는 것도 알고 있다. 이런 경우 가급적 많은 정보를 나에게 보내준다면, 당신의 문제점을 풀기 위한 시도를 할 것이고, 더불어 이 FAQ에 문서화 하는 작업을 할 것이다. 나에게 보낼 정보 가운데 가장 중요한 것은 당신이 실행시킨 버전의 프로그램을 어디에서 얻었는가 하는 점이다. (ftp://ftp.domain1.com/subdir/subdir/file.tgz의 형식으로 보내라)

Q20. virtexec가 실행될 때 symlink not a virt function 라는 메시지가 발생합니다. 이게 어떤 뜻이고, 그것을 어떻게 수정해야 합니까?

A20. virtexec는 처음 4개의 문자를 0번째 argument로 취하고 나머지 이름을 가상 환경에서 실행시키게 된다. 한 예로 virtpaswd는 passwd를 실행시킨다. 따라서 만약 처음 제거하는 네 문자가 virt 가 아니라면 에러 메시지를 내보내게 된다. virtexec는 셸 스크립트로 쓰여져 있기 때문에 이해하기 쉬울 것이다. bash나 기타 셸들의 메뉴얼 페이지가 셸 스크립트 프로그래밍에 대한 질문에 답이 될 수 있을 것이다.

Q21. virtuald와는 상관이 없지만 Qmail이나 SAMBA, Apache 등에 대해서 질문이 있습니다.

A21. 위에서 말한 모든 프로그램들은 훌륭한 문서들을 이미 가지고 있다. 몇몇 프로그램의 경우에는 www.(패키지 이름).org 와 같이 전용 웹사이트까지 마련되어 있다. 그렇게 가상 서비스와 관계없는 질문들에 대해서는 이들 사이트에서 적당한 질문처를 찾기 바란다.

Q22. 몇개의 도메인 앨리어스를 domain1.com에 가지고 있는데, 매일이 자꾸 되돌아옵니다. 왜 그럴까요?

A22. Virtmaildelivery는 전달되는 환경 변수들에 의해서 메일을 보낼 /virtual/domain1.com 디렉토리를 판단한다. 이것은 메일의 주소를 확인하기 위해 어떤 DNS 확인 절차도 갖지 않는다. 하지만, 만약 주소가 submail.mail.domain1.com이 된다면, virtmaildelivery는 주소에 대해서 확인을 하고, 차례대로 mail.domain1.com, domain1.com, com을 확인하면서 주소를 검색하게 된다. 이런 방법으로는 정해진 앨리어싱의 주소를 정확하게 알아낼 수 없다.

하지만, 만약 서브도메인의 형태가 아닌 도메인 앨리어스를 가지고 있다면, 다음과 같은 심볼릭 링크를 통해 구현이 가능하다:

cd /virtual
ln -s domain1.com domain1alias.com

virtmaildelivery는 두 디렉토리를 모두 존재하는 디렉토리로 인식할 것이고 (한쪽은 심볼릭 링크임에도 불구하고), 메일은 user@domain1.com과 user@domainalias.com 모두에게 보내질 수 있게 된다. virtexec는 두 도메인 모두를 다이얼로그 박스에 표시한다는 점을 주의하라. 두 파일 시스템이 같은 것이긴 하지만, 당신은 두 도메인 가운데 하나를 선택할 수 있다.


다음 이전 차례