달력

11

« 2024/11 »

  • 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
2024. 9. 10. 17:11

ssh 로그인없이 접속 리눅스서버2024. 9. 10. 17:11

rsync 로 백업할려고 하라는대로 했는데 접속시마다 계속 패스워드 물어본다.

 

/var/log/secure 에

Authentication refused: bad ownership or modes for directory /home/daehan

퍼미션을 보니 707이었다. 무슨 작업(뭘?)하느라 바꿔놓고 그냥놔둔듯

755로 바꾸니 바로 되네...

일반적인게 아니니 검색해도 안나오지..

 

https://sncap.tistory.com/609

 

SSH key접속시 password 계속 묻는 문제

ssh rsa key를 이용하여 password 없이 설정 하는 방법은 많이 공유되어 있다. 하지만, 특정 계정에 대해서 ssh key를 설정(authorized_keys)를 권한에 맞도록 설정했지만, 안되는 경우가 발생했다. 반나절 동

sncap.tistory.com

 

 

 

:
Posted by 비개인오후
2017. 5. 4. 01:30

xinetd을 이용한 rsync데몬 리눅스서버2017. 5. 4. 01:30

데몬없이 하는 경우 ssh 계정하고 패스하고 입력해주면서 해야하는데

데몬으로 하면 그런거 없다. (iptables에서 포트제한하는 경우라면 873포트를 열어줘야 한다)

예) 서버 CentOS 6.8 / 서버ip - 123.456.789.012 의 Gallery 디렉토리(원본)를 내 서버(타켓)로 동기화 하려고 한다.


==== xinetd 설치

]# yum -y install xinetd


==== /etc/xinetd.d/rsync 파일편집

]# vi /etc/xinetd.d/rsync

disable = no 로 변경해주고 저장.


==== /etc/rsyncd.conf 를 맹글어준다.

]# vi /etc/rsyncd.conf

[daehans]

path = /home/daehan/Gallery

comment = myGallery

uid = nobody

gid = nobody

use chroot = yes

read only = yes

# hosts allow = all host

max connections = 10

timeout 600

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

[섹션이름]

path = 섹션의 경로


==== SELinux 사용시라면 퍼미션 오류나므로

참고 : http://webinformation.tistory.com/30 

]# getsebool -a | grep rsync

postgresql_can_rsync --> off

rsync_anon_write --> off

rsync_client --> off

rsync_export_all_ro --> off

rsync_full_access --> off


확인 후 rsync_export_all_ro 를 on 으로 변경

]# setsebool -P rsync_export_all_ro 1

-P 옵션은 서버를 재 시작해도 on 시키겠다는 의미.


==== xinetd 재시작 및 chkconfig 등록

]# service xinetd restart

]# chkconfig xinetd on


===== 123.456.789.012 서버의 설정끝.




===== 내서버에서 rsync로 실행하면 된다.

rsync -avr 원본서버도메인이나IP주소::섹션이름 내서버의경로

]# rsync -avr --delete 123.456.789.012::daehans /home/Gal_backup


원본 123.456.789.012 서버의 :daehans 섹션의 경로의 파일들을 가지고
(/home/daehan/Gallery 디렉토리 안의 모든 파일들을)
타켓인 내서버의 /home/Gal_backup 디렉토리와 동기화시킨다.


설정한지 꽤되어 기억으로 정리할려니 빼먹은거 있을지도... 


:
Posted by 비개인오후
2017. 4. 17. 21:17

iptables 설정 리눅스서버2017. 4. 17. 21:17

다시 입력하기 귀찮아서리 백업용.

CentOS 6.8 에서 /etc/sysconfig/iptables 파일이다.

7.x 부터는 firewalld 인가로 한다는데 virtualbox 에서라도 테스트해야하나 -_-;;


난 기본적으로 ssh포트를 변경해버리므로 22번 포트를 막아버린다.

주의) 개인적으로 사용하는것이므로 혹 이 글을 다른분들이 보신다면

참고만 하시고 다른 자료를 참고하시길 권합니다.


[root@localhost sysconfig]# vi iptables


# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

# ftp

-A INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT


# ssh port 22 deny

# -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

# new ssh

-A INPUT -m state --state NEW -m tcp -p tcp --dport 변경포트번호 -j ACCEPT


# web httpd

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

# samba

-A INPUT -m state --state NEW -m tcp -p tcp --dport 137 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 138 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT

# openssl, webdav

-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

# rsync daemon

# -A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT

# webdav

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5005 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 5006 -j ACCEPT


# 이 위로 열어 줄 포트들을 지정해주면 된다.

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT



:
Posted by 비개인오후
CentOS 7.x - 계정명 daehan

ftp로 접속하려는데

500 OOPS vsftpd: refusing to run with writable root inside chroot()

나오면서 접속이 안된다.


CentOS7은 뭐이리 안되는게 많은지..


찾아보니 /etc/vsftpd/vsftpd_conf 파일에서
allow_writeable_chroot=YES 추가하라는것도 있고
chroot_local_user=YES 부분을 NO로 바꾸로 하라는것도 있고
chroot 관련해서는 따로 검색을 해서 개념을 알아둬야지.

나는 혼자쓰는거니 daehan 계정만 잘되면 되므로
/etc/vsftpd/vsftpd_conf 에서 chroot_list 관련 부분만 살짝고쳤다.



원래

#chroot_list_enable=YES

# (default follows)

#chroot_list_file=/etc/vsftpd/chroot_list



# 주석해제했다.

chroot_list_enable=YES

# (default follows) 이놈도 주석해제 하고 chroot_list 파일에 허용할 아이디입력

chroot_list_file=/etc/vsftpd/chroot_list

허용할 이라고 했는데 chroot 가 적용안되게 할 계정이라고 하는게 맞겠지.


근데 /etc/vsftpd/chroot_list 파일이 없었다.


]# vi /etc/vsftpd/chroot_list

로 파일만들어서 첫줄에 daehan 계정명을 써주고 저장.

여러 계정일 경우 한 줄에 하나씩 써주면 된다더라. user_list 파일을 보니...ㅋㅋㅋ


]# systemctl restart vsftpd


잘된다.



:
Posted by 비개인오후

까페24에 가상서버 호스팅이 1G 메모리에 5,500원이길래 신청했다.

https://www.cafe24.com/?controller=product_page&type=server&page=virtual_linux

CentOS 7.x os만


15분인가? 정도 후에 셋팅됐다길래 한 짓


1. yum 업데이트

]# yum -y update


2. 기본으로 사용 할 사용자추가 후 패스워드 지정

]# useradd daehan

]# passwd daehan


3. root로 바로 로그인 못하도록 sshd_config 파일변경

]# vi /etc/ssh/sshd_config 파일을 열어서 


#PermitRootLogin yes 라는 부분을 주석제거 하고

PermitRootLogin no 로 변경 후 저장


4. sshd 재시작

]# systemctl restart sshd.service


ssh 포트 바꾸고 iptables 에서도 설정해줘야하는데

피곤해서 여기까지만 하고 다음에...

:
Posted by 비개인오후
2016. 11. 24. 01:36

vsftpd 500 OOPS: cannot change directory 리눅스서버2016. 11. 24. 01:36


vsftp 설치하고 잘되던 놈이 재부팅 하니 로그인은 되는데

500 OOPS: cannot change directory

요래 GR하면서 디렉토리 리스트를 못보여준다.


검색해보니 selinux 문제란다.. 망할넘의 selinux

웹서버에 삼바에 ftp에 아주 번거롭게 만드는 놈일세...


]# getsebool -a | grep ftp

해서 ftp_home_dir 상태가 off 이면 


]# setsebool -P ftp_home_dir=1

]# service vsftpd restart

요러면 된단다... 

-P 는 재부팅 후에도 적용된다는건데 저 옵션주면 한참 걸리기는 하더라.


근데 안돼 ㅜㅜ


그래서 allow_ftpd_full_access 옵션주면 된다는 게 있길래 했더니 된다.


]# setsebool -P allow_ftpd_full_access on

]# service vsftpd restart



]# setsebool -P allow_ftpd_full_access=1 도 같은거다



:
Posted by 비개인오후
2016. 10. 24. 17:41

CentOS 6.8 APM에 owncloud 설치하기 리눅스서버2016. 10. 24. 17:41

클라우드서버 맹글어보자고 삽질...

알고보면 별거 없는데 작업했던거 까먹을까봐 메모.


서버 CentOS 6.8 가상서버 호스팅.


APM : Apache 2.2.15 / php 5.6.17 / MySQL 5.7.10

전부 yum으로 설치하고 업그레이드 함.

귀찮아서 selinux 설정은 끈 상태임.


웹서버 홈디렉토리 경로는 /home/daehan/www 임.


phpMyAdmin 으로 owncloud 데이터베이스를 만들어 둠.

utf8 콜레이션은 utf8mb4_general_ci 으로...



https://download.owncloud.org/download/repositories/stable/owncloud/

로 가서 Select Your Operating System 에서 CentOS 클릭


하단의 CentOS_6 owncloud-9.1.1-1

라고 되어 있는 부분의 쉘상에서 설명대로 한다.


]# rpm --import https://download.owncloud.org/download/repositories/stable/CentOS_6/repodata/repomd.xml.key


]# wget http://download.owncloud.org/download/repositories/stable/CentOS_6_SCL_PHP54/ce:stable.repo -O /etc/yum.repos.d/ce:stable.repo


]# yum clean expire-cache


]# yum -y install owncloud


끝나면 /var/www/html 디렉토리에 owncloud 디렉토리에 설치가 되어 있음.


별것없이 그냥 웹서버만 다시 시작해줘도 된다. 그게 보안상으로도 좋고~

]# service httpd restart


http://도메인/ouncloud/


로 접속해서 관리자 접속 아이디와 패스를 만들고 DB정보를 입력하면 된다.


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


근데 나는 보안따위 개나줘버려~


홈디렉토리 경로로 owncloud 디렉토리를 옮겨준다.

]# mv /var/www/html/owncloud /home/daehan/www/


이러저런 문제가 많으니 owncloud 디렉토리 전체를 소유자를 apache로 해준다.

]# chown -R apache:apache /home/daehan/www/owncloud


아파치 설정파일을 수정해줘야 한다.

]# vi /etc/httpd/conf.d/owncloud.conf


# Alias /owncloud "/var/www/html/owncloud/"

// 첫번째 Alias 부분 필요없으니 주석처리해준다.

<Directory "/home/daehan/www/owncloud">

  Options +FollowSymLinks

  AllowOverride All


  <IfModule mod_dav.c>

        Dav off

  </IfModule>


  SetEnv HOME home/daehan/www/owncloud

  SetEnv HTTP_HOME home/daehan/www/owncloud

</Directory>


<Directory "home/daehan/www/data/">

  # just in case if .htaccess gets disabled

    Require all denied

</Directory>


저장 한 후 아파치를 재시작해준다.


]# /etc/rd.d/init.d/httpd stop

중지 어쩌구 저쩌구

]# /etc/rd.d/init.d/httpd start

시작 어쩌구 저쩌구


]# service httpd restart

이걸로 한큐에 해도 되는데 되다 안되다 하는 경우가 있다. (내가 설치한게 다 그렇지 뭐)


http://도메인/ouncloud/


로 접속해서 관리자 접속 아이디와 패스를 만들고 DB정보를 입력하면 된다.











:
Posted by 비개인오후
오래된거기는 하지만 참고하면 좋다.
아! 참고만 한다. 몇 개는 고대로 따라했다가는 망한다 ㅋㅋㅋ

http://blog.syszone.co.kr/442

리눅스 서버 설치후 기본 보안 처리

                             작성자 : 서진우 (alang@sysmng.com)

-------------------------------------------------------------------------
------
리눅스 서버를 설치후 기본적으로 서버에 보안 설정을 해 두어야 한다.
그렇지 않을 경우 일반 서버 환경에 맞지 않기 때문에 보안에 허술한 부분을
통해 해킹의 우려가 있다. 서버설치시 초기에 고려해야할 보안 설정 부분이다.


1. Xserver 를 제외한 서버에 필요한 최소 팻키지로 시스템 운영체제를 설치한다.
   그런뒤 현재 설치된 배포판의 패키지 중에서 보안에 문제가 있어서 업그레이드
   된 팻키지가 나왔을 경우 모두 팻키지를 업그레이드 시킨다.

   (Redhat 7.1 경우 : xinetd-2.3.x 이상,sendmail-8.11.6,kernel-2.4.12)

2. 설치 완료후 필요없는 데몬을 죽인다. portmap/identd/atd/lpd/gpm/xfs등 삭제
3. /etc/rc.d/rc3.d 에 S로 실행되는 데몬중에 불필요한것을 제거한다.
   (ntsysv 를 통해 Level 3 로 실행될때 초기 실행 데몬 종류를 선택한다.
    crond/named/network/named/sendmail/proftpd/sshd/telnet/syslog 등 시스템
    에서 꼭 필요한 서비스만 초기 오픈 시켜 놓는다.
4. /etc/xinetd.d 디렉토리 안의 xinetd 제어 데몬 설정중 불필요한것들을 지운다.
   (telnet,pop3 정도를 제외한 나머지..)

# rm -f /etc/xinetd.d/chargen*
# rm -f /etc/xinetd.d/daytime*
# rm -f /etc/xinetd.d/echo*
# rm -f /etc/xinetd.d/finger*
# rm -f /etc/xinetd.d/ntalk*
# rm -f /etc/xinetd.d/r*
# rm -f /etc/xinetd.d/talk*
# rm -f /etc/xinetd.d/time*

5. /etc/passwd 와 /etc/group 에서 불필요한 계정및 그룹을 삭제한다.

# userdel adm
# userdel lp
# userdel sync
# userdel shutdown
# userdel halt
# userdel news
# userdel uucp
# userdel operator
# userdel games
# userdel gopher
# userdel ftp

# groupdel adm
# groupdel lp
# groupdel news
# groupdel uucp
# groupdel games
# groupdel dip
# groupdel pppusers
# groupdel slipusers


6. 불필요한 명령어 및 설정파일의 파일권한을 변경한다.

chmod 700 /usr/bin/finger
chmod 700 /usr/bin/nslookup
chmod 700 /usr/bin/gcc
chmod 700 /usr/bin/cc
chmod 700 /usr/bin/suidperl
chmod 700 /usr/bin/whereis
chmod 700 /usr/bin/sperl5.6.0
chmod 700 /usr/bin/c++
chmod 700 /usr/bin/make
chmod 700 /usr/bin/finger
chmod 700 /usr/bin/pstree
chmod 700 /usr/bin/rlog
chmod 700 /usr/bin/rlogin
chmod 700 /bin/mail
chmod 700 /bin/ps
chmod 700 /bin/mount
chmod 700 /bin/umount

chattr +i /etc/fstab

7. 시스템 관리자용 명령어를 그룹별 허용이 되도록 설정한다.

# chmod 750 /bin/ps
# chmod 750 /bin/netstat
# chmod 750 /bin/dmesg
# chmod 750 /bin/df
# chmod 750 /usr/bin/w
# chmod 750 /usr/bin/who
# chmod 750 /usr/bin/last
# chmod 750 /usr/bin/top
# chmod 750 /usr/bin/lsof

# chgrp wheel /bin/ps
# chgrp wheel /bin/netstat
# chgrp wheel /bin/dmesg
# chgrp wheel /bin/df
# chgrp wheel /usr/bin/w
# chgrp wheel /usr/bin/who
# chgrp wheel /usr/bin/last
# chgrp wheel /usr/bin/top
# chgrp wheel /usr/bin/lsof

/etc/group 에 wheel 에 관리자용 일반 계정을 포함한다.

wheel:x:10:root,kobis 와 같이...

8. setuid,setgid 파일을 점검한다.

# find / -type f \\( -perm -4000 -o -perm -2000 \\)
su,passwd,sendmail 을 제외한 나머지 명령어에 s 권한을 없앤다.
su 명령은 wheel 그룹에 포함시키서 특정 관리자 계정에서만 사용
할수 있도록 한다.

9. 시스템 전체 디렉토리 퍼미션을 조정한다.

# chmod 711 /
# chmod 711 /home
# chmod 711 /var
# chmod 711 /var/log
# chmod 711 /etc
# chmod 700 /root

/home 밑에 웹서비스 계정들의 홈디렉토리 퍼미션을 710 에 nobody 권한으로
추가한다.

[root@zzang911 /home]# ls -al

drwx--x---   62 alang    nobody        8192 12월  3 09:12 alang/
drwx--x---   10 design   nobody        4096  9월 21 00:00 design/
drwx--x---    6 kobis    nobody        4096 11월 30 16:00 kobis/

10. nmap,nc,netstat 등을 이용해서 시스템의 열린 포트를 점검한다.

# nmap localhost -p 1-65535
# nc -w 3 -v -z localhost 1-65535
# netstat -ant | grep LISTEN

21/tcp     open        ftp
22/tcp     open        ssh
23/tcp     open        telnet
25/tcp     open        smtp
53/tcp     open        domain
80/tcp     open        http
3306/tcp   open        mysql

11. /etc/security/limits.conf 를 이용한 계별 System Resource 자원의 제한

*       hard    rss         10000  # 사용메모리 10M 로 제한
*       soft    nproc       20     # 생성가능 프로세서 20개 제한
kobis   hard    maxlogins   3      # kobis 계정 텔넷접속을 3개로 제한

12. 일반 telnet 사용자 history 감시하기

12.1환경조정

# mkdir /....../history
# touch /....../history/user_history
# adduser 특정관리계정   : 그냥 admin 이라 하자..
# chmod 702 /......../history/user_history

12.2. 설정
# vi /etc/profile

제일 밑줄에 다음 구문 추가..

if [ $LOGNAME != "admin" ]
then
HISTFILE=/........./history/user_history
TMOUT=200
echo -
n "===================================================================
userhistory 로그인 ID: $LOGNAME 접속시간 : `/bin/date`
===================================================================
" >> /....../history/user_history
fi


# vi /root/.bashrc

제일 밑에 다음 구문 추가 ..

HISTFILE=/root/.bash_history
TMOUT=-1

이제 일반 접속 계정으로 접속을 하면...
/........../history/user_history 파일에 history 가 남게 됩니다.

13. TCP Wrapper 을 이용하여 tcp 프로토콜을 이용한 접속을 제한한다.

# vi /etc/hosts.deny
-------------------------------------------------------------------------
--
in.telnetd : ALL : twist ( /etc/host-check Y Y %a %c %d %h %n %p %s %u ) &
sshd : sshd : ALL EXCEPT 211.47.64.

# vi /etc/host-check
-------------------------------------------------------------------------
--
#!/bin/sh

################################  변수정의부문

# 메일 수신자
mailto=alang at sysmng.com

# 화면출력 여부, 메일전송 여부
dsp=$1; msg=$2

# 접속자 정보 등
a=$3; c=$4; d=$5; h=$6; n=$7; p=$8; s=$9; u=$10

# 현재 시간
time=`date`

# 접속시도자 소속 서버의 finger 정보
finger=`/usr/bin/finger -l @$h 2> /dev/null`

################################  화면 출력부문

if [ $dsp = Y ]
    then

echo "
                      ===================================
                           접속이 허용되지 않습니다.
                      ===================================

               Access Time             : $time
               Client host address     : $a
               Client information      : $c
               Client host name(or IP) : $h
               Client host name        : $n
               Client user name        : $u
        "

fi


################################  메일 송신부문

if [ $msg = Y ]
    then

/bin/echo "
                        ===============================
                              접속 거부자 상세정보
                        ===============================

         Access Time                    : $time
         Access client host address     : $a
         Access client information      : $c
         The daemon process name        : $d
         Access client host name(or IP) : $h
         Access client host name        : $n
         The daemon process id          : $p
         Server information             : $s
         Access client user name        : $u
                   --------------------------------------
                       Access client finger information
                   --------------------------------------
                            $finger
              ------------------------------------------------
" | \\
      /bin/mail -s "tcp_wrapper report [$d]" $mailto

fi


# vi /etc/hosts.allow
-------------------------------------------------------------------------
--
in.telnetd : localhost 127.0.0.1 211.47.64.145
sshd : localhost 127.0.0.1 211.47.64.145

14. sendmail 보안 설정

먼저 보안에 문제 있는 기본 팻키지에서 패안 패치된 팻키지로 업그레이드 한다.
(Redhat 7.1 : sendmail-8.11.2  --> sendmail-8.11.6 )

14.1 Sendmail 의 Third Party Relay 허용 여부 점검

/etc/mail/sendmail.cf 파일 설정 확인

# anything else is bogus
R$*                     $#error $@ 5.7.1 $: "550 Relaying denied"

위 부분을 확인하여 Relay 가 허용되지 않을려면 주석 처리가 되어져 있지 않아야
한다. 그런후..

/etc/mail/access 에서 relay 허가 대역을 설정한다.

spammer at aol.com     REJECT
aol.com             REJECT
abc.com             REJECT
111.111             REJECT
211.47.64           RELAY

# makemap hash /etc/mail/access < /etc/mail/access

로 access.db 파일을 갱신해 준다.

마지막으로 http://www.whchang.com/netprg/is-relay.pl 에서 relay 여부 확인
가능

14.2 SMTP 서버에서 보내는 양 제한 설정

/etc/mail/sendmail.cf 파일에서 ..

# maximum message size
O MaxMessageSize=2048000

이부분의 설정을 수정하면 된다. 여기서의 단위는 byte 이며 위의 설정은 2M
이상 크기의 메일은 이 서버를 통해 보낼수 없다는 것이다.

14.3 POP 서버의 받는양 제한

Mlocal,     P=/usr/bin/procmail, F=lsDFMAw5:/|@qSPfhn9,
S=EnvFromL/HdrFromL,
R=EnvToL/HdrToL, M=2048000

위와 같이 M=2048000 부분을 추가해 주면 된다.

15. apache 웹서버에서의보안설정

15.1 특정 IP 별로 접근 제어 하는 방법

httpd.conf 에서 ..

<Directory /home/xxx/www>
    Order deny,allow
    Deny from all
    Allow from xxx.xxx.xxx.xxx (접속 허용 IP)
</Directory>

와 같이 설정하여 제어 가능하다.

15.2 특정 디렉토리에 인증을 거는 방법

httpd.conf 에서 AllowOverride All 로 설정되어져 있어야 적용 가능하다.

A. 먼저 .htaccess 파일을 하나 만들어야 합니다. 암호인증을 걸고자 하는
디렉토리로 이동하셔서 편집기를 사용하여 .htaccess 라는 파일을 만듭
니다. 파일의 내용은 다음과 같습니다.

$ vi .htaccess
-----------------------------------------------------------
AuthName "타이틀명을 적으세요"
AuthType Basic
AuthUserFile /암호를 걸고자 하는 디렉토리 절대경로/.htpasswd
AuthGroupFile /dev/null
ErrorDocument 401
<Limit GET POST>
require valid-user
</Limit>
-----------------------------------------------------------


B. test 라는 아이디로 인증 과정을 거쳐야만 웹상에서 디렉토리에
들어갈수 있는 경우에 다음과 같이 합니다.

$ htpasswd -c .htpasswd test

Adding password for test
New password:
Re-type new password:

위옜 같이 htpasswd -c .htpasswd <생성하고자 하는 아이디> 라고
해주시면 패스워드를 물어보게 됩니다.
-c 옵션은 최초 사용자 생성시만 붙입니다. 그 다음 생성아이디는
그냥 -c 옵션은 빼고 htpasswd .htpasswd <ID> 라고 해주시면 됩니
다...
부과적인 설명으로 IP 주소별로 디렉토리 인증을 할수 있다.
방법은 .htaccess 파일을 다음과 같이 만들어 준다.

--------------------------------------------------------------
AuthName "타이틀명을 적으세요"
AuthType Basic
AuthUserFile /암호를 걸고자 하는 디렉토리 절대경로/.htpasswd
AuthGroupFile /dev/null
ErrorDocument 401
<Limit GET POST>
require valid-user
Satisfy any
order deny,allow
allow from 211.47.64( 접속허가된 IP 대역 )
allow from 211.47.64.145( 접속허가된 IP 주소 )
deny from all
</Limit>
--------------------------------------------------------------

여기서 주의할 설정은 Satisfy 옵션에 주의 해야 한다.
Satisfy any 는 ID와 IP 중 어느 하나만 해당하면 인증이 된다.
Satisfy all 은 ID,IP 둘다 적용이 되어야지만 인증이 된다.

15.2 Webzip,Teleport,wget 등 웹소스 긁어가는 프로그램 차단하기

httpd.conf 에서..

BrowserMatch "WebZIP" go_out
BrowserMatch "Teleport" go_out
BrowserMatch "GetRight" go_out
BrowserMatch "Wget" go_out

와 같이 설정을 추가 하고..

<Directory "/home">
    Options FollowSymLinks ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Deny from env=go_out
    Deny from export=go_out
</Directory>

15.3 클라이언트 브라우저 별로 접속 차단하기

BrowserMatch "MSIE" mise

<Directory "/home">
    Options FollowSymLinks ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    Deny from env=mise
</Directory>

15.4 특정 사이트에서 현 서버의 자료 무단 링크 금지하기

  SetEnvIFNoCase Referer "superboard" link_deny
  SetEnvIFNoCase Referer "hihome" link_deny
  SetEnvIFNoCase Referer "eznara" link_deny
  SetEnvIFNoCase Referer "\\.to" link_deny
  SetEnvIFNoCase Referer "\\.cc" link_deny
  SetEnvIFNoCase Referer "\\.ro" link_deny
  SetEnvIFNoCase Referer "\\.ky" link_deny
  SetEnvIFNoCase Referer "\\.ru" link_deny
  SetEnvIFNoCase Referer "\\.ly" link_deny
  SetEnvIFNoCase Referer "cjb" link_deny
  SetEnvIFNoCase Referer "interpia98" link_deny
  SetEnvIFNoCase Referer "yakult" link_deny
  SetEnvIFNoCase Referer "dreamwiz" link_deny
  SetEnvIFNoCase Referer "warez" link_deny
  SetEnvIFNoCase Referer "lycos" link_deny
  SetEnvIFNoCase Referer "netian" link_deny
  SetEnvIFNoCase Referer "daum" link_deny
  SetEnvIFNoCase Referer "hanmir" link_deny

<FilesMatch "\\.(avi|swf|mpe?g|zip|rar|[a-zA-Z0-9][0-9][0-9]|mp[1-9]
|arj|asf|exe)$">
  Order allow,deny
  allow from all
  deny from env=link_deny
  deny from env=go_out
</FilesMatch>

  SetEnvIFNoCase Referer "http://(.*)\\.superboard\\.com/" link_deny
  SetEnvIFNoCase Referer "http://(.*)\\.cjb\\.net/" link_deny
  SetEnvIFNoCase Referer "http://(.*)\\.eznara\\.com/" link_deny
  SetEnvIFNoCase Referer "http://korean21\\.cc/" link_deny
  SetEnvIFNoCase Referer "http://(.*)\\.wo\\.to/" link_deny
  SetEnvIFNoCase Referer "http://(.*)\\.interpia98\\.net/" link_deny
  SetEnvIFNoCase Referer "http://(.*)\\.yakultgo\\.net/" link_deny
    
<FilesMatch "\\.(avi|mpe?g|zip|rar|r0*|a0*|mp3|arj|asf|swf|exe)$">
  Order allow,deny
  allow from all
  deny from env=link_deny
</FilesMatch>

위설정은 superboard,hihome,eznara,dreamwiz,lycos,....등의 사이트에서 현 시스템
에 있는 avi,swf,zip,mpeg...등의 파일을 무단으로 링크거는것을 금지시키는 설정이다.

15.5 특정 사이트에서만 링크 가능하게 하기..즉 다른 사이트에선 링크 금지
    
<VirtualHost xxx.xxx.xxx.xxx>
    ServerAdmin webmaster at
sysmng.com
    DocumentRoot /home/xxxx/www
    ServerName sysmng.com
    SetEnvIf Referer sysmng\\.com go_in
    SetEnvIf Referer www\\.sysmng\\.com go_in
    SetEnvIf Referer ^$ go_in
  <FilesMatch ".(mpg|asf|wmv|swf)$">
    Order Deny,Allow
    Allow from env=go_in
    Deny from all
  </FilesMatch>
</VirtualHost>

와 같이 버추얼 설정에서 /home/xxxx/www 안에 있는 mpg,asf,wmv,swf 파일은
반드시 sysmng.com 사이트에서만 링크가 가능하다.

15.6 apache 웹서버 버젼 정보 숨기기

httpd.conf 에 ServerTokens Prod 라는 옵션 추가

ServerTokens Prod[uctOnly]   결과 : Server : Apache
ServerTokens Min[imal]       결과 : Server : Apache/1.3.x
ServerTokens OS              결과 : Server : Apache/1.3.x (Unix)
ServerTokens Full            결과 : Server : Apache/1.3.x (Unix) PHP 4.0.5...

이런 버젼 확인은 telnet xxx.xxx.xxx.xxx 80 과 같이 80 번 포트로 접속하면 알수
있다.


16. Proftp 보안 관련

16.1 root 계정 접속 금지 방법

ftp 에서 root 접속은 보안상 금지하는 편이다. root 권한 접속 금지 방법은
기본 설정이 되어져 있다.. 설정 방법은 다음과 같다.

/etc/proftpd/conf/proftpd.conf 설정 파일에서

RootLogin off
DefaultRoot                     ~

와 같이 설정을 추가 혹은 변경 (기본설정은 위와 같이 되어져 있다.) 하고

/etc/proftpd/conf/ftpusers 파일에다가 root 계정을 추가 해주면 된다.

# vi /etc/proftpd/conf/ftpusers
---------------------------------------------------
root
bin
daemon
adm
lp
sync
shutdown
halt
.
.

반대로 root 접속을 허가할 경우는 ...

RootLogin on 으로 변경하고
    
ftpusers 파일에 root 를 제거해주고 proftpd 데몬을 재시작하면 된다.
  
16.2 기본 보안 환경 설정

/etc/proftpd/conf/proftpd.conf 설정 파일에서

<Global>
Umask               022
MaxClients            9
MaxClientsPerHost       3       "Sorry, one connection allow per one host"
MaxHostsPerUser       3 "Sorry, one hosts allow per one user"
</Global>

<Global> 은 전체 환경 설정부분인데..여기서
Umask 는 down/upload 되어지는 파일의 퍼미션을 결정한다. 022 로 되어져 있을
경우 기본적으로 644 퍼미션의 파일 권한을 가지게 된다.
MaxClients 설정은 ftp 서버에 접속할수 있는 전체 접속자 수를 만한다.
MaxClientsPerHost 설정은 같은 IP를 가지는 원격지에서 동시 접속 가능한 수를
말한다.

MaxHostsPerUser 는 같은 ftp 접속 아이디를 가지고 다중접속 할수 있는 수를
말한다.

MaxInstances            10

위 설정은 Dos 공격을 막기 위해 자식 Process 의 Maximun number 를 조정한다.

16.3 특정 아이피에서만 접속 가능하게 만들기

<Limit LOGIN>
Order allow,deny
Allow from 211.47.67.
Deny from all
</Limit>

위의 설정은 211.47.67 대역에서만 본 시스템에 ftp 접속 가능하고 다른 곳에서
는 접속이 거부 된다.

17. log 서버 설정하기

일반 서버에서 ..

/etc/syslog.conf 파일에서 ..

#authpriv.*     /var/log/seure    를 앞과 같이 주석 처리 하고 ..
authpriv.*      @log.sysmn.gcom   으로 수정한다.

/etc/rc.d/init.d/syslog restart   로 데몬을 재가동 시켜 주고..

로그 서버에서 ..

/etc/rc.d/init.d/syslog stop 으로 데몬을 죽이고..
/sbin/syslogd -m 0 -r -h 를 실행한다.

이러면 시스템의 모든 접속 인증 결과가로그서버의 /var/log/securi 파일안에
저장되어진다.

18. Syn Flooding 공격 방지

먼저 kernel 의 sysctl cooking 기능을 켜주고 컴파일후 ..

sysctl -w net.ipv4.tcp_max_syn_backlog=1024
sysctl -w net.ipv4.tcp_syncookies=1
sysctl -w net.ipv4.icmp_destunreach_rate=1
sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
sysctl -w net.ipv4.icmp_echoreply_rate=1
sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1
sysctl -w net.ipv4.icmp_paramprob_rate=1
sysctl -w net.ipv4.icmp_timeexceed_rate=1
sysctl -w net.ipv4.igmp_max_memberships=1
sysctl -w net.ipv4.ip_default_ttl=64
sysctl -w net.ipv4.ip_forward=0
sysctl -w net.ipv4.ipfrag_time=15
sysctl -w net.ipv4.tcp_syn_retries=3
sysctl -w net.ipv4.tcp_retries1=3
sysctl -w net.ipv4.tcp_retries2=7
sysctl -w net.ipv4.conf.eth0.rp_filter=2
sysctl -w net.ipv4.conf.lo.rp_filter=2
susctl -w net.ipv4.conf.default.rp_filter=2
sysctl -w net.ipv4.conf.default.rp_filter=2
sysctl -w net.ipv4.conf.all.rp_filter=2
sysctl -w net.ipv4.conf.eth0.accept_redirects=0
sysctl -w net.ipv4.conf.lo.accept_redirects=0
sysctl -w net.ipv4.conf.default.accept_redirects=0
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.eth0.accept_source_route=0
sysctl -w net.ipv4.conf.lo.accept_source_route=0
sysctl -w net.ipv4.conf.default.accept_source_route=0
sysctl -w net.ipv4.conf.all.accept_source_route=0
sysctl -w net.ipv4.conf.eth0.bootp_relay=0
sysctl -w net.ipv4.conf.lo.bootp_relay=0
sysctl -w net.ipv4.conf.default.bootp_relay=0
sysctl -w net.ipv4.conf.all.bootp_relay=0
sysctl -w net.ipv4.conf.eth0.log_martians=1
sysctl -w net.ipv4.conf.lo.log_martians=1
sysctl -w net.ipv4.conf.default.log_martians=1
sysctl -w net.ipv4.conf.all.log_martians=1
sysctl -w net.ipv4.conf.eth0.secure_redirects=0
sysctl -w net.ipv4.conf.lo.secure_redirects=0
sysctl -w net.ipv4.conf.default.secure_redirects=0
sysctl -w net.ipv4.conf.all.secure_redirects=0
sysctl -w net.ipv4.tcp_keepalive_time=30
sysctl -w net.ipv4.tcp_fin_timeout=30
sysctl -w net.ipv4.tcp_tw_buckets=1440000
sysctl -w net.ipv4.tcp_tw_buckets=1440000
sysctl -w net.ipv4.tcp_keepalive_probes=2
sysctl -w net.ipv4.tcp_max_ka_probes=100

설정을 적용시킨다. 간단히 스크립터 파일을 만들어서 실행해도 되고..
/etc/rc.d/rc.local 파일에 차례로 적어주어 시스템 시작시 적용시켜도
된다.

19. 파일 무결성 체크 프로그램 (Fcheck 설치..)

지금까지의 시스템 설치후 기본 보안에 신경을 써야 할부분에 대해서 알아보았고
마지막으로 현재 기본 보안 처리된 시스템의 무결성에 대해 앞으로 감시해서 유지
해야 할것이다. 무결성 체크 프로그램으로는 대표적인게 Tripwire 가 있다.
하지만 여기서 소개하는 Fcheck 는 가볍고 간단하면서 Tripwire 의 역활을 충분히
할수 있다.

먼저 프로그램을 다운 받도록 하자.

http://www.geocities.com/fcheck2000/
가면 최신 프로그램이 있을것이다. 다운을 받고 /usr/local 및에 둔다.
압축을 풀고..fcheck,fcheck.cfg 파일의 설정값을 몇개 수정하자.

# tar xzvf FCheck_2.07.59.tar.gz
# cd fcheck
# vi fcheck
-------------------------------------------------------------------
.
.
###############################################################
##############
#                                                                           #
#                 User modifiable variable definitions:                     #
#                                                                           #
###############################################################
##############

# This should be passed through the command line, but hard coding still works
$config="/usr/local/fcheck/fcheck.cfg";
----------------------------------------- 이부분을 시스템 환경에 맞게 수정

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

# vi fcheck.cfg
-------------------------------------------------------------------
Directory   = /etc/
Directory   = /bin/
Directory   = /usr/bin/
Directory   = /sbin/
Directory   = /usr/sbin/
Directory   = /usr/local/bin/
Directory   = /usr/local/sbin/
Directory   = /lib/
Directory   = /usr/lib/
Directory   = /usr/local/lib/

#
# Directory 설정은 fcheck 가 체크할 파일들이 들어 있는 디렉토리로 시스템에
# 중요한 명령어나 설정파일등이 있는 곳을 정해 주면 된다.
#

Exclusion      = /etc/passwd
Exclusion       = /etc/shadow

#
# Exclusion 설정은 Directory 설정에서 정한 디렉토리중 자주 변경이 되는 파일
# 이 있어서 체크때마다 걸리므로 체크 생략을 요하는 파일을 정해 주면 된다.
# 호스팅 업체나 기타 자주 사용자를 추가하는 서버라면 위와 같이 해주면 된다.
#

DataBase        = /usr/local/fcheck/data/data.dbf

#
# DataBase 설정은 리눅스 파일 정보를 DB 파일로 저장해서 다음 체크시 비교
# 분석할때 사용되어진다.
#

TimeZone        = GMT-9

#
# 한국 시간을 적용한다. GMT-9
#

#File   = /usr/local/admtools/logs/sol.dbf

File 설정은 필요 없으니 주석 처리 해준다.
기타 여러 설정값이 있으나 크게 작동하는데 영향을 주지 않는다.기본값을 적용
한다.

이와 같이 적용후 /usr/local/fcheck/data 디렉토리를 만들어 준다.

# mkdir /usr/local/fcheck/data
# /usr/local/fcheck/fcheck -ac

이와 같이 fcheck -ac 로 파일 무결성 체크를 시작한다. 그럼 data 디렉토리 안
에 data.dbf 파일이 생성되어 진다.

이제 Directory 설정에 해당하는 디렉토리 안에다가 파일을 하나 생성하고 재대
로 점검을 하는지 테스트를 하여 보자..

# touch /etc/test
# /usr/local/fcheck/fcheck -a

그럼 아마 아래와 같은 결과를 출력할것이다.
PROGRESS: validating integrity of /etc/
STATUS:
        ADDITION: [zzang911.net] /etc/test
        Inode   Permissons      Size    Created On
        19508   -rw-r--r--      0       Sep 19 20:13 2001

자 이제 이 명령어를 이용하여 주기적으로 시스템 파일 무결성을 체크하고 관리
자에게 통보하는 프로그램을 만들어 보도록 하자.

# vi fcheck.sh

-------------------------------------------------------------------------
-
#!/bin/sh


CHECK=`/usr/local/fcheck/fcheck -a | grep Inode`
HOSTNAME=`hostname`

if [ -n "$CHECK" ]
    then
    /usr/local/fcheck/fcheck -a > fcheck_result
    mail -s "$HOSTNAME File 무결성 체크 결과" alang at sysmng.com <
fcheck_result
    rm -f fcheck_result
fi
-------------------------------------------------------------------------
-

간단한 이정도 스크립터로 보다 효율적인 관리가 가능해 질것이다.
이제 cron 에 등록시켜 놓고..매일 파일 무결성 체크를 간단히 메일로 받아서 관리
할수 있게 된다. 만일 변화된 파일이 정당한 변화라면..

# /usr/local/fcheck/fcheck -ac

로 DBfile 를 업데이트 시켜 줘야 한다. 아님..계속 메일이 날아 오게 된다.





이로써 시스템 설치후 점검해야 할 보안 설정에 대해서 마치겠다. 시스템 보안은
초기의 보안 설정이 아주 큰 부분을 차지 하고 있다. 하지만..지속적은 감시와
관리역시 초기 보안 상태를 유지하는 가장 중요한 작업이라고도 할수 있다. 
:
Posted by 비개인오후
처음에 엄청 당황스러웠다.
검색해보고 찾아서 적용해보니 잘 된다.

[해결책 1]

/etc/ssh/sshd_config 파일에 UseDNS 부분을 no로 바꾸고 주석을 제거 해준다.
거의 이러한 문제는 dns에 관련된 것들이기 때문에 dns를 사용하지 않으면 해결 된다.


VSFTP
[해결책 2]

위 방법으로 해결이 안될경우에는 /etc/resolv.conf 파일을 확인해 본다.
search localhost
위 항목이 없을 경우 추가, network 재시작 후 확인해본다.
혹은 아래의 빠른 DNS주소를 추가해준다.

[root@www backups]# cat /etc/resolv.conf
nameserver 164.124.101.2
nameserver 168.126.63.1
nameserver 168.126.63.1

nameserver 203.241.134.34
nameserver 203.241.135.130
:
Posted by 비개인오후
2010. 8. 10. 14:21

VSFTP 설정 리눅스서버2010. 8. 10. 14:21

출처 : http://unix.co.kr/bbs/board.php?bo_table=02_06&wr_id=33

vsftpd는 UNIX 시스템에서 사용할 수 있는 free FTP 서버(라이센스는 GPL)이다.
vsftpd가 내세우고 있는 것은 보안, 성능, 안정성이다. 지금까지 vsftpd의 자체 보안 문제가 있어
보안권고가 나온 적은 없다.(Redhat의 rpm 패키지중에 tcp_wrappers 지원없이 만들어져서 업데이트
rpm은 나온 적 있음)

* 지원 및 테스트된 OS

- Linux (Redhat, SuSE, Debian)
- Solaris (버전에 따라 IPv6나 inet_aton함수때문에 설치가 잘 안될 수 있음)
- FreeBSD, OpenBSD
- HP-UX
- IRIX

* 주요 기능

- 가상 IP별 별도의 환경 설정 기능 (설정파일의 listen_address= 이용)
- 가상 사용자 설정
- 전송 대역폭 지정
- PAM 지원 (버전 1.2.0부터는 PAM을 통한 wtmp에 로긴 로그를 남김)
- xferlog 표준 로그 파일보다 상세한 자체 로그 파일 형식 지원
- Standalone 방식과 inetd(xinetd)를 통한 운영 모두 지원
- IP별 다른 환경 파일 지정 기능 (tcp_wrappers와 함께 사용할 때)
- ...

1. vsftpd 설치
※ 설치는 Redhat 기준. 솔라리스의 PAM에 대한 것은 README.solaris 파일 참조한다.

http://vsftpd.beasts.org/ 에서 최신버전(현재 1.2.0)의 소스를 받아온다.

 
# tar xvfz vsftpd-1.2.0.tar.gz
# cd vsftpd-1.2.0
 


한글로 된 파일명을 전송할 때 로그에 파일명이 ???? 로 남지 않도록
logging.c 파일을 연 후 140번째 줄의

str_replace_unprintable(p_str, '?');

를 다음처럼 주석 처리한다.

/* str_replace_unprintable(p_str, '?'); */

또한 tcp_wrappers를 통한 접속제어를 사용하려면 builddefs.h 에서

#undef VSF_BUILD_TCPWRAPPERS 를
#define VSF_BUILD_TCPWRAPPERS 로 바꾼다.

 
# make
# make install (vsftpd 데몬, man page, xinetd 용 설정 파일 설치)
# cp vsftpd.conf /etc (환경설정 파일 복사)
# chmod 600 /etc/vsftpd.conf
# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd (PAM 설정 파일 복사)
 


/etc/pam.d/vsftpd 첫번째 줄에 다음과 같이 있다.

 
pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
 


즉, /etc/ftpusers 파일에 존재하는 ID는 접속할 수 없게된다.(sense=deny)

 
# FTP 접속을 허용하지 않을 ID를 등록한다.
# /etc/passwd를 참조해서 설치할 서버의 환경에 맞게 등록
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
smmsp
xfs
gdm
mysql
 



2. vsftpd.conf 의 주요 설정

 
# anonymous 사용자의 접속 허용 여부 (default = YES)
# 공개된 형태의 FTP 서버로 운영할 것이 아니라면 NO로 한다.
anonymous_enable=NO
# 로컬 계정 사용자의 접속 허용 여부 (default = NO)
local_enable=YES

# write 명령어 허용 여부 (defualt = NO)
write_enable=YES
# 로컬 계정 사용자용 umask (default = 077)
local_umask=022

# anonymous 사용자가 파일을 업로드 할 수 있는지 여부 (default = NO)
# anon_upload_enable=YES
# anonymous 사용자의 디렉토리 생성 허용 여부 (default = NO)
# anon_mkdir_write_enable=YES

# 파일 전송 로그를 남길 것인지 여부 (default = YES)
xferlog_enable=YES
# xferlog 표준 포맷으로 로그를 남길지 여부 (기본 설정파일은 YES)
# 아래에서 NO로 설정했을 때를 설명함
xferlog_std_format=YES
# 파일 전송 로그 파일명
xferlog_file=/var/log/vsftpd.log

# FTP 서버 접속할 때 로긴 메시지 (default = vsFTPd 버전번호)
# 한글 사용 가능
# ftpd_banner=Welcome to blah FTP service.

# -------------------------------------------------------------------
# 기본 설정 파일에는 없는 설정값으로 필요한 설정만 추가한다.
# ※ 중요한 설정은 굵은 글씨로 표시
# -------------------------------------------------------------------

# PAM 파일명을 지정 (설치할 때 /etc/pam.d/vsftpd명으로 복사함)
pam_service_name=vsftpd

# wtmp에 로그 남기기 (YES로 해야만 last 명령어로 접속 여부 확인 가능)
session_support=YES

# 사용자가 자신의 home directory를 벗어나지 못하도록 설정
chroot_local_user=YES

# 새로운 디렉토리에 들어갔을 때 뿌려줄 환경 메시지를 저장한 파일명
# message_file=.message

# xferlog 형식으로 log를 남기려면 (위에서 이미 YES로 했음)
# xferlog_std_format=NO
#
# - xferlog 표준 포맷은 로긴, 디렉토리 생성등의 로그를 남기지 않음
# 그러나 vsftpd 스타일 로그는 이를 포함한 보다 상세한 로그를 남김
# - vsftpd 스타일 로그 예
#
# Sun Jul 12 01:38:32 2003 [pid 31200] CONNECT: Client 127.0.0.1
# Sun Jul 12 01:38:34 2003 [pid 31199] [truefeel] FAIL LOGIN: Client 127.0.0.1
# Sun Jul 12 01:38:38 2003 [pid 31199] [truefeel] OK LOGIN: Client 127.0.0.1
# Sun Jul 12 01:38:41 2003 [pid 31201] [truefeel] OK MKDIR: Client 127.0.0.1, /mp3
# Sun Jul 12 01:39:06 2003 [pid 31201] [truefeel] OK UPLOAD: Client 127.0.0.1, /델리
# 스파이스 5집 - [04]키치죠지의 검은 고양이.mp3, 6855473 bytes, 3857.39Kbyte/sec

# 전송속도 제한 (0은 제한없음, 단위는 초당 bytes)
anon_max_rate=0
local_max_rate=0
trans_chunk_size=0

# 최대 접속 설정 (단 xinetd를 통하지 않고 standalone으로 동작할 때만 사용 가능)
# standalone을 위해서는 listen=YES 추가하고 별도로 vsftpd를 띄워야 함
#
# max_clients=최대 접속자 수, max_per_ip=IP당 접속 수
# max_clients=100
# max_per_ip=3

# Standalone 으로 운영할 때 listen=YES. 포트 변경을 원할 경우 listen_port 설정
# 디폴트 포트는 21번 포트이다.
# listen=YES
# listen_port=21
 


필요한 설정이 끝났으면 xinetd를 재실행한다.

 
# /etc/rc.d/init.d/xinetd restart
 


3. 문제 해결

1) ftpwho 같은 명령은 있나?
또한 last를 해도 접속된 걸 확인할 수가 없는데 방법이 없나?


ftpwho 형태의 명령은 없으며 임시적으로 다음 명령어 등으로 확인할 수 있다.

# ps -ef|grep vsftpd
# fuser -v ftp/tcp

vsftpd v1.2.0이상부터 PAM을 통해 wtmp에 로그를 남기므로 last로 접속여부를 확인할 수 있다.

2) 한글 파일명이 전송될 때는 vsftpd.log 에 ???? 로 남는다. 해결책은?

vsftpd는 출력할 수 없다고 판단하는
ASCII 코드 31 이하, 128~159, 177 문자를 모두 ? 로 바꿔서 저장을 한다.
따라서 이 부분을 처리하지 않고 저장하도록 소스를 수정한 후 컴파일하면 해결된다.

3) 사용자가 홈디렉리를 못 벗어나게 하고 싶는데?

/etc/vsftpd.conf에 다음을 추가한다. standalone으로 FTP서버가 동작중이면 재실행 필요.

chroot_local_user=YES

4) root로 접속할 수는 없나?

가능하면 root 접속은 허용하지 않기를 바란다.
/etc/ftpusers 파일에서 root를 빼면 접속이 가능하다.

5) ID/비밀번호가 정확히 맞는데 로긴할 때 자꾸 530 Login incorrect. 라고 나온다.

/etc/ftpusers (또는 vsftpd.ftpusers)에 등록된 사용자인지 확인한다.
여기에 등록된 사용자는 로긴할 수 없다. 이럴 때 /var/log/messages에 다음과 같은 로그가 남는다.

Aug 16 22:21:52 truefeel vsftpd: PAM-listfile: Refused user xxxxxxxx for service vsftpd

6) standalone으로 운영하고 싶다.
(즉, apache나 sendmail처럼 xinetd 통하지 않고 운영을 원한다.)


/etc/xinetd.d/vsftpd (vsftpd가 아닌 다른 파일명일 수 있음) 에서 disable = yes 로 변경하여
xinetd로 서비스 하지 않도록 설정한다. xinetd 를 재실행하면 이제 xinetd를 통한 ftp 서비스는 종료된다.

레드햇의 경우 /etc/rc.d/init.d/xinetd restart

이제 vsftpd 데몬를 실행한다. (소스로 설치시 기본 경로는 /usr/local/sbin)

# /usr/local/sbin/vsftpd &

7) 다른 포트(기본 21번)를 사용하고 싶다. (예를 들어 11121번 포트를 원할 때)

* xinetd를 이용하는 경우

/etc/service 에 'ftp2 11121/tcp' 한 줄을 추가한다.
그리고 /etc/xinetd.d/vsftpd (vsftpd가 아닌 ftp와 같은 다른 파일명일 수 있음) 에서
service ftp 를 service ftp2로 바꾸고, xinetd 를 재실행한다.

* standalone으로 운영하는 경우

/etc/vsftpd.conf 에서 listen_port=11121 을 추가하고 vsftpd 서버를 재실행한다.

바뀐 포트로 운영중인지 확인은 netstat -atnp(리눅스) 또는 netstat -an(그 이외 유닉스)

4. 참고할만한 문서

* vsftpd 1.2.0 설치 문서
ftp://vsftpd.beasts.org/users/cevans/untar/vsftpd-1.2.0/INSTALL
* vsftpd.conf man page
* vsftpd에서 한글파일로그와 lastlog 로긴확인하기 (좋은진호)
http://coffeenix.net/board_view.php?bd_code=4
* vsftpd에서 전송속도 제한 (bandwidth limit) (좋은진호)
http://coffeenix.net/board_view.php?bd_code=21

:
Posted by 비개인오후
2010. 7. 22. 15:47

REDHAT에 YUM 설치.. 리눅스서버2010. 7. 22. 15:47

레드햇에서.. yum 설치..

흐음.. 네이년에 검색되는 방법이 안되서리..

yum-2.0.8-1.noarch.rpm 이파일을 구할수가 없었다..

구글링중.. 중국애 블로그에서 발견.. ㅎㅎ
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
0. [root@localhost ~]# cat /etc/redhat-release
Red Hat Enterprise Linux AS release 4 (Nahant)

1.  [root@localhost noarch]#
wget "http://yum.baseurl.org/download/2.0/yum-2.0.8-1.src.rpm"

2. [root@localhost noarch]# rpmbuild --rebuild yum-2.0.8-1.src.rpm
Requires(post): /bin/sh
Requires(preun): /bin/sh
Requires: /bin/bash /bin/sh /usr/bin/python config(yum) = 2.0.8-1

libxml2-python python rpm >= 0:4.1.1 rpm-python
Obsoletes: yum-phoebe
Checking for unpackaged file(s): /usr/lib/rpm/check-files /var/tmp/yum-

2.0.8root
Wrote: /usr/src/redhat/RPMS/noarch/yum-2.0.8-1.noarch.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.40887
+ umask 022
+ cd /usr/src/redhat/BUILD
+ cd yum-2.0.8
+ '[' /var/tmp/yum-2.0.8root '!=' / ']'
+ rm -rf /var/tmp/yum-2.0.8root
+ exit 0
Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.40887
+ umask 022
+ cd /usr/src/redhat/BUILD
+ rm -rf yum-2.0.8
+ exit 0

3. [root@localhost noarch]# cd /usr/src/redhat/RPMS/noarch/

4.[root@localhost noarch]#  rpm -ivh yum-2.0.8-1.noarch.rpm
Preparing...                ###########################################

[100%]
   1:yum                   ###########################################

[100%]

5. [root@localhost noarch]# vi /etc/yum.conf

6. baseurl 두 부분만 수정..
[main]
cachedir=/var/cache/yum
debuglevel=2
logfile=/var/log/yum.log
pkgpolicy=newest
distroverpkg=redhat-release
tolerant=1
exactarch=1

[base]
name=Red Hat Linux $releasever - $basearch - Base
baseurl= http://centos.ustc.edu.cn/centos/4/os/i386/

[updates]
name=Red Hat Linux $releasever - Updates
baseurl= http://mirror.centos.org/centos/4/updates/i386/

7. [root@localhost noarch]# yum update
Gathering header information file(s) from server(s)
Server: Red Hat Linux 4AS - i386 - Base
Server: Red Hat Linux 4AS - Updates
Finding updated packages
Downloading needed headers
xorg-x11-xauth-0-6.8.2-1. 100% |=========================|  84 kB   

00:01     
perl-HTML-Parser-0-3.55-1 100% |=========================| 3.5 kB   

00:00     
tar-0-1.14-12.5.1.RHEL4.i 100% |=========================| 5.1 kB   

00:00     
perl-XML-LibXML-Common-0- 100% |=========================| 1.9 kB   

00:00    
...
..
..
..

[출처] REDHAT에 YUM 설치..|작성자 신쥐

:
Posted by 비개인오후
파일포맷변경
convert image_org.gif  image_out.jpg
[설명] image_org.gif  이미지를 image_out.jpg로 바꾼다.
convert image_org.png  image_out.jpg
[설명] image_org.png  이미지를 image_out.jpg로 바꾼다.

확대,축소,리사이즈
convert image_org.jpg -resize 25%x25% -quality 100 image_out.jpg
[설명] image_org.jpg  이미지를 1/4 축소한 image_out.jpg로 바꾼다.
convert image_org.jpg -resize 800x600 -quality 100 image_out.jpg
[설명] image_org.jpg  이미지를 800x600픽셀로 리사이즈 하지만 비율을 유지하며 큰사이즈 비율 기준으로 image_out.jpg를 생성한다.
convert image_org.jpg -resize 800x600\! -quality 100 image_out.jpg
[설명] image_org.jpg  이미지를 800x600픽셀로 강제적으로 바꾸어 image_out.jpg를 생성한다.
[설명] "-quality 100"이란 옵션을 주면 품질을 최대한 좋게한다.

회전
convert image_org.png -matte -background none -rotate 90  image_out.png
[설명] 이미지를 90도 회전하고 나머지 영역은 투명하게한다.
convert image_org.png -matte -background none -rotate -15  image_out.png
[설명] 이미지를 -15도 회전하고 나머지 영역은 투명하게한다.

좌우반전,상하반전
convert -flop image_org.jpg  image_out.jpg
[설명] image_org.jpg  이미지를 좌우반전시켜 image_out.jpg 이미지를 생성한다.
convert -flip image_org.jpg  image_out.jpg
[설명] image_org.jpg  이미지를 상하반전시켜 image_out.jpg 이미지를 생성한다.

흑백,갈색 효과
convert image_org.jpg -colorspace gray image_out.jpg
[설명] image_org.jpg  이미지를 흑백효과를 적용하고 image_out.jpg 이미지를 생성한다.
convert image_org.jpg -sepia-tone 80% image_out.jpg
[설명] image_org.jpg  이미지를 갈색효과를 적용하고 image_out.jpg 이미지를 생성한다.

밝게,어둡게
convert image_org.jpg -sigmoidal-contrast 3,0% image_out.jpg
[설명] image_org.jpg  이미지를 밝게하여 image_out.jpg 이미지를 생성한다.
convert image_org.jpg -sigmoidal-contrast 3,100% image_out.jpg
[설명] image_org.jpg  이미지를 어둡게하여 image_out.jpg 이미지를 생성한다.

자르기(crop)
convert image_org.jpg -crop 800x600+10+20  image_out.jpg
[설명] image_org.jpg를 Left 10픽셀 Top 20픽셀 부터 800x600픽셀까지  자르고 그 결과로 image_out.jpg 이미지를 생성한다.
convert image_org.jpg -crop 800x600+10-30  image_out.jpg
[설명] image_org.jpg를 Left 10픽셀 Top -30픽셀 부터 800x600픽셀까지  자르고 그 결과로 image_out.jpg 이미지를 생성한다.
 
캔버스생성
convert -size 800x600 xc:white image_out.jpg
[설명] 800x600픽셀인 흰색 image_out.jpg 이미지를 생성한다.
convert -size 800x600 xc:skyblue image_out.gif
[설명] 800x600픽셀인 하늘색 image_out.jpg 이미지를 생성한다.
convert -size 800x600 xc:none image_out.png
[설명] 800x600픽셀인 투명 image_out.png 이미지를 생성한다.

글자이미지생성
convert -background white -fill black -font batang.ttf -pointsize 36 label:"Test\n한글" image_out.png
[설명] "Test\n한글"이란 글자로 image_out.png 이미지를 생성한다. (이미지배경은 흰색, 글자색은 검정색, 폰트는 바탕, 폰트사이즈는 36pt)
 
이미지합성
composite -dissolve 60 -geometry +50+100 image_temp.png image_org.jpg image_out.jpg
[설명] image_temp.png 이미지를 투명도 60%로 하여 image_org.jpg의 50,100 픽셀 좌표에 올려 합성후 image_out.jpg 이미지를 생성한다.

기타 자세한 설명은 http://www.imagemagick.org/Usage/를 참고하십시오.

출처 : http://www.albumbang.com/board/board_view.jsp?board_name=free&no=57
:
Posted by 비개인오후
chmod 700으로 변경할 명령어
- /usr/bin/finger → 현재 접속자 현황을 보는 명령어 (계정명, 서버의 이용자 등 내부정보 유출 방지)
- /usr/bin/nslookup → 현재 네임서버의 상태를 보는 명령어(서버의 IP등 내부정보 유출 방지)
- /usr/bin/suidperl → perl 명령어(CGI를 이용한 불법적인 루트권한 획득 방지)
- /usr/bin/whereis → 파일 찾는 명령어(gcc, cc 등의 중요 파일 위치 보호)
- /usr/bin/cc → 컴파일 명령어(이용자가 해킹 프로그램 컴파일 방지)
- /usr/bin/pstree → 데몬상태 파악(서비스중인 포트정보 유출 방지)
- /usr/bin/rlog → 원격지 로긴(불법적인 원격지 해킹 방지)
- /usr/bin/rlogin → 원격지 로긴(불법적인 원격지 해킹 방지)
- /usr/bin/which → 파일 찾는 명령어(gcc,cc등의 중요 파일 위치 보호)
- /usr/bin/who → 현재 접속자 현황(계정명, 서버의 이용자등 내부정보 유출 방지)
- /usr/bin/w → 현재 접속자 현황(계정명, 서버의 이용자등 내부정보 유출 방지)
- /usr/bin/top → 시스템 정보 보기(시스템 사용 정보유출 방지)
- /usr/bin/find → 파일 찾는 명령어(gcc, cc등의 중요 파일 위치 보호)
- /bin/mail → mail 발송 명령어
- /bin/ps → 현재 사용중인 daemon 정보 확인 명령어
- /etc/hosts → 서버 설정 및 기타 연결 서버 리스트 확인
- /etc/hosts.deny → tcpwapper 제한 정보
- /etc/hosts.allow → tcpwapper 허용 정보
- /usr/bin/lynx → text 웹브라우저
- /usr/bin/wget → 외부 파일을 가져올 수 있는 명령어
- /usr/bin/gcc → 컴파일 명령어(이용자가 해킹 프로그램 컴파일 방지)
- /usr/bin/c++ → 컴파일 명령어(이용자가 해킹 프로그램 컴파일 방지)
- /usr/bin/make → 인스톨 명령어(이용자가 해킹 프로그램 컴파일 방지)
- /etc/exports → 외부 NFS 설정 정보
- /etc/fstab → 시스템 Partition 정보
- /usr/bin/chage → password expire 정보 변경
- /usr/bin/wall → 터미널에 붙어 있는 모든 사용장에게 message 전달
- /usr/bin/write → 다른 유저에게 message 전달
- /usr/bin/man → 해당 명령어에 대한 정보 전달
- /bin/mount → file system을 사용
- /bin/umonut → file system 사용 정지
- /sbin/netreport → 네트워크 인터페이스의 변경 요청 알림
- /bin/df → 현재 mount된 partition 정보
- /bin/grep → pattern matching 정보 라인 print
- /bin/egrep → multi pattern matching 정보 라인 print
- /bin/ping → 해당 IP로 네트웍 ICMP 전송
- /bin/netstat → 현재 사용중인 Port, 연결된 모든 네트웍 정보
- /usr/bin/ftp → 해당 서버로 file 전송
- /usr/bin/ncftp → 해당 서버로 file 전송
- /usr/bin/rz → XMODEM, YMODEM, ZMODEM 파일 전송
- /usr/bin/sz → XMODEM, YMODEM, ZMODEM 파일 전송

파일에 대한 정보를 700 으로 변경 시 root만이 사용가능하며
이를 다른 User에게도 허용하고 싶을 때는 Group 권한을 사용한다.


# ls -al /bin/su
-rwsr-x--- 1 root client 74651 Apr 11 2006 /bin/su
Client 라는 Group 생성 후 해당 파일에 대한 Permission 을


# chmod 4750 /bin/su
Su 에 대한 파일 소유권을 조정


# chgrp client /bin/su
함으로써 해당 파일에 대한 권한을 root와 group client에 속한 user로 제한할 수 있다.

:
Posted by 비개인오후

~/.vimrc 파일을 만든다.

자신의 홈디렉토리에 .vimrc

]vi .vimrc

 

set fileencodings=utf-8,euc-kr


한 줄 추가해준 후 wq


다방24는 utf-8용으로 아파치를 설정해놔서리.....



그리고.....

터미널 프로그램에서 굳이 utf-8로 지정할 필요없을듯.

PuTTY의 경우 서버의 환경(/etc/sysconfig/i18n)이

LANG="ko_KR.eucKR"

SUPPORTED="en_US.UTF-8:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFONT="latarcyrheb-sun16"

요렇게 되어 있으면 한글이 왕창 깨져버린다.


:
Posted by 비개인오후
2009. 12. 10. 18:26

CentOS에서 한글 리눅스서버/다방24가상호스팅2009. 12. 10. 18:26

CentOS 설치 후 Language를 한글로 설정하면 깨어진다.
아래와 같이 변경 후 로그아웃 후 다시 로그인하면 된다.

]# yum -y install kde-i18n-Korean fonts-korean

]# vi /etc/sysconfig/i18n
 LANG="ko_KR.eucKR"
SUPPORTED="en_US.UTF-8;en_US;en;ko_KR;eucKR;ko"
SYSFONT="lat0-sun 16"

]# source /etc/sysconfig/i18n

[출처] CentOS5.3 - 한글|작성자 억수로

:
Posted by 비개인오후
다방24 가상호스팅 RPM으로 설치해놓은거 보면 시작에서 아파치, MySQL, FTP가 빠져있다.
/etc/rc.d/rc.local 파일에 추가해줘도 되는데 귀찮아서리...

/etc/rc.d 디렉토리에 보면 rc3.d라는 디렉토리가 있다.
런레벨에 따라서
 /etc/rc.d/init.d 에 있는 스크립트를 실행할지 말지 지정해주는거다.
고로 각 런레벨별 디렉토리안의 파일들은 심볼릭링크로 되어 있다.

    - 런레벨 1 : 싱글모드 부팅. MS윈도우즈의 안전모드와 비슷

    - 런레벨 3 : 콘솔모드로 부팅(대부분 요거겠지)

    - 런레벨 5 : X 윈도우로 부팅

    - 런레벨 6 : 계속 재부팅만 한다.


런레벨 수정

    - /etc/inittab 파일에서 다음 항목의 숫자를 직접 수정함으로 변경 가능

      id:3:initdefault:




[root@비개인오후 rc3.d]# ls
K02NetworkManager            K35dovecot     K85mdmpd            S08ip6tables       S22messagebus  S90xfs
K02NetworkManagerDispatcher  K35smb         K87multipathd       S08iptables        S25bluetooth   S95anacron
K02avahi-dnsconfd            K35vncserver   K87named            S10network         S25netfs       S95atd
K02dhcdbd                    K35winbind     K88wpa_supplicant   S11auditd          S25pcscd       S97yum-updatesd
K02oddjobd                   K36mysqld      K89dund             S12restorecond     S26hidd        S98avahi-daemon
K05conman                    K50netconsole  K89netplugd         S12syslog          S26lm_sensors  S98haldaemon
K05saslauthd                 K50snmpd       K89pand             S13irqbalance      S28autofs      S99firstboot
K05wdaemon                   K50snmptrapd   K89rdisc            S13mcstrans        S44acpid       S99local
K10cups                      K50vsftpd      K99readahead_later  S13portmap         S55sshd        S99smartd
K10psacct                    K69rpcsvcgssd  S00microcode_ctl    S13setroubleshoot  S56xinetd
K15httpd                     K73ypbind      S02lvm2-monitor     S14nfslock         S58ntpd
K20nfs                       K74ipmi        S04readahead_early  S15mdmonitor       S80sendmail
K20rwhod                     K74nscd        S05kudzu            S18rpcidmapd       S85gpm
K24irda                      K80kdump       S06cpuspeed         S19rpcgssd         S90crond

[root@비개인오후 rc3.d]# mv K15httpd S15httpd
[root@비개인오후 rc3.d]# mv K36mysqld S36mysqld
[root@비개인오후 rc3.d]# mv K50vsftpd S50vsftpd
[root@비개인오후 rc3.d]# reboot


:
Posted by 비개인오후
2009. 11. 25. 18:55

robots.txt 의 오류정리 리눅스서버2009. 11. 25. 18:55

어디서 퍼뒀는지 모름 -_-;;
 
혹시 robots.txt가 무엇인지 모르시는 분은 다음 링크를 참고 바랍니다.

http://korea.internet.com/channel/content.asp?kid=17&cid=175&nid=1544
http://www.eznetsol.com/site/bbs_view.php?code=data&idx=9&page=1

 여하튼 이 robots.txt는 비록 강제 규격은 아니지만 대부분의 웹 로봇은 이 표준을 준수하고 있습니다. 그런데 크롤링을 해보면 잘못된 형식의 robots.txt 가 너무 많더군요. 여기 몇 가지 예를 들어 보겠습니다.(이 예들은 실제 사이트들에서 수집한 내용입니다.)

예1)

// All Web Search Engine 에 대한 페이지 자동추출 방지
User-agent: *
 
// 거부 디렉토리
Disallow: /

 빨간색 부분이 잘못되었습니다. 아마도 주석 처리를 한 것일텐데 robots.txt 규격에서 한줄 주석은 // 가 아니라 # 입니다.

예2)

User-Agent : Googlebot, Disallow : /_ver2006
User-Agent : Googlebot, Disallow : /bbs
User-Agent : Googlebot, Disallow : /board
User-Agent : Googlebot, Disallow : /board2003
User-Agent : Googlebot, Disallow : /default
User-Agent : Googlebot, Disallow : /doc
User-Agent : Googlebot, Disallow : /enter2002
User-Agent : Googlebot, Disallow : /food
User-Agent : Googlebot, Disallow : /food2
User-Agent : Googlebot, Disallow : /gong
User-Agent : Googlebot, Disallow : /gong2002
User-Agent : Googlebot, Disallow : /gong2003
User-Agent : Googlebot, Disallow : /guest
User-Agent : Googlebot, Disallow : /images
User-Agent : Googlebot, Disallow : /login
User-Agent : Googlebot, Disallow : /menu
User-Agent : Googlebot, Disallow : /money
User-Agent : Googlebot, Disallow : /poll
User-Agent : Googlebot, Disallow : /prog2003
User-Agent : Googlebot, Disallow : /qm2
User-Agent : Googlebot, Disallow : /room
User-Agent : Googlebot, Disallow : /security
User-Agent : Googlebot, Disallow : /temp
User-Agent : Googlebot, Disallow : /update
User-Agent : Googlebot, Disallow : /upload_del
User-Agent : Googlebot, Disallow : /

 구글봇에 무슨 원수가 졌는지 주저리 주저리 많이도 막아놨습니다만 안타깝게도 저 경로들은 모두 크롤링 대상이 됩니다. 왜냐하면 robots.txt 표준에는 한 줄에 여러 개의 레코드를 기술할 수 있도록 정의되어 있지 않기 때문입니다. 심지어 좀 더 엄중히 따지자면 User-Agent 나 Disallow 같은 필드명과 콜론(:) 사이에는 공백이 없어야 합니다.
 어쨌든 관용을 가지고 해석을 한다 하더라도 저 문서는 'Googlebot, Disallow : '로 시작하는 30개의 웹 크롤러를 정의해놓은 것이 됩니다. 그러므로 원래 의도대로라면 아래와 같이 해야 합니다.

User-Agent: Googlebot
Disallow: /_ver2006
Disallow: /bbs
...

예3)

User-agent : *
Disallow : *

아마도 위 문서를 정의한 사이트 관리자의 의도는 모든 크롤러에 대해서 모든 문서 수집을 막겠다는 것이였으리라 생각합니다.  그러나 저 문서는 이전 예와 마찬가지로 필드명과 콜론 사이에 공백이 있는 점이 잘못되었으며, User-agent 필드에서는 * 가 모든 웹 로봇을 의미하지만 Disallow 나 Allow 필드에 *(와일드카드) 표시를 하는 것은 모든 경로를 의미하지 않기 때문에 의도와 다르게 동작합니다. 즉, 저 문서가 의미하는 것은 모든 웹 로봇에 대해서 *로 시작하는 경로나 파일에 대한 접근을 막겠다는 뜻입니다. 원래 의도대로라면 아래와 같이 했어야 합니다.

User-agent: *
Disallow: /

예4)

User-agent: ia_archiver
User-agent: Mozilla/4.0 (compatible; Empas/0.9)
User-agent: Googlebot
Allow: /
Allow: /node/
Disallow: /taxomony/
Disallow: /tagadelic/
Disallow: /tracker/
Disallow: /ktracker/

 위 문서는 유명한 리눅스 커뮤니티의 robots.txt 내용 중 일부입니다. 역시 명성에 걸맞게 대부분의 사이트와는 달리 robots.txt 가 굉장히 꼼꼼하게 잘 정리되어 있습니다. 그러나 아쉽게도 위 내용은 비록 문법적으로는 하자가 없습니다만 의미적으로는 오류가 있습니다. 아마도 사이트 관리자의 의도는 ia_archiver, empas/0.9, googlebot 에 대해서 /taxomony/, /tagadelic/, /tracker/, /ktracker/ 로 시작하는 경로에 대해서는 문서 수집을 막고 그 외의 경로는 수집을 허용하려는 것이라 생각합니다. 하지만 실제 표준대로라면 위 문서는 모든 경로에 대한 문서 수집을 허용하고 있습니다.
 왜냐하면 robots.txt 표준에는 웹 로봇이 robots.txt 의 내용을 위에서부터 순서대로 확인하면서 가장 처음에 일치되는 패턴을 따르도록 정의되어 있습니다. 그런데 저 문서의 가장 처음에 있는 수집 룰은 Allow: / 이며 이것은 모든 문서에 대해 수집을 허용하는 것을 의미합니다. 아마도 웹 로봇은 처음 일치되는 룰에 의해 모든 문서를 수집할 것입니다. 따라서 수집룰을 입력할때는 하위경로에서부터 상위 경로 순서로 입력해야 합니다. 위 문서를 올바르게 수정하면 아래와 같습니다.


User-agent: ia_archiver
User-agent: Mozilla/4.0 (compatible; Empas/0.9)
User-agent: Googlebot
Disallow: /taxomony/
Disallow: /tagadelic/
Disallow: /tracker/
Disallow: /ktracker/
Allow: /node/     # 사실 이건 아~무 의미 없음...
Allow: /

비슷하게 아래 문서도 잘못되었습니다.

예5)

User-agent: *
Disallow: /

User-Agent:MSIECrawler
Disallow: /

User-Agent 필드 역시 먼저 매칭되는 것에 따르기 때문에 User-agent: * 에 해당하는 룰은 가장 아래쪽에 위치해야 합니다.

 잘된 robots.txt 의 예를 하나 든다면 http://slashdot.org/robots.txt 가 있습니다. 웹 로봇 별로 꼼꼼하게 잘 정리해서 정의해 놨더군요...

 robots.txt 가 강제 규격이 아니기 때문이겠지만 그래도 robots.txt 를 수집하다보면 잘못 정의된 사례가 굉장히 많습니다. robots.txt 를 크롤하면 메인 페이지가 크롤되는 경우도 상당히 많구요.(아마 없는 문서 요청 시 리다이렉트 처리가 되기 때문이라 생각됩니다만...) 어쨌든 어차피 피해입는 사람은 사이트 관리자 본인이므로 조금만 신경을 써서 관리한다면 좋겠다는 생각입니다.(사실 제가 이것 저것 예외 처리하기 힘들어요...ㅜㅡ)

 참고로 robots.txt 표준은 http://www.robotstxt.org/ 에서 확인하실 수 있습니다.
출처 : Tong - 엔케이님의 ASP통

:
Posted by 비개인오후
2009. 11. 13. 15:19

서버타임 표준시간으로 세팅 리눅스서버2009. 11. 13. 15:19

보통 crontab에 등록해놓고 쓴다.


[root@메롱]# crontab -e

vi화면이 뜬다. 추가해주면 된다.

20 0 * * * /usr/bin/rdate -s 203.248.240.103 && /sbin/clock -w


매일 0시 20분에 203.248.240.103(time.bora.net) 에서 표준시간을 받아서 설정하겠다는 소리겠지


---------------------------------------------------------------------------------------------
아놔..
20 0 * * * /usr/bin/rdate -s 203.248.240.103 && /sbin/clock -w
한줄만 적어두면 될 걸 설명해줄라니깐 겁나 길게 써야 되넹 ㅋㅋㅋ

:
Posted by 비개인오후
2009. 11. 11. 15:30

VSFTP 환경설정(vsftpd.conf) 리눅스서버2009. 11. 11. 15:30

넥스트라인 기술지원부 삼수(kiss@nextline.co.kr)

 

VSFTP 환경설정(vsftpd.conf)

 

VSFTP

리눅스에서 사용하는 FTP 서버용 소프트웨어는 proftp, vsftp가 주로 사용됩니다. Proftp에 비해서 속도와 보안, 성능이 뛰어나며 무엇보다 안정성을 보장할 수 있는 프로그램입니다.

 

설정파일경로 : /etc/vsftpd/vsftpd.conf 
 

 

① 기본설정

 

background=YES (기본값 = NO)

VsFTP 데몬을 background로 실행할 것인지 설정 합니다.

 

listen=YES (기본값 = NO)

VsFTP 데몬은 기본적으로 inetd 모드로 동작이 됩니다.

따라서 독립모드(standalone)로 데몬을 운영하실 거라면 이 옵션과 listen 옵션을 모두YES로 켜주셔야 됩니다. 반대로 VsFTP 데몬을 inetd 모드로 운영하시려면 이 옵션과listen 옵션을 비활성화 하시면 됩니다.일반적으로 FTP 데몬은 많은 접속이 있을 경우에standalone 모드로 운영하는것이 좋으며, 많은 접속이 없는 경우에는 inetd 모드로 운영하는것이 시스템 자원효율에 좋습니다. background 옵션과 같이 사용되며, 이 옵션은listen_port에서 들어오는 요청에 대해서 데몬이 요청을 받아드릴지에 대해 설정합니다.만약 데몬을 독립모드(standalone)로 운영하실 거라면 background 옵션과 같이 이 옵션도 함께 활성화 시켜야 됩니다.

 

listen_ipv6=NO (기본값 = NO)

listen 옵션과 동일하지만, IPv6에서 운영할 때 사용 합니다.

일반적으로 IPv6는 사용하지 않으므로 비활성화 하시면 됩니다.

 

listen_port=21

만약 vsftpd xinetd모드가 아닌 독립데몬 (standalone)으로 서비스하려면 위의 listen지시자를 YES로 설정하시고 listen_port 에 서비스할 포트번호(기본 21)를 지정하시면 됩니다.

 

listen_address=none (기본값 = none)

멀티 FTP 데몬을 사용할 때 요청을 받아드릴 IP를 설정합니다.

 

listen_address6=none (기본값 = none)

listen_address와 동일하며 IPv6에서 운영할 때 사용 합니다.

 

pasv_address=none (기본값 = none)

NAT를 사용하는 클라이언트의 공용 IP를 설정할 때 사용 합니다.

일반적으로 설정하지 않아도 상관 없습니다.

 

nopriv_user=ftpsecure (기본값 = nobody)

VsFTPd가 구동될 서버의 유저를 설정합니다.

 

max_clients=30 (기본값 = 0)

FTP 서버에 접속할 수 있는 클라이언트의 최대수를 제한하는 옵션 입니다. 기본값인 0으로 설정하면 제한을 두지 않습니다.

 

max_per_ip=3

이 설정은 동시 ftp 접속자수를 제한하는 설정입니다. 첫번째 max_client  ftp 접속을 최대 30명까지만 허용한다는 설정입니다. 그리고 max_per_ip 는 한 IP(호스트)에서 동시에 3번까지만 접속이 가능하다는 설정입니다. 이 또한 서비스거부공격(DoS)를 방어하기 위한 방법으로 활용될 수 있습니다.

 

local_max_rate=0 (기본값 = 0)

계정 사용자의 최대전송률을 지정합니다.

/다운로드의 속도를 제한할 때 사용하며, 단위는 bps 입니다.

 

trans_chunk_size=0

위의 세가지 설정은 ftp 서비스의 전송속도를 제한 하도록 하는 설정입니다. , 초당byte 수를 지정할 수 있으며 제한없이 허용하려면 0 으로 설정하시면 됩니다. 이 설정은vsftpd 가 독립데몬(standalone)모드로 서비스될 때에만 적용되는 것입니다.

 

use_localtime=YES (기본값 = NO)

서버의 FTP 데몬시간을 서버의 표준시간으로 고정할지 설정합니다.

만약 이 옵션을 비활성화 하게되면 표준시각(GMT)를 보여주므로, 한국의 경우 9시간의 오차가 발생합니다.

 

setproctitle_enable=YES (기본값 = NO)

프로토콜의 현재 상태를 출력해줄 것인지 설정합니다. 이 옵션을 활성화하면 ps 명령어를 사용했을 때 세션의 현재 상태도 보여줍니다. 또한 LTN에서 제공하는 ftpwho 스크립트를 사용할 때에도 이 옵션을 활성화 하셔야 됩니다.

 

user_config_dir=none (기본값 = none)

특정 사용자의 개별 설정 파일을 지정합니다.

이 옵션을 사용하면 /etc/vsftpd/vsftpd.conf의 지시문을 무시하고 사용할 수 있습니다.

 

② 접속설정

 

local_enable=YES

로컬 계정 사용자들의 접속을 허용할 것인가의 여부를 결정합니다. YES 로 설정하면 로컬계정사용자의 접속을 허용하는 것이며 NO로 설정하면 허용하지 않는 것입니다. 기본 설정은 YES로 되어있기 때문에 접속을 허용하게 됩니다. 만약 NO로 설정되어 있을 때 로컬 계정으로 접속을 시도하면 “530 This FTP server is anonymous only.”와 같은 에러메시지를 출력하면서 접속을 거부합니다.

 

pam_service_name=vsftpd

vsftpd에서 PAM설정파일명으로 사용할 파일명을 지정합니다. 이 설정이 적용되면 기본이vsftpd 이므로 /etc/pam.d/vsftpd 파일이 사용됩니다.

 

userlist_enable=YES (기본값 = NO)

명시된 사용자만 로그인을 허용할 때 사용하는 옵션입니다.

userlist_deny 옵션이 비활성화 된 상태에서만 작동합니다.

 

userlist_deny=YES (기본값 = YES)

명시된 사용자가 로그인을 할 수 없도록 제한하는 옵션 입니다.

userlist_enable 옵션이 비활성화 된 상태에서만 작동하며, 서로 반대되는 개념 입니다.

 

userlist_file=/etc/vsftpd.user_list (기본값 = /etc/vsftpd.user_list)

명시된 사용자를 읽어올 파일을 지정합니다.

 

text_userdb_names=NO (기본값 = NO)

디렉토리 목록의 사용자와 그룹 필드들에 있는 숫자 ID 들이 보이는 것이 기본값 입니다.

당신은 이 파라미터를 활성화 함으로써 글자 이름을 사용할 수도 있습니다. 그러나 이 항목은 성능상의 이유로 기본적으로 비활성화 되어 있습니다.

 

tcp_wrappers=YES

tcp_wrappers 적용 여부를 설정하는 것으로 사용할 것인가(YES) 사용하지 않을 것인가(NO)를 설정합니다. YES로 설정하시면 허용할 호스트는 /etc/hosts.allow 허용하지 않을 호스트는 /etc/hosts.deny에 설정합니다.

 

ssl_tlsv1=YES (기본값 = YES)

TLS를 사용할 것인지에 대해 설정합니다.

이 옵션은 TLS를 활성화하며, TLS가 가능한 클라이언트가 이용하는데 도움이 됩니다.

 

ssl_enable=NO (기본값 = NO)

SSL을 통한 보안접속을 지원할 것인지에 대해 설정합니다.

만약 OpenSSL에 대해서 컴파일 되어 있고, 이 옵션을 허용할 경우 vsftpd SSL을 통한 보안 접속을 지원합니다. 이 옵션은 제어 연결을 지원(로그인을 포함)하며, 또한 데이터 연결도 지원 합니다. 사용자는 SSL을 지원하는 클라이언트를 필요로 할 것이며, 반드시 필요한 경우에만 허용하는것이 좋습니다. 그러나 vsftpd OpenSSL 라이브러리의 보안과 관련한 게런티를 만들 수 없으며, 이 옵션을 활성화 합니다는것은 OpenSSL 라이브러리의 보안을 믿는다는 것을 전제로 합니다.

 

ssl_sslv2=NO (기본값 = NO)

SSL v2 프로토콜 연결을 허용할 것인지에 대해 설정합니다.

이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, TLS v1 연결들을 선호 합니다.

 

ssl_sslv3=NO (기본값 = NO)

SSL v3 프로토콜 연결을 허용할 것인지에 대해 설정합니다.

이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, TLS v1 연결들을 선호 합니다.

 

dsa_cert_file=none (기본값 = none)

SSL 인증서의 위치를 지정합니다. SSL의 암호화 접속을 사용하기 위해, DSA 인증서의 위치를 지정합니다.

 

ssl_ciphers=DES-CBC3-SHA (기본값 = DES-CBC3-SHA)

이 옵션은 vsftpd가 암호화 된 SSL 연결들에 대해 어떤 SSL 암호화 방식을 선택하는지에 따라 사용됩니다. 더 자세한 사항은 관련 암호 메뉴얼 페이지를 보십시요.

암호화를 알리지 않는 것은 원격에서 선택된 암호화 방식의 취약점을 공격하려고 불법적인 원격 공격을 막기 위한 유용한 보안 지침이 될 수 있습니다.

 

force_local_data_ssl=YES (기본값 = YES)

이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, 만약 이 옵션이 활성화 되어 있습니다. 모든 비익명 로그인은 데이터 연결 상태에서 데이터를 주고 받기 위해 보안 SSL연결을 사용하도록 강제적으로 설정됩니다.

 

force_local_logins_ssl=YES (기본값 = YES)

이 옵션은 ssl_enable이 활성화 되었을 때만 적용되며, 만약 이 옵션이 활성화 되어 있습니다. 모든 비익명 로그인은 비밀번호를 전달하기 위해 보안 SSL 연결을 사용하도록 강제적으로 설정됩니다.

 

③ 대기시간 설정

 

connect_timeout=60 (기본값 = 60/)

액티브 모드(Active Mode)를 사용하는 클라이언트의 접속 허용시간을 설정합니다. 클라이언트의 요청패킷(SYN Packet)을 받은뒤, 지정된 시간내에 접속이 안될경우 종료합니다.

 

accept_timeout=60 (기본값 = 60/)

패시브 모드(Passive Mode)를 사용하는 클라이언트의 접속 허용시간을 설정합니다. 클라이언트의 요청패킷(SYN Packet)을 받은뒤, 지정된 시간내에 접속이 안될경우 종료합니다.

 

data_connection_timeout=300 (기본값 = 300/Secs)

데이터 전송시 적용되는 타임아웃값을 설정합니다. 만약 ftp 연결시 큰 파일을 업로드 또는 다운로드 할 때에 전송도중 접속이 끊기는 상황이 발생한다면 이 설정을 주석처리하거나 또는 이 값을 현재 설정값 보다 크게 잡아주시고 재시도 해보십시요.

 

idle_session_timeout=300 (기본값 = 300/Secs)

ftp 연결에서 idle 타임에 대한 타임아웃값을 설정합니다. 예를 들어 이 값이 600으로 설정되어 있다면 ftp 접속후에 600(10)동안 아무런 작업도 없이 놀고 있다면 강제 로그아웃(timeout)시켜 버립니다.

 

④ 메시지 설정

 

banner_file=/etc/vsftpd/welcome.msg (기본값 = none)

사용자가 FTP 서버에 접속했을 때 보여줄 환영 메시지 파일을 설정합니다.

 

ftpd_banner=Welcome to blah FTP service.

ftp 서버로 접속할 때에 안내메시지등을 출력하려면 여기서 설정하시면 됩니다. 이 설정이 적용되면 ftp 접속을 하였을 때 "Welcome to blah FTP service"라는 안내문이 출력됩니다. 이 설정에서 한글을 사용할 수도 있습니다. 각 디렉토리별 안내문에 대한 설정은 다음 지시자의 설명을 보시기 바랍니다.

 

dirmessage_enable=YES

ftp 접속한 사용자가 특정 디렉토리로 이동하였을 때 개별 디렉토리의 메시지를 보여주도록 허용할 것인가(YES) 허용하지 않을 것인가(NO) 를 설정하는 것입니다. 밑에서 설명하고 있는 "message_file" 지시자에서 개별 디렉토리안내 파일로 사용할 파일명을 지정할 수 있습니다.

 

Message_file=.message

ftp 접속후에 특정 디렉토리로 이동할 때에 디렉토리 안내메시지 파일로 사용할 파일명을 지정한 것입니다. 이 설정은 바로 위에서 설명한 "dirmessage_enable"  YES로 설정되어 있을 때 적용됩니다.

 

⑤ 모드설정

 

port_enable=YES (기본값 = YES)

데이터 전송을 위해서 Active Mode를 사용할 것인지 설정합니다.

 

connect_from_port_20=YES

ftp 서비스는 기본적으로 21번 포트와 20번 포트를 사용합니다. ftp 접속과 명령어에 사용되는 포트는 21번이며 실제 데이터전송에 사용되는 기본포트는 20번입니다. 이때 20번 포트의 데이터전송 연결을 허용할 것인가(YES) 허용하지 않을 것인가(NO)를 설정하는 지시자 입니다.

 

ftp_data_port=20 (기본값 = 20)

데이터 전송 포트를 지정합니다.

connect_from_port_20 옵션이 활성화 되었을 때 사용되는 포트를 지정합니다.

 

pasv_enable=YES (기본값 = YES)

데이터 전송을 위해서 Passive mode를 사용할 것인지 설정합니다.

Active Mode로 접근할 수 없는 사용자들을 위해 활성화 하는 것 이 좋습니다.

 

pasv_promiscuous=NO (기본값 = NO)

동일한 IP주소에서 이루어지는 데이터 연결을 보장해주는 보안체크 기능을 사용할 것인지 설정합니다.

 

pasv_min_port=0

pasv_max_port=0 (기본값 = 0)

패시브 모드로 연결시 할당될 최대 및 최소 포트를 설정하는 옵션 입니다.

일반적으로 50000~60000 포트를 지정하는 것이 좋으며, 기본값인 0으로 설정하게 되면

well-known port를 제외한 무작위 포트를 이용하게 됩니다.

 

ascii_upload_enable=YES

ascii_download_enable=YES

기본적으로 ASCII 모드로 업로드/다운로드하는 것이 제한되어 있습니다. 이 설정으로ASCII모드로의 업로드/다운로드를 허용하도록 설정할 수 있습니다.

 

⑥ 권한설정

 

local_umask=022

로컬계정 사용자들의 umask 값을 설정하는 지시자입니다. 거의 모든 ftp 서버에서 기본umask 값은 022 입니다. 하지만 vsftp 에서의 umask 기본값은 077입니다. Umask 값이077 일 경우에 새로 생성되는 파일의 퍼미션은 600 이 되며 새로 생성되는 디렉토리의 퍼미션은 700 이 됩니다. 당연히 umask 값이 022 일 때보다는 보안이 훨씬 강화됩니다.여기서 "local_umask=022"의 주석을 제거하여 유효하게 설정하면 대부분의 FTP 서버에서 사용하는 umask 값을 022로 설정하게 됩니다. 만약 022 외에 다른 umask 값을 설정하고자 한다면 그 값을 설정해 주시면 됩니다.

 

file_open_mode=0644 (기본값 = 0666)

파일이 업로드 되었을 때의 퍼미션을 지정해주는 옵션 입니다.

이 옵션은 반드시 umask 옵션보다 아래에 있어야 됩니다.

 

dirlist_enable=YES (기본값 = YES)

접속한 디렉토리의 파일리스트를 보여줄 지 설정합니다.

 

force_dot_files=NO (기본값 = NO)

히든 파일/디렉토리를 보여줄 것인지 설정하는 옵션 입니다.

히든 파일/디렉토리는 dot(.) 으로 시작하는 것을 말합니다.

 

tilde_user_enable=NO (기본값 = NO)

이 옵션이 활성화되면, vsftpd ~chris/pics와 같이 사용자 계정 이름에 틸드 표시가 따라오는 경우의 경로명을 접근하도록 시도하고 해석할 것입니다.

vsftpd는 항상 ~  ~/somthing 을 해석합니다는 것을 주의하시기 바랍니다.

(여기서 ~ 는 기본적으로 로그인 했을 때의 디렉토리로 해석됩니다.)

~user 경로들은 _current_ chroot() 에서 /etc/passwd 파일을 찾을 수 있을 경우에만 해석 될 수 있을 것입니다.

 

hide_ids=NO (기본값 = NO)

디렉토리 목록에서 UID를 보여주지 않고, 모두 FTP로 표시할 것인지 설정합니다.

이 옵션을 활성화 하면 모든 파일의 소유권이 FTP로 표시되므로 보안에 도움이 될 수 있습니다.

 

write_enable=YES (기본값 = NO)

ftp 로 접속이 된 상태에서 사용할 수 있는 ftp 전용명령어에는 여러가지가 있습니다.이 설정은 ftp 전용명령어 중에 write 명령어를 허용할 것인가를 결정하는 것입니다. 허용하려면 YES, 허용하지 않으려면 NO 를 설정하시면 됩니다.

 

download_enable=YES (기본값 = YES)

다운로드에 대한 권한을 설정합니다.

 

chmod_enable=YES (기본값 = YES)

사용자가 퍼미션을 변경할 수 있도록 설정합니다.

 

use_sendfile=YES (기본값 = YES)

이 옵션은 당신의 플랫폼에서 sendfile() 시스템 호출을 사용하는 것과 관련된 이익을 테스트 할 때 사용되는 내부 설정입니다.

 

cmds_allowed=PASV,RETR,QUIT (기본값 = none)

사용자에게 허가할 명령어를 지정합니다.

 

deny_file={*.mp3,*.mov} (기본값 = none)

업로드를 거부할 파일명을 지정합니다.

 

hide_file={*.mp3,*.mov} (기본값 = none)

숨길 파일명을 지정합니다.

이 옵션을 사용하면 서버에 실제로 데이터는 존재하지만, FTP 사용자에게는 보이지 않도록

설정하는 기능입니다. 악의적인 사용자에게 간단한 fake를 걸 수 있습니다.

 

async_abor_enable=YES (기본값 = NO)

async ABOR 명령어를 사용할 수 있도록 설정합니다.

일부 FTP 클라이언트에서 파일전송을 취소했을 경우, 취소되지 않은 상태로 있는 경우가

생길 수 있는데 그것을 방지하기 위해 사용할 수 있습니다.

그러나 보안상 좋지 않기 때문에, 비활성화 하시는것이 좋습니다.

 

ls_recurse_enable=YES

ftp 접속에서는 ls 사용시 –R 옵션을 허요하지 않는 것이 기본 설정입니다. –R 옵션이란 서브디렉토리내의 파일들의 리스팅(목록)까지 모두 확인할 수 있도록 하는 것입니다. 서버부하등의 이유로 ftp에서 기본적으로는 지원하지 않지만 vsftpd 에서는 이 옵션을 사용하여 허용하도록 설정할 수 있습니다. , 이 지시자의 값이 YES로 되어 있다면 ftp접속후에 디렉토리 목록 확인시에 서브디렉토리들의 목록들까지 한번에 볼 수 있는 –R옵션을 허용하게 됩니다.

 

⑦ 보안설정

 

chroot_list_enable=YES (기본값 = NO)

명시된 사용자가 자신의 홈상위 디렉토리를 접근할 수 없도록 설정합니다.

이 옵션은 chroot_local_user 옵션이 비활성화되어 있어야 사용할 수 있습니다. 전체 적용이 아니라 일부 사용자만 제한할때 편하지만, 개별 적용은 보안상 좋지 않습니다.

 

chroot_list_file=/etc/vsftpd.chroot_list

전체 사용자가 아닌 특정 사용자들에 대하여 자신의 홈디렉토리를 루트디렉토리로 인식하도록 하는 기능으로서 이 기능은 사용자의 홈디렉토리의 상위디렉토리로 벗어나지 못하도록 하는 설정입니다.

먼저 "chroot_list_enable=YES" 로 설정하시고 /etc/vsftpd.chroot_list 파일에는 이 기능을 적용할 사용자계정명을 등록해 두시면 됩니다. , /etc/vsftpd.chroot_list 파일에 등록된 사용자들에 한하여 chroot()기능이 적용되어 자기 자신의 홈디렉토리 상위 디렉토리의 이동이 제한됩니다. 이 파일에 등록할 때에는 한행에 한 사용자 계정씩만 등록하셔야 합니다. 만약 전체 사용자를 대상으로 chroot()기능을 적용하고자 한다면 바로 밑에서 설정하고 있는 "chroot_local_user=YES"로 설정하시기 바랍니다.

 

passwd_chroot_enable=NO (기본값 = NO)

SSH로 접속했을 때 자신의 홈 상위 디렉토리를 접근할 수 없도록 설정합니다.

chroot_local_user 옵션이 활성화되었고, OpenSSH에 패치를 했을경우, SSH 또한 자신의

홈상위 디렉토리를 접근할 수 없도록 설정할 수 있으며, /etc/passwd 파일의 홈 디렉토리

필드의 /home/사용자/./와 같이 "/./"를 붙여 사용자를 홈디렉토리에 제한하게 합니다.

 

chroot_local_user=YES

특정 사용자가 아닌 전체 사용자를 대상으로 chroot()기능을 적용하여 자기 자신의 홈디렉토링 상위 디렉토리로 이동하지 못하도록 하려면 이 설정을 YES로 설정하십시요. 반드시 앞의 설정과 비교해 보시기 바랍니다.

 

만약 위 의 두 설정이 모두 설정되었다면

, "chroot_list_enable=YES"와 "chroot_local_user=YES" 설정이 모두 YES로 되어 있다면 /etc/vsftpd.chroot_list 에 등록된 사용자들만 chroot()적용을 받지 않게 됩니다., 이 두 설정이 모두 YES 로 되어 있다면 /etc/vsftpd.chroot_list 에 등록된 사용자들을 제외한 나머지 사용자들만 chroot()가 적용되어 상위 디렉토리로의 이동이 안된다는 의미입니다.

 

secure_chroot_dir=/usr/share/empty (기본값 = /usr/share/empty)

secure chroot()에 사용될 디렉토리를 지정합니다.

이 옵션에서 지정된 디렉토리는 비어있어야되며, ftp 사용자에 대해 쓰기 권한이 없어야 됩니다.

 

⑧ 로그설정

 

xferlog_enable=YES

ftp 접속후에 파일 업로드와 다운로드에 대한 로그를 남길것인가(YES) 남가지 않을 것인가(NO)를 설정하는 지시자입니다. 이 지시자의 설정은 디스크의 용량을 고려하여 결정해야 합니다. , 파일 업로드/다운로드 로그는 굉장히 많은 용량을 필요로 하고 또한 시스템 부하율도 함께 고려하여 신중히 결정해야 합니다. 물론 로그를 남기는 것이 로그분석과 개별 사용자의 파일 업로드/다운로드 상황을 알 수 있는 방법이기는 하지만 시스템 상황을 고려해야 하는 의미입니다.

 

vsftpd_log_file=/var/log/vsftpd.log

(기본값 = /var/log/vsftpd.log)

VsFTP의 기본 로그 파일을 지정합니다.

이 옵션은 xferlog_enable 옵션과 xferlog_std_format 옵션이 비활성화일 때 작동하며, dual_log_enable 옵션이나 syslog_enable 옵션이 활성화될때 사용됩니다.

 

dual_log_enable=NO (기본값 = NO)

2중 로그를 기록할 것인지에 대해 설정합니다.

만약 이 옵션을 활성화하면, /var/log/xferlog /var/log/vsftpd.log에 로그가 기록됩니다.

 

syslog_enable=NO (기본값 = NO)

syslogd 데몬을 이용해서 로그를 기록할 것인지 설정합니다.

 

xferlog_file=/var/log/vsftpd.log

ftp 로그파일의 위치를 결정하는 지시자입니다.

Vsftp는 기본적으로 /var/log/vsftpd.log 파일을 기본 로그파일로 사용합니다. 만약 로그파일 위치나 파일명을 변경하시려면 이 지시자에서 설정 변경하시면 됩니다.

 

xferlog_std_format=YES

로그파일에 남길 로그파일의 포맷을 기본포맷으로 남길 것인가(YES) 아닌가(NO)를 설정하는 지시자 입니다. 리눅스에서 ftp 기본 로그파일을 /var/log/xferlog을 사용합니다.이 지시자는 이 파일의 표준포맷으로 로그를 남기도록 하는 설정입니다. 이 파일의 포맷보다는 vsftpd 로그포맷을 사용하시는 것이 보다 자세한 로그를 남길 수 있습니다. ,디렉토리생성로그나 또는 로그인 로그 같은 상세로그까지 기록해 줍니다.

 

 

log_ftp_protocol=YES (기본값 = NO)

FTP Protocol의 모든 내용을 기록할지 설정합니다.

이 옵션을 활성화하면 FTP 명령어와 반응이 모두 로깅되므로 디버그에 유용하게 쓰입니다.

 

no_log_lock=NO (기본값 = NO)

로그 파일을 잠글것인지에 대해서 설정합니다.

이 옵션은 vsftpd가 로그 파일을 기록할 때, 파일을 잠그는 것을 막는 옵션 입니다.

보통은 활성화 하지 않아도 되며, 솔라리스/베리타스 파일 시스템 조합에서 때때로

로그파일을 잠그려는 시도를 하는 운영체제 시스템 버그를 피하기 위해 존재 합니다.

 

session_support=YES

이 설정은 YES로 설정되어 유효하게 되었을 때에는 바이너리파일인 wtmp ftp 접속관련 기록을 남기게 됩니다.

Last 라는 명령어는 각 사용자들의 접속기록을 wtmp 파일에서 가져와 확인하는 명령어이므로 이 설정이 적용되면 last 명령어로 ftp 접속기록을 확인 할 수 있게 됩니다.

 

⑨ 가상 사용자 설정

 

guest_enable=NO

가상유저 모드로 운영할 것인지에 대해 설정합니다. (기본값 = NO)

이 옵션을 활성화하면 모든 비익명 사용자는 가상 사용자로 접속이 됩니다.

 

guest_username=ftp

가상유저들의 실제 계정을 지정합니다. (기본값 = ftp)

 

virtual_use_local_privs=NO (기본값 = NO)

가상유저들의 권한을 실제 계정의 권한처럼 허용할 것인지를 설정합니다.

이 옵션이 활성화되어있지 않으면 가상유저는 FTP에 접속해서 파일을 생성하지 못합니다.

또한 가상유저는 기본적으로 anonymous의 권한을 갖고 있습니다.

 

user_sub_token=$USER (기본값 = none)

가상유저들을 지칭할 가상의 변수를 지정합니다.

 

local_root=/home/virtual/$USER (기본값 = none)

가상유저들이 로그인 후 이동될 디렉토리를 지정합니다.

 

⑩ 익명사용자 기본 설정

 

anonymous_enable=NO

익명(anonymous) 접속을 허용할 것인가(YES) 허용하지 않을 것인가(NO)를 결정하는 지시자입니다. 기본값은 YES로 되어있으며 익명계정 접속을 허용하지 않으려면 NO 로 설정하시기 바랍니다.

 

anon_max_rate=0 (기본값 = 0)

익명 사용자의 다운로드 최대전송률을 지정합니다.

다운로드 속도를 제한할때 사용하며, 단위는 bps 입니다.

 

allow_anon_ssl=NO (기본값 = NO)

익명사용자의 SSL을 통한 보안접속을 지원할 것인지에 대해 설정합니다.

이 옵션은 ssl_enable이 활성화 되었을 때만 적용됩니다.

 

deny_email_enable=YES (기본값 = NO)

로그인 거부 리스트 사용에 대한 설정을 합니다.

/etc/vsftpd.banned_emails 에 설정된 주소로 로그인을 거부할 수 있습니다.

만약 anonymous@ 라고 설정해두면, anonymous@를 사용하는 사용자는 접속할 수 없게됩니다.

 

banned_email_file=/etc/vsftpd.banned_emails

(기본값 = /etc/vsftpd.banned_emails)

로그인 거부 파일을 지정합니다.

deny_email_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.

 

secure_email_list_enable=NO (기본값 = NO)

명시된 이메일 주소로만 접속을 허용할 지 설정합니다.

 

email_password_file=/etc/vsftpd.email_passwords

(기본값 = /etc/vsftpd.email_passwords)

접속을 허용할 이메일 주소 파일을 지정합니다.

secure_email_list_enable 옵션을 활성화했을 경우에 리스트를 읽어올 파일을 지정합니다.

 

ftp_username=ftp (기본값 = ftp)

익명 사용자의 접속에 사용될 계정명을 지정합니다.

 

no_anon_password=NO (기본값 = NO)

익명 사용자가 접속할 때 패스워드를 묻지않고 접속시킬 것인지 설정합니다.

이 옵션을 활성화하면 접속시 패스워드를 묻지 않습니다.

 

one_process_model=NO (기본값 = NO)

클라이언트 접속마다 하나의 프로세스가 작동되도록 할 것인지 설정합니다.

이 옵션을 활성화하면 접속하는 수만큼 프로세스가 작동되므로 효율이 좋습니다.

 

anon_root=/var/ftp/pub (기본값 = none)

익명 사용자의 기본 디렉토리를 지정합니다.

일반적으로 익명 사용자의 접근을 허용하면 ftp_username에 지정된 사용자의 홈 디렉토리가 기본적으로 설정됩니다. 그렇지만 만약 변경할 필요가 있을 경우에 이 옵션을 사용하면 됩니다.

 

⑪ 익명사용자 권한 설정

 

anon_upload_enable=YES

익명(anonymous) 계정 사용자에게 파일 업로드를 허용할 것인가(YES) 허용하지 않을 것인가(NO) 의 여부를 설정하는 지시자입니다. 기본값은 허용하지 않는 NO 입니다. 가능한 익명 계정으로 접속한 사용자에게는 업로드 권한을 허용하지 않는 것이 보안에 훨씬 좋습니다. 따라서 가능한 NO로 설정하시기 바랍니다.

 

anon_mkdir_write_enable=YES

익명(anonymous) 계정 사용자에게 디렉토리 생성권한을 허용할 것인가(YES) 허용하지 않을 것인가(NO)의 여부를 설정하는 지시자 입니다. 기본값은 허용하지 않는 NO 입니다.가능한 익명계정으로 접속한 사용자에게는 디렉토리 생성권한을 허용하지 않는 것이 보안에 훨씬 좋습니다. 따라서 가능한 NO로 설정하시기 바랍니다.

 

anon_world_readable_only=YES (기본값 = YES)

익명 사용자들의 다운로드에 대한 설정을 합니다.

익명 사용자들이 읽기 가능한 파일을 다운로드 할 수 있게 설정합니다.

 

anon_other_write_enable=NO (기본값 = NO)

익명 사용자의 파일 삭제,변경에 대한 설정을 합니다.

파일 삭제 및 파일명 변경등과 같은 기능을 사용할 수 있게 합니다.

 

chown_uploads=YES (기본값 = NO)

익명 사용자의 소유권 변경에 대한 설정을 합니다.

익명으로 업로드된 파일을 chown_username 옵션으로 명시된 사용자의 소유권으로 변경되도록 할 수 있습니다.

 

anon_umask=022 (기본값 = 077)

익명 사용자의 파일생성 umask 값을 지정 합니다.

umask에 대한 설명은 local_mask의 설명을 참조하시기 바랍니다.

 

chown_username=whoever (기본값 = root)

익명 사용자의 소유권 변경이 가능한 계정명을 설정합니다.

 

출처 : Tong - bassdot님의 리눅스통

:
Posted by 비개인오후
2009. 11. 11. 15:29

Sendmail 메일서버 구축하기 리눅스서버2009. 11. 11. 15:29

[리눅스 물결 4호]Sendmail 메일서버 구축하기

▒ 강좌에 앞서..


본 문서자료는 본인 최광민에 의해 작성된것이며 자유롭게 수정 및 배포가 가능하나 상업적용도로 사용할수 없습니다. 또한 수정 및 배포시는 원작성자(본인)의 이름과 자료의 출처를 반드시 명시하여야 하며 위사항들의 위반으로 인해 발생되는 모든 법적책임은 배포자에게 있음을 알려 드립니다.

본 강좌는 커널 2.6 기반의 코어리눅스 배포판 천마 RPM 패키지를 기준으로 하였으며 아울러 본자료는 초급 리눅서들을 대상으로한 자료임으로 중급자 이상의 리눅서 혹은 구루(Guru)들의 태클은 사양하겠습니다. 다만 강좌에 보탬이 되는 리플이나 댓글등은 환영합니다.

수정요청 및 문의메일 : xfeel@xfeelis.pe.kr


2004. 11. 09. - Linuxer광민 -



▷ Sendmail 이란?


메일서버의 구성을 놓고 얘기하자면 센드메일 서버만으로 이루어 지는것이 아니다.

정확히 말해 센드메일서버는 보내는 메일서버 즉 메일을 받기위함이 아닌 보내기위한 서버 SMTP(Simple Mail Transfer Protocol) 서버를 얘기 하는것이다.

메일서버에 대한 이해가 잡혀있지 않는 상태에서는 센드메일 서버를 논하기가 어렵다.

일반적인 메일서버의 구성을 보자면 메일을 메일을 보내기위한 SMTP 서버와 반대로 메일을 받기위해 존재하는 POP3서버나 IMAP 서버로 나뉜다.

이중 센드메일은 SMTP 서버에 속하며 받는 메일서버의 경우 위에서 언급한대로 따로 구성된다.

물론 클라이언트(사용자) 입장에서 보면 이들은 하나로 뭉처진 동일한 시스템으로 인식될수 있다.


예를 들어 인터넷이 보급되면서 이제는 너무도 일반화된 웹메일 서비스(다음메일 혹은 핫메일등) 또한 이 메일서버의 구성을 기본으로 웹상에서 메일의 송수신을 제어할수 있도록 PHP나 ASP등의 서버기반 프로그램 언어를 통해 이루어지는 서비스이다.

웹 메일의 관점에서 보자면 사용자들은 별도의 설정없이 메일의 보내기와 받기 서비스를 동시에 마치 하나의 시스템 처럼  생각하며 이용할수 있지만 실제의 구성은 앞에서 언급한대로 각각의 나누어진 서비스 들이다.


자 이제부터 센드메일 관련된 파일들을 알아보고 하나하나 세팅해나가 보자.


▶  센드메일 서버 주요 설정파일과 관련 파일 및 디렉토리의 쓰임세
 
/var/spool/mqueue                ------------------ ①
/var/spool/mail                      ------------------ ②
/etc/mail/access                   ------------------ ③
/etc/aliases                          ------------------ ④
/etc/mail/local-host-names    ------------------ ⑤

/etc/mail/sendmail.mc            ------------------ ⑥
/etc/mail/sendmail.cf             ------------------ ⑦
/etc/mail/virtusertable            ------------------ ⑧

 
 
 mqueue 는 사용자가 메일을 보낼때 사용하는 SMTP 서버에서 메일을 발송하기전 임시적으로 사용자의 메일을 보관하는 곳이다.
 
 mail은 다른사용자에 의해 전송된 메일이 내 내 SMTP 서버에 임시적으로 저장되는곳이며 POP3 서버에 의해 메일이 전달될때까지 보관하게 된다. 즉 어떻게 보면 SMTP서버는 우체통과 우체부의 역활을 모두 수행하면서 한편으로는 POP3라는 메일 전달자가 메일을 가져가기 전까지의 우편함의 역활도 수행하게 되는것이다.
 
 access 파일은 SMTP 서버의 이용을 제한하는 설정파일로서 다음과 같은 설정형식을 보인다.
 
# Check the /usr/share/doc/sendmail/README.cf file for a description
# of the format of this file. (search for access_db in that file)
# The /usr/share/doc/sendmail/README.cf is part of the sendmail-doc
# package.
#
# by default we allow relaying from localhost...

localhost.localdomain           RELAY
localhost                             RELAY
127.0.0.1                              RELAY
mail.xfeelis.pe.kr                  RELAY
xfeelis.pe.kr                        RELAY
xfeel@xfeelis.pe.kr               RELAY
211.188.120.198                    RELAY
211.188.120.0                       RELAY
 
spam.pe.kr                         REJECT

admin@spam.pe.kr              REJECT
spamer@spam.pe.kr            DISCARD
xfeel@spam.pe.kr                OK


- 보기에서와 같이 RELAY 설정한 부분들은 메일의 수발신을 허용하는 설정이다. 다만 access 파일에서의 RELAY 설정은 우선순위를 정하자면 2순위로 생각해야 한다.


그 이유를 설명하자면 뒤에서 다시 언급할 부분인 sendmail.mc 파일과 sendmail.cf 파일의 설정 내역에 따라 외부 네트워크에서의 접근 즉 내부가 아닌 외부에서 smtp를 이용하고자 자신의 메일계정이나 IP를 RELAY 해두었다고 해도 인증 및 제한에 걸려 접근거부 처리가 되는 경우가 있다.


그 이유는 레드헷 계열 7.1 이상의 배포 버전에 설치된 센드메일의 경우 기본적인 설정이 localhost 127.0.0.1 즉 로컬 네트워크나 로컬서버를 통한 메일의 발신을 제외하고 모두 거부하도록 정하고 있다.

이유는 샌드메일서버가 외부 스패머에 의해 스팸메일이 뿌려지는 경유지가 되는것을 막고자 하는 스팸 거부/보안정책 때문이다.


이 제한을 풀어주기 위해서는 다음과 같이 sendmail.mc 파일의 'DAEMON_OPTIONS' 부분을 수정하거나 해당 지시자 자체를 삭제하여야 한다.


[root@xfeelis /]# vi /etc/mail/sendmail.mc

 

...

 

DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')

 

...


센드메일의 설치 버전에 따라 약간의 기본 설정값이 다를수 있으나 레드헷 배포판에 포함되어 있는 샌드메일의 경우 위지시자 자체를 삭제하거나 Addr 부분의 IP를 0.0.0.0 으로 수정해주면 된다. 단 절대 #처리는 하지말라. 서버관리자 그룹 슈퍼유저코리아 센드메일 관련 문서를 보면 주석 #처리시 오류가 날수 있음을 알리고 삭제나 변경을 권장하고 있다.


이유는 sendmail.mc 파일의 경우 주석구문 앞에 dnl을 같이 표기하도록 하고 있지만 위의 옵션의 경우 기본값이 활성화인 이유로 행의 첫부분에 dnl 처리가 되지 않아있다. 그렇기에 해당 사항을 잘 모르는 관리자의 경우 그냥 주석처리만 해버리고 설정오류를 찾지못해 애를 먹는 경우가 있다.


이제 본 강좌에서 다루고 있는 Kore 리눅스 배포판에 설치된 센드메일의 sendmail.mc 파일의경우를 보자. 다음과 같은 기본값을 가지고 있을것이다.


DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl


이미 기본 설정값이 Addr 부분을 변경해주고 있음으로 당연히 뒷부분의 dnl 부분만 삭제해주면 되는것이다. 역시 릴리즈 버전인 국내 배포판이 좋기는 좋다. 알아서 이런 부분들을 염두해두어 수정해 주고있으니... >_<


자 이제 다시 access 파일의 설정으로 돌아가보자 자세한 sendmail.mc 파일의 설정에 관해서는 뒤에서 다시 다룰것이니 조급해 하지말자 ㅡㅡa


RELAY 설정에 해당하는 값은 위에서 보는바와 같이 해당 도메인, 해당 이메일, 해당 IP, 해당 네트워크 등으로 허용할수 있다. 위의 설정을 참조하여 자신만의 릴레이 설정을 해보도록 하자.


다음은 REJECT 설정이다. REJECT 설정은 RELAY 설정과 반대로 수/발신 거부 설정이다.

이역시 해당 도메인, 해당 이메일, 해당 IP, 해당 네트워크등으로 나누어 설정할수 있다.


다음은 DISCARD 설정이다. 이는 스팸에일을 받되 받은후 POP3 서버가 메일을 가져가지 않도록 바로 폐기해 버리며 메일을 발신한 스패머에게는 폐기통보를 하지않는다 즉 스패머는 메일이 정상적으로 발신된줄 알것이다.. 바보처럼... ㅡ_ㅡ;


다음 설정은 OK 값이다. OK는 특정 도메인 또는 특정 IP나 네트워크 그룹이 REJECT 처리 되어있다고 하더라고 지정한 이메일주소나 IP등에 관계된 메일은 예외적으로 허용처리를 한다는 뜻이다.


예를 들면 이런경우가 있다. 만약 필자가 악명높은 스패머라고 치자. ㅡㅡ;;

필자는 관련 스패머 그룹에서 관련 스팸기법등을 공유할것이다. 어떤 새로운 스패머가 필자의 스팸기법에 관련한 메일링 리스트에 가입하여 필자의 이메일을 받기위해서는 스패머 그룹의 도메인 자체는 거부되어 있겠지만 필자의 이메일 만은 예외로 처리해야 할것이다.

이럴때 쓰는것이 OK 설정 값이다.

물론 OK 설정값을 다른 용도로 활용할수도 있지만 통상적으로 예외처리에 관련된 설정을 주고자 할때 쓰이게 되는것이다.


 aliases 파일은 말그대로 별칭 설정파일이다. 즉 root 에게로 온 메일을 다른 사용자 계정으로 돌리고 싶다던가 할때 쓰는 것이다.

이 기법을 잘 이용하면 소규모의 메일링 리스트도 운용할수 있다.

자 그 기법을 한번 둘러보자.


[root@xfeelis /]# vi /etc/aliases

 

...

 

# Basic system aliases -- these MUST be present.
mailer-daemon:  postmaster
postmaster:       root

root:                 xfeel

...


위 설정을 살펴 보자. 위 설정은 mailer-daemon 이라는 계정 즉 sendmail 데몬의 제어를 위해 만들어진 mailer-daemon 계정으로 오는 관련 로그메일을 최종적으로 xfeel 계정 사용자에게 보내주고 있는것이다.


즉 mailer-daemon 은 postmaster 로 별칭 설정 되었으며 다시 postmaster 는 root 로 또 다시 root 는 xfeel 사용자에게 별칭 설정 되어진것이다.


기본적인 설정값에 의한다면  root: xfeel 의 설정은 없기 때문에 sendmail 에 관련된 로그 메일은 root 계정으로 보내어 지겠지만 필자는 이를 다시 xfeel 계정으로 돌려주고 있는것이다.


뭐 굳이 이렇게 까지 설정할 필요가 있느냐고 반문하는 독자가 있다면 뭐라 할말은 없지만 보안적인 요소를 위해 필자는 이렇게 조치하고 있다.


메일을 확인하기 위해서라면 서버에 직접 원격접속 혹은 콘솔상에서 확인하지 않는이상 대부분의 사용자가 Outlook Express 등을 이용할것이다.


만약 root로 보내어진 메일을 Outlook Express등의 메일 확인 프로그램에서 보고자 한다면 해당 프로그램에 root 계정의 패스워드를 사용해야 할것이다.


일반적으로 root 패스워드의 경우 사전상의 단어나 연속적인 숫자등으로 이루어진 패스워드를 사용하지 않는것이 원칙이기에 매우 길고 복잡하게 설정되는것이 일반적이다.


때문에 대부분의 사용자의 경우 계정과 패스워드를 아웃룩에 저장하여 바로 사용하는 경우가 많다. 그럼 root 패스워드를 Outlook Express 따위의 프로그램에 저장하여 사용할것인가?


만약 이런 발상을 하고있는 리눅서가 있다면 당장에 버려라...


보안에 매우 취약하다.


Outlook Express 프로그램은 MS 에서도 인정한 보안 취약점을 가지고 있는 매우 귀여운 놈이다.. ㅡ_ㅡ


만약 크래커가 독자들이 사용하는 윈도우PC를 크래킹 하여 Outlook Express 에 저장된 root 계정의 패스워드를 습득한다면?


혹은 독자들이 사용하는 그밖에 메일확인 프로그램을 크랙킹하여 root 패스워드를 습득한다면?


생각하기 싫다.. 더설명할 이유가 없을것이라고 보며 다음으로 넘어가자 ㅡㅡa



자 이제 소규모 메일링 리스트 운용에 대해서 다뤄 보자.


독자들이 운영하는 리눅스 서버에 다음과 같은 계정들이 생성되어 있다고 가정해 보자.


[root@xfeelis /]# vi /etc/passwd

 

root

admin

adminuser1

adminuser2

adminuser3

user1

user2

user3


만약 메일을 보내고자 하는사람이 support@xfeelis.pe.kr 에 메일을 보낼때 각각 admin, amdinuser1,2,3 계정에 모두 메일이 가도록 설정하고 싶다면 어떻게 해야 할것인가?


물론 보는것과 같이 support 란 계정은 따로 생성되어 있지 않은 상황이다. (뭐 생성되어 있다고 해도 결과에는 차이가 없으나.. 일단 그렇다고 가정하자)


별칭기능을 활용한 소규모 메일링 리스트 기법이 이것이다.


[root@xfeelis /]# vi /etc/aliases

 

...

 

# Person who should get root's mail

support:              admin,adminuser1,adminuser2,adminuser3

 

...


어떤가 대단하지 않은가? 이렇게 간단한 설정으로 메일 그룹을 지정하고 운용할수 있다니..

잘활용하면 여러모로 쓰임세가 많다. 연구해 보자.


 local-host-names 파일은 메일의 최종 수신지를 지정하는 곳이다. 즉 쉽게 얘기하자면 이런경우가 있다. 독자들의 샌드메일 서버를 거처가는 메일중 최종 수신지가 독자들의 서버인 메일이 서버에 저장되기 위해서 독자들의 도메인 목록을 등록하는것이다. 만약 독자들이 웹호스팅 을 위한 서버를 운영하고 있다고 가정하면 독자 자신의 도메인 뿐만 아니라 고객의 도메인까지 등록해두어야 메일이 정상적으로 전달되는 것이다.


설정은 다음과 같다.


[root@xfeelis /]# vi /etc/mail/local-host-names

 

# local-host-names - include all aliases for your machine here.
xfeelis.pe.kr
xfeelis.co.kr

xfeelis.or.kr

userdomain.pe.kr

userdomain.co.kr


그냥 위와 같이 도메인만 설정해 주면 된다.


 sendmail.mc 파일은 샌드메일 서버의 주요 설정파일중 하나이며 /etc/mail/sendmail.mc 파일을 바탕으로 M4 유틸을 이용하여 /etc/mail/sendmail.cf 파일을 생성하게 된다.


sedmail.mc 파일중 가장 중요한 지시자는 역시 앞부분에서 언급한 외부네트워크에 대한 smtp 이용 제한을 풀어주는 부분과 지금부터 다뤄가고자 하는 SMTP 인증에 관한 부분이다.


앞에 access 부분에서 잠시 거론한대로 외부네트워크에 대한 smtp 이용을 풀어주었다면 샌드메일 서버가 가지고 있는 취약점을 이용하여 스팸메일의 경유지 혹은 스팸서버가 될수 있는 가능성이 존재하는것이다.


이부분을 그냥 넘겨버린다면 심각한 상황이 초래된다. 스팸메일에 의해 샌드메일서버는 과부하가 걸려 시스템의 자원을 모두 고갈시킬것이며 그것마저 다된다면 메일서버는 다운되고 말것이다.


이런것을 막기위한 방법중 하나가 바로 앞에서 언급한 access 파일 운영정책과 지금부터 거론할 SMTP 인증에 대한 부분이다.


사용자가 smtp 서버를 이용하여 외부 네트워크로 메일을 발신하고자 할때 인증절차를 거처서 이용하도록 하는것이다.


실제로 대부분의 메일 호스팅이나 웹호스팅 제공하는 업체에서 이 SMTP 인증 기법을 사용하며 해당 사용자들에게 Outlook Express 등의 메일 송수신 프로그램 옵션에서 SMTP 인증부분을 체크 할것을 공지하고 있다.


그럼 SMTP 인증부분을 활성화 해보자.


[root@xfeelis /]# vi /etc/mail/sendmail.mc

 

...

 

define(`confAUTH_OPTIONS', `A')dnl

...

define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl <- dnl 부분 삭제

...

 

...


위 설정에서 define(`confAUTH_OPTIONS', `A') 부분은 dnl 처리를 해줘야 하며 define(`confAUTH_MECHANISMS' 부분은 맨뒤에 dnl을 삭제해야 SMTP 인증기능이 활성화 된다.


위와 같이 설정해 주었다면 이제 다음과 같이 m4 유틸명령어를 사용하여 sendmail.cf 파일을 생성해 보자.


[root@xfeelis /]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf


 sendmail.cf은 전자에 sendmail.mc 파일을 통하여 생성된 세부 설정파일 정도로 이해하면 될것이다.


sendmail.cf 파일에서 눈여겨 봐야할 지시자들은 다음과 같다.


FW 지시자 : FW 지시자는 메일의 최종수신지 설정파일에 경로를 지정하는 곳으로서 sendmail 8.9.x 버전까지는 sendmail.cw 의 값으로 되어있지만 8.10.x 이후 버전부터는 local-host-names 파일로 설정되어 있다. 독자들이 사용하는 배포판에 포함된 센드메일의 버전을 확인후 local-host-names 로 변경해주자.


# file containing names of hosts for which we receive email
Fw/etc/mail/local-host-names


MaxMessageSize : 첨부파일을 포함한 메일 메시지 최대크기 제한 설정 부분


# maximum message size
O MaxMessageSize=20000000


메일의 크기가 20M를 넘는다면 메일은 발신되지 못한다.


MinQueueAge : 임시보관 최소 시간 설정 부분

뒤에서 언급하게 될 Timeout 설정값 이전에 적용될 우선적인 옵션으로 발송에 실패한 메일이 다시 재발송을 시도하기까지의 대기 시간을 설정 한다.. 기본값은 30분이며 기본적으로 서버부하를 줄이기 위해 # 주석처리 되어있지만 필요로 한다면 사용하여도 무방하다.


# minimum time in queue before retry
O MinQueueAge=30m


LogLevel : sendmail 이 가동되면서 발생되는 로그의 기록에 관련한 레벨을 설정

# log level
O LogLevel=9


각종 TimeOut 값 : 센드메일 서버의 각종 Timeout 값을 설정.


# timeouts (many of these)
#O Timeout.initial=5m
O Timeout.connect=1m

- 사용자가 샌드메일 서버에 접속하여 작업하는 최대시간을 설정것으로 기본값은 1분이다.
#O Timeout.aconnect=0s
#O Timeout.iconnect=5m
#O Timeout.helo=5m
#O Timeout.mail=10m
#O Timeout.rcpt=1h
#O Timeout.datainit=5m
#O Timeout.datablock=1h
#O Timeout.datafinal=1h
#O Timeout.rset=5m
#O Timeout.quit=2m
#O Timeout.misc=2m
#O Timeout.command=1h
O Timeout.ident=0
#O Timeout.fileopen=60s
#O Timeout.control=2m
O Timeout.queuereturn=5d
- 특정한 사유로 인해 메일이 전달되지 못하고 mqueue 에보관되고 있을시 보관 기간을 지정하는것으로 기본값은 5일이다. 이기간을 넘길경우 메일은 자동적으로 최초 발신지로 되돌려져 반송처리가 된다.

#O Timeout.queuereturn.normal=5d
#O Timeout.queuereturn.urgent=2d
#O Timeout.queuereturn.non-urgent=7d
#O Timeout.queuereturn.dsn=5d
O Timeout.queuewarn=4h
- 역시 특정한 사유로 인해 메일이 전달되지 못할시 최초 발신자에게 메일이 전달되지 못하고 있음을 경고하는 경고메일이 발송 되기까지의 대기 시간을 지정하며 기본값은 4시간이다.

#O Timeout.queuewarn.normal=4h
#O Timeout.queuewarn.urgent=1h
#O Timeout.queuewarn.non-urgent=12h
#O Timeout.queuewarn.dsn=4h
#O Timeout.hoststatus=30m
#O Timeout.resolver.retrans=5s
#O Timeout.resolver.retrans.first=5s
#O Timeout.resolver.retrans.normal=5s
#O Timeout.resolver.retry=4
#O Timeout.resolver.retry.first=4
#O Timeout.resolver.retry.normal=4
#O Timeout.lhlo=2m
#O Timeout.auth=10m
#O Timeout.starttls=1h


기타 지시자들은 필자또한 사용하지 않으며 또 자세한 그 쓰임을 알고 있지 못하다. 좀더 자세한 사항은 sendmail.org 의 지시자 관련 문서를 참조바라며 실제로 위 3가지 정도의 옵션으로도 충분히 센드메일 서버에 운영에 있어 부하를 최소화 할수 있다.


 virtusertable 파일은 가상메일 설정파일이라고 부르며 다음과 같은 상황에 사용된다.


만약 필자가 웹호스팅 서버를 운영하고 있다고 가정하자.

admin 이란 계정은 당연히 서버에 하나 밖에 존재 할수 없다.

하지만 필자의 서버에서 웹호스팅을 받고 있는 사용자들은 자신들의 도메인을 가지고 메일을 운영할때 실계정명은 user1 등이지만 admin@userdomain.pe.kr 이란 도메인으로 메일을 받고자 요청한다.


일반적인 생각이라면 admin 이란 계정은 단 하나만 존재하기 때문에 필자의 서버에 매칭된 도메인만이 admin@xfeelis.pe.kr 이란 메일을 사용할수 있다.


이를 해결하기 위한 파일이 바로 /etc/mail/virtusertable 파일인 것이다.


다음과 같이 /etc/mail/virtusertable 파일을 편집해 보자.


[root@xfeelis /]# vi /etc/mail/virtusertable

 

admin@xfeelis.pe.kr                xfeel

admin@userdomain1.pe.kr       user1

admin@userdomain2.pe.kr       user2

admin@userdomain3.pe.kr       user3

 

[root@xfeelis /]# makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable


어떤까? 매우 쉽지 않은가? 알고 보면 매우 쉬우며 간단한 설정들이 이런 유용한 기능을 발휘하고 있다. 이것이 오픈소스 진영과 리눅스의 힘인것이다.


자 이제 모든 파일의 설정을 마쳤자. 이제 실제로 샌드메일의 가동여부를 테스트 해봐야 할것이다. 우선 샌드메일을 가동 시켜보자.


[root@xfeelis /]# /etc/rc.d/init.d/sendmail restart
Shutting down sendmail: [  OK  ]
Shutting down sm-client: [  OK  ]
Starting sendmail: [  OK  ]
Starting sm-client: [  OK  ]
[root@xfeelis /]#


이제 샌드메일이 정상적으로 가동하는지 확인해 봐야겠다.


[root@xfeelis /]# telnet 211.188.120.198 25
Trying 211.188.120.198...
Connected to 211.188.120.198.
Escape character is '^]'.
220 xfeelis.pe.kr ESMTP Sendmail 8.13.0/8.13.0; Tue, 9 Nov 2004 14:18:10 +0900
HELP   
214-2.0.0 This is sendmail version 8.13.0
214-2.0.0 Topics:
214-2.0.0       HELO    EHLO    MAIL    RCPT    DATA
214-2.0.0       RSET    NOOP    QUIT    HELP    VRFY
214-2.0.0       EXPN    VERB    ETRN    DSN     AUTH
214-2.0.0       STARTTLS
214-2.0.0 For more info use "HELP <topic>".
214-2.0.0 To report bugs in the implementation send email to
214-2.0.0      
sendmail-bugs@sendmail.org.
214-2.0.0 For local information send email to Postmaster at your site.
214 2.0.0 End of HELP info
QUIT
221 2.0.0 xfeelis.pe.kr closing connection
Connection closed by foreign host.
[root@xfeelis /]#


25번 포트 즉 SMTP 서버인 샌드메일 서버에 이상없이 접속하였음을 통해 샌드메일이 제대로 가동되고 있음을 확인할수 있다.



▒ 마치며...
 
이외에 몇몇의 지시자 혹은 응용부분이 더 있습니다만 운영상 큰 지장이 없으므로 생략하였으며 좀더 자세한 사항의 질문등은 메일을 통해 문의바라며 또한 위 내용들만 설정하셔도 메일서버는 무리없이 가동되는것을 실제 운영으로 확인 하였음을 알려드립니다.


필자 또한 아직은 한참을 탐구하고 연구하는 리눅서이며 부족함이 많은것이 사실이기에 강좌를 시작하면서 늘 고민되었던것이 있다면 역시 집필의 수준을 어디로 두어야 하는 것이였습니다.


너무 간단하게 주요 부분만 집고넘어간다면 처음 구축하시는 분들이 생소해 할것이며 또 너무 풀어서 하나 하나 집고 넘어가자니 그 막대한 분량과 함께 정작 실무위주의 기법을 보고자 하는 분들에겐 다소 거리감이 있을수 있기 때문입니다.


개인적으로는 인터넷상에 돌아다니는 하우투 문서에 대해 별로 좋지 않은 입장입니다.

물론 저 또한 리눅스를 처음 접했을 당시는 하우투 문서의 도움을 많이 봤었습니다.


개구리 올챙이적 생각 못한다는 격으로 좀 그렇게 보일수 있지만 하우투 문서의 폐해 또한 만만치 않다고 생각합니다.


이유는 처음 리눅스 시스템을 접하는 대다수의 리눅서들이 하우투 문서를  접하면서 그대로 설정만 따라했지 왜 그렇게 설정되어야 하는가에 대하여 생각을 해보지 않는다는 것입니다.


그 시스템의 구조를 이해하려 노력하고 어떠한 프로세스로 흘러가는지 파악을 하여야 왜 저런 설정이 필요하고 또 저런 운영이 되어야 하는지를 알게 되는데 말입니다...


그렇기 때문에 하우투 문서대로 따라하기식의 설정후 대부분의 리눅서들이 설치나 설정 에러메시지를 접하게 됩니다.


차라리 에러메시지를 접한후 왜 그런 에러가 나타나는지를 찾는 리눅서들은 나은 편입니다.


아얘 이유조차 찾지않고 바로 관련 커뮤니티에 하우투 문서대로 설정을 했는데 설치가 되지않는다 에러가 생긴다 식의 질문이다 답변요구 공세를 하기 시작합니다.


아마도 처음 그 하우투 문서를 작성한 사람은 그런 모습을 보려고 만든것은 아닐것 같다는 생각을 해봅니다.
 
진정한 리눅서는 스스로 탐구하고 질문을 던지며 답을 찾는 습관이 중요합니다. 여러분 또한 진정한 리눅서로 성장해 나갈것을 기대하며 이상으로 Sendmail을 이용한 메일서버에 대한 초급강좌를 마치겠습니다.



출처 :http://paper.cyworld.nate.com/paper/paper_item_read.asp?paper_id=1000032567&post_seq=100642&cpage=1&search_type=&search_keyword=


문제가 된다면 삭제 하겠습니다!

:
Posted by 비개인오후
2009. 11. 11. 15:21

sendmail 외부메일 수신이 안될 때 리눅스서버2009. 11. 11. 15:21


센드메일은 기본으로 로컬호스트에만 리스닝하게 되있습니다. 처음설치시 메일이 안오는건 그 이유지요.
이건 sendmail.mc파일을 수정해 그걸로 다시 sendmail.cf를 만들어 해결하는게 편합니다.


sendmail.mc를 찾아
DAEMON_OPTIONS('port=smtp,Addr=127.0.0.1,Name=MTA')dnl  여기를
DAEMON_OPTIONS('port=smtp,Name=MTA')dnl 로 수정
그리고
m4 sendmail.mc > sendmail.cf 해서 만든 파일로 설정파일을 교체하세요.
참고로 sendmail-cf라는 페키지가 설치되있어야 합니다.
m4관련해서 오류가 난다면 yum으로 설치해준다.
yum install sendmail-cf


같은방법...
물론 기본적인 도메인 과 25번 포트는 열려 있고 이상이 없음에도 수신이 되지 않지요.

이럴 경우, 외부에서 오는 메일을 수신하기 위해서는
/etc/mail/sendmail.cf 화일에서 Cwaispace.net 이렇게 받을 도메인을 설정하고
/etc/mail/sendmail.cf화일에서

       #SMTP daemon options
       O DaemonPortOptions=Port=smtp,Addr=127.0.0.1,Name=MTA
           이 부분을 찾아서 Addr=127.0.0.1을 삭제하면 외부 메일 수신이 됩니다.



/etc/sendmail.cf 파일을 수정한 뒤에는 반드시 센드메일 데몬을 다시 구동시켜 주어야 합니다.

/etc/rc.d/init.d/sendmail restart
:
Posted by 비개인오후
2009. 10. 30. 12:24

날마다 변경된 파일만 백업해두기 리눅스서버2009. 10. 30. 12:24

cat backup_day.sh
날마다 변경된 파일을 조사해서 백업한다.

크론에다 넣고 돌리면 좋쥐

20 4 * * * /home/myhome/backups/backup_day.sh

날마다 새벽4시 20분에 일일백업을 실시



 

 

/home/myhome/myweb/ 은 웹서버의 document root 디렉토리

/home/myhome/backups/daily/ 은 일일백업이 저장될 디렉토리

 

 

#!/bin/bash
cd /home/myhome
NOW=`date +"%d %b %Y"`
FTARNM=`date +"%Y_%m_%d"`
OLD=`cat ./backups/.last_day`
tar cfpz /home/myhome/backups/daily/D$FTARNM.tar.gz myweb/ -N "$OLD"
echo $NOW > ./backups/.last_day


 

#!/bin/bash
cd /home/myhome
NOW=`date +"%d %b %Y"`     오늘날짜를 구한다
FTARNM=`date +"%Y_%m_%d"`  저장될파일이름
OLD=`cat ./backups/.last_day`  마지막 백업한 날짜 -_-;; 주간백업등으로 쓸경우 쓸만하다.
tar cfpz /home/myhome/backups/daily/D$FTARNM.tar.gz myweb/ -N "$OLD"
echo $NOW > ./backups/.last_day

:
Posted by 비개인오후