Unix/Solaris10

FTP 설정하기.

ForceCore 2006. 6. 30. 09:46

이 글의 요지는 대충
1. inet계통 데몬을 솔라리스 서비스로 변환하는 방법
2. 패치를 적용하는 방법
3. 솔라리스 패키지 언인스톨 방법
이 되겠다.

솔라리스10에는 기본적으로 FTP가 설치되어있으며,
기본적으로 돌아가고있다.
(텔넷과 XDMCP와 마찬가지로 :D)

하지만 솔라리스 기본FTP는 유감스럽게도, 대부분의 FTP클라이언트가
제대로 디렉토리 구조를 보지 못하게 되어있다.

사용자 삽입 이미지









위 스샷과 같이 파일이나 디렉토리명 앞에 시간이 붙어버린다 -0-;;
기본 제대로 FTP에 접속할 수 있는 클라이언트는 파일질라 최신버전이다.
하지만 그 외의 것들이 제대로 접속되는 것은 본적이 없다.

일단은 기본 FTP를 없애버리자.
(설정을 제대로 해서 고칠 수 있는지 연구해봤지만, docs.sun.com의 FTP설정 문서를 정독한 결과 그런 설정은 없었다.)

# pkginfo | grep ftp
로 FTP에 관련된 패키지 목록을 보았다.

# svcs | grep ftp
로 ftp서비스가 아직 실행중인 것을 보고 (그리고 그 서이브의 위치도 보고)
# svcadm disable /network/ftp
라고 쳐서 ftp를 껐다.

# pkgrm SUNWftpr SUNWftpu
로 ftp서버 패키지를 지웠다. tftp는 뭔지 아직 잘 모르겠다.

Note: 기본 FTP는 WU-FTP기반이라고 하더라. Washington University FTP... 워싱턴대에서 만든건가 ㅡㅡa?

기본 FTP는 없지만, 그럼 대안이 무엇이냐?
vsftp... 작고 가볍고 빠르고, Secure하다고 한다.

일단은, sunfreeware.com에 패키지가 없어서,
http://vsftpd.beasts.org/
소스를 get!

1. 압축을 해제했다. 익숙한대로 tar -zxvf옵션을 쓰니 안 되었다 -0-;;
gunzip으로 1단계 압축 해제 후 그 결과물에 대해 tar 해제했다.
(tar는 단순히 압축 없이 권한/구조를 유지하며 파일들/디렉토리들을 묶는 역할이다.)

2. builddefs.h를 수정하라고 하는데 뭔 소린지 모르겠다. 프로그래밍을 좀 배우긴 했지만, 각각이 뭔 기능을 하는지를 알아야 수정을 하든 말든 하지 -0-; SSL을 사용할 건지 안 할건지 설정같아보이긴 한다. 디폴트로 놔둠.

3. make를 치니... 어이쿠 OTL path설정이 잘못되어 make를 못 한다 -_-;;
path에다가 /usr/ccs/bin을 추가했다.

4. make를 치니 또 컴파일이 안 된다. 소스코드가 잘못 된듯. -_-;; 에... (2.0.4를 받았었다.)

* 2006년 7월말 2.0.5가 출시되었다. 솔라리스에서도 빌드가 문제없이 잘 된다.

5. fresh meat에 컴파일 안 된다고 불평 올라온 것을 살펴보니 무슨 패치가 있더군...
http://mirch.com/sysutil.c.patch
make하는 디렉토리에다가 소스가 저장된 곳에다 저 패치를 받았다.

패치에 보면 s_timezone = -21600이라고 된게 있는데, 우리나라는GMT+9이므로
9*3600을 한 값을 대입해준다. 그리고,

[패치 사용하기] # patch < sysutil.c.patch

이제 컴파일이 제대로 된다.

6. vsftpd는 nobody라는 유저가 필요하다. 솔라리스10엔 기본으로 있으니 패스.

7. /usr/share/empty라는 디렉토리를 만들어준다. 필요하다고 한다. (어디에 쓰는거지?;;)

8. anonymous로그인용 FTP를 위해 ftp라는 유저가 필요하댄다. 홈디렉토리는 있으되, 거기에 소유권이나 읽고 쓰는 권한은 없어야 한다.
# useradd -m -d /export/ftp_pub
# chown root:root /export/ftp_pub
# chmod og-w /export/ftp_pub
권한도 write권한을 업애야만 anonymous로그인이 가능하다.
(write권한을 주더라도, anonymous는 읽고 쓰지 못하도록 nobody사용자와 같은 group으로 설정하면 된다 -_-a)

9. make install을 해서 실패했다. 뷁. 수동 인스톨...
mkdir /usr/local/sbin
cp vsftpd /usr/local/sbin
chmod 755 /usr/local/sbin/vsftpd

매뉴얼 복사
cp vsftpd.conf.5 /usr/share/man/man5
cp vsftpd.8 /usr/share/man/man8

설정 복사
cp vsftpd.conf /etc

이제 서비스 형태로 ftp를 구동시키는 게 문제!
http://www.firstalt.co.uk/help/inetd.html
필자는 위의 문서를 컨닝하여 성공하였다.

10. /etc/services에
ftp    21/tcp
가 적혀있는 것을 확인할 것.

만약, 9921번 포트도 동시에 접속을 허용려면

ftp2 9921/tcp

이라는 줄도 넣어준다.

11. /etc/inetd.conf에 다음 한 줄을 추가하고
ftp stream tcp nowait root /usr/sfw/sbin/tcpd /usr/local/sbin/vsftpd
(이것은 vsftp의 INSTALL에 있는 사항이다.)

역시 9921번 포트도 허용하려면

ftp2 stream tcp nowait root /usr/sfw/sbin/tcpd /usr/local/sbin/vsftpd

이렇게 적어준다.

즉... 포트는 /etc/services 에 지정된 대로 되는 것이다!!!;;

12. inetconv

를 하면 inet형식의 서비스가 솔라리스의 svc계통으로 변환이 된다. 굿.

중간에 "해당 서비스는 이미 있다"는 내용의 warning을 여러개 볼 것이다.

이미 있는 서비스들에 대해서는 저런 내용이 뜨는 것이다.

13. 이제 ftp데몬을 실행할 수 있다 +_+
svcadm enable /network/ftp/tcp:default

14. ftp localhost 명령으로 접속은 되는지 확인한다. 설정은 아직 하나도 하지 않았기 때문에 로그인은 anonymous로 해야 하며, 로그인이 되더라도 oops! 메시지가 보일 것이다.

15. svcadm disable /network/ftp/tcp:default로 ftp를 끄는 것도 해본다. 필자는 잘 된다...;


이제 설정을 하여 취향에 맞는 FTP로 만들면 된다...
/etc/vsftpd.conf를 수정하면 되는데 각 설정항마다 (영어로 된) 친절한
설명이 있어서 그다지 어렵지 않았다.

필자의 설정
-----------------------------------
anonymous_enable=YES      익명허용
local_enable=YES               useradd된 사용자들도 허용
write_enable=YES               업로드 허용 (익명사용자들은 읽기만 가능함)
local_umask=022                  대부분 이렇게 쓴다니까 -_-a;;
chroot_list_enable=YES       useradd된 사용자들을 자신의 디렉토리에 가둔다.
chroot_local_user=YES        디폴트로 사용자들을 가두도록 한다. 이게 없으면 가둘 사용자들을 지정해야 한다.
#chroot_list_file=/etc/vsftpd.chroot_list
이 파일에 안 가둘 사용자 목록을 적도록 한다.

/export/ftp_pub에 들어가서, skel에서 복제된 자질구레한 파일들을 삭제했다.
the end.

Trouble Shooting
설정이 잘못되면 vsFTP는 동작하지 않는다.
설정의 어디가 잘못되었는지 보는 방법이 있다.
ftp localhost
명령어로 서버 자기 자신에게 접속시켜 보는 것이다.
그러면 OOPS! 어쩌구 저쩌구 하면서 오류에 대한 이유를 말해줄
것이다. 그에 맞게 설정을 변경하라.