RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR

1. 개요
FTP서버란 말 그대로 File Transfer Protocol 서버, 즉 파일을 업로드하고 다운로드할 수 있도록
해주는 서버이다. 리눅스에서 초기에는 Wu-ftp를 주로 사용했지만, 기능이 부족하고 보안상 취약하여
현재는 ProFTPd를 많이 사용하고 있다. 이 ProFTPd를 이용하여 FTP서버를 구축한다.


2. 설치
(1) 설명: Proftpd의 공식사이트는 http://www.proftpd.net이다. 다운로드가 목적이라면 ftp를 이용
          하여 ftp.proftpd.net으로 접속하면 된다. proftpd는 RPM패키지로 설치하거나 소스로 설치
          할 수 있다.
(2) RPM으로 설치하기
   1) ftp.proftpd.net에 접속한 뒤에 anonymous 계정으로 접속한다.
   2) /distrib/packages/RPMS 디렉토리로 이동한다.
   3) 3개의 파일을 다운로드 받는다.
     proftpd-1.2.8rc2-1.i386.rpm
     proftpd-inetd-1.2.8rc2-1.i386.rpm
     proftpd-standalone-1.2.8rc2-1.i386.rpm
   4) 다운받은 파일 중 원래 프로그램파일인 proftpd-1.2.8rc2-1.i386.rpm을 설치한다.
     예) rpm -Uvh proftpd-1.2.8rc2-1.i386.rpm
   5) proftpd를 단독데몬으로 작동하려면 proftpd-standalone-1.2.8rc2-1.i386.rpm를 설치하고
     xinetd데몬으로 작동하려면 proftpd-inetd-1.2.8rc2-1.i386.rpm을 설치한다.
     예) rpm -Uvh proftpd-standalone-1.2.8rc2-1.i386.rpm
(3) 소스컴파일설치하기
   1) ftp.proftpd.net에 접속한 뒤에 anonymous 계정으로 접속한다.
   2) /distrib/source로 이동한다.
   3) 최신 버전인 proftpd-1.2.7.tar.gz을 /usr/local/src에 다운받는다.
   4) 압축을 푼다.
     tar zxvf proftpd-1.2.7.tar.gz
   5) 압축을 푼 디렉토리로 이동한다.
   6) 환경설정을 한다.
     ./configure --prefix=/usr/local/proftpd --enable-shadow
       => --enable-shadow는 자동으로 패스워드를 지원하도록 하는 옵션이다.
         참고로 --sysconfdir=/etc 옵션으로 컴파일하면 /etc/디렉토리에 설치한다.
   7) 컴파일한다.
     make
   8) 설치한다.
     make install

3. ProFTPd서버의 특징
(1) proftpd.conf파일에서 모든 환경설정이 이루어지며, 전체적인 설정구성이 아파치의 환경 설정
   파일과 유사하다.
(2) FTP서버를 독립적인 데몬형태(Standalone)으로 작동시킬수도 있고, xinetd서버로 선택해서
   작동시킬수 있다.

4. proftpd.conf파일 분석
(1) 설명: 보통 이 파일은 /etc 디렉토리에 위치하나 배포판에 따라 /etc/proftpd 디렉토리에 위치
          하기도 한다.
(2) 주요환경설정
   1) ServerName                      "Proftpd FTP Server"
       => 서버의 이름을 나타내는 항목이다.
   2) ServerType                      standalone
       => 서버의 작동모드를 선택하는 부분이다. standalone은 proftpd자체의 데몬으로 독립적으로
         실행시키는 경우이다. 만약 슈퍼데몬인 xinetd에 의해 실행되려면 inetd라고 설정한다.
   3) DefaultServer                   on
       => 하나의 FTP서버에 여러 개의 아이피 주소가 존재할 경우 이들 주소에 대해서 접속요청이
         있을 때 작동할 지를 결정한다. on이면 접속을 허가하고 off면 접속거부메시지를 보여주면
         서 접속이 되지 않는다.
   4) Port                            21
       => 서비스에 사용할 포트를 말한다. 만일 기본 서비스 포트를 변경하고자 한다면 /etc/servi
         ces파일 내에서 ftp서비스의 포트를 변경한 후에 이 옵션에서 변경된 서비스포트로 지정하
         면 된다.
   5) Umask                           022
       => 새롭게 생성되는 파일과 디렉토리 퍼미션에 적용될 마스크를 지정해 준다. 허가권은 디렉
         토리인 경우에는 777, 파일인 경우에는 666에서 이 값을 뺀 값이 기본설정허가권이다.
   6) MaxInstances                    30
       => 서버가 standalone모드로 작동할 때 생성될 수 있는 최대 자식의 프로세스수를 설정한다.
   7) User                            nobody
      Group                           nobody
       => 데몬을 실행할 사용자와 그룹의 소유권을 지정한다. 일반적으로 nobody로 작동된다.
   8) RootLogin                       off
       => root계정으로의 로그인여부를 지정한다.
   9) DeferWelcome                    on
       => 클라이언트가 서버에 접속했을 때 완전한 인증이 이루어질 때까지 호스트의 어떠한 정보
         도 제공하지 않도록 하는 것으로 보안유지를 위해 사용한다. 기본값은 on상태로 사용하면
         된다.
   10) DefaultRoot                   /
        => FTP 서버에 일반 계정으로 접속한 사용자에게 최상위 디렉토리를 지정해주는 것이다.
          만약 위와 같이 / 로 설정하면 / 디렉토리까지 접근가능하다. 일반 계정자의 홈디렉토리를
          최상위로 설정 즉 ~/ 로 하면 홈디렉토리가 최상위가 되므로 그 상위단계로의 접근을 막을
          수 있다. <Anonymous> ~ </Anonymous> 영역내에서는 사용하지 않는다.
   11) <Directory />

       AllowOverwrite                on
       </Directory>
        => 특정한 디렉토리의 권한을 설정하는 부분이다. 현재 설정은 기존에 있던 똑같은 파일에
          덮어쓰기를 허가할 것인지를 나타낸다. 현재 설정은 덮어쓰기를 허가한다.
   12) <Anonymous ~ftp>
        => 익명의 사용자가 로그인할 디렉토리를 지정한다.
       User                          ftp
       Group                         ftp
        => 익명의 사용자의 로그인을 위해 데몬이 ftp 사용자와 그룹으로 작동하게 하도록 하기위한
           설정이다.
       UserAlias                     anonymous ftp
        => anonymous계정이외에도 ftp라는 계정으로도 로그인할 수 있도록 하기 위한 설정이다.
          이 설정을 서버 입장에서 보면 실제 계정은 ftp라는 계정밖에 존재하지 않는다. 그러나 일
          반적인 FTP서버에서는 anonymous라는 계정으로 익명의 접속을 허가한다. 따라서 ftp라는
          계정을 anonymous라는 계정으로 로그인할 수 있도록 해주는 설정이다. 만약, 익명의 계정
          을 park로 허가하려면 "UserAlias               park ftp"로 설정한다.
       MaxClients                    10 "Sorry, maxium users %m -- try again later"
        => 서버에 접속할 수 있는 최대 클라이언트수를 지정한다. 접속차단과 함께 메시지를 보여줄
          수 있으며 %m은 접속할 수 있는 최대 클라이언트수를 나타낸다. 접속자 수를 제한하지
          않으려면 이 값을 none으로 설정한다.
       MaxClientsPerHost             2 "Sorry, Over 2 connection not allow"
        => 한 호스트당 접속할 수 있는 개수를 지정한다.
       DisplayLogin                  welcome.msg
        => 클라이언트가 서버에 접속했을 때 환영메시지를 전달해주는 메시지파일을 지정하는 항목
          이다. 파일은 상대경로나 절대경로로 지정할 수 있으며, 상대경로로 지정할 경우 user가
          접속했을 때 처음 디렉토리를 기준으로 찾게된다. 일반 user의 경우에는 user의 홈디렉토
          리가 기준이 되며, user의 홈디렉토리에 지정한 파일이 있으면 접속시에 메시지를 출력해
          주고 없더라도 파일이 없다는 등의 에러는 발생하지 않는다.
       DisplayFirstChdir             .message  
        => 클라이언트가 cwd명령어를 통해 이동할 때 클라이언트에게 출력할 메시지를 적는 파일을
          지시한다. 즉, 접속한 사용자가 cd명령을 이용해 처음으로 다른 디렉토리로 접근할 때
          접근한 디렉토리에 .message 파일이 잇으면 file의 내용을 보여주게 된다. 이 파일의
          내용은 FTP서버에 접속하여 디렉토리에 처음 접근할 때에만 보여준다.
       RequireVal!idShell             off
        => /etc/shells 파일에 정의되지 않는 shell을 사용하는 유저에게 FTP 접속을 허락하거나
          거절하는 것을 지정하는 항목이다. 기본적으로 ProFTP서버에 서는 on상태이므로 /etc/she
          lls에 User들이 사용하는 shell이 없으면 Login할 수 없게 된다. 그러므로 anonymous User
          로 접속을 하고자 한다면 RequireVal!idShell을 off로 해주어야 login이 된다.
       <Limit> ~ </Limit>
        a. 설명: 주어진 문맥속에서 FTP명령어를 사용하는데 제한을 두기 위하여 사용되는 지시자
                이다.
        b. FTP명령어
          -CWD : 작업 디렉토리를 변경할 때 클라이언트에게 전송
          -MKD : 새로운 디렉토리를 만들 때 클라이언트에게 전송
          -RNFR(Rename From), RNTO(Rename To): 디렉토리 항목의 이름을 변경할 때 클라이언트에게
                                              쌍으로 전송
          -DELE(Delete) : 파일을 삭제할 경우 클라이언트에게 전송
          -RMD : 디렉토리를 삭제할 경우 클라이언트에게 전송
          -RETR(Retrieve): 서버에서 클라이언트로 파일 전송
          -STOR(Store): 클라이언트에서 서버로 파일 전송
          -READ: 파일 읽기를 다루는 모든 FTP명령(디렉토리 목록은 제외)
          -WRITE: 파일 또는 디렉토리 쓰기/생성/삭제를 다루는 모든 FTP명령
          -DIRS: 디렉토리 목록을 다루는 모든 FTP명령(LIST, NLST, CWD)
          -LOGIN: 접속이 제한된 유저들을 anonymous부분에서는 허가할 때 사용한다.
            예) <Limit LOGIN>

                  AllowAll
                </Limit>
          -ALL: 모든 FTP명령
        c. 사용예
          1. <Limit DIRS>
             DenyAll
             </Limit>
              => 익명으로 접속한 후에 해당 디렉토리 상태에서 DIRS에 관련된 모든 명령어는 Deny
                All로 지정하여 모두 실행을 거부하도록 하는 것이다. 이러한 설정을 했을 경우에는
                ls명령을 실행하더라도 목록이 나오지 않지만, cd명령을 사용하여 디렉토리 이동은
                가능하다.
          2. <Limit DIRS READ WRITE>
             Order Allow, Deny
             Allow from 192.168.3.63 192.168.3.64
             Deny from all
             </Limit>

              => Order지시자는 호스트별 허가와 거부정책를 사용하기 위한 설정이고, 실질적인
                설정은 Allow에서 사용허가할 호스트를 지정하고 Deny에서 거부할 호스트를 설정하
                면 된다.
          3. anonymous FTP 설정 예제

User ftp Group ftp UserAlias anonymous ftp MaxClients 10 "최대 접속가능인원은 %m 명 -잠시 뒤에 다시 접속" MaxClientsPerHost 2 "한 호스트당 최대 2명까지입니다!" DisplayLogin welcome.msg DisplayFirstChdir .message RequireVal!idShell off AllowAll Order Allow, Deny Allow from mybestone.com DenyAll AllowAll 4. anonymous FTP 설정 예제(2) - download라는 디렉토리가 anonymous 유저에게 저장만 가능하고, 삭제가 불가능하도록 설정 User ftp Group ftp UserAlias anonymous ftp MaxClients 5 "최대 접속가능인원은 %m 명 -잠시 뒤에 다시 접속" MaxClientsPerHost 1 "한 호스트당 최대 1명까지입니다!" DisplayLogin welcome.msg DisplayFirstChdir .message RequireVal!idShell off AllowAll DenyAll
(3) 유용한 환경설정
   1) DefaultRoot
    ㄱ. 설명: 사용자들을 그룹별로 FTP접속되는 디렉토리를 설정한다.
    ㄴ. 특징
       a. 이 지시자를 사용하면 상위디렉토리를 볼 수가 없다.
       b. <Anonymous>지시자에는 이 기능을 포함하고 있으므로 사용하면 안된다.
    ㄷ. 사용예
      a. DefaultRoot                     ~
          => 최상위 디렉토리를 개인 홈디렉토리로 제한
      b. DefaultRoot                     /home/ftp/ terran, zerg, !protoss
          => terran, zerg그룹은 /home/ftp로 설정하고 protoss그룹은 제외한다.
   2) HiddenStor             on/off
     => on으로 설정하면 업로드중인 파일이 다운로드되는 것을 막을 수 있다.
   3) HiddenNoAccess
     => <Directory> 또는 <Anonymous>로 지정되어 있는 블럭에 로그인했을 경우 접근
       권한이 사용자에게 디렉토리를 보이지 않게 한다. 보통 "Permission denied"의 에러메시지를
       받는 디렉토리에 대해서 디렉토리를 볼 수 없도록 한다.


5. ProFTPd를 xinetd데몬으로 실행하기
(1) 설명: standalone모드가 아닌 xinetd로 작동하기 위해서는 /etc/xinetd.d디렉토리에 proftpd
          설정서비스 파일이 존재해야 한다.
(2) 설정하기
   1) proftpd.conf에서 "ServerType                    inetd"로 바꾼다.
   2) xinetd 서비스와 관련된 디렉토리인 /etc/xinetd.d 에 다음과 같은 형식으로 만든다.
     [root@www xinetd.d]# cat proftpd
     service ftp
     {
             disable                 = no                 // 이 부분의 값이 no 이어야 한다.
             flags                   = REUSE
             protocol                = tcp
             socket_type             = stream
             instances               = 50
             wait                    = no
             user                    = root
             server                  = /usr/sbin/in.proftpd
             log_on_success          = HOST PID
             log_on_failure          = HOST RECORD
     }
   3) xinetd데몬을 재가동한다.
     [root@www xinetd.d]# /etc/rc.d/init.d/xinetd restart

5. ProFTPd 기타설정
(1) 일반 계정으로 anonymous 사용하기 : movie라는 계정으로 anonymous사용하기
   1) movie라는 계정을 추가한다.
     useradd movie
   2) movie라는 계정이 텔넷같은 기타다른 접속을 막는다.
     vi /etc/passwd로 movie의 shell을 /bin/false로 바꾼다.
   3) proftpd.conf 파일 설정하기
User movie Group movie UserAlias anonymous movie MaxClients 10 "Sorry, maxium users %m -- try again later" MaxClientsPerHost 2 "Sorry, Over 2 connection not allow" DisplayLogin welcome.msg DisplayFirstChdir .message RequireVal!idShell off AllowAll 4) proftpd 데몬을 재시작한다.
(2) welcome.msg파일을 만들어 보자.
   1) 설명: welcome.msg파일은 접속시에 메시지를 보여주는 파일이다. 이 메시지파일은 Magic
           cookie라는 것을 사용하여 편리하게 정보를 보여준다.
   2) magic cookie
     %T : 현재 시간을 출력한다.
     %F : 사용가능한 하드 디스크 공간을 출력한다.
     %C : 현재 작업 디렉토리를 출력한다.
     %R : 원격 호스트 이름을 출력한다.
     %L : 로컬 호스트 이름을 출력한다.
     %u : ident프로토콜에 의해 확인된 사용자명을 출력한다.
     %U : 로그인시 사용된 사용자명을 출력한다.
     %M : 접속 가능한 최대 사용자수를 출력한다.
     %N : 현재 접속되어 있는 사용자수를 출력한다.
     %E : 서버 관리자의 메일 주소를 출력한다.
     %x : 사용자 클래스의 이름을 출력한다.
     %y : 사용자 클래스의 현재 접속 개수를 출력한다.
     %z : 사용자 클래스의 최대 접속 개수를 출력한다.
   3) 설정예
     --------------------------------------------------------------
     환영합니다.
     마이베스트 입니다.

        - 시스템 정보 -
     현재 당신이 접속한 서버는 %L입니다.
     남은 용량은 %F KB
     현재 접속자수는 %N / %M  입니다. (현재인원/총접속가능한 인원)
     당신은 %R에서 %U라는 사용자명으로 접속하였습니다.
     현재시각은 %T 입니다.
     문의하실 사항은 %E로 보내주세요.
   4) 접속 결과
     --------------------------------------------------------------
     환영합니다.
     마이베스트 입니다.

       - 시스템 정보 -
     현재 당신이 접속한 서버는 mybestone.com입니다.
     남은 용량은 3540236 KB
     현재 접속자수는 1 / 10  입니다. (현재인원/총접속가능한 인원)
     당신은 203.247.40.248에서 movie라는 사용자명으로 접속하였습니다.
     현재시각은 Thu Oct 10 03:06:36 2002 입니다.
     문의하실 사항은
root@mybestone.com로 보내주세요.
(3) Virtual Host 설정해보자
   1) 조건
     ㄱ. 가상 호스트 이름: ftp.linux.com
     ㄴ. 가상 호스트가 사용할 포트번호: 12345번
     ㄷ. 접속한 사용자들이 자신의 홈디렉토리를 벗어나지 못하도록 설정
   2) 설정예
     <VirtualHost ftp.linux.com>
          Port 12345
          DefaultRoot ~
     </VitrualHost>
(4) Root로 로긴하기
   1) FTP서버에 접속시 거부목록파일 역할을 하는 /etc/ftpusers 파일에서 root라는 계정을 삭제
     한다.
   2) proftpd.conf 파일에서 다음과 같은 지시자로 설정해준다.
     RootLogin                       on
   3) proftpd 데몬을 재시작하거나 xinetd 데몬을 재시작한다.

Trackback
Reply

기본적으로 레뎃에서는 vsftp를 제공한다.

vs는 바로 very security의 약자로, 무지 보안성이 뛰어난 ftp이다.

고로 vsftpd.conf파일은 무지 복잡하다 = _=)

따라서 조금은 쉬운 설정인 proftp를 깔고 그 설정법을 알아보도록 하자.

(나 같으면 proftp 안쓴다. 일단 접속이 느린게 맘에 안든다.)

 

ServerName "서버 이름"

ServerType standalone
DefaultServer on
ServerAdmin root@localhost

UseReverseDNS off
IdentLookups off

# Server에 접속했을 경우 보내주는 Defualt 메세지를 설정한다. Off로 지정
# 하였을 경우 Porftpd Server Ready ServerName 이 출력된다.

ServerIdent On "welcome DUNET FTP Server!!!"

# User login을 했을시에 user들이 자신의 홈 상위 디렉토리들을 마음대로
# 돌아다니지 못하게 chroot()를 설정한다. group별로 설정을 하게 되며
# "!"는 제외하라는 의미를 가지게 된다.

DefaultRoot ~ !groupname <-여기에서 ~는 홈디렉토리를 뜻함

# ServerType이 standalone이면 이 항목의 주석을 풀어 줘야 한다.
# inetd로 작동을 시킬시에는 /etc/services에서 port를 지정한다.
Port 21

# root login을 허락할지의 여부를 지정한다. PAM modules를 사용한다면
# 먼저 /etc/proftpd/conf/ftpusers에서 root를 삭제해야 한다.
RootLogin off

# Global section은 proftpd의 전체적인 설정에 모두 적용시킨다.

# group과 world writable로 부터 새로운 dir과 file들을 생성하는 것을
# 막기위하여 기본적으로 umask는 022로 설정을 한다.
Umask 022

# ftpusers file을 이용하여 PAM인증을 하기를 원하면 이 지시자의
# 값을 on으로 한다. default 값은 off 이다.
AuthPAMAuthoritative on

# service를 시작하고 마칠 시간을 24시간 표기법으로 지정을 한다
# UpTime 10
# DownTime 23

# 1.2.1 이하 버젼에서의 버그를 위한 설정
DenyFilter *.*/

# 9시간 이전으로 나오는 문제 수정.
TimesGMT off

# 회선의 Bandwidth를 특정 속도로 제한을 한다. 단위는 bps이다.
#RateReadBPS 256
#RateReadFreeBytes 5120
#RateReadHardBPS on

# 접속 대기 시간을 설정한다. user 가 접속후 아무 작동도 안할때 일정 시간후에
# 접속이 종료되게 한다
TimeoutIdle 600
TimeoutNoTransfer 600
TimeoutLogin 0

# DeferWelcome 는 client가 인증을 하기 전에 servername을 display하는
# 것을 방지한다.
DeferWelcome off

# 'welcome.msg는 login시에 보여지고, 'message'는 각 하위 디렉토리에 접속
# 했을때 보여지게 된다.
DisplayLogin /etc/proftpd/conf/welcome.msg
DisplayFirstChdir .message

# DoS 공격을 막기 위해, 자식 process의 maximun number를 30으로 설정한다.
# 만약 30이상의 접속을 허락할 필요가 있다면 간단하게 이 치수를 증가시키도록
# 한다. 이것은 오직 standalone mode에서만 가능하다. inetd mode에서는
# service 당 maximun number를 제한 하는 것을 허락하는 inetd server에서
# 설정을 해야 한다.(xintd 역시 마찬가지 이다)
MaxInstances 30

User nobody
Group nobody

# 일반적으로 file들을 overwrite를 가능하게 한다.
AllowOverwrite on

# ls 명령어의 -a option으로 hidden file을 볼수 있게 한다.
# LsDefaultOptions "-a"
User ftp
Group ftp

# Anonymous user가 ftp로 접근하여 shell의 권한을 얻는 것을
# 방지한다.
RequireValidShell off

# Anonymous 접근을 할때 특정 password를 지정할수 있다.
# 단 위의 User 지시자의 name이 passwd file에 등록이 되어져
# 있어야 한다. 이 지시자가 on일 경우 이메일 주소로 login을
# 할수 없다.
# AnonRequirePassword on
# ShowSymlinks off

# User name "ftp"로 anonymous login을 할수 있도록 한다
UserAlias anonymous ftp
AllowAll
DisplayLogin welcome.msg
DisplayFirstChdir .message

# 최대 접속 인원수를 지정한다.
MaxClients 10

# 하나의 계정ID로 동시에 접근할수 있는 호스트 수를 지정한다.
# 아래의 기본 설정으로는 하나의 계정 하나 호스트에서만 접근만 허용한다.
# 하나의 계정에 하나의 접근만을 허락하려면 위의 MaxClientsPerHost의
# 값과 MaxHostsPerUser의 값이 둘다 1이면 된다.
MaxHostsPerUser 1 "Sorry, one hosts allow per one user"

# 소유권이 root인 file이나 directory들을 보여주지 않는다
#HideUser root

# 그룹권한이 root인 file이나 directory들을 보여주지 않는다
#HideGroup root

# upload/download 비율을 지원한다.
# /usr/doc/proftpd-1.2$VERSION/mod_ratio.c를 참조하라
#
# Ratios on
# HostRatio foobar.net 100 10 5 100000

# 서버를 시간대로 운영하는 것을 지정한다.
# 아래의 예는 오후 3시 부터 오후 6시까지만
# 서버의 접속을 가능하게 한다.
#
# UpTime 15
# DownTime 18

DenyAll

.... 뭐 이것도 그다지 간단해 보이지는 않는구먼= _=;;

Trackback
Reply

standalone 방식의 proftp는 시작 재시작 종료 agument가 없다.

따라서 종료할려면 ftpshut이나(이건 데몬이 죽는게 아니라 접속을 못하게 한다.)

killall proftpd를 써서 강제로 죽여야한다.

 

하지만 간단한 스크립트로 데몬을 죽이고, 살리고, 재시작 할 수 있다.

 

#!/bin/sh
#
# Startup script for Proftpd
#
# chkconfig: 345 85 15
# description: ProFTPD is a highly configurable ftp daemon for unix
#              and unix-like operating systems HTML files and CGI.
# processname: proftpd
# config: /etc/proftp.conf


# Source function library.
. /etc/rc.d/init.d/functions

# See how we were called.
case "$1" in
  start)
        echo -n "Starting ProFTPD: "
        daemon proftpd
        echo
        touch /var/lock/subsys/proftpd
        ;;
  stop)
        echo -n "Shutting down ProFTPD: "
        killproc proftpd
        echo
        rm -f /var/lock/subsys/proftpd
        ;;
  status)
        status proftpd
        ;;
  restart)
        $0 stop
        $0 start
        ;;
  *)
        echo "Usage: $0 {start|stop|restart|status}"
        exit 1
esac

exit 0

Trackback
Reply
우주곰:지구곰이 아닙니다.
지구곰이 아닙니다.
Categories (190)
Information (5)
About uzoogom (5)
My Advanced Linux (73)
Learning Linux (96)
OperatingSystem (5)
Databases (4)
OpenSource (1)
Tips! (1)
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30