다음 이전 차례

7. 리눅스 서버 시스템에 대한 이해

리눅스의 인터네트 서비스에는 그에 해당되는 데몬들이 있기 마련이다. 데몬들은 정확히 서버에서 활동 중인 프로세스를 말하는데 평소에는 쿨쿨 잠만 자고 있다가 클라이언트의 접속 요구가 생기면 깨어난다. 텔넷 서비스에는 telnet 데몬이, FTP 서비스에 대해서는 ftp 데몬이, 메일 서비스에 대해서는 mail 데몬이 그리고 NFS 서비스에 대해서는 nfs 데몬이, 마지막으로 웹 서비스에 대해서는 웹 데몬이 필요하다. 메일에 대해서는 sendmail 또는 smail이라는 데몬이 그리고 NFS에 대해서는 전술한 rpc.mountd, rpc.nfsd가 협동해야 하고 웹 서비스는 보통 httpd라는 데몬이 있는데 telnet과 ftp 의 경우에는 그렇게 단독으로 뜬다기 보다는 inetd 수퍼 데몬이라는 것에 의해서 제어를 받아서 필요할 때만 실행되도록 되어 있다. 부팅 과정을 잘 살펴보면 inetd라는 것이 뜨는 것을 볼 수 있다. inetd 데몬에 중요한 설정파일은 /etc/inetd.conf라는 파일이다. 그 내용을 일부만 살펴보도록 하자.

# See "man 8 inetd" for more information.
#
# If you make changes to this file, either reboot your machine or send the
# inetd a HUP signal:
# Do a "ps x" as root and look up the pid of inetd. Then do a
# "kill -HUP <pid of inetd>".
# The inetd will re-read this file whenever it gets that signal.
#
# <service_name>  <sock_type> <proto>   <flags> <user> <server_path>
<args>
#

#
# These are standard services.
#
ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  wu.ftpd
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
nntp    stream  tcp     nowait  root    /usr/sbin/tcpd  in.nntpd
# The comsat daemon notifies the user of new mail when biff is set to y:
comsat        dgram   udp     wait    root    /usr/sbin/tcpd  in.comsat
#
# Shell, login, exec and talk are BSD protocols.
#
shell   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd -L
login   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
# exec  stream  tcp     nowait  root    /usr/sbin/tcpd  in.rexecd
# talk  dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
ntalk   dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
#
# Pop et al
#
# pop2  stream  tcp     nowait  root    /usr/sbin/tcpd  in.pop2d
pop3    stream  tcp     nowait  root    /usr/sbin/tcpd  in.pop3d

#
# Finger, systat and netstat give out user information which may be
# valuable to potential "system crackers."  Many sites choose to disable
# some or all of these services to improve security.
# Try "telnet localhost systat" and "telnet localhost netstat" to see that
# information yourself!
#
finger  stream  tcp     nowait  nobody  /usr/sbin/tcpd  in.fingerd -w
systat  stream  tcp     nowait  nobody  /usr/sbin/tcpd  /bin/ps -auwwx
netstat stream  tcp     nowait  root    /usr/sbin/tcpd  /bin/netstat -a

위 설정 파일을 조금이라도 바꾸는 경우에는 앞 부분에서 설명한 것처럼 inetd를 kill -HUP 해서 프로세스를 죽인 후 다시 띄워야 한다. 위에서 열거한 것은 시스템 운영에서 아주 중요한 데몬들이라고 할 수 있다. 이 모든 것을 관리하므로 수퍼 데몬이라고 할 수 있다. 참고로 /etc/services라는 파일을 보면 여러분의 서비스가 어떤 프로토콜( TCP 인가? UDP 인가? )인가 그리고 어떤 포트를 사용하는가에 대해서 감잡을 수 있으리라 본다. 꼭 한 번 파일의 내용을 모르더라도 훑어보기 바란다. 마지막으로 위의 inetd.conf 파일을 잘 살펴보면 그냥 in.telnetd를 수행시키는 것이 아니라 /usr/sbin/tcpd라는 것에 의해서 보호되어(Wrap) 수행된다. 이렇게 tcpd라고 부르는 것에 의해 수행되는 서비스들은 접근 제어와 모니터링이 가능해진다. 맨 페이지를 보면 정말 장황하게 설명되어 있으므로 참고하기 바란다. 일단은 tcpd에 의해서 어떻게 호스트별 접근 제한을 가할 수 있는지 알아보자. 악독한 사용자들이 많은 호스트는 접근을 거부해보자. 서로 크랙킹을 많이 하는 학교 과들 사이에서는 접근 제한을 가하는 것도 좋을 것이다. 관계된 파일은 2개이다. /etc/hosts.allow 와 /etc/hosts.deny 즉 전자는 허용하는 사이트, 후자는 거부하는 사이트가 된다. 규칙은 /etc/hosts.deny에 넣는 호스트에서는 접근이 불허된다. 하지만 /etc/hosts.allow에 들어간 사이트는 전자에 거부 호스트 목록에 상관없이 접근이 허용된다. 따라서 /etc/hosts.allow는 잘 작성해야 한다. 예제를 한 번 살펴보기 바란다. 둘 다 형식은 같으니 하나만 알아보겠다.

데몬 리스트: 호스트 리스트
ALL: ALL EXCEPT terminalserver.foobar.edu
in.talkd: ALL
in.ntalkd: ALL
in.fingerd: ALL
in.ftpd: LOCAL, .my.domain
ALL EXCEPT in.fingerd: other.host.name

콜론(:)앞에다 서비스 데몬 리스트를 적어주고 뒤에는 호스트명을 적어준다. 위의 예에서 보면 ALL, EXCEPT, LOCAL 등의 특수한 명칭이 나오는데 각각은 여러분이 사전에서 찾을 수 있는 의미와 같다고 보면 된다. ALL과 EXCEPT는 데몬 리스트와 호스트 리스트 양자에 쓰일 수 있다. 보안이 정말로 문제되는 사이트에서는 우선은 hosts.deny 파일에 ALL: ALL이라고 써준다. 이렇게 하면 모든 호스트에 대하여 어떤 서비스도 일단 불허해놓는다. 그리고 hosts.allow에서 하나씩 허용해주면 된다. 자세한 사항은 맨 페이지를 보면 된다.

$ man 5 hosts_access


다음 이전 차례