2012-09-12

FreeBSD]ssh howto(리눅스에도 적용)


SSH Howto
임은재
         eunjea@kldp.org
이 문서는 ssh 서버, 클라이언트의 설정, 사용법에 관한 문서이다.

차례
1. SSH 가 무엇이며, 어디서 구할수 있나?
왜 SSH를 사용해야만 할까?
어디서 구하나?
2. 클라이언트 사용법
기본적인 사용 방법
인증키 사용하기
ssh를 이용한 파일 복사
ssh 터널링
설정 파일
3. 서버 운영
설치
서버 설정
4. 저작권, 관련/참고 문서
저작권
관련/참고 문서
장 1. SSH가 무엇이며, 어디서 구할수 있나?
SSH (Secure SHell)은 말 그대로 보안 로그인 쉘이다.
전통적인 ftp, pop, telnet 같은 서비스들은 잘 알려진 대로 매우 보안에 취약하다. 이런 암호화 되지 않은 인증 방법은 당신의 암호가 그대로 노출될수도 있다.
ssh를 통한 모든 데이타는 암호화되며, 트래픽은 압축되어 더 빠른 전송 효율을 얻을수 있다. 또한 기존의 ftp,pop 같은 안전하지 못한 서비스들을 위한 "터널"까지 지원한다.
sshd 서버를 운영하지 않는 서버 관리자는 보안에 전혀 관심이 없는 사람이다.
왜 SSH를 사용해야만 할까?
다음글은 http://www.openssh.com/의 OpenSSH FAQ중에서 인용하였다.
강력한 보안
프라이버시 보호. 모든 통신은 자동으로 그리고 투명하게 암호화된다.
안전한 X11 세션. 원격 서버에 DISPLAY 변수를 자동으로 설정하고 모든 X11 연결을 보안채널을 통해서 포워딩한다.
TCP/IP 포트를 양 방향에서 다른 포트로 자유롭게 포워딩할수 있다.
rlogin, rsh, rcp등을 완전히 대체한다.
선택적으로 데이터를 압축하여 느린 네트워크 상에서의 속도 향상
서버는 자신의 RSA 키를 가지며 일정 시간마다 자동으로 재 생성한다.
어디서 구하나?
리눅스에서 사용할수 있는 ssh 는 두가지가 존재한다. ssh의 원 제작처인 http://www.ssh.com/ (핀란드 회사) 와 BSD licence(사실 100% BSD licence는 아니다.)의 http://www.openssh.com/가 그것이다.
나는 openSSH를 사용하며 이 문서도 openSSH를 기준으로 설명할 것이다. openSSH는 하나의 클라이언트/서버에서 ssh1,ssh2 프로토콜을 모두 지원한다.
ssh는 이미 당신의 배포본에 이미 포함되어 있을지도 모른다. 직접 컴파일 하여 사용하고 싶다면 http://www.openssh.com/portable.html에 서 소스를 받아 설치한다.
그외 ssh를 사용하기 위해 꼭 필요한 openssl 라이브러리는 www.openssl.org에서 구할수 있다.
ftp://ftp.koru.org/pub/rpm 에는 필자가 최신 버젼의 openSSH 와 openssl을 rpm 빌드해놓은 것과 소스 rpm을 찾을수 있다.
openssh는 OpenBSD, NetBSD, FreeBSD, AIX, HP-UX, IRIX, Linux, NeXT, SCO, SNI/Reliant Unix, Solaris, Digital Unix/Tru64/OSF, MacOS X 등의 다양한 OS를 지원한다.
장 2. 클라이언트 사용법
이 장에서는 ssh 서버에 접속하는 ssh 클라이언트의 사용방법에 대해 알아본다.
기본적인 사용 방법
openSSH 클라이언트는 ssh1,ssh2 프로토콜을 모두 지원하므로, 서버가 지원하는 ssh 프로토콜에 상관없이 접속할수 있다. 예를 들어, 접속할 ssh서버가 gate.eunjea.org 이고 계정명이 silver 라면
          [foo@home silver]$ ssh -l silver gate.eunjea.org
       
또는
          [foo@home silver]$ ssh silver@gate.eunjea.org
       
이제 다음과 같은 메세지와 함께 접속이 진행될 것이다.
          The authenticity of host 'gate.eunjea.org (192.168.1.1)' can't be established.

          RSA1 key fingerprint is e3:56:xx:b4:19:7e:xx:b1:7e:cd:xx:fe:5e:5b:17:66.

          Are you sure you want to continue connecting (yes/no)?
       
위 메세지는 ssh로 해당 서버에 처음 접속할때만 나오는 메세지이며, 접속할 서버의 호스트 키가 ~/.ssh/known_hosts (ssh2의 경우 known_hosts2) 파일에 저장된다. yes로 대답해주면, 다음과 같이 계정 암호를 물어오고, 이제 텔넷과 동일한 작업을 할수 있다.
          Warning: Permanently added 'gate.eunjea.org,192.168.1.1' (RSA1) to the list of known hosts.

          silver@gate.eunjea.org's password:
       
인증키 사용하기
인증키를 사용하는 것은 로그인 할때마다 암호를 직접 입력하는 것보다 더욱 안전하며, 하나의 암호로 여러 ssh서버에 접속할수 있는등의 장점을 가진다.
인증키 만들기
인증키는 ssh-keygen로 만든다. 키를 만들때는 사용할 키의 형태를 지정해 주어야 하는데 원격 서버가 ssh 프로토콜 버전 2를 지원한다면 ``rsa'' 또는 ``dsa'', 프로토콜 1만을 지원한다면 ``rsa1''을 사용한다.
예를 들어 원격 서버가 ssh2를 지원하고, ``rsa'' 키를 만들고자 한다면,
          [ home@foo ]$ ssh-keygen -t rsa

          Generating public/private rsa key pair.

          Enter file in which to save the key (/home/foo/.ssh/id_rsa):
       
키가 저장될 곳과 이름을 물어 오는데 디폴트로 그냥 엔터를 치고 넘어가면, 다음과 같이 인증키 암호를 물어온다. 원하는 암호를 두번 반복해서 입력해주면 키가 생성된다.
          Enter passphrase (empty for no passphrase):

          Enter same passphrase again:

          Your identification has been saved in /home/foo/.ssh/id_rsa.

          Your public key has been saved in /home/foo/.ssh/id_rsa.pub.

          The key fingerprint is:

          64:09:73:19:9e:ac:a0:f7:aa:c3:08:f9:0e:5a:fe:61 foo@home.eunjea.org
       
인증키 생성시 인증키 암호를 공백으로 (passphrase 를 물어올때 그냥 엔터를 치면 된다) 만들수도 있는데, 이것은 ssh 접속시 암호를 입력하지 않아도 그냥 접속이 되므로 편리할수는 있으나, 만약 당신의 인증키가 어떠한 경로로든 유출되었을 경우를 생각 해보면 피해야 할 것이다. 그리고 ssh-add와 ssh-agent를 사용하여 접속시마다 인증키 암호를 입력하지 않는 방법이 있다.
공개 키 사용하기
이제 ~/.ssh/ 안에 한쌍의 키(id_rsa 와 id_rsa.pub)가 생성되어 있을것이다. .pub 확장자가 붙은 것은 공개키로 이 파일을 접속할 리모트 서버들의 ~/.ssh/ 에 authorized_keys 라는 이름으로 복사해준다.
          [foo@home silver]$ scp ~/.ssh/id_rsa.pub silver@gate.eunjea.org:.ssh/authorized_keys
       
이제 ssh 접속을 진행 해보면 계정암호가 아닌 인증키 암호를 물어볼 것이다. 만약 계정 암호를 물어본다면 원격 서버상의 ~/.ssh 디렉토리나 공개키 권한의 문제이므로, 일단 접속후 chmod 755 ~/.ssh 그리고 chmod 644 .ssh/authorized_keys 해준다.
rsa1 방식의 ssh1 프로토콜의 사용할 것이라면 ssh-keygen -t rsa1 으로 키를 만들고, 공개키 (identity.pub)를 같은 방법으로 원격 서버의 ~/.ssh/authorized_keys 에 추가해 주면 된다.
키 파일을 다른 이름으로 저장했거나 서버마다 다른 키를 사용하려면 ssh에 -i 옵션을 사용해 키 파일을 직접 지정해 주면 된다.
인증키를 메모리에 상주 시키기
다음 방법으로 인증키를 메모리에 기억시켜 두면 처음 한번만 인증키 암호를 입력하면 다음부터는 암호를 입력하지 않아도 같은 인증키를 사용하는 모든 서버들에 접속할수 있다.
          [foo@home silver]$ eval $(ssh-agent) [Enter]

          다음과 같은 메세지를 보여줄 것이다.

          Agent pid 31234

          이제 ssh-add 를 입력하면

          Identity added: /home/silver/.ssh/identity (silver@home.eunjea.org)
       
이제 인증키를 복사해둔 ssh서버에 접속하면 이 세션에서는 더 이상 암호를 묻지 않을 것이다.
서버가 지원한다면 되도록 SSH2 프로토콜을 사용하도록 한다. SSH2는 SSH1과는 전혀 다른 프로토콜이며 더욱 안전하고, 성능이 좋다.
ssh를 이용한 파일 복사
scp
위에서 인증키를 리모트 서버에 복사할때 사용한 scp에 대해서 알아보자
예를 들어, 복사하려는 파일명이 'dumb' 라고 하고 접속하려는 원격 서버의 주소는 www.foobar.com, 당신의 쉘 계정은 babo 라고 한다면
dumb 파일을 www.foobar.com 의 babo 계정 홈 디렉토리에 복사하기
          [foo@home silver]$ scp dumb babo@www.foobar.com:.
       
www.foobar.com 의 babo 계정 홈 디렉토리에 있는 dumb 파일을 로컬로 복사하기
          [foo@home silver]$ scp babo@www.foobar.com:dumb .
       
만약 ~/.ssh/config 파일에 다음과 같이 www.foobar.com 의 계정을 설정해 놓았다면,
          Host *fbc

          HostName www.foobar.com

          User babo

          ForwardAgent yes
       
다음과 같이 더 간단하게 할수 있다.
          [foo@home silver]$ scp dumb fbc:.
       
또한 scp 는 -r 옵션도 가지고 있는데 이것은 디렉토리를 통채로 복사 할때 사용한다. 예를 들어 test/ 디렉토리안의 모든 파일과 하위 디렉토리를 서버 계정의 www 디렉토리 안에 복사 하려면 다음과 같이 한다.
          [foo@home silver]$ scp -r test/ babo@www.foobar.com::www/
       
sftp
sftp는 ssh하에서 전통적인 ftp 환경을 제공하며, 리모트상의 프로그램을 실행시킬수도 있다.
openSSH 클라이언트 패키지에는 sftp가 포함되어 있다.
ssh 터널링
ssh 터널링이란 ssh 접속을 다른 프로그램이 사용할수 있도록 port forwarding해주는 것을 말한다. 이 ssh 터널링을 이용해 암호화 접속을 사용하지 않는 네트워크 접속을 보다 안전하게 사용할수 있다.
POP
fetchmail을 사용하면 간단하게 ssh 터널안에서의 pop 메일 긁어오기를 구현할수 있다.
.fetchmailrc 설정예
          poll localhost with protocol pop3 and port 11110:

               preconnect "ssh -C -f 계정@메일서버.com -L 11110:메일서버.com:110 sleep 5"

               password xxxxx
       
자세한 문서는 : SSH 를 이용한 보안 POP
원격 계정의 이메일을 아예 복사해오는 방법도 생각해 볼수 있다. (Compressed TCP/IP-Sessions using SSH-like tools 참조)
IMAP
ssh 터널링과 fetchmail을 사용해서 imap 서버로부터 메일을 가져오려면, 다음과 같은 .fetchmailrc를 만들어 사용하면 된다.
          poll 메일서버.com with proto imap:

               plugin "ssh %h /usr/sbin/imapd" auth ssh;

               user babo is babo here
       
SMTP
역시 같은 문서에서 SSH 접속을 이용한 SMTP 사용법을 제시했는데 방법은 다음과 같이 간단하다.
           ssh -C -l loginid mailserver -L2525:mailserver:25
       
후에 메일 클라이언트를 localhost port 2525 를 통해 메일을 보내도록 하면 된다. 예를 들어 pine을 사용한다면, .pinerc의 smtp-server=localhost:2525 와 같이 해주면 되겠다.
ssh 윈도우 클라이언트인 SecureCRT를 사용해도 가능한데 Session Option -> Connection -> Hostname -> Advanced 탭을 선택해서, 같은 요령으로 사용할 로컬 포트와 원격 호스트 이름, 포워딩할 원격 포트를 선택한다. ssh 접속 후에는 OE의 경우 SMTP 서버를 127.0.0.1 로 지정하고 사용할 포트만 위에서 선택한 로컬 포트로 지정하면 된다. POP 포트도 같은 방법으로 사용 가능 하다.
SSH를 이용한 SMTP는 몇가지 장점을 가지는데 네트워크 트래픽의 감소와 계정 사용자만이 SMTP 서버를 사용할수 있으므로 함부로 릴레이를 열어놓지 않아도 된다는데 의미가 있겠다.
Webmin
Webmin는 웹상에서 브라우저로 서버 관리를 하는 툴이며, 당연히 보안에 민감하다.
webmin은 일반적으로 10000 포트를 사용하므로 다음과 같이 ssh 접속을 연다.
          ssh -f -l [원격 유저] [원격 서버] -L 1234:[원격 서버]:10000 tail -f /etc/motd
       
이제 브라우저에서 http://localhost:1234 로 접속할수 있다.
X
리모트 서버상의 X 어플리케이션들을 실행하고자 한다면 계정 홈 디렉토리의 ~/.ssh/environment 파일을 만들고 다음과 같은 내용을 넣어준다.
          XAUTHORITY=/home/계정 이름/.Xauthority
       
이제 로그아웃한후에 ssh를 다음과 같이 실행해본다. (계정 이름이 silver이고 서버는 gate.eunjea.org 라고 한다면)
          ssh -f -X -l silver gate.eunjea.org xterm
       
이제 xterm 이 로컬의 X에서 실행될 것이다. 다른 X 어플리케이션들도 이와 같이 실행시킬수 있다.
설정 파일
ssh 설정 파일은 ~/.ssh/config 파일 이다. 또는 전체 유저의 설정파일은 /etc/ssh/ssh_config 로 설정할수 있다.
다음은 내가 사용하는 설정 파일의 일부분이다. Host 지시자를 사용하여 접속할 서버마다 다른 옵션을 사용할수 있다.
          # *.eunjea.org 도메인을 가진 서버에 접속할때는 SSH2 프로토콜을 사용한다.

          Host *.eunjea.org

          Protocol 2

       

          # koru.org 에 접속할때는 SSH2 와 압축 옵션을 사용한다.

          Host koru.org

          Protocol 2

          Compression yes

          CompressionLevel 9

       

          # kldp.org에 접속할때는 SSH1 프로토콜을 사용하고

          # Cipher는 blowfish, 압축을 켠다.

          Host kldp.org

          Protocol 1

          Cipher blowfish

          Compression yes
       
그외 중요한 옵션으로는 CheckHostIP 가 있는데 이것은 접속할때 마다 리모트 서버의 IP 주소를 known_hosts 파일과 대조해본다. 이것은 DNS spoofing에 의해 호스트키의 변경을 알수 있는 옵션이다. 디폴트는 yes이다.
이외에도 많은 옵션들이 있는데 ssh의 man 페이지를 참고하라.
장 3. 서버 운영
설치
서버는 간단하게 패키지를 설치하거나 직접 소스를 설치할 경우 일단 보안을 위한 Privilege separation을 위해 sshd 유저와 디렉토리를 만들어 준다.
          $ mkdir /var/empty/sshd

          $ chown root:sys /var/empty/sshd

          $ chmod 755 /var/empty/sshd

          $ groupadd sshd

          $ useradd -g sshd -c 'sshd privsep' -d /var/empty/sshd -s /bin/false sshd
       
ssh 컴파일 옵션:
          configure --with-pam \

             --with-ipv4-default \

             --with-rsh=/usr/bin/rsh \

             --with-default-path=/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin \

             --with-privsep-path=/var/empty/sshd
       
서버 설정
서버 설치가 끝난후 설정 파일(/etc/ssh/sshd_config)의 옵션들을 살펴보자. 대부분의 경우 기본 설정파일 그대로 사용하여도 좋지만, 특정 그룹이나 유저들에게만 로그인을 허용하도록 할 경우 다음 지시자를 사용할수 있다.
AllowGroups
ssh 로그인을 해당 그룹으로 제한한다. 각각의 그룹명은 공백으로 구분한다. 와일드 카드(* 와 ?)를 사용할수 있다.
AllowUsers
ssh 로그인을 해당 유저로 제한한다. 사용법은 AllowGroups과 같다.
DenyGroups
AllowGroups의 반대 역할을 한다. 지정된 그룹은 로그인이 거부된다.
DenyUsers
AllowUsers의 반대 역할을 한다. 지정된 사용자는 로그인이 거부된다.
이외 사용자들의 sftp 사용을 허용하려면 다음과 같은 라인이 있는지 확인한다.
          Subsystem   sftp  /usr/lib/openssh/sftp-server
       
이외 옵션들은 sshd 의 man 페이지를 참고한다.
장 4. 저작권, 관련/참고 문서
저작권
Copyright (C) 2001 임은재
이 문서는 GNU Free Documentation License 버전 1.1 혹은 자유 소프트웨어 재단에서 발행한 이후 판의 규정에 따르며 저작권에 대한 본 사항이 명시되는 한 어떠한 정보 매체에 의한 본문의 전재나 발췌도 무상으로 허용됩니다.
본 저자는 문서의 내용이 야기할 수 있는 어떠한 결과에 대해서도 책임을 지지 않습니다.
관련/참고 문서
http://www.linuxdoc.org/HOWTO/mini/Compressed-TCP.html
http://www.mandrakeuser.org/docs/secure/sssh.html

2012-09-11

FreeBSD]FreeBSD와 윈도우의 공존하기-최준호님 강좌.


윈도우와 공존하기

최준호, Korea FreeBSD Users Group <cjh at kr.FreeBSD.org>


--------------------------------------------------------------------------------

이번달에는 FreeBSD와 윈도우를 같은 랜 환경에서 사용할때 일어날 수 있는 여러가지 상황에 대해서 알아보도록 하자. FreeBSD를 혼자 운영하는 경우가 아니라면 어느정도는 윈도우 시스템과 마주칠 일이 많을 것이므로, 윈도우와 연결하는 법에 대해서 알아두는 편이 좋을 것이다.



FreeBSD와 윈도우

인터넷 자체가 서로 다른 시스템을 연동하기 위해 만들어진 규격에 의해 동작하는 네트워크이지만, 작은 사무실 규모의 LAN 환경에서도 여러가지 서로 다른 플랫폼이 혼재하는 경우가 많다. 최근에는 집에서도 PC 여러대를 공유하는 가정도 늘고 있으므로 이러한 이기종간의 데이터 연결에 대한 요구는 상당히 높다고 할 수 있는데, 이런 경우 존재할 수 있는 플랫폼이라고 한다면 대부분 유닉스 계열(*BSD, 리눅스, 다른 유닉스)과 윈도우(윈도우 95, 98, ME, NT, 2000, XP), 매킨토시(Mac OS 9/X)를 들 수 있을 것이다. 이중 FreeBSD와 윈도우 간의 연결에 대해서 알아보기로 하자. FreeBSD는 다른 유닉스 운영체제 이외에도 윈도우, 매킨토시 등 여러 서로 다른 플랫폼간의 연결을 도와줄 수 있는 많은 프로그램을 사용할 수 있다.

대표적으로 다음의 프로그램을 들 수 있다.


samba (SMB/CIFS 프로토콜 서버)
netatalk, cap (AppleTalk 프로토콜 서버)
smbfs, sharity-light (SMB/CIFS 파일시스템 마운트용)

이러한 시스템의 사용에 있어서 주 관심사는 원격 파일 시스템 공유이지만, 사용자 인증이나 프린터 사용등도 제공하고 있다. 이중 대표적으로 사용할 수 있는 몇몇 어플리케이션에 대해서 알아보자.




윈도우에서 FreeBSD에 접근하기

samba (net/samba*)

리눅스나 유닉스를 조금 사용해 본 사용자라면 윈도우와의 연결에 있어서 samba를 가장 먼저 떠올릴 사람이 많을 것이다. samba는 기술적으로는 SMB/CIFS 서버로 부를 수 있는데, 이는 윈도우 네트워크를 연결하는 프로토콜의 이름이다. 파일 공유나 프린터 공유, 그리고 인증에 대한 내용인데, 원래는 SMB(Server Message Block)이라는 이름으로 부르는 것이지만 이를 확장하여 네트워크 표준으로 만들고자 마이크로소프트가 IETF에 제출할 때에는 CIFS(Common Internet File System)으로 바뀌었다. 하지만 내용은 거의 동일하다. 또한 samba는 윈도우와 유닉스의 사용자를 이을 수 있도록 하는 여러가지 인증 메카니즘을 제공할 수 있다.

설치 방법은 보통의 ports 설치를 생각하면 된다. samba 관련 포트는 세가지가 있다.


net/samba  samba 안정 버전. 현재는 samba 2.2.x 버전의 포트

net/samba-devel  samba 개발 버전. 현재는 3.0 베타 버전의 포트

net/samba-tng samba TNG. samba TNG는 2000년 후반에 samba에서 갈라져 나온(code forking) 한 갈래이다.
TNG는 현재 samba에서 제공하지 못하는 주 도메인 콘트롤러 기능을 제공하는 것을 목표로 하고 있다.

http://www.samba-tng.org

japanese/samba, japanese/samba20

samba 2.2와 samba 2.0의 일본어화 버전. 우리가 사용할 일은 거의 없겠지만, 이 버전은 samba 배포본에 일본어 처리 기능을 더 제공하고, 일본어화된 SWAT를 제공하고 있다. 한국에서 이런 프로젝트가 있으면 좋겠다는 생각에서 소개한다. http://www.samba.gr.jp/



samba 설치

어느 버전을 설치할지는 여러분의 자유이지만, 많이 사용하는 것은 net/samba 를 설치하면 큰 무리가 없을 것이다. 설치할 때에는 여러가지 옵션 사항에 대한 것을 물어볼 것인데, 처음에는 아무것도 선택하지 말도록 하자. 나중에 LDAP인증이나 DFS 지원 등을 포함하고 싶다면 다시 컴파일해서 설치하면 된다.

# cd /usr/ports/net/samba
# make install clean

samba를 설치한 후에는 이 서버를 어떻게 띄울지를 정해야 한다. 이 방법에는 두가지가 있는데, smbd/nmbd를 대몬으로 띄우는 방법과 inetd를 통하는 방법이다. 아래 두 방법 중 하나만 사용하기를 바란다.

samba에는 두가지 서비스 대몬을 기본적으로 띄우게 되는데, 하나는 파일 서비스를 담당하는 smbd이며, 브라우징이나 네임 리졸빙을 담당하는 nmbd를 사용한다.


smbd/nmbd를 대몬으로 띄우기

이 방법을 사용하기 위해서는 보통의 포트를 통해 설치하는 대몬 서비스와 같이 /usr/local/etc/rc.d/ 의 기동 스크립트를 사용하도록 한다.


# cd /usr/local/etc/rc.d
# cp samba.sh.sample samba.sh

그리고 설정 파일은 /usr/local/etc/smb.conf에 있으므로 이 파일을 적절히 수정하도록 한다. 수정한 후에 smbd/nmbd를 띄우기 위해서는 다음과 같이 한다. 물론 시스템을 다시 부팅하면 자동으로 실행된다.


# sh /usr/local/etc/rc.d/samba.sh start

정지하기 위해서는 stop 인수를 주면 된다.


inetd를 이용하는 방법

inetd에서 띄우기 위해서는 다음과 같이 한다. 기본적인 samba를 위한 엔트리는 /etc/inetd.conf에 존재하므로 이 부분의 주석을 풀어주면 된다. /etc/inetd.conf의 끝부분을 살펴보도록 하자.





--------------------------------------------------------------------------------
#
# Enable the following two entries to enable samba startup from inetd
# (from the Samba documentation).  Enable the third entry to enable the swat
# samba configuration tool.
#
netbios-ssn stream tcp nowait          root    /usr/local/sbin/smbd    smbd
netbios-ns dgram udp   wait            root    /usr/local/sbin/nmbd    nmbd
#swat   stream  tcp     nowait/400      root    /usr/local/sbin/swat    swat
--------------------------------------------------------------------------------

서비스를 이용하기 위해서는 netbios-ssn과 netbios-ns의 두 서비스 항목의 주석을 위와 같이 풀어 주고 inetd를 재시작하도록 한다. inetd를 띄워놓지 않은 경우라면 inetd도 띄워두도록 해야 하고, 접근 제한을 하기위해서 /etc/hosts.allow에 적당한 접근 제한이 되어 있는지 살펴보도록 하자. swat 항목에 대해서는 아래에 설명하기로 한다.



SWAT

SWAT는 Samba Web Administration Tool의 약자로, samba를 웹에서 관리할 수 있도록 하는 도구이다.

여기에서는 samba 관련 문서도 읽어볼 수 있으므로 관리에 많은 도움이 되지만 영문 버전만 제공되는 것이 약점이라고 할 수 있다. 이 부분에서 한글 정보를 제공하는데 관심이 있는 사용자들은 japanese/samba 에 들어있는 번역 프레임워크를 사용해서 한국어 SWAT를 제공할 수 있도록 해 보면 좋을 것이다.

swat는 기본적으로 사용할 수 없게 되어 있으므로 이를 사용하기 위해서는 inetd를 띄우도록 해야 한다.

/etc/inetd.conf의 예제로 제공되고 있으므로 가장 아랫부분을 살펴보아서 다음과 같은 부분을 찾아 주석을 풀어주면 된다.

swat   stream  tcp     nowait/400      root    /usr/local/sbin/swat    swat


inetd를 재시작하였으면 웹 브라우저를 띄워서 다음 주소로 접속하도록 하자.

http://서버IP:901 또는 http://127.0.0.1:901

외부에서 임의로 접근하는 일을 막기 위해서는 /etc/hosts.allow에서 조절해 주기 바란다. 만약 루프백 인터페이스에서 접속만을 허가하도록 만들고 싶다면 다음과 같이 /etc/hosts.allow에 다음과 같이 적어준다.

swat: 127.0.0.1 : allow
swat: ALL : deny



SWAT 접속 화면

samba 설정

samba의 설정 파일은 /usr/local/etc/smb.conf 에서 설정할 수 있다. 이 파일은 직접 편집해도 되고 SWAT를 이용해도 된다. SWAT는 수동으로 편집한 smb.conf 도 읽어들일 수 있으므로 두 방법 모두 이용할 수 있다. 하지만 SWAT 인터페이스에서는 대부분의 선택 가능한 값을 그대로 텍스트로 적도록 되어 있어서 smb.conf 에 대한 매뉴얼 페이지나 SWAT의 도움말 화면을 잘 읽어보지 않으면 어떤 값을 주어야 하는지 알기가 힘든 경우가 있다.

기본적인 smb.conf의 설정 방법에 대해서 알아보자. 설치 직후에는 파일이 존재하지 않으므로 기본값에서 하나 복사해 온다.


# cd /usr/local/etc
# cp smb.conf.default smb.conf

다음은 smb.conf.default 에서 최소한의 부분과 약간의 예제를 간추려 번역한 부분이다.



-------------------------------------------------------------------------------



# 시스템의 기본 값을 지정한다.
[global]

# 윈도우에서는 "작업 그룹" 또는 "도메인"이라 부르는 값이다.
# 같은 LAN 내의 같은 작업 그룹이 되도록 적어주면 된다.
   workgroup = MYHOME

# 윈도우에서 네트워크 환경의 자세히 보기를 선택하면 여기 나오는 값을
# 볼 수 있다. 보통 서버에 대한 설명을 적어 준다.
   server string = My Home Server

# 접속할 수 있는 외부 IP 목록을 적는다. 127. 은 루프백 인터페이스가
# 속하고, 나머지는 접속이 가능한 LAN 주소나 외부 주소를 적으면 된다.
# 주의할 것은 samba는 TCP를 통한 접속을 허가하므로 인터넷에 연결되어
# 있다면 서브넷 외부에서도 접속할 수 있으므로, 이 부분을 주의해서
# 지정하기 바란다.
   hosts allow = 192.168.1. 192.168.2. 127.

# /etc/printcap에서 프린터 설정을 읽어들이도록 하려면 yes라 지정한다.
   load printers = yes

# samba 접속 로그 파일 이름을 지정한다. %m은 접속한 쪽의 컴퓨터
# 이름이다(정확히는 NetBIOS 이름). 아래 기본 설정으로 해 두면
# /var/log 디렉토리가 지저분해질 수 있으므로 서브디렉토리를 하나
# 만들어(/var/log/samba 와 같은 식으로) 두는 편이 좋을 것이다.
   log file = /var/log/log.%m

# 보안 모드는 user, share, server 등이 있다. 이는 공유에 대한 접근
# 보안 방식을 지정하는데, 조금 복잡하므로 SWAT나
# /usr/local/share/doc/samba/textdocs/security_level.txt 문서를
# 참고하기 바란다. 서브넷에 NT/2000 도메인 콘트롤러가 있다면 그쪽으로
# 인증을 넘길 수 있다(server). 윈도우 95/98 등에서 접근한다면
# 도메인 로그온을 하지 않는 한 share 가 적당할 것이다.
   security = user

# 윈도우 95나 NT 업데이트에 포함되어 있는 암호화된 암호 전송을
# 사용한다. 이 기능은 smbpasswd와 조합해서 사용해야 한다.
# 반대로 윈도우의 레지스트리를 조정해서 평문 암호 전송을 사용하도록
# 하는 경우도 있다. /usr/local/share/doc/samba/Registry 를 보자.
  encrypt passwords = yes

# 속도 향상을 위한 소켓 옵션을 지정할 수 있다.
   socket options = TCP_NODELAY

# 네트워크 카드가 하나 이상 있다면 여기에 사용할 주소만 적어준다.
   interfaces = 192.168.12.2/24 192.168.13.2/24

# 윈도우는 네트워크 환경 목록에 나올 컴퓨터 이름을 수집하기 위해
# 브라우징이라는 과정을 거친다. local master를 yes로 지정하면
# 이 서버를 이 네트워크의 브라우저 마스터로 지정하여 컴퓨터 목록을
# 유지하도록 한다.
   local master = no

# 현재 네트워크 안에 NT 도메인 콘트롤러가 있다면 그 서버의 이름을
# 지정한다.
;   domain controller =


# DNS 프록시는 samba가 DNS 룩업을 통해서 NetBIOS 이름을 해석할지
# 여부를 지정한다. 원래 기본값은 yes였지만 1.9.18 이후 no로 바뀌었다.
   dns proxy = no


# 코드페이지 지정은 한국어의 경우 다음과 같이 한다.
client code page=949

# smb.conf 예제를 보면 아래와 같은 행이 포함되어 있는데 선택하지 않는
# 편이 좋다. 이 부분은 net/cap과 같은 매킨토시 지원의 경우
# 파일시스템에서 한글 코드를 :XX (XX는 16진수 두자리)와 같은 방식으로
# 표현하도록 하는데, cap/netatalk와 공존할 것이 아니라면 유닉스
# 사용자에게 혼란을 주게 되므로 지정하지 않고 그냥 두는 편이 좋다.
; coding system=cap

# 각 공유를 지정하기 위해서는 [공유명] 아래에 들여쓰기로 옵션을
# 지정하도록 한다. SWAT를 통해 만들어진 공유도 동일하다.
# homes는 특수한 공유로, 접속한 윈도우 사용자의 id와 일치하는(별도의
# 맵을 사용하지 않는 한) 로컬 서버의 홈 디렉토리를 네트워크 환경의
# 공유에 나타내도록 한다. 즉 접속하는 사람마다 나타나는 값이 다르게
# 된다.
# 윈도우와 FreeBSD에서 동일한 id를 사용하는 경우에 자신의 홈
# 디렉토리에 접근하기 위해 편리하게 사용할 수 있다. 만약 다른 경우라면
# username map이라는 파일을 만들어서 다른 id로 바꾸어 줄 수 있다.
[homes]
   comment = Home Directories
   browseable = no
   writeable = yes

# printers 공유도 특수한 것으로 프린터를 지정한다. 프린터는 실제
# 파일 공유와 유사하지만 파이프의 형식을 갖고 있다. 다른 공유 이름으로
# 프린터를 만들 수 있는데 이 경우에는 printable = yes 를 지정한다.
# smv.conf.default의 다른 예를 살펴 보자.
# 윈도우에서 프린터 공유를 열게 되면 /etc/printcap에 지정된
# 프린터 이름들이 자동으로 나열된다. 이 방식은 윈도95/98에서 사용하는
# 방식으로, 2000 이후에서 사용하는 또 다른 방식 [print$]가 있다.
# 그 방법을 사용하면 프린터 드라이버의 자동 설치 등이 가능하지만
# 여기에서는 다루지 않겠다.
[printers]
   comment = All Printers
   path = /var/spool/samba
   browseable = no

# 아래 행 대신 public = yes 를 추가하면 익명으로 출력이 가능하다
   guest ok = no
   writeable = no
   printable = yes

# 모두 접근할 수 있는 공유를 만들고 싶다면 아래와 같이 한다. 디렉토리
# 권한을 적절히 수정해 주어야 할 것이다(모두 읽기/쓰기, sticky 등)
[public]
   comment = Temporary file space
   path = /home/public
   read only = no
   public = yes

# 아래의 예는 mary와 fred 사용자만이 사용할 수 있는 공유의 예이다.
# 접근 가능한 사용자를 valid users에 기술하고, public = no 로 지정되어
# 있는 점을 살펴보자.
# create mask는 shell의 umask와 동일한 역할을 한다. 이런 경우 mary가
# 만든 파일을 fred가 지울 수 없도록 디렉토리에 sticky 비트를 추가해
# 주면 좋다.
;[myshare]
;   comment = Marys and Freds stuff
;   path = /usr/somewhere/shared
;   valid users = mary fred
;   public = no
;   writeable = yes
;   printable = no
;   create mask = 0765

--------------------------------------------------------------------------------
smb.conf의 지정이 되었으면 testparm 명령으로 설정이 맞는지 검사해 볼 수 있다. 이후 서버를 띄우고(SWAT의 Status 메뉴를 이용해도 각 서버를 바로 실행할 수 있다) 윈도우에서 접근해 보도록 하자.

여기에서는 nemesis 라는 서버가 FreeBSD samba 서버이다. 클라이언트가 윈도우 98이고 NT 로그온 상태가 아니어서 security = share로 하고 있다. 또한 사용자 로그인을 가능하게 하기 위해 다음 명령을 실행하여 윈도우 사용자를 생성해 주었다.

# smbpasswd -a cjh
New SMB password: 암호
Retype new SMB password: 암호
Added user cjh.

이렇게 하면 encrypted passwords = yes도 가능하다. 또는

/usr/local/share/doc/samba/Registry/Win98_PlainPassword.reg 파일을 윈도우에서 실행하면 평문 로그인이 가능한데, 이 경우 유닉스 사용자 정보를 그대로 이용할 수 있다. smbpasswd 로 작성한 암호는 /usr/local/private/smbpasswd 에 저장이 되는데, 이 파일에는 사용자 암호가 저장되어 있는 관계로(암호화되어 있기는 하지만) /etc/master.passwd와 동일한 수준의 보안을 요하므로 관리에 주의해야 한다.


네트워크 공유로 본 모습

윈도우에서 cjh 라는 사용자로 로그온해 있었다면 nemesis에 접근할 경우 다음과 같이 보인다.


cjh 사용자로 접근한 모습


설정된 프린터 목록도 볼 수 있다. 프린터에서 오른쪽 단추를 눌러서 바로 시스템 프린터 설치도 가능하다.


프린터 공유

임시 디렉토리를 만들었다면 다음과 같이 공유에 접근이 가능하다. 파일을 만들거나 지워 보도록 하자.

public 공유

samba에는 수많은 옵션이 있다. 특히 samba의 뛰어난 기능은 사용자 관리와 각종 성능 조정 옵션, 그리고 2.2에서 추가된 기능 중 눈에 띄는 기능은 국제화 처리의 강화와 ACL, Microsoft DFS, winbindd를 통한 인증 기능의 통합 등인데, 대부분의 기능은 NT/2000 도메인에 관한 신기능이라 할 수 있다.

samba는 현재 NT 도메인에 워크스테이션으로 참여하거나 인증을 PDC(주 도메인 콘트롤러)에 넘길 수 있는 기능이 있지만, 앞서 이야기한 samba-tng는 아예 NT/2000 서버가 한대도 없는 경우에도 PDC로 동작할 수 있는 기능을 목표로 하고 있다. 사무실에 NT/2000 서버가 없어도 NT/2000 도메인 환경을 구성하고 싶다면 samba-tng를 시도해 보는 것도 좋으리라 생각한다.

이렇게 구성한 samba 가 뜬 FreeBSD 서버의 경우 사무실이나 학교 내의 파일 서버나 프린터 서버로 제격이다.



FreeBSD에서 윈도우에 접근하기

이번에는 반대의 경우를 생각해 보자. 즉 FreeBSD에서 윈도우의 공유나 프린터를 이용해야 하는 경우이다.

이 경우에도 여러가지 방법이 있겠지만, 주요 내용은 파일 공유와 프린터를 사용할 수 있는지에 대한 것이다.


samba (net/samba*)

앞서 설명하였던 samba에는 FreeBSD에서 윈도우 쪽의 접근을 도와주기 위한 여러가지 도구가 제공되고 있다. 리눅스의 경우에는 samba 배포본 안에 smbfs라는 커널 파일시스템 형태의 드라이버가 제공되고 있지만, FreeBSD에서는 동작하지 않고 대신 FreeBSD 용의 smbfs 가 따로 있다.

smbclient

smbclient는 가장 기본적인 명령행 도구이다. 공유 접근에 대한 거의 대부분의 기능을 수행할 수 있다.

smbclient는 다음의 문법을 갖는다.

   # smbclient 서비스 암호 [옵션]


옵션을 뒤에 쓰는 좀 특이한 형태이다. 보통 파일 공유에 접근하려면 공유 리소스를 나타내기 위한 윈도우식 이름을 사용하면 된다. 보통 서버공유명으로 나타내는데, 유닉스 쉘에서는 가 특수한 의미를 가지므로 두번 써야 한다.  문자 대신 /을 써도 된다. 가령 garfield 라는 윈도우의 c 라는 공유에 접근하기 위해서는 다음과 같이 사용한다.



  # smbclient garfieldc

    added interface ip=192.168.1.4 bcast=192.168.1.255 nmask=255.255.255.0
    Got a positive name query response from 192.168.1.3 ( 192.168.1.3 )
    Password:

보통은 암호를 물어볼 것인데, 공유에 지정한 암호 또는 사용자 암호를 입력하면 된다. 암호를 지정하지 않았다면 그냥 엔터를 누르면 되며, 이런 경우에는 -N 옵션을 추가하면 암호 입력 없이 접속이 가능하다(위험한 방법이기는 하다).

  smb: >

접속 후 아래와 같은 프롬프트가 나온다. 여기서는 FTP와 유사한 방법으로 사용이 가능하다. 즉 목록을 보려면 ls, 파일을 받으려면 get, 올리려면 put 명령을 이용한다.

smb: > get v3ahn.cfg
getting file v3ahn.cfg of size 7314 as v3ahn.cfg (14.1 kb/s) (average 14.1 kb/s)

smb: > put ENCRYPTION.txt
putting file ENCRYPTION.txt as ENCRYPTION.txt (111.1 kb/s) (average 111.1 kb/s)


이런식으로 파일 공유를 이용하며 된다. 간단하게 사용할 때에는 편리하다. 이 기능을 사용하여 원격 디렉토리를 tar로 묶거나 풀 수 있는 smbtar라는 명령도 제공된다. 마운트하지 않아도 되므로 윈도우 데이터를 FreeBSD 디렉토리에 백업하고자 하는 경우에 유용하다.

smbclient에는 여러가지 옵션이 있는데, -U 사용자ID 로 접속할 계정 ID를 다르게 줄 수 있고, 서버 이름이 DNS와 NetBIOS의 것이 충돌한다면 -I 서버 IP 옵션을 사용하여 실제 접속하는 호스트 IP 주소를 적어준다.



공유 목록만을 얻기 위해서는 다음과 같이 하면 된다. 다음은 nemesis 호스트(이 이름은 DNS 또는 /etc/hosts의 이름이 아니라 윈도 네트워크 상의 이름이다)의 공유 목록을 본 예이다.



% smbclient -N -L nemesis

added interface ip=192.168.1.4 bcast=192.168.1.255 nmask=255.255.255.0

Anonymous login successful

Domain=[MYHOME] OS=[Unix] Server=[Samba 2.2.5]


        Sharename      Type      Comment
        ---------      ----      -------
        public         Disk    
        IPC$           IPC       IPC Service (My Home Server)
        ADMIN$         Disk      IPC Service (My Home Server)
        remote         Printer   local line printer


        Server               Comment
        ---------            -------
        NEMESIS              My Home Server


        Workgroup            Master
        ---------            -------
        MYGROUP              GNOMANIAC
        MYHOME               NEMESIS



smbspool

smbspool는 윈도우 프린터를 사용하고자 하는 경우에 이용할 수 있다. 사전에 프린터 이름을 알고 있어야 하는데 위의 smbclient 명령을 사용하면 얻을 수 있다. 사용법은 다음과 같다.

  # smbspool [DEVICE_URI] job-id user title copies options [file]

DEVICE_URI는 같은 이름의 환경변수를 사용할 수도 있는데, 프린터의 이름을 지정한다. 아래의 예를 참고하기 바란다. test.txt라는 파일을 인쇄하기 위해서는 다음 예와 같이 하는데, 주의할 것은 smbspool과 같은 명령으로 출력하는 경우에는 윈도우의 프린터 드라이버를 거치지 않고 바로 프린터로 출력이 나가게 된다. 즉 이 프린터가 윈도우에서 사용하는 프린터 드라이버가 무엇이든, smbspool을 이용할 때에는 해당 프린터에 맞는 언어로 변환한 다음 내보내기 바란다. 특히 포스트스크립트와 같은 경우에는 ghostscript 등을 사용하여 미리 해당 프린터의 언어(PCL등)로 변환해야 한다.


  # smbspool smb://nemesis/remote 0 cjh test 1 none test.txt

사실 job, user, title, options에 해당하는 값은 거의 의미가 없으므로 아무 값이나 주어도 상관이 없다.

프린터 이름을 나타내는 DEVICE_URI와 파일 명에만 유의하자. 가장 마지막의 파일명을 생략하면 표준 입력에서 받으므로 다음과 같이 파이프를 이용한 출력에도 이용할 수 있다.

  % h2ps test.txt | smbspool smb://nemesis/remote 0 cjh test 1 none

CUPS(Common UNIX Printing System, print/cups)를 사용하면 기존 BSD lpr 이외에 윈도우 프린터에 대한 출력도 지원해 준다.



smbfs

FreeBSD 4.0 버전 이후에는 smbfs라는 커널 파일시스템으로 구현된 SMB 공유 마운트 기능을 사용할 수 있다. 기능적으로는 리눅스의 smbfs와 동일하며, 최근의 4.x 버전에는 시스템에 포함되어 있고 그 이전 버전이라면 포트(net/smbfs)를 통해 설치할 수 있다. 사용하는데에는 모듈을 로딩하면 되므로 굳이 커널을 다시 컴파일할 필요는 없지만, 커널에 다음 옵션을 주어 빌드할 수 있다.


--------------------------------------------------------------------------------

# SMB/CIFS 리퀘스터
# NETSMB는 SMB 프로토콜 지원을 사용할 수 있게 하며, LIBMCHAIN과
# LIBICONV 옵션이 필요하다.
# NETSMBCRYPTO는 암호화된 암호 전송을 지원한다.

options         NETSMB                  #SMB/CIFS requester
options         NETSMBCRYPTO            #encrypted password support for SMB

#mchain 라이브러리. KLD로 로딩하거나 커널에 포함할 수 있다.

options         LIBMCHAIN               #mbuf management library

# 커널측 iconv 라이브러리

options         LIBICONV


--------------------------------------------------------------------------------



또는 4.x의 경우 /modules/smbfs.ko 를 로딩해 두면 된다. 만약 /modules/smbfs.ko가 없다면 포트에서 net/smbfs를 설치하기 바란다. smbfs 관련 유틸리티로는 두가지가 있는데, 파일 공유를 마운트하기 위한 mount_smbfs와 smbutil이라는 간단한 유틸리티이다. 이들 프로그램은 모두 samba가 없어도 동작한다.

mount_smbfs

윈도우 파일 공유를 마운트하는 방법에 대해서 알아보자. garfieldc 를 /share에 마운트하고 싶다면 다음과 같이 한다.

아래 공유는 암호가 지정되어 있지 않은 경우이다.

  # mount_smbfs -N

마운트된 상황은 다음과 같다.

  # df -k
  ...


암호가 있는 경우라면 -N 옵션을 제외하고, 사용자 id를 같이 주어야 할 수도 있다.

  # mount_smbfs

  Password:


암호를 주어야 하거나 작업 그룹 이름을 지정해야 하는 경우라면 설정 파일에 그러한 정보를 기록해 둘 수 있다. 설정 파일에는 두가지가 있는데, 일반 사용자를 위한 ~/.nsmbrc 또는 전역 설정을 위한 /usr/local/etc/nsmb.conf 이다. 이 파일의 예제는 /usr/share/examples/smbfs/dot.nsmbrc 에서 찾을 수 있다.



--------------------------------------------------------------------------------

# 기본값 영역이다. 작업 그룹을 지정하고 있다.

[default]

workgroup=MYHOME


# NEMESIS는 윈도우 서버 이름이다.
# charsets는 [윈도우쪽 문자셋]:[FreeBSD쪽 문자셋]의 변환 규칙을 지정할
# 수 있고(iconv의 기능을 이용한다), addr는 실제 TCP/IP상의 주소를
# 나타낸다.

[NEMESIS]
charsets=euc-kr:euc-kr
addr=fserv.coolcorp.com

# NEMESIS의 CJH 사용자에 대한 설정을 나타낸다.
[NEMESIS:CJH]

# CJH 사용자의 암호를 지정한다. 여기 지정하면 mount_smbfs 시에 암호
# 입력을 생략할 수 있다. 여기 적은 암호는 smbutil crypt 명령으로
# 생성할 수 있다. smbutil에 대한 설명은 아래에서 하고 있다.

password=$$28974DECD

--------------------------------------------------------------------------------


암호를 지정해 두면 mount_smbfs 시에 암호 입력을 생략할 수 있다. 항상 마운트하고 싶다면 /etc/fstab에 다음과 같이 기록한다. 물론 사전에 nsmb.conf 등에 암호를 적어 두어야 한다.


  # smbfs


이렇게 하면 부팅시에 바로 마운트가 될 것이다.


smbutil

smbutil은 smbfs의 보조 역할을 하는 유틸리티로 몇가지 편리한 기능을 갖고 있다. 사용법은 다음과 같다.

  # smbutil 명령 [인수]

명령에는 다음과 같은 종류가 있다.

  crypt [암호]: crypt를 사용하면 nsmbrc용의 암호를 생성할 수 있다.

  # smbutil crypt mypassword
  $$16144562c293a0314e6e1

암호 "mypassword"의 암호화된 값이 출력되므로 이 값을 .nsmbrc의 password에 적어주면 된다.

물론 해당 파일은 다른 사용자가 읽거나 쓸 수 없도록 반드시 권한을 변경하기 바란다.


lc 현재 활성화되어 있는 연결을 출력해 준다.

  # smbutil lc

  SMB connections:
  VC: NEMESISCJH
  (root:wheel) 711
    Share:    PUBLIC(root:wheel) 711


현재 NEMESISCJH 공유를 root:wheel 사용자:그룹으로 접근하고 있다는 의미이다.

  login

  logout

이 명령을 통해 해당 서버 또는 공유에 로그인/로그아웃할 수 있다. 한번 로그인해 두면 로그아웃될 때까지 해당 공유/서버에 대한 명령을 암호 없이 수행할 수 있다. 프린터 접근 등에 유용하다.

lookup [-w NetBIOS 네임서버] 호스트명

호스트명에 대한 IP 주소를 돌려준다. SMB는 DNS와는 다른 네임 리졸빙 체계를 갖추고 있다고 하면 이 명령에 대한 이해가 쉬울 것이다.


  # smbutil lookup nemesis

  Got response from 192.168.1.1
  IP address of nemesis: 192.168.1.1

samba에는 동일한 일을 할 수 있는 nmblookup 이라는 명령이 있다. nmblookup의 좋은 점이라면 리버스 룩업도 가능하다는 점이다.


print

samba의 smbspool과 동일한 역할을 한다. 파일명이 -이면 표준입력에서 받는다. 암호를 지정해야 하는 경우에는 smbutil login 명령으로 미리 로그인할 수 있다. 앞서 smbspool과 동일한 예는 다음과 같이 쓸 수 있다.


  # smbutil print

view

해당 서버의 공유 목록을 보여준다. smbclient의 -L 옵션과 동일한 역할이다.

  # smbutil view

  Password:

  Share        Type       Comment
  -------------------------------
  E            disk      
  C            disk      
  IPC$         pipe       원격 프로세스간 통신

3 shares listed from 3 available


고급 주제

이번 기사에서 다루지 않은 내용 중 더 배워 볼 만한 주제는 다음과 같다. SMB와 NT 도메인 콘트롤러를 다루는 것은 생각만큼 쉽지 않다는 사실을 꼭 기억하기 바란다.


samba를 사용한 NT 도메인 관련 제어와 연동
samba에 다른 인증 시스템 사용해 보기(LDAP 등)
다른 윈도우 관련 프로그램 사용해 보기
매킨토시 등 다른 플랫폼과도 연동해 보기


끝으로

아쉽게도 이번 FreeBSD 연재를 여기서 마치게 되었다. 아직 써볼만 한 내용은 많이 남아 있지만 일단 다음 기회를 기약하는 것이 좋겠다는 생각이 든다.

진행에 힘써주신 프로그램세계 여러분들에게 감사드리며, 지금까지 연재된 기사는 필자의 홈페이지에서 언제라도 읽어볼 수 있으므로 혹시 놓친 부분이 있다면 웹에서 읽어보기 바란다.



      http://www.kr.FreeBSD.org/~cjh/freetime/os/freebsd/

FreeBSD]FreeBSD에서 MS 파티션 읽기



이 글은 www.openphp.com에서 인용한 것입니다. 
// 윈도우 파티션 마운트하기

파티션 타입 msdos가 fat16/fat32/vfat모두 커버가 된다고 하네요

ad0 - 첫번째 하드디스크
s10 - 10번째 슬라이스    - 해당되는 것을 선택하시면 됩니다. 
/mnt/win   - 마운트 되는 위치
#mount -t msdos /dev/ad0s10 /mnt/win

// 리눅스 파티션(ex2fs) 마운트하기 

커널 설정 옵션에서 아래의 내용이 추가된 상태에서 컴파일 하셔야 합니다. 
윈도우/시디롬 파티션관련 옵션은 처음 설치시 기본으로 설정되어 있죠.
option ex2fs
#mount -t ex2fs /dev/ad0s5 /mnt/redhat

// 참고로 리눅스에서 프비파티션 마운트 가능하게 하려면
// 커널 설정부분에서 UFS(프비파티션)파티션 관련 부분이 설정된 상태에서 컴파일을 해야 합니다.
          

FreeBSD]FreeBSD에서 Java 설치하기


(2005년 01월 21일 오후 07:23) 읽은수: 2

-. FreeBSD에서 JAVA 설치하기

1. cvsup을 통한 ports tree Upgrade.

2.  http://www.freebsd.org/java 참 고만한다.

3. /usr/ports/java/jdk14

  <http://www.eyesbeyond.com/freebsddom/java>의 distinfo  

  <http://www.eyesbeyond.com/freebsddom/java>파일에 명시된 모든파일을 다운받는다.

  <http://www.eyesbeyond.com/freebsddom/java>

4. http://www.eyesbeyond.com/freebsddom/java 에서 Patch 다운로드.

5. 다운받은 모든파일을 /usr/ports/disfiles 넣는다.

6. mount -t linprocfs linprocfs /compat/linux/proc 실행.

7. /usr/ports/java/jdk14 에서 make install clean

8. JDK Path 환경설정.

9. 설치완료.


0000000000000000000000000000000000000000000000000000000

몇일 FreeBSD에서 자바와 스타오피스 설치에 관하여 삽질하다보니 이제서야 설치완료했습니다.

둘다 /compat/linux/proc 를 마운트해야만 설치가 되고 , linux_base 가 모듈로 올라와야 에러가 발생하지 않습니다.

위의 글대로 하면 에러없이 무난히 설치가 될겁니다.



참고문서 및 싸이트

-. http://www.freebsd.org 의 메일링리스트

-. http://debianusers.org 문서란의 오픈오피스.

-. http://jp.sun.com


환건님

2012-09-10

FreeBSD ]FreeBSD 커널 컴파일 하기



이글은 커널컴파일에 대해 간략히 기술한 문서이다.



1. GENERIC kernel config 파일을 복사해서 사용. 바뀐 내용을 잃어버렸을 때에는 GENERIC kernel config

파일로 복원을 해야 하기 때문이죠.


# cd /usr/src/sys/i386/conf
# cp GENERIC MyKernel



2. 새로 추가된 하드웨어가 있으면 MyKernel 을 수정합니다

참고로 FreeBSD 5.x는 SMP(CPU2개 이상을 자동으로 인식한다고 하는데 제 경험상 커널컴파일을 해야만 2개로 인식을 하더군요.)

*아래의 예는 사운드카드 인식하기 위한것(Vibra128(ES1370/ES1371))

device pcm #pcm0(ES1370/ES1371)



**CPU를 2개이상 인식시킬경우

options SMP



3. 두가지 방법으로 컴파일이 가능합니다.

3.1

# cd /usr/src/sys/i386/conf

# /usr/sbin/config MyKernel

# cd ../../compile/MyKernel

# make clean

# make depend

# make

# make install



3.2

# cd /usr/src

# make buildkernel KERNCONF = MyKernel

# make installkernel KERNCONF = MyKernel



3.2 방법으로 커널컴파일 권장



4. 이렇게하면 root디렉토리에 처음의 커널은 kernel.GENERIC으로 백업이 되며, 방금 컴파일된 MyKernel kernel Configure 파일로 컴파일된것이 Kernel 로 됩니다.

5. 시스템 리부팅

# sync

# shutdown -r now

FreeBSD]FreeBSD 불편한 adduser 대체 pw이용법 by 조성준

관련 주소 1 : 
관 련 주소 2 :
 
관련 주소 3 :
 
#pw user add user-name 
user-name이란 사용자추가, 홈디렉토리는 생성 되지 않지요... 

#pw user add user-name -m 
-m 옵션으로 홈 디렉토리까지 생성,기 본 설정 파일이 복사되지요... 
홈디렉토리 기본파일은 /usr/share/skel 이지요. 

#pw user del user-name 
user-name이란 사용자 삭제, 홈디렉토리는 삭제되지 않지요... 

#pw user del user-name -r 
-r옵션으로 홈 디렉토리까지 삭제되지요... 

#pw user show user-name 
user- name이란 사용자 엔트리를 볼 수 있지요... 

#pw user show user-name -P 
-P옵션 으로 보다 읽기 쉽게 내용을 나열해 줍니다... 

#pw user show -a 
-a옵션으로 모든 사용 자 엔트리를 볼 수 있지요... 

//pw명령과 비슷한 adduser/rmuser가 있지요... 
 

FreeBSD]FreeBSD 무장하기


FreeBSD 무장하기

Markus Fluid Delves mailto:markus@fluidenterprises.net 저.

OpenBIRD, Inc. mailto:editors@openbird.com 역.

새로운 script가 계속 생겨남에 따라 우리는 자신을 보호할수 있는 몇가지 기본적인 법칙을 배울 필요가 있습니다. 이 가이드는 FreeBSD 보안의 기본에 대해 개략적으로 알려줄 것이며 FreeBSD 4.x에서 가장 잘 동작할 것입니다.

1. 일반적 인 보안 지식
1.1 Superuser
1.2 su
1.3 SSH2 키 인증 사용하기

2. 소스를 최신버젼으로 유지하기
2.1 최 신으로 유지하기
2.2 CVSUP
2.3 컴파일과 인스톨

3. Firewall 사용하기
3.1 IPFW 소개
3.2 Kernel 고치기
3.3 Firewall 셋팅하기
3.4 IPFW 사용하기

4. Services
4.1 INETD
4.2 Standalone 데몬

5. DES vs MD5
5.1 비 밀번호 암호화

6. 결론
6.1 기 억해야 할 규칙들
6.2 참고자료


Chapter 1. 일반적인 보안 지식

1.1 Superuser

기본적으로 FreeBSD에서 superuser 계정은 root입니다. root 계정은 생성, 삭제, 편집, 중지, 조정등 모든 것이 가능하며 컴퓨터를 완벽하게 조정할수 있습니다. 여러분의 보안을 증진시킬 수 있는 가장 좋은 방법 중의 하나는 정말 필요할 때만 root를 사용하는 것입니다. 일상적인 작업을 할 때는 자신이 가지고 있는 특권이 없는 계정을 사용해야 합니다. root로 작업할 때는 안전하다고 확신하지 않는 한 소스코드로 만들지 않은 실행화일은 절대로 실행시키지 말아야 하며 root로 실행해야만 하는 프로그램들만 실행하십시요. ; 다른 프로그램들은 root가 아닌 여러분 계정을 사용해 실행시켜야 합니다.

1.2 su

여러분은 SSH 같은 보안 프로토콜을 통하지 않으면 root로 절대 로그인해선 안되며 보안 프로토콜을 통해 들어가더라도 그건 좋은 생각이 아닙니다. 대신 여러분은 자신의 일반 개인 계정으로 로그인한 후 su를 이용하여 root로 들어가야 합니다.
뜻밖의 root 로그인 공격을 당했다 할지라도, 이렇게 하여야 문제를 추적할 수 있습니다. 익명 사용자로 부터의 root 로그인 메시지 대신, 누가 로그인 하였는지 그리고 누가 su를 시도하였는지 알 수 있을 것입니다.
주요 그룹에 속한 username 만이 root로 su가 가능하기 때문에 진행하기 전에 username이 그룹에 등록되어 있는지 확인합니다. /etc/group을 수정하여 여러분의 username을 추가하면 되는데 그 첫번째 문장을 다음과 같습니다.:

wheel:*:0:root,your_username

위의 문장에 space를 사용하면 안되며 username을 여럿 열거할때는 콤마로 구분합니다.
root로 직접 로그인 못하게 하려면 /etc/ttys 아래 있는 문장을 고쳐주어야 합니다.:

console none unknown off secure
#
ttyv0 "/usr/libexec/getty PC" cons25 on secure
ttyv1 "/usr/libexec/getty PC" cons25 on secure
[...]

root로 직접 로그인 못하게 하려면, 문장안의 모든 secure를 insecure로 고치면 됩니다. 여러분은 가상 터미날에서 root로 바로 로그인이 불가능 합니다. 모든 가상 터미날로 들어오는 것은 secure로 되어 잇기 때문에 이런 터미날에서의 root 로그인은 불가능합니다. 실재로 이 말은 여러분이 telnet 세션을 통해 root로 로그인 하는것은 불가능하다는 이야기입니다.

1.3 SSH2 키 인증 사용하기

SSH2를 사용하는 것이 telnet 상으로 개인 프라이버시를 더욱 더 보호할 수 있지만 이론적으로 그것은 해독될 수도 있습니다. 만일 네트워트를 타고 보내지는 데이타를 상대편 머신에서 public key로 받아들이도록 암호화 할수 있다면 우리의 프라이버시는 훨씬 보호될 수 있습니다. 여기 unix에서 ssh2 key authentication을 셋팅한 예를 보십시요.

일단 로칼 머신에 ssh2를 인스톨하면 http://www.bsdnet.co.kr/articles/ftp.cis.fed.gov/pub/ssh/ssh-2.4.0.tar.gz에 서 아래 사항을 찾아 볼수 있습니다. 아니면 간단히 /usr/ports/security/ssh2에 있는 포트를 사용해도 됩니다.
ssh-keygen2을 실행시키세요.

markus@fluidenterprises:~$ ssh-keygen2
Generating 1024-bit dsa key pair
1 oOo.oOo.oKey generated.
1024-bit dsa, markus@fluidenterprises, Mon Dec 25 2000 00:13:43 +0200
Passphrase : ***********
Again : **********
Private key saved to /home/markus/.ssh2/id_dsa_1024_a
Public key saved to /home/markus/.ssh2/id_dsa_1024_a.pub

자신만의 identification file을 만드세요.

markus@fluidenterprises:~$ echo "IdKey id_dsa_1024_a" > ~/.ssh2/identification

자신의 public key를 리모트 호스트에 복사하고 자신의 .ssh2 디렉토리에 놓습니다.
authorization file을 리모트 호스트에 만듭니다.

fluid@watchtower:~/.ssh2$ echo "Key id_dsa_1024_a.pub" >> authorization

로칼 머신으로 되돌아가 로그인 해보세요. 그러면 다음과 같이 나옵니다.:

markus@fluidenterprises:~$ ssh2 -l fluid remote_host
Passphrase for key "/home/markus/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa, markus@fluidenterprises.net, Sat Dec 16 2000 02:56:47":

pass 문을 입력하시고, 자, 어때요.

secure ftp 2 사용법.

markus@fluidenterprises:~$ sftp2 fluid@remote_host
Passphrase for key "/home/markus/.ssh2/id_dsa_1024_a" with comment "1024-bit dsa, markus@fluidenterprises.net, Sat Dec 16 2000 02:56:47":
sftp>

sftp2의 명령들은 ftp와 굉장히 유사합니다.
이제 우리는 안전한 public key authorization 시스템을 어떻게 사용하는 건지 알았으니 여러번 테스트 해 보시기 바랍니다. 익숙해지면 passwd 화일에서 여러분의 패스워드를 *로 고치세요. 모든 사람들이 public key authorization으로 권한 check를 한다면 우리의 보안성은 아주 높아질 겁니다. id_dsa_1024_a는 업로드 해선 안됩니다. 이것은 여러분의 개인적인 key이며 여러분은 어느 누구도 그것에 접근하는 것을 원하지 않을테니까요.

Chapter 2. 소스를 최신 버젼으로 유지하기

2.1 최신버젼 유지하기

보안을 유지하는 가장 좋은 방법은 소스를 항상 최신버젼으로 유지하는 것입니다. 저는 freebsd-security@freebsd.org를 받아보라고 강력하게 권하고 싶습니다. 그곳에서 뭔가 취약점이 발견되어 수정사항이 생길 때마다 여러분은 cvsup을 실행하여 소스를 업데이트 하고 make buildworld와 make installworld을 사용할수 있습니다. 이 과정을 이번 단원에서 설명하겠습니다.

2.2 CVSup

"CVSup은 네트워크를 통해 여러 화일들을 배포하고 업데이트하는 소프트웨어 패키지입니다. 이것은 소스, 바이너리, 하드 링크, 심볼릭 링크, 심지어 디바이스 노드 등 모든 종류의 화일들을 효율적이고 정확하게 미러링 합니다. CVSup은 지속적인 통신 프로토콜과 멀티스래드 구조로 요즘 나온 tool 중 아마도 가장 빠는 미러링 tool일 겁니다. 또한 일반적 의미의 미러링 tool 이기도 하지만 CVSup은 특히 CVS repositories에 잘 맞도록 짜여졌고 최적화되어 있습니다." (/usr/ports/net/cvsup/pkg-descr 인용) 다시 말하면 CVSup은 메인 FreeBSD 소스코드 데이타베이스에 연결하여 여러분의 소스화일들을 업데이트합니다. 만일 포트 콜렉션이 설치되어 있다면 cd /usr/ports/net/cvsup;make install 라고 치면 CVSup을 설치할수 있습니다. 이렇게 하면 CVSup을 download, patch, compile, install 할 수 있습니다. (필자 주석: CVSup의 설치는 디스크 공간과 리소스를 많이 필요로 합니다. - 여러분이 cvsup을 단지 소스와 포트트리 업데이트를 위해서만 사용한다면 cvsup-bin port인, /usr/ports/net/cvsup-bin을 사용하는 편이 더 쉽습니다.) 여러분은 이제 "supfile"을 만들어야 하는데 그래야 cvsup이 어떤 화일들을 다운로드하고 어디에 그것들을 가져다 놓을지 알수 있습니다. 여기 cvsup supfile의 예가 있습니다.:

*default host=cvsup2.ca.freebsd.org
*default base=/usr
*default prefix=/usr
*default release=cvs
*default delete use-rel-suffix
*default compress
*default tag=RELENG_4
src-all
ports-all tag=.

위의 코드는 /usr/ports 와 /usr/src을 FreeBSD 4.x의 가장 최신 버젼 소스 화일로 업데이트 할 것입니다. 이 화일을 "supfile"이라 한다면 root 자격으로 cvsup supfile이라는 명령을 수행시키면 소스를 업그레이드 할수 있습니다. 이미 cvsup이 설치되어 있다면 /usr/share/examples/cvsup 에서 supfile의 예제를 찾아 볼수 있습니다. FressBSD 업데이트를 위해 cvsup의 완벽한 셋팅 가이드를 원한다면 FreeBSD 핸드북의 CVSUP 섹션을 찾아 보시기 바랍니다. (http//www.freebsd.org/handbook/cvsup.html).

2.3 컴파일과 인스톨

일단 새 소스코드를 얻었다면 여러분은 그것으로 무언가를 해 보려고 할 것입니다. 여기서는 make buildworld 와 make installworld이 동작하는 것을 알아볼것 입니다. make buildworld은 모든 소스를 조립하도록 하고 make installworld은 새롭게 컴파일된 운영시스템을 인스톨합니다. 두가지 명령 모두 /usr/src에 있습니다.(아니면 여러분이 지정한 소스파일 위치에) 여러분은 시스템을 업데이트 하기 전에 시스템 혹은 적어도 중요한 화일들은 백업해 놓는 것이 좋습니다. 뭔가 잘못되진 않겠지만 그래도 걱정하느니 안전한 게 더 낫습니다. 또한 싱글 유저 모드로 인스톨하는 것이 더 안전하고 빠릅니다. 싱글 유저 모드로 나오려면 root 권한으로 shutdown now 라고 치면 됩니다. 싱글 유저 모드에선 네트워킹이 불가능하므로 싱글 유저 모드를 사용하려면 자신의 콘솔을 사용해야 합니다.
컴파일 전에 여러분은 기존의 오브젝트 화일들을 삭제해야 합니다. 루트 권한으로 cd /usr/obj;chflags -R noschg *;rm -rf *라고 치면 삭제되는데 이 명령은 /usr/obj 밑의 모든 것을 삭제합니다. 이제 여러분은 여러분의 운영시스템을 재 컴파일 할 준비가 다 되었습니다. 컴파일 하려면 root 권한으로 cd /usr/src;make buildworld라는 명령을 실행시킵니다. 일단 에러 없이 완료되면 역시 root 권한으로 cd /usr/src;make installworld라는 명령을 실행시킵니다. 이것 역시 성공적으로 끝나면 여러분의 운영시스템은 업데이트 된 것입니다. 더욱 자세한 것은 FreeBSD 핸드북을 찾아 보시기 바랍니다. (http://www.freebsd.org/handbook/makeworld.html).
make installworld를 실행한 후에 kernel을 다시 컴파일 해 주는 것이 좋습니다. 그렇게 하지 않으면 어떤 tool들은(ps 와 top 같은) 제대로 동작하지 않을 수 있습니다. 여러분이 GENERIC kernel을 사용한다면(무얼 사용하는지 모른다면 아마도 GENERIC kernel 일 겁니다.) root 권한으로 cd /usr/src; make buildkernel KERNEL=GENERIC; make installkernel KERNEL=GENERIC 을 실행시키면 kernel은 재 컴파일 됩니다. 이제 리부팅하세요; 이제 여러분의 운영시스템은 업데이트 되었습니다.!

Chapter 3. Firewall 사용하기

3.1 IPFW 소개

FreeBSD은 kernel firewall인 IPFW에 적합합니다. IPFW은 kernel을 구성하는 패킷 필터링과 어카운팅 시스템입니다. IPFW는 두 부분으로 나뉘는데 패킷 필터링부분과 라우터의 사용처를 추적 가능하게 하는 어카운팅 시스템 부분입니다. 우리는 패킷 필터링 부분만 보도록 합시다.
IPFW을 사용하기 위해 우리는 두가지 새로운 옵션으로 kernel을 재 컴파일 해야 합니다. 아직 custom kernel을 만들어 보지 않았다면 다음 섹션을 읽어 보시고 이미 custom kernel을 만들어 사용한다면 다음 섹션은 그냥 지나쳐도 좋습니다.

3.2 Kernel 고치기

전에 한번도 kernel을 고치지 않았다면 지금 GENERIC이 실행되고 있을 것입니다. GENERIC은 FreeBSD의 기본 config 화일입니다. 모든 kernel config 화일들은 /sys/i386/conf에 있습니다. GENERIC을 여러분이 만들 kernel 이름으로 복사한 후 편집합니다.
여기 ipfw를 지원하도록 수정된 kernel을 생성시키는 빠른 방법을 소개합니다.

# cd /usr/src/sys/i386/conf
# cp GENERIC KERNEL_NAME
# echo "options IPFIREWALL" >> KERNEL_NAME
# echo "options IPFIREWALL_VERBOSE" >> KERNEL_NAME
# echo "options IPFIREWALL_VERBOSE_LIMIT=200" >> KERNEL_NAME
# echo "options IPFIREWALL_DEFAULT_TO_ACCEPT" >> KERNEL_NAME(주의 : 기본적으로 모든 패킷을 받길 원한다면 위의 문장을 포함시켜야 합니다.)
# cd /usr/src
# make buildkernel KERNEL=KERNEL_NAME
# make installkernel KERNEL=KERNEL_NAME

위의 명령들은 GENERIC을 여러분이 만들 kernel 이름으로 복사하고 firewall 옵션들을 추가하고 컴파일해서 새 kernel을 인스톨합니다. 새로운 kernel의 config 화일을 주의깊게 읽어 보시기 바랍니다. 커널 수정에 관한 자세한 사항은 FreeBSD 핸드북을 보시기 바랍니다. (http://www.freebsd.org/handbook/kernelconfig.html).

3.3 Firewall 셋팅하기

여러분이 일단 firewall의 규칙과 동작에 관하여 익숙해지고 나면 아마도 여러분은 IPFIREWALL_DEFAULT_TO_ACCEPT 옵션을 사용하지 않을 것입니다. 모든 걸 여러분 방식대로 하고 싶어 할테니까요.

3.4 IPFW 사용하기

IPFW은 처음에는 아주 복잡해 보이지만 점점 더 쉬워집니다. 컴퓨터가 부팅될 때 /etc/rc.firewall에 있는 firewall 규칙들이 동작하게 하려면 /etc/rc.conf에 firewall_enable=YES을 추가하면 됩니다. 또한 logging이 가능하게 하려면 firewall_logging_enable="YES"를 추가하고 부팅시 규칙들이 세팅되고 있는 동안 firewall을 그대로 두려면 firewall_quiet="YES"을 추가합니다. 이제 /etc/rc.firewall을 열어 이런 문장이 있는 곳을 찾습니다.:

# Everything else is denied by default, unless the
# IPFIREWALL_DEFAULT_TO_ACCEPT option is set in your kernel
# config file.

여러분은 바로 위의 예제처럼 rc.firewall에 규칙들을 추가하면 됩니다. IPFW를 위한 구문은 ipfw [-N] command [index] action [log] protocol addresses [options] 입니다.
 규칙을 추가하려면 {$fwcmd}로 시작해야 하는데 이것은 ipfw와 같은 말로 rc.firewall에서 사용됩니다. command에는 만일 우리가 규칙을 추가한다면 add 라고 칩니다. action에는 패킷을 드롭시키고 패킷이 드롭된 소스 주소를 icmp로 알려주려면 reject를 사용하고 패킷 전달을 허용하려면 allow를, 패킷을 거부하고 소스 주소를 알리지 않으려면 deny를 사용합니다. protocol에는 tcp, udp, icmp 또는 모두 를 사용할수 있습니다. address의 문법은 from source_address [port,[port-port]] to destination_address [port,[port-port]] 입니다. 어드레스에 호스트네임이나 ip 를 쓰지 않고 any을 사용해도 됩니다. 아래의 예제는 보안을 염려하는 사람이나 서버를 운영하지 않는 사람에게 추천할 만 합니다.

# ipfw add deny tcp from any to localhost 1-1024 setup

(위 의 문장은 1-1024 포트로 들어오는 모든 트래픽을 차단할수 있는데 여러분이 제공하는 서비스를 누군가 사용하는 걸 원하지 않는다면 이렇게 하는 것이 좋습니다. 단 이렇게 되면 현 시스템이 외부세계와 접속이 불가능하다는 것을 알아야 합니다.)

# ipfw add deny tcp from any to localhost 6000-6063

(위의 문장은 X 윈도우를 이용하여 외부로 나가는 트래픽을 차단합니다.)
위의 예제들은 기초적인 몇가지 일 뿐입니다. 적절한 firewall 셋업은 여러분의 보안성을 높여주지만 그렇다고 결코 뚫을 수 없는 무적은 아닙니다. IPFW에 대해서 더 많은 정보를 원한다면 FreeBSD 핸드북을 보시기 바랍니다.(http://www.freebsd.org/handbook/firewalls.html).


Chapter 4. Services

4.1 INETD

Inetd는 telnet, ftp, sendmail 등을 포함하여 여러가지 시스템 서비스를 구동시키는 데몬입니다. inetd의 configuration 화일은 /etc/inetd.conf 인데 이 화일안에는 아래와 같이 엔트리를 가지고 있습니다.:

ftp stream tcp nowait root /usr/libexec/ftpd ftpd -l
telnet stream tcp nowait root /usr/libexec/telnetd telnetd
#shell stream tcp nowait root /usr/libexec/rshd rshd

가장 중요한 규칙은 원하지 않는 문장 앞에는 '#' 표시가 있다는 겁니다. 만일 어떠한 서비스도 원하지 않을 경우에는 보안성을 높이기 위해 inetd_enable="YES"을 inetd_enable="NO"로 바꾸어 줍니다. 컴퓨터에서 단지 shell 만을 원할 때는 inetd를 오프시키고 /usr/ports/security에서 ssh2를 설치하는 편이 낫습니다.
여러분이 telnetd만 사용하기로 했다면 몇가지 flag를 추가시켜야 하는데 그 중 두가지는 -h와 -U입 니다. -h는 사용자들이 완전히 로그인할때 까지 호스트의 특정 인폼을 보지 못하도록 하는 것이고 -U는 호스트네임으로 전환되지 않는 ip들을 막아줍니다.

telnet stream tcp nowait root /usr/libexec/telnetd telnetd -h -U

ftp 문장을 보면 -l 옵션이 붙은것을 알수 있습니다. 이 옵션은 logging이 가능토록 하는 것인데 ftp가 syslogd에 로그인 가능해야만 합니다. 이렇게 하려면 아래의 문장을 /etc/syslog.conf 에 추가해야 합니다. :

ftp.* /var/log/ftpd

ftpd의 추가적인 logging을 위해 -l을 추가 할수도 있습니다.

4.2 Standalone 데몬

여러분은 INETD를 사용하는 것 보다 대신 standalone daemon을 실행하는 것이 낫습니다.
 /etc/rc.conf의 아래 문장을 수정해서 INETD를 사용하지 않도록 할 수 있습니다.

inetd_enable="YES"

이렇게 바꾸세요.

inetd_enable="NO"

INETD 는 다음 리부팅 할때 부터는 동작하지 않을 것입니다. 지금 바로 동작하지 않게 하려면 이렇게 하면 됩니다.:

killall inetd

이제 rc.network의 아랫부분에 daemons을 추가해 보기로 하겠습니다. 제가 INETD 대신 standalone daemon을 실행시키라고 강조했던 프로그램이 바로 ssh2 입니다. standalone을 실행시키면 훨씬 빨라집니다.

Chapter 5. DES와 MD5

5.1 비밀번호 암호화

4.2-RELEASE 이전에 FreeBSD는 기본 시스템 패스워드 암호화 기법으로 DES를 사용했습니다. 현재는 MD5가 기본입니다. FreeBSD는 DES에 대한 US 수출법의 규제 때문에 MD5로 바꾸게 되었습니다. MD5는 DES 보다 더욱 보안성이 좋다고 여겨졌기 때문에 MD5로 바꿔 사용하는 것에 별 손해는 없습니다. DES is there strictly for backward compatibility.
여러분이 사용하고 있는 패스워드 형태는 쉽게 알수 있습니다. 한 예로 /etc/master.passwd file을 보면 MD5 패스워드는 $1$로 시작하고 그 문장이 DES보다 길다는 것을 알수 있습니다.
여러분의 시스템이 사용하는 패스워드 형태를 알려면 아래와 같이 해서 libcrypt*가 가리키는 곳을 보십시요.

ls -l /usr/lib/libcrypt*

심볼릭 링크가 libdescrypt*을 가리킨다면 여러분은 DES를 사용하는 것이고 libmd5crypt*를 가리킨다면 MD5를 사용하는 것입니다.

DES를 사용하는 시스템 예제

          bash# ls -l /usr/lib/libcrypt*

          lrwxr-xr-x  1 root  wheel       13 Dec  6 22:18 /usr/lib/libcrypt.a -> libdescrypt.a

          lrwxr-xr-x  1 root  wheel       14 Dec  6 22:18 /usr/lib/libcrypt.so -> libdescrypt.so

          lrwxr-xr-x  1 root  wheel       16 Dec  6 22:18 /usr/lib/libcrypt.so.2 -> libdescrypt.so.2

          lrwxr-xr-x  1 root  wheel       15 Dec  6 22:18 /usr/lib/libcrypt_p.a -> libdescrypt_p.a

          -r--r--r--  1 root  wheel  1259976 Dec  6 22:38 /usr/lib/libcrypto.a

          lrwxr-xr-x  1 root  wheel       14 Dec  6 22:38 /usr/lib/libcrypto.so -> libcrypto.so.1

          -r--r--r--  1 root  wheel   782240 Dec  6 22:38 /usr/lib/libcrypto.so.1

          -r--r--r--  1 root  wheel  1341942 Dec  6 22:38 /usr/lib/libcrypto_p.a

          bash#
         
Chapter 6. 결론

6.1 기억해야 할 규칙들

위의 방법을 따라하면 안전한 FreeBSD를 구축할 수 있습니다. 잊지말아야 할 중요한 사항은 새로운 취약점들이 지속적으로 대두되고 있다는 것입니다. 이 말은 여러분은 항상 최신 소스 코드를 유지해야한다는 말이며 freebsd-security@freebsd.org을 받아보길 진심으로 바랍니다.

기억해야 할 것은 :

소스를 최신 버젼으로 유지하기
불필요한 suid-root 프로그램은 설치하지 않기
firewall 규칙들을 최신으로 유지하기
범용적인 것을 사용하기 - 소스 없는 프로그램은 실행시키지 않기

6.2 참고자료
FreeBSD Handbook