센드메일 8.10.X대에서의 사용자 인증 백승용 : rockhard@shinbiro.com 이 글은 센드메일의 사용자인증기능을 사용하기 위한 방법을 소개합니다. 센드메일과 라이브러리의 설치방법은 자세하게 설명하고 있지 않습니다. 센드메일이나, SASL라이브러리의 설치과정에서 이 글을 참고하며 설치를 하게되면 원하는 사용자인증기능을 사용할 수 있을 것입니다. 제가 참고했던, 센드메일 설치가이드와 SASL라이브러리의 설치가이드를 소개해 드립니다. http://www.kies.co.kr/~jhpark/Sendmail/sendmail.html http://www.sendmail.org/~ca/email/auth.html 물론 위의 문서들을 참고하여 사용자인증을 수행할 수 있는 센드메일을 저의 문서 없이도 설치하실 수 있습니다. 그러나 제가 이 글을 쓴 목적은 제가 실수하면서 시간을 허비했던 내용들을 다른 사람들이 다시 번복하지 않기를 바라면서 쓴글입니다. 약간이나마 도움이 되기를 바랍니다. 혹시 부족하다고 생각되시는 부분이 있어 약간의 질문을 하실 분이나, 좀더 자세한 문서를 소개받고 싶으신분들, 또는 간단한 질문을 하실 분들은 다음의 주소로 전자우편을 보내주시기 바랍니다.(어떤 인증 메카니즘의 구현원리..또는 센드메일의 복잡한 설정.. 이런것들은 제가 답변을 못해 드릴 것입니다.) 미력하나마, 약간의 도움이라도 되어 드리도록 하겠습니다. 마지막으로, 문서의 조잡함이나 형식,오타등에 대해서는 너그러운 용서를 바랍니다. O 센드메일 8.10.X대에서의 사용자 인증 위에서 언급한 바와같이 센드메일이나 SASL의 자세한 설치과정은 생략합니다. 각각의 프로그램 설치과정에서 사용자 인증에 필요한 부분만을 언급하겠습니다. 1. 테스트되어진 환경 1) 파워리눅스 R2 2) CYRUS SASL 1.5.21 3) SENDMAIL 8.10.2 4) PINE 4.21 5) NETSCAPE 4.61 2. CYRUS SALS 1.5.21버전 설치 및 설정 1.5.21 이전의 버전은 추가적인 컴파일 옵션이 필요하다고합니다. 그러나 실제로 테스트를 해보지는 않아 정확한 사항은 모르니까 생략합니다. 설치는 ./configure;make;make install 을 통해서 할 수 있습니다. 자세한 설치방법은 포함되어 있는 설치문서를 참고하시기 바랍니다. 이에 대한 설정사항들입니다. 1) /usr/lib/sasl/Sendmail.conf 설치가 끝나면 /usr/lib/sasl 디렉토리에 Sendmail.conf파일을 생성합니다. 파일의 내용은 다음과 같습니다. 여기서 파일의 경로는 sasl이 설치되어진 경로에 따라 달라집니다. 물론 /usr/local/lib/sasl 이 될수도 있습니다. 저는 --prefix을 /usr로 해서 설치를 하였습니다. pwcheck_method: sasldb 위처럼 단 한줄입니다. 이것은 sasl이 패스워드를 체크하는 방법을 말합니다. 이에 pam,passwd,shadow등 여러가지가 있었으나 기본적인 sasldb를 사용하였습니다. 이경우 saslpasswd를 통해 sasldb파일에 사용자를 추가하게 됩니다. * 이 파일이 없이 테스트를 해보았으나, 아무런 문제가 없이 메일이 송신 되었습니다. 문서상에서는 권장을 하고 있으나 꼭 필요한 파일인지는 모르겠습니다. 2) sasldb의 생성 이 파일은 인증을 통해 센드메일 사용자를 추가해 주는 파일입니다. salspasswd를 사용해서 사용자를 추가합니다. 다음은 테스트에서 추가한 사항입니다. # saslpasswd -c rockhard -u rockhard.domain.net 위와 같이하면 /etc/sasldb라는 파일이 생기면서 사용자가 등록이 됩니다. 옵션은 4가지 정도로 간단하며 -c옵션은 사용자를 말합니다. -u 옵션은 도메인을 말합니다. 자세한 사항은 매뉴얼 페이지를 보시기 바랍니다. 사용자 등록의 여부는 아래처럼 확인합니다. # sasldblistusers user: rockhard realm: rockhard.domain.net mech: DIGEST-MD5 user: rockhard realm: rockhard.domain.net mech: PLAIN user: rockhard realm: rockhard.domain.net mech: CRAM-MD5 저의 경우 위와 같은 결과가 나옵니다. 말그대로 user는 사용자고 realm은 호스트의 FQDN입니다. 자세히는 모르겠으나 넷스케이프의 인증 방법인 PLAIN과 PINE의 인증 방법인 CRAM-MD5를 사용하기 위해 saslpasswd에서 -u 옵션으로 호스트의 FQDN을 추가해야 합니다. 이를 빼먹으면 사용자 인증에 실패합니다. * 여기서 중요한 점이 있는데 우선 saslpasswd명령을 실행하기 전에 sasldblistusers를 먼저 한번 실행시켜야 합니다. 물론 아무런 결과도 나오지 않습니다. 원인은 모르겠으나 이와 같이 하지 않으면 사용자 생성에 실패한다는 에러가 나옵니다. 좀더 자세히 말하자면 생성은 되는데 "mech: PLAIN" 항목이 나타나지 않습니다. 이는 넷스케이프에서의 인증 실패를 초래하게 될것입니다. * 위에서 말했듯이, Netscape에서는 아직까지 PLAIN방법을 통한 인증만이 지원됩니다. MUA들의 인증 지원여부는 아래의 URL에서 확인해 보시기 바랍니다. http://www.sendmail.org/~ca/email/mel/SASL_ClientRef.html * 한가지 더 중요한 점은 /etc/sasldb파일이 생성되고 나면 권한을 600 모드로 바꾸어 주어야 합니다. 소유자이외에는 읽기,쓰기 권한을 가질 수 없습니다. 3. 센드메일의 설치 * 센드메일 설치과정에서 나열된 내용들은 사용자 인증에 필요한 부분들 뿐입니다. 이 기능이외에 릴레이기능이나, 기타 센드메일의 기능에 관한 부분은 mc파일에 추가적으로 설정을 해야할 것입니다. 1) sendmail-8.10.2/devtools/OS/Linux파일의 편집 기본적을 설정되어 있는 사항에 다음의 두 줄을 추가해 줍니다. APPENDDEF(`confENVDEF',`-DSASL') APPENDDEF(`conf_sendmail_LIBS',`-lsasl') 2) sendmail-8.10.2/devtools/Site/site.config.m4파일의 생성 APPENDDEF(`confLIBDIRS',`-L/usr/lib') APPENDDEF(`confINCDIRS',`-I/usr/include') 위에서 실제로 SASL이 설치되어 있는 디렉토리로 수정해주어야 합니다. 3) 센드메일을 빌드합니다. # cd sendmail-8.10.2/ # sh ./Build 4) sendmail.cf파일을 만듭니다. sendmail-8.10.2/cf/cf 디렉토리의 generic-linux.mc파일에 다음의 항목을 추가해 줍니다. TURST_AUTH_MECH(`GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl define(`confAUTH_MECHANISMS',`GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5 PLAIN LOGIN')dnl define(`confDEF_AUTH_INFO',`/etc/mail/default-auth-info')dnl FEATURE(`no_default_msa')dnl turn off default entry for MSA DAEMON_OPTIONS(`Port=587,Name=MSA, M=Ea')dnl # /usr/bin/m4 ../m4/cf.m4 generic-linux.mc > sendmail.cf 위에서 인증 방법은 기본값에 PLAIN을 추가한 것입니다. 5) 센드메일 설치 및 기타 설정에 필요한 파일들 설치 # cd sendmail-8.10.2/obj.Linux.2.2.12-20pow.i686/sendmail # make install // 센드메일 설치 # cd sendmail-8.10.2/obj.Linux.2.2.12-20pow.i686/makemap # make install // makemap 설치 6) sendmail.cf파일을 /etc/mail로 복사해 줍니다. 이외에 sendmail.cw파일이나 aliases,access등의 파일들을 만들어 줍니다.(8.10.X 대에서는 sendmail.cw이 local-host-names라는 파일로 바뀐것 같습니다. 이점 주의하시기 바랍니다.) 7) 추가적으로 /etc/mail/default-auth-info파일을 만들어 줍니다. 내용은 아래와 같습니다. sasldb에 추가해준 내용과 같습니다. rockhard rockhard yourpasswd rockhard.domain.net 그러나 이 파일 역시 Sendmail.conf파일처럼 없어도 별로 지장이 없었던것 같습니다. 8) 이외에 센드메일의 설정파일들의 권한을 잘 확인해 보시기 바랍니다. 센드메일은 설정 파일들의 권한에 민감합니다. /, /etc, /etc/mail, /usr, /var, /var/spool, /var/spool/mqueue 이러한 디렉토리들은 root가 소유해야 하며 group과 other에게 쓰기 권한이 없어야 합니다. 또한 /etc/mail에 포함된 파일들도 group과 other에게 쓰기 권한이 없어야 합니다. 9) 센드메일의 구동이나, 여러 가지 구동테스트에 관한것은 위에 소개해 드린 센드메일의 설치가이드를 참고하시기 바랍니다. 4. 설정 테스트 위와 같은 과정들이 끝났다면, 이제 테스트를 해볼 시간입니다. PINE이나 넷스케이프의 설정에서 SMTP서버를 SENDMAIL이 설치된 호스트의 587포트(cf파일 만들기에서 포트를 587로 지정해 주었기 때문입니다.)로 설정해 줍니다. 메일을 작성하고 메일수신을 선택하면 사용자명과, 암호를 묻는 과정이 나올것입니다. 인증이 성공하면 메일이 송신됩니다. 그러나 인증이 되었어도 RELAY허용을 해두지 않으면 메일을 RELAY 거부가 납니다. 만약 유동 사용자(노트북사용자등. 물론 이 기능은 이러한 사용자를 위한 것이기 하지만요.)를 위한 경우 "FEATURE(promiscuous_relay)"을 사용해서 사용자인증만을 거치게 해야 할것입니다.