달력

02

« 2012/02 »

  •  
  •  
  •  
  • 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
  •  
  •  
  •  

리눅스에서 하드디스크 사용량을 확인하는 방법입니다.

마운트된 디스크 정보와 사용량 출력 
# df -h
                               용량  사용량  남은용량  사용페센트
   Filesystem            Size   Used     Avail       Use%        Mounted on
   /dev/hda1             50G    10G       40G         20%         /
                                 :

현재 디렉토리 이하의 개별 디렉토리별로 사용량 출력
# du -h

현재 디렉토리 사용량 확인
# du -sh

사용자 계정 사용량 확인- 사용자계정이 "test"인 경우
# du -sh ~test  (또는 #du -sh /home/test)

Posted by 根™
2009/05/13 10:20

기존에 사용하던 도메인 연결하기 tip/APM2009/05/13 10:20

기존에 사용하시던 도메인을 텍스트큐브닷컴 블로그에 연결하고 싶으세요? 이렇게 하시면 됩니다.

여러가지 방법이 있겠으나, 가장 많이 쓰이는 방법은 우리나라의 DNS 관리 서비스인 DNS에버 (dnsever.com)를 이용하는 것입니다. 

DNS에버를 통한 도메인 연결의 원리는 이렇습니다. 우리가 흔히 인터넷 브라우저 주소창에 치는 도메인 주소는 원래 203.123.101.23 등의 숫자로 표현되는 "IP주소"를, 사람이 기억하기 쉬운 abc.com등의 "도메인 명"으로 바꾸어서 표현한 것입니다. 브라우저의 주소창에 abc.com등의 도메인명을 입력하시면, 이 정보가 "네임서버"에 전달되고, "네임서버"는 이 도메인명이 가리키는 웹 서버의 IP주소가 무엇인지를 알아내어 해당 IP 주소로 연결을 시켜줍니다. 

여러분이 도메인을 구매한 기관과 텍스트큐브 블로그 서비스의 웹 서버를 서로 연결하기 위해서, 중간에 DNS에버라는 중개기관을 이용할 수 있습니다. 즉 도메인을 구매하신 기관(도메인 구매처)에서 해당 도메인의 네임서버 주소를 DNS에버의 네임서버로 지정합니다. 그런 다음, DNS에버의 네임서버에게 해당 도메인이 바라보는 IP주소가 무엇인지를 가르쳐 주시면, 도메인과 IP 주소가 연결되게 됩니다. 이를 그림으로 표현해 보면 다음과 같습니다. 


예를 들어, 제가 소유한 memoriesreloaded.net 이라는 도메인 주소를, 제 텍스트큐브닷컴 블로그인 chang1.textcube.com에 연결해 보도록 하겠습니다. 

1. 도메인 구매처에서, 네임서버를 DNS 에버의 네임서버로 지정합니다. 

제 도메인 구매처인 hostway에서, memoriesreloaded.net의 네임서버를 DNS 에버의 네임서버인 ns1.dnsever.com, ns2.dnsever.com 로 지정한 모습입니다. 

참고로 DNS에버에서 기존에는 2개의 네임서버(ns1,ns2.dnsever.com)를 제공하고 있었으나 2008년 6월 18일 이후에는 사용자 별로 각기 다른 네임서버를 5개까지 제공한다고 합니다.DNSEver 제공 네임서버 정보란 글을 참고하시면 되겠습니다.


(도메인 호스팅 회사에 따라서 모양새는 다르겠지만, 1차/2차 네임서버를 지정할 수 있을 것입니다.) 


2. DNS 에버에서, 해당 도메인의 IP를 텍스트큐브닷컴 서버 IP로 지정합니다. 

DNS에버에 회원가입 및 로그인을 하신 뒤, "도메인 호스트 IP 관리" 메뉴를 통해 보유하신 도메인이 바라보는 IP 주소를 텍스트큐브닷컴 서버의 IP인 211.245.21.34 로 지정합니다. 

아래는 DNS에버에서 제가 보유한 memoriesreloaded.net의 IP 주소를 텍스트큐브닷컴 서버 IP인 211.245.21.34 로 지정해 준 모습입니다.



3. 블로그에서 "개인 도메인 주소"를 사용하겠다고 설정합니다. 

자신의 텍스트큐브닷컴 블로그 환경설정에서, 환경설정 > 블로그 > 블로그 주소 설정으로 들어가신 후, 개인 도메인 주소를 사용하는 것으로 지정하시고 도메인 명을 써주신 뒤 "저장"을 누릅니다. 


이렇게 지정한 도메인 주소가 인터넷상에서 반영되려면 약 1시간에서 길게는 반나절까지 시간이 걸립니다. 따라서, 위의 과정을 거치신 후에 곧바로 주소창에 도메인 주소를 치시더라도 곧바로 블로그가 보이진 않을 것입니다. 몇시간 뒤면 나만의 도메인명을 가진 블로그 사이트를 가질 수 있게 됩니다.

Posted by 根™
2009/05/01 14:42

FTP server - vsftp tip/APM2009/05/01 14:42

FTP server - vsftp

- vsftp
Very Secure FTP의 약자이다.
안정적이고 빠르며 보안이 강화된 FTP로 Redhat, Suse, Open-BSD등에서 기본으로 채택하는 FTP서버이다.

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

vsftp 공식 홈페이지  : http://vsftpd.beasts.org/
vsftp 관련 파일 다운로드 : ftp://vsftpd.beasts.org/users/cevans/

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

1. 설치 확인

[root@localhost ~]# rpm -qa | grep vsftp
vsftpd-2.0.5-12.el5

[root@localhost ~]# rpm -qi vsftpd
Name        : vsftpd                       Relocations: (not relocatable)
Version     : 2.0.5                             Vendor: CentOS
Release     : 12.el5                        Build Date:
Install Date:       Build Host: builder16.centos.org
Group       : System Environment/Daemons    Source RPM: vsftpd-2.0.5-12.el5.src.rpm
Size        : 289673                           License: GPL
Signature   : DSA/SHA1, 2008년 06월 15일 (일) 오전 08시 41분 45초, Key ID a8a447dce8562897
URL         : http://vsftpd.beasts.org/
Summary     : vsftpd - 매우 안전한 Ftp 데몬
Description :
vsftpd는 매우 안전한 FPT 데몬입니다. 이것은 완전히 처음부터 작성되었습니다.
 
[root@localhost ~]# system-config-packages

- 패키지 관리자를 통해서 설치 할수도 있다.
패키지 관리자 -> 서버 -> FTP 서버 를 선택하면 vsftp가 설치가 된다.
(옵션사항에는 없지만 기본적으로 설치된다.)

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

2. 설치 파일 확인

[root@localhost ~]# rpm -ql vsftpd
/etc/logrotate.d/vsftpd.log
/etc/pam.d/vsftpd
/etc/rc.d/init.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd_conf_migrate.sh
/usr/sbin/vsftpd
/usr/share/doc/vsftpd-2.0.5

- 중략

/usr/share/doc/vsftpd-2.0.5/vsftpd.xinetd
/usr/share/man/man5/vsftpd.conf.5.gz
/usr/share/man/man8/vsftpd.8.gz
/var/ftp
/var/ftp/pub

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

3. vsftp 설치 폴더 확인 및 환경 설정 파일 확인

[root@localhost vsftpd]# pwd
/etc/vsftpd
[root@localhost vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh

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

4. 환경설정 파일 설정 - vsftpd.conf

- 자세한 정보는 [ FTP Server - vsftpd.conf ] 를 참고 한다.


4-1. ftp 접속 및 dirmessage_enable=yes 옵션 확인

[root@localhost vsftpd]# vi vsftpd.conf

33 # Activate directory messages - messages given to remote users when they
34 # go into a certain directory.
35 dirmessage_enable=YES

- 특정 폴더에 접속시 .message 파일의 메시지를 보여줄 것인지를 지정하는 설정이다.

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

예제)
[root@localhost ~]# ftp 10.10.0.101 - 현재 10.10.0.101 이 FTP 서버로 운영중이다.
Connected to 10.10.0.101.
220 (vsFTPd 2.0.4)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.10.0.101:root): anonymous           - 익명사용자로 접속한다.
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls   
227 Entering Passive Mode (10,10,0,101,90,47)
150 Here comes the directory listing.
drwxr-xr-x   19 0        0            4096 Dec 18 00:44 pub
226 Directory send OK.
ftp> cd pub
250-skydriver ftp server !!!       - pub폴더에 설정해 놓은 .message의 내용을 pub에 접근할시 나타난다.
250 D
ftp> help  - ftp에서 사용하는 관련 명령어를 확인할 수 있다.
Commands may be abbreviated.  Commands are:

!               cr              mdir            proxy           send
$               delete          mget            sendport        site
account         debug           mkdir           put             size
append          dir             mls             pwd             status
ascii           disconnect      mode            quit            struct
bell            form            modtime         quote           system
binary          get             mput            recv            sunique
bye             glob            newer           reget           tenex
case            hash            nmap            rstatus         trace
ccc             help            nlist           rhelp           type
cd              idle            ntrans          rename          user
cdup            image           open            reset           umask
chmod           lcd             passive         restart         verbose
clear           ls              private         rmdir           ?
close           macdef          prompt          runique
cprotect        mdelete         protect         safe
ftp> quit   - ftp 에서 나가는 명령어이다.
221 Goodbye.
[root@localhost ~]#

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

4-2. ftp 접속 및 ftpd_banner 옵션 확인

[root@localhost vsftpd]# vi vsftpd.conf

82 # You may fully customise the login banner string:
83 #ftpd_banner=Welcome to blah FTP service.

- ftp 서버 접속시 안내메세지를 출력한다.

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

예제)
[root@localhost ~]# ftp 10.10.0.101

Connected to 10.10.0.101.
220 Welcome to skydriver FTP service.    - ftp 서버 접속시에 나타난다.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.10.0.101:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

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

4-3. ftp 접속 및 chroot 옵션 확인

[root@localhost vsftpd]# vi vsftpd.conf

91 # You may specify an explicit list of local users to chroot() to their home
92 # directory. If chroot_local_user is YES, then this list becomes a list of
93 # users to NOT chroot().
94 #chroot_list_enable=YES
95 # (default follows)
96 #chroot_list_file=/etc/vsftpd/chroot_list

97 #chroot_local_user=YES    - 전체 사용자들에게 chroot 기능을 설정한다. 이 설정은 따로 입력해야 한다.

- chroot list에 등록한 사용자만 chroot를 사용하거나 전체 사용자들에게 chroot를 사용하게 할수 있다. .

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

예제)
chroot 설정을 안 했을 경우
[root@localhost ~]# ftp 10.10.33.100
Connected to 10.10.33.100.
220 Welcome to skydriver FTP service.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.10.33.100:root): test2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,10,33,100,220,7)
150 Here comes the directory listing.
drwxrwxr-x    2 501      501          4096 Dec 12 06:59 public_html   - test2의 홈디렉토리에 있는 파일 리스트이다.
226 Directory send OK.
ftp> pwd
257 "/home/test2"
ftp> cd /root
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (10,10,33,100,239,119)
150 Here comes the directory listing.
-rw-r--r--    1 0        0        26361791 Dec 12 01:13 640-8023[1].22.alz
-rw-r--r--    1 0        0         4314759 Dec 02 04:53 CCNA4_Practice_Labs.zip

- 중략

-rw-r--r--    1 0        0          318464 Nov 19 01:30 xinetd-2.3.14-10.el5.src.rpm
-rw-r--r--    1 0        0          387187 Dec 15 05:32 zb4pl8.tgz
226 Directory send OK.
ftp>

- 이렇게 chroot 기능을 사용해 주지 않으면 일반 사용자가 root의 파일 리스트틀 확인 할수 있다.
실제적으로 퍼미션(권한)에 의해 추가/생성/삭제 등은 할수 없지만 리스트를 확인할 수 있기 때문에 보안상의 문제가 생길 수 있다.

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

chroot 의 chroot_list에 일반 사용자들을 추가해 주면 ftp접속시 자신의 홈디렉토리가 '/' 디렉토리가 된다.

예제) chroot 설정을 했을 경우
[root@localhost ~]# ftp 10.10.33.100
Connected to 10.10.33.100.
220 Welcome to skydriver FTP service.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.10.33.100:root): test2
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"       - 자신의 홈디렉토리 (/home/test2)가 '/' 디렉토리가 되었다.
ftp>
ftp> ls -R   - ls -R을 하면 하위 경로와 그 안에 있는 모든 파일들도 나열한다.
227 Entering Passive Mode (10,10,33,100,49,45)
150 Here comes the directory listing.
drwxrwxr-x    2 501      501          4096 Dec 18 01:26 public_html
226 Directory send OK.
ftp>


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

4-4. ftp 접속 & userlist_enable 옵션 확인- 접속 제한

[root@localhost vsftpd]# vi vsftpd.conf

114 pam_service_name=vsftpd   - pam 사용자 인증 설정
115 userlist_enable=YES  - user_list 사용을 허가하겠다는 설정
116 tcp_wrappers=YES  - tcp_wrappers 기능을 사용하겠다는 설정

- 각각의 설정을 통해 ftp의 접속을 제한하는 방법을 설정한다.

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

4-4-1. user_list와 관련된 파일 설정 확인

[root@localhost vsftpd]# pwd
/etc/vsftpd
[root@localhost vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@localhost vsftpd]# cat user_list

1 # vsftpd userlist
2 # If userlist_deny=NO, only allow users in this file - 이 파일에 있는 사용자만 ftp접속을 허용하겠다는 설정이다.
3 # If userlist_deny=YES (default), never allow users in this file, and - 이파일에 있는 사용자만 ftp접속을 거부하겠다는 설정이다. (default 설정)
4 # do not even prompt for a password.
5 # Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
6 # for users that are denied.  - root ~ nobody 사이의 사용자들은 ftp접속이 금지된다.
7 root
8 bin
9 daemon
10 adm
11 lp
12 sync
13 shutdown
14 halt
15 mail
16 news
17 uucp
18 operator
19 games
20 nobody

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

4-4-2. pam_service와 관련된 파일 설정 확인

[root@localhost vsftpd]# pwd
/etc/vsftpd
[root@localhost vsftpd]# ls
ftpusers  user_list  vsftpd.conf  vsftpd_conf_migrate.sh
[root@localhost vsftpd]# cat ftpusers 

# Users that are not allowed to login via ftp - root ~ nobody 사이의 사용자들은 ftp접속이 금지된다.
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody

- 현재 userlist와 pam 인증으로 사용자의 접근 제한이 이중으로 되어 있다.
pam 사용자 인증의 경우에는 무조건 접근 금지이지만 userlist는 설정에 따라 접근이 허용/거부 된다.

예를 들어 root 사용자로 ftp 접근이 가능하려면
userlist, ftpusers 두 파일의 설정을 모두 변경해 주어야 한다.

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

5. ftp 홈디렉토리

[root@localhost vsftpd]# cd /var/ftp
[root@localhost ftp]# pwd
/var/ftp
[root@localhost ftp]# ll
합계 8
drwxr-xr-x 2 root root 4096  5월 25  2008 pub  - 익명사용자가 접속했을 경우 가장 먼저 나타나는 폴더이다.
[root@localhost ftp]#

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

6. 10.10.33.3 에서 ftp 10.10.33.100으로 접속

[root@localhost ~]# ftp 10.10.33.100
Connected to 10.10.33.100.
220 Welcome to skydriver FTP service.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.10.33.100:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,10,33,100,76,182)
150 Here comes the directory listing.
drwxr-xr-x    3 0        0            4096 Dec 18 01:32 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (10,10,33,100,224,207)
150 Here comes the directory listing.
drwxr-xr-x    2 0        0            4096 Dec 18 01:32 100
-rw-r--r--    1 0        0               8 Dec 18 01:32 100.txt
226 Directory send OK.
ftp> get 100.txt     -  ftp내에서 파일을 다운로드 하는 명령어로 'get'을 사용한다.         
local: 100.txt remote: 100.txt
227 Entering Passive Mode (10,10,33,100,127,2)
150 Opening BINARY mode data connection for 100.txt (8 bytes).
226 File send OK.
8 bytes received in 7.2e-05 seconds (1.1e+02 Kbytes/s)
ftp> lcd     -  ftp내에서 파일을 다운로드한 경로를 확인하는 명령어로 'lcd'를 사용한다.
Local directory now /root
ftp>

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

6-1. 10.10.33.100에서 다운 받은 파일 확인

[root@localhost ~]# pwd
/root
[root@localhost ~]# ll
합계 140
-rw-r--r-- 1 root root     8 12월 18 10:34 100.txt   - 10.10.33.100 에서 다운 받은 파일
drwxr-xr-x 5 root root  4096 12월 18 10:32 Desktop
-rw------- 1 root root  1426 11월 26 21:52 anaconda-ks.cfg
drwxr-xr-x 2 root root  4096 12월  9 18:22 dwhelper
-rw-r--r-- 1 root root 35803 11월 26 21:52 install.log
-rw-r--r-- 1 root root  5945 11월 26 21:51 install.log.syslog
-rw-r--r-- 1 root root 65085 12월 10 14:49 tcpdump.txt
[root@localhost ~]#

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

7. ftp 10.10.33.100에 파일 업로드

[root@localhost ~]# ftp 10.10.33.100
Connected to 10.10.33.100.
220 Welcome to skydriver FTP service.
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (10.10.33.100:root): anonymous
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (10,10,33,100,214,176)
150 Here comes the directory listing.
drwxr-xr-x    3 0        0            4096 Dec 18 01:32 pub
226 Directory send OK.
ftp> cd pub
250 Directory successfully changed.
ftp> put 10.10.33.3.txt     -  ftp내에서 파일을 업로드 하는 명령어로 'put'을 사용한다.
local: 10.10.33.3.txt remote: 10.10.33.3.txt
227 Entering Passive Mode (10,10,33,100,89,205)
553 Could not create file.
ftp> ls
227 Entering Passive Mode (10,10,33,100,139,110)
150 Here comes the directory listing.
-rw-------    1 14       50              8 Dec 18 01:41 10.10.33.3.txt  - 10.10.33.100으로 업로드한 파일
drwxr-xr-x    2 0        0            4096 Dec 18 01:32 100
-rw-r--r--    1 0        0               8 Dec 18 01:32 100.txt
226 Directory send OK.
ftp> mkdir 10.10.33.3
257 "/pub/10.10.33.3" created
ftp> ls
227 Entering Passive Mode (10,10,33,100,86,55)
150 Here comes the directory listing.
-rw-------    1 14       50              8 Dec 18 01:41 10.10.33.3.txt
drwx------    2 14       50           4096 Dec 18 01:41 10.10.33.3
drwxr-xr-x    2 0        0            4096 Dec 18 01:32 100
-rw-r--r--    1 0        0               8 Dec 18 01:32 100.txt
226 Directory send OK.
ftp> cd 10.10.33.3  - 10.10.33.3이 생성한 폴더로 이동한다.
250 Directory successfully changed.
ftp> put 10.10.33.3.txt   - 10.10.33.3의 폴더에 파일을 업로드 한다.
local: 10.10.33.3.txt remote: 10.10.33.3.txt
227 Entering Passive Mode (10,10,33,100,227,165)
150 Ok to send data.
226 File receive OK.
11 bytes sent in 5.2e-05 seconds (2.1e+02 Kbytes/s)
ftp> pwd
257 "/pub/10.10.33.3"
ftp> ls   - 현재 폴더의 리스트를 확인할수 없는데 이것은 퍼미션과 관련된 사항으로 현재 폴더의 other에 대한 권한이 없기 때문이다.
227 Entering Passive Mode (10,10,33,100,30,172)
150 Here comes the directory listing.
226 Transfer done (but failed to open directory).
ftp>

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

- 참고
/etc/vsftpd.conf 파일을 수정한 후에는 항상 vsftpd 서비스를 재시작 해준다.

# service vsftpd start

[출처] http://bban2.tistory.com
Posted by 根™
2009/05/01 14:26

vsftpd 환경 설정 파일 tip/APM2009/05/01 14:26

vsftpd 환경 설정 파일

# vi /etc/vsftpd/vsftpd.conf
  
 1 # Example config file /etc/vsftpd/vsftpd.conf
 2 #
 3 # The default compiled in settings are fairly paranoid. This sample file
 4 # loosens things up a bit, to make the ftp daemon more usable.
 5 # Please see vsftpd.conf.5 for all compiled in defaults.
 6 #
 7 # READ THIS: This example file is NOT an exhaustive list of vsftpd options.
 8 # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
 9 # capabilities.
 10 #
 11 # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
 12
 13 anonymous_enable=YES  - 익명 사용자의 접속을 가능하게 설정한다.
 14 #anonymous_enable=NO
 15
 16 #
 17 # Uncomment this to allow local users to log in.
 18 local_enable=YES  - 로컬 사용자의 접속을 가능하게 설정한다.
 19 #local_enable=NO
 20 #
 21 # Uncomment this to enable any form of FTP write command.
 22 write_enable=YES    - 로컬 사용자의 쓰기 기능을 가능하게 설정한다.
 23 #
 24 # Default umask for local users is 077. You may wish to change this to 022,
 25 # if your users expect that (022 is used by most other ftpd's)
 26 local_umask=022    - 로컬 사용자의 파일 생성시 적용될 umask 값을 설정한다.
 27 #
 28 # Uncomment this to allow the anonymous FTP user to upload files. This only
 29 # has an effect if the above global write enable is activated. Also, you will
 30 # obviously need to create a directory writable by the FTP user.
 31 #anon_upload_enable=YES  - 익명 사용자의 파일 업로드를 가능하게 설정한다.
 32
 33 anon_upload_enable=YES
 34
 35 #
 36 # Uncomment this if you want the anonymous FTP user to be able to create
 37 # new directories.
 38 #anon_mkdir_write_enable=YES  - 익명 사죵자의 디렉토리 생성을 가능하게 설정한다.
 39
 40 anon_mkdir_write_enable=YES
 41
 42 #
 43 # Activate directory messages - messages given to remote users when they
 44 # go into a certain directory.
 45 dirmessage_enable=YES   - 특정 폴더에 접속시 .message 파일의 메시지를 보여줄 것인지를 지정하는 설정이다.
 46 #
 47 # Activate logging of uploads/downloads.
 48 xferlog_enable=YES  - 업로드/다운로드 로그를 xferlog 에 기록하겠다는 설정이다.
 49 #
 50 # Make sure PORT transfer connections originate from port 20 (ftp-data).
 51 connect_from_port_20=YES  - ftp 데이터 전송시 20번 포트 사용을 설정한다.
 52 #
 53 # If you want, you can arrange for uploaded anonymous files to be owned by
 54 # a different user. Note! Using "root" for uploaded files is not
 55 # recommended!
 56 #chown_uploads=YES   - 익명 사용자가 업로드한 파일의 소유권을 변경할 때 설정한다.
 57 #chown_username=whoever  - chown_uploads=YES일 경우 지정한 사용자 이름으로 익명 사용자가 업로드한 파일의 소유자가 지정된다.
 58 #
 59 # You may override where the log file goes if you like. The default is shown
 60 # below.
 61 #xferlog_file=/var/log/vsftpd.log  - 업로드/다운로드 로그파일을 지정한다.
 62 #
 63 # If you want, you can have your log file in standard ftpd xferlog format
 64 xferlog_std_format=YES  - xferlog를 표준 로그포맷으로 기록한다.
 65 #
 66 # You may change the default value for timing out an idle session.
 67 #idle_session_timeout=600  - ftp접속의 타임아웃시간을 지정한다. (단위 : sec)
 68 #
 69 # You may change the default value for timing out a data connection.
 70 #data_connection_timeout=120  - 데이터 전송의 타임아웃시간을 지정한다. (단위 : sec)
 71 #
 72 # It is recommended that you define on your system a unique user which the
 73 # ftp server can use as a totally isolated and unprivileged user.
 74 #nopriv_user=ftpsecure   - vsftpd 데몬을 루트가 아닌 시스템에 존재하는 일반 사용자의 비특권권한으로 동작시킨다.
 75 #
 76 # Enable this and the server will recognise asynchronous ABOR requests. Not
 77 # recommended for security (the code is non-trivial). Not enabling it,
 78 # however, may confuse older FTP clients.
 79 #async_abor_enable=YES  - async_abor_enables 기능을 사용하겠다는 설정이다.
 80 #
 81 # By default the server will pretend to allow ASCII mode but in fact ignore
 82 # the request. Turn on the below options to have the server actually do ASCII
 83 # mangling on files when in ASCII mode.
 84 # Beware that on some FTP servers, ASCII support allows a denial of service
 85 # attack (DoS) via the command "SIZE /big/file" in ASCII mode. vsftpd
 86 # predicted this attack and has always been safe, reporting the size of the
 87 # raw file.
 88 # ASCII mangling is a horrible feature of the protocol.
 89 #ascii_upload_enable=YES  - ASCII 모드로 업로드를 허락하겠다는 설정이다.
 90 #ascii_download_enable=YES  -ASCII 모드로 다운로드를 허락하겠다는 설정이다.
 91 #
 92 # You may fully customise the login banner string:
 93 #ftpd_banner=Welcome to blah FTP service.   - ftp 서버 접속시 안내메세지를 출력한다.
 94 #
 95 # You may specify a file of disallowed anonymous e-mail addresses. Apparently
 96 # useful for combatting certain DoS attacks.
 97 #deny_email_enable=YES  - 익명사용자 접속시 패스워드를 e-mail 형식으로 받겠다는 설정이다.
 98 # (default follows)
 99 #banned_email_file=/etc/vsftpd/banned_emails  - 허용하지 않을 e-mail 주소를 파일에 넣어두면 접속이 안된다. (banned_emails파일 생성시)
100 #
101 # You may specify an explicit list of local users to chroot() to their home
102 # directory. If chroot_local_user is YES, then this list becomes a list of
103 # users to NOT chroot().
104
105 chroot_local_user=YES  - 전체 사용자가 chroot 기능을 사용하도록 설정한다.
106
107 #chroot_list_enable=YES  - chroot_list에 등록된 사용자만 chroot 기능을 사용하도록 설정한다.
108 # (default follows)
109 #chroot_list_file=/etc/vsftpd/chroot_list  - chroot 기능을 사용할 사용자 리스트 파일을 지정한다.
110 #
111 # You may activate the "-R" option to the builtin ls. This is disabled by
112 # default to avoid remote users being able to cause excessive I/O on large
113 # sites. However, some broken FTP clients such as "ncftp" and "mirror" assume
114 # the presence of the "-R" option, so there is a strong case for enabling it.
115 #ls_recurse_enable=YES  - ls -R(서브디렉토리 파일 목록 출력) 명령 사용여부를 설정한다.
116 #
117 # When "listen" directive is enabled, vsftpd runs in standalone mode and
118 # listens on IPv4 sockets. This directive cannot be used in conjunction
119 # with the listen_ipv6 directive.
120 listen=YES   - 단독 데몬일 경우 listen 을 YES로 지정한다.
121 # listen=NO   - xinetd 로 설정할 경우 NO로 지정한다.
122 #
123 # This directive enables listening on IPv6 sockets. To listen on IPv4 and IPv6
124 # sockets, you must run two copies of vsftpd whith two configuration files.
125 # Make sure, that one of the listen options is commented !!
126 #listen_ipv6=YES
127
128 pam_service_name=vsftpd  - pam 사용자 인증 설정
129 userlist_enable=YES - userlist 사용을 허가하겠다는 설정이다.
130 # userlist_deny=NO - userlist 에 등록된 사용자만 허가하겠다는 설정이다.
131 tcp_wrappers=YES   - tcp_wrappers 기능을 사용하겠다는 설정이다. (host, ip 차단)
Posted by 根™
2009/05/01 14:25

VSFTP 환경설정(vsftpd.conf) tip/APM2009/05/01 14:25

VSFTP 환경설정(vsftpd.conf)

 

VSFTP

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

 

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

 

userlist_enable=YES (기본값 = NO)

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

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

 

userlist_deny=YES (기본값 = YES)

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

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

 

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

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

tcp_wrappers=YES

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

 

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)시켜 버립니다.

 

ftpd_banner=Welcome to blah FTP service.

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

 

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"로 설정하시기 바랍니다.

 

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()가 적용되어 상위 디렉토리로의 이동이 안된다는 의미입니다.

 

anonymous_enable=NO

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

출처 : http://tong.nate.com/bassdot/46508593

Posted by 根™
2009/05/01 10:55

VsFTPD FTP 서버 설치[인터넷문서] tip/APM2009/05/01 10:55

- 작성자 : 김혁중(티니) [sky(golbangi or at)tini4u.net]
- 작성일 : 2007-01-24
- 사이트 : http://linux.tini4u.net/
- 원제목 : VsFTPD FTP 서버 설치
- 환 경 : CentOS 4.4, VsFTPD
- 키워드 : ftp, vsftpd
--------------------------------------------------------------------------------------


이번 강좌는 최근 pure-ftp와 가장 많이 사용되고 있는 vsftpd를 설치하도록 하겠습니다.
VsFTPD는 Very Secure FTP Daemon의 약자이며, 이름에서 볼 수 있듯이 보안에 매우 좋습니다.
즉, 현재까지 vsftpd의 자체 보안에 문제가 있어서 보안권고 패치가 나온적이 없습니다.
필자 또한 몇년전까지 ProFTPD를 사용했으나, 최근 관리하는 모든서버가 전부 VsFTPD로
운영되어지며, 단 한건의 보안 사고도 없었습니다.

1. VsFTPD 소스 설치 방법 (최신버전: http://vsftpd.beasts.org/)
VsFTPD는 대부분의 OS 패키지 관리자가 제공을 해줄 정도로 보안성이 매우 뛰어납니다.
또한, 굳이 패키지 관리자를 이용하지 않더라도 설치가 매우 쉬운 프로그램입니다.
[root@localhost]# wget ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.5.tar.gz
[root@localhost]# tar xfz vsftpd-2.0.5.tar.gz
[root@localhost]# cd vsftpd-2.0.5

1-1. VsFTPD 한글 패치 및 tcp_wrappers 패치
VsFTPD를 그냥 설치해서 사용해도 데몬 운영에는 전혀 지장이 없지만, 로그에서 한글로 된 파일명이
처리가 안된다는 맹점이 있습니다.
이것은 VsFTPD가 출력할 수 없다고 판단하는 ASCII Code 31 이하, 128~159, 177 문자를 모두
물음표(?)로 변경해서 처리하기 때문입니다.
따라서 한글로 된 파일명을 제대로 처리하려면 아래와 같이 패치 작업을 해야 됩니다.
[root@localhost]# vi logging.c (157라인 근처)
변경전: str_replace_unprintable(p_str, '?');
변경후: /* str_replace_unprintable(p_str, '?'); */

※ 그러나 위와 같이 패치해도 로그에서는 제대로 한글을 처리하나, ps 커맨드 등에서는
제대로 한글을 처리하지 못합니다. 이 문제를 픽스하려면 패치작업을 한번 더 해주면 됩니다.
[root@localhost]# vi postlogin.c (121라인 근처)
변경전: str_replace_unprintable(p_str, '?');
변경후: /* str_replace_unprintable(p_str, '?'); */

※ 또한 VsFTPD의 옵션중 tcp_wrappers와 연동하는 옵션이 있는데 그 옵션을 사용하려면
아래의 패치도 함께 해줘야 됩니다.
[root@localhost]# vi builddefs.h
변경전: #undef VSF_BUILD_TCPWRAPPERS
변경후: #define VSF_BUILD_TCPWRAPPERS


1-2. VsFTPD 설치
VsFTPD는 따로 환경설정(configure) 작업을 해줄 필요가 없습니다.
그냥 컴파일 후 설치하시면 끝납니다.
[root@localhost]# make
[root@localhost]# make install
[root@localhost]# cp vsftpd.conf /etc/vsftpd/
[root@localhost]# chmod 600 /etc/vsftpd/vsftpd.conf
[root@localhost]# cp RedHat/vsftpd.pam /etc/pam.d/vsftpd


2. VsFTPD RPM 설치방법 (http://pkg.tini4u.net/ftp/vsftpd/)
소스 컴파일로 설치하는 방법이 아무리 쉽다고 하더라도, 역시 RPM을 쓰던 사람들은
RPM으로 깔끔하게 관리하는것을 더 선호할 수 밖에 없는것 같습니다. (필자만 그런가요?^^;;)
위에서 말했듯이 VsFTPD는 그 안정성을 인정받아, 최근 거의 모든 OS의 패키지관리자가
제공을 해주고 있습니다.
그렇기 때문에 'yum install vsftpd' 커맨드 한방으로 설치를 끝낼 수 있는데 맹점이 하나 있습니다.
바로 소스 컴파일시 했던 한글 패치가 적용되어 있지 않습니다.
이 문제를 픽스하려면 src.rpm을 받아서 패치 후 리빌드 해서 설치하는 방법이 있겠습니다만..
역시 무지무지*100 하게 귀찮은 작업이 아닐수가 없습니다.
따라서 필자가 이미 모든 패치와 설정을 끝내놓은 패키지를 만들어서 올려놨습니다.
이 모든 과정이 너무나 귀찮다 하시는 필자와 같은 귀차니스트 분들은 가져다 쓰시면 되겠습니다^^;
[root@localhost]# wget http://pkg.tini4u.net/ftp/vsftpd/i386/vsftpd-2.0.1-5.EL4.5_kor.i386.rpm
[root@localhost]# rpm -Uvh vsftpd*.rpm

※ 만약 x86_64 패키지나 src.rpm이 필요하신분은 2번 섹션 시작시 명시해둔 필자의 개인패키지
  미러에서 가져다 쓰시면 됩니다.

3. VsFTPD 환경설정
이제 설치가 끝났으니 VsFTPD를 시작하기 전에 환경설정을 해주어야 됩니다.
여기서는 아주 간략한 환경설정 옵션만 제시하도록 하겠으며, 독립모드(Standalone) 기준입니다.
만약 자세한 옵션을 보고 싶으시다면, 'VsFTPD 환경설정 옵션' 강좌편을 참고하시기 바랍니다.
※ 필자의 RPM으로 설치하신 분들은 따로 설정하지 않아도 됩니다. 이미 설정을 다 해놨습니다.
※ 옵션은 'option=value'식으로 해주시면 되는데, 절대로 option과 value 사이에 공백이 있으면
  안됩니다. 즉, 'option = value'는 잘못된 설정이라는 뜻입니다.
[root@localhost]# vi /etc/vsftpd/vsftpd.conf
background=YES
listen=YES
listen_port=21
use_localtime=YES
setproctitle_enable=YES
local_enable=YES
pam_service_name=vsftpd
tcp_wrappers=YES
ascii_download_enable=YES
ascii_upload_enable=YES
local_umask=022
file_open_mode=0644
write_enable=YES
chroot_local_user=YES
xferlog_file=/var/log/vsftpd.log
xferlog_enable=YES
session_support=YES
anonymous_enable=NO


4. init script 생성
위에서 필자는 독립모드를 기준으로 설정해줬다고 말씀드렸습니다.
따라서 좀더 편리하게 관리하기 위해 init script를 생성해서 관리하도록 하겠습니다.
만약 xinetd 모드로 사용하실 분들은 이 작업은 생략하시면 됩니다.
※ 필자의 RPM으로 설치하신 분들은 이미 제공하므로, 생략하시면 됩니다.
[root@localhost]# vi /etc/init.d/vsftpd
#!/bin/bash
#
# vsftpd      This shell script takes care of starting and stopping
#             standalone vsftpd.
#
# chkconfig: - 60 50
# description: Vsftpd is a ftp daemon, which is the program \
#              that answers incoming ftp service requests.
# processname: vsftpd
# config: /etc/vsftpd/vsftpd.conf

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

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0

[ -x /usr/sbin/vsftpd ] || exit 0

RETVAL=0
prog="vsftpd"

start() {
        # Start daemons.

        if [ -d /etc/vsftpd ] ; then
                for i in `ls /etc/vsftpd/*.conf`; do
                        site=`basename $i .conf`
                        echo -n $"Starting $prog for $site: "
                        /usr/sbin/vsftpd $i &
                        RETVAL=$?
                        [ $RETVAL -eq 0 ] && {
                           touch /var/lock/subsys/$prog
                           success $"$prog $site"
                        }
                        echo
                done
        else
                RETVAL=1
        fi
        return $RETVAL
}

stop() {
        # Stop daemons.
        echo -n $"Shutting down $prog: "
        killproc $prog
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
        return $RETVAL
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart|reload)
        stop
        start
        RETVAL=$?
        ;;
  condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
            RETVAL=$?
        fi
        ;;
  status)
        status $prog
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart|condrestart|status}"
        exit 1
esac

exit $RETVAL
[root@localhost]# chkconfig --add vsftpd


5. ftpwho script 생성
ProFTPD나 PureFTPD를 사용해보신 분들은 아시겠지만, 이 두 프로그램은 ftpwho 라는
ftp 접속유저를 모니터링 할 수 있도록 유틸리티를 제공하고 있습니다.
그러나, VsFTPD는 몇년전부터 아직까지 별다른 커맨드를 제공하지 않습니다.
필자 또한 이 문제를 어떻게 처리해야 될지 한참을 고민한적이 있는데, 구글링도 해보고
여러가지 팁도 찾아봤습니다만 그다지 뾰족한 수는 없었습니다.
특히, 국내 문서들의 대부분 내용인 ps ax 조합은 자잘한 쓰레기 세션까지 모두 체크가 되므로
정확한 측정이 안된다는 것이 필자를 매우 실망시킨 조합이었습니다.
따라서 결국엔 아래와 같이 필자가 스크립트를 만들어 사용중에 있습니다.
※ 이 스크립트 또한 필자의 RPM으로 설치하신분들은 이미 제공되어 있습니다.
[root@localhost]# vi /usr/sbin/ftpwho
#!/bin/bash

##########################################################################
#  Script Name  : ftpwho                                                 #
#  Description  : ProFTPD의 ftpwho 와 비슷하게 구현된 스크립트           #
#  Version      : 1.0.3                                                  #
#  License      : Hyeok-Jung, KIM (Nick. 티니)                           #
#  WebSite      : LTN(Linux.Tini4u.Net)                                  #
#  E-Mail       : sky (at) tini4u.net                                    #
#  LastUpdate   : 2007. 01. 23.                                          #
#  Message      : 이 스크립트는 VsFTPD의 독립모드(Standalone) 기준으로   #
#                 제작되었습니다.                                        #
#                 사용/배포/수정은 자유이나, 이부분은 삭제하지 마십시요  #
##########################################################################

str_stat=`ps -ef | grep 'vsftpd' | grep 'LISTENER' | sed -e 's/.*vsftpd: //'`

if [ "$str_stat" ]; then
        usr_cnt=`ps -ef | grep 'vsftpd' | grep 'connected' | wc -l`
        if [ "$usr_cnt" != "0" ]; then
                echo "♧ 현재 접속된 사용자는 총 $usr_cnt 명 입니다."
                echo "-----------------------------------------------"
                ps -ewwf \
                        | grep 'vsftpd' \
                        | grep -v 'grep' \
                        | grep -v 'sed' \
                        | grep -v ': connected' \
                        | grep -v 'LISTENER' \
                        | sed -e 's/.*vsftpd: //' \
                        | sed -e 's/:/\t| Status:/' \
                        | sed -e 's/STOR/UpLoad =>/' \
                        | sed -e 's/RETR/DownLoad =>/' \
                        | sed -e 's/\<\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\>/IP: \1/' \
                        | sed -e 's/\//\t| ID: /'
        else
                echo "♧ 현재 접속된 사용자가 아무도 없습니다."
        fi
else
        echo "VsFTP 데몬이 실행되고 있지 않습니다. VsFTP 데몬을 실행해주시기 바랍니다."
fi

※ 코드가 시작되기전 들여쓰기 라인은 반드시 탭으로 띄워주시기 바랍니다.

6. VsFTPD 시작
이제 모든 스크립트 준비와 시작 준비가 끝났습니다.
※ 특히 필자의 RPM으로 설치하신 분들은 할 일도 없이 섹션 넘기느라 지루하셨을 겁니다^^;;
[root@localhost]# /etc/init.d/vsftpd start

Posted by 根™
2009/04/17 14:35

404 에러페이지를 내 맘대로 tip/APM2009/04/17 14:35

자신의 웹디렉토리 public_html 혹은 www 디렉토리 안에 .htaccess 라는 파일을 생성하시기 바랍니다. 텔넷이나 ssh 로 접속하셔 생성하시면됩니다.

그리고 .htaccess 파일에 아래와 같은 내용을 적어넣습니다.

ErrorDocument 404 404에러일때 나타날 html 문서 URL

예로써

ErrorDocument 404 http://myhome.com/my404.html

이렇게 하게되면 404 에러일때 http://myhome.com/my404.html 문서가 보여지게됩니다.

이 게시물을..

Posted by 根™
아파치 접속이 느려졌을때 일반적으로 참고할 부분
 
1.해당 서버로 ping test를 한다.
time 값이 20이하면 네트워크는 이상이 없다.
(참고) ping test시 ping이 안 될 경우도 있다.
이럴때는 네트워크 이상일 수도 있지만 해당서버에서 ICMP를 차단해 놓았기 때문일 수도
있다.
이런 경우에는 서버관리자에게 문의해 본다.
예) ping yahoo.co.kr

 
2. 아파치 웹로그를 살펴본다
경로 : /usr/local/apache/logs

 
웹로그는 최대 생성할 수 있는 크기가 2G이며, 웹 로그의 크기가 커질수록 로그 파일을 읽어서 제일 하단에 로그를 쌓아야 하므로 로그파일이 클수록 웹 접속속도가 떨어지며, 사이트 접속자가 많은 경우에는 아예 웹사이트 자체에 아예 접속이 되지 않기도 한다.
따라서, 정기적으로 아파치 로그파일을 관리해주어야 한다.
 
⑴ 로그 파일이 쌓였을 때 삭제하는 방법.

 
• 명령어 : rm-rf access_log -> access_log 파일을 삭제.
        rm-rf error_log  -> error_log 파일을 삭제.

 
⑵ 아파치 로그파일이 쌓이지 않게 설정하는 법
로그파일이 쌓이지 않게 설정하기 전에 먼저 아파치 로그파일을 삭제 후 설정한다.
ln -s /dev/null /usr/local/apache/logs/access_log
ln -s /dev/null /usr/local/apache/logs/error_log

 
수정 후 아파치를 다시 시작해 준다.
 명령어 : apachectl restart

 
3. 현재 80번 포트를 사용해서 웹에 접속중인 사용자들의 현황을 살펴본다.
netstat -nap | grep :80 | grep EST | wc -l  등의 명령을 사용하면 현재 웹에 접속되어 있는 프로세서 수를 확인할 수 있다. 이 수가 httpd.conf에서 설정한 Maxclient와 가깝거나 혹은 더 많지는 않은지 살펴본다.
 
max client 256 -> 1024 (아파치 동시접속자 수를 256에서 1024로 늘림)

 

수정후 아파치를 다시 시작해 준다.
 
apachectl restart
 
httpd -V 로 확인 (정상적으로 수정되었는지 확인)

4. top 명령으로 현재 cpu의 사용률이나, 메모리 사용량 등을 체크해본다.
아파치 데몬으로 오랜시간 동안 접속이 유지되어있는 좀비 프로세서가 있는지 확인하다.
있을 경우 해당 프로세서를 강제 종료한다.
명령어 : top
빠져 나올 때 : Ctrl 키 + c 키

프로세서 강제 종료하는 법
명령어 : kill -KILL ‘PID Number’

 
예) top 프로세서를 강제종료 할 경우.
 kill -KILL 13917

 
※ 위의 점검을 위해서는 기본적으로 아파치 데몬 실행명령어에 익숙해야 한다.
• apachectl 이란?
apachectl - 아파치 웹서버 조절 인터페이스.
apachectl은 아파치 하이퍼텍스트 전송 프로토콜 (HTTP) 서버의 앞단이다.
이 프로그램은 관리자가 아파치 httpd 데몬을 조정하도록 돕는다.
 
apachectl command
 
옵션
-start
아파치 httpd 데몬을 시작한다. 이미 실행중이라면 오류를 낸다. apachectl -k start와 같다.
명령어 : apachectl start

 
-stop
아파치 httpd 데몬을 중단한다. apachectl -k stop과 같다.
명령어 : apachectl stop

 
 
 
-restart
아파치 httpd 데몬을 재시작한다. 데몬이 실행중이 아니라면, 시작한다. 데몬이 재시작시 실패하지 않음을 확인하기 위해 재시작 전에 자동으로 configtest 명령과 같이 설정파일을 검사한다. apachectl -k restart와 같다.
 
명령어 : apachectl restart

 
-graceful
아파치 httpd 데몬을 점잖게(gracefully) 재시작한다. 데몬이 실행중이 아니라면, 시작한다. 일반적인 재시작과 달리 현재 열려있는 연결을 끊지 않는다. 또, 이전 로그파일을 즉시 닫지 않는다. 즉, 로그순환 스크립트에서 이 명령을 사용한다면, 이전 로그파일을 처리하기전에 로그파일을 닫혔음을 보장하기 위해 상당히 기다려야 한다. 아파치가 재시작시 실패하지 않음을 확인하기위해 재시작 전에 자동으로 configtest 명령과 같이 설정파일을 검사한다. apachectl -k graceful과 같다.
 
명령어 : apachectl graceful

 
 
-configtest
설정파일의 문법을 검사한다. 설정파일을 읽고 Syntax Ok 혹은 특정 설정오류에 대한 자세한 정보를 알려준다. apachectl -t와 같다.
아래 옵션을 사용할 수 있지만, 앞으로 사라질 것이다.
 
명령어 : apachectl configtest

 
- help : 옵션에 대한 도움말을 보여준다.



Posted by 根™
2009/02/23 17:46

VMware와 인터넷 공유하기 tip/APM2009/02/23 17:46

VMware에 인터넷을 공유할 수 있는 방법

 기본적인 개념은 , 윈도우에 유/무선 인터넷이 될 경우,

인터넷이 되는 랜카드가 VMnet1에 인터넷 공유를 설정해 주고,

VMnet1은 윈도우의 랜이 뿌려주는 local ip하나를 받아 vmware가 이용 할수 있도록 한다.

그리고 Vmnet1은 다시 vmware안에 있는 linux에게 ip를 부여 함으로써 인터넷이 가능토록한다.

input : 윈도우랜 -> VMnet1 -> Linux

ouput : Linux -> VMnet1 -> 윈도우랜


1. 윈도우 랜에서 공유설정하기.

우선, 윈도우에서 인터넷이 되는 환경이어야 한다.

explore를 열어 google이나 daum이 잘 들어가 지나 확인 하도록 하자.

잘 들어가진다면!~~

내 내트워크 환경으로 가보록하자.

무선을 이용하고 있다면 무선 네트워크가 연결되었다고 나올 것이고.

유선을 이용하고 있다면 로컬 영역 연결부분에 연결되었다고 나올 것이다.


2. 윈도우에서 VMnet에 공유설정해주기.

우리가 쓸것은 VMnet1이기 때문에

인터넷 연결 공유에서 <다른네트워크 사용자가~~>를 선택한 다음 VMnet1을 선택하고

공유하겠냐는 질문이 나오면 yes를 누란다.

(현재 쓰고 있는 유/무선랜에서 속성-고급창으로 가면 된다)


3. vmnet1설정하기

내 내트워크 환경에 vmnet1에 속성으로 가보도록 하자.

vmnet1속성에 인터넷 프로토콜(tcp/cp)의 속성으로 가보도록하자.

기본적으로 vmnet1이 어떤 local을 고정 ip식으로 받게 되는데 어떤 ip를 받게 되는지,

확인 하는 절차이고, 원하는 ip로 바꿔줄 수도 있다.


local ip로 쓸 수 있도록. 192.168.100.1로 바꿔주도록 하자.

다른 것도 상관없지만, 편의상 맞추도록 하겠다~

기본 게이트 웨이 및 dns는 비워둬도 상관없다(공유설정이 되어 있으므로)


4. vmware확인

vmware에 내가 부팅할 os의 setting으로 가보면 ethernet이 있다.

ethernet으로 가보면 network connection이 있는데, 이부분에서

Custom - VMnet1(host-only)를 선택해보자!!

이렇게 되면 우선 윈도우 랜과 vmware간의 공유설정은 끝난 것이다.


5. 리눅스에서 vmnet1사용하기.



system setting에서 network를 선택해 eth0을 고정 ip로 맞춰줘야 한다.

위와 같이 써줘보자!

GUI를 구동하기 힘든 환경에서는

su - 를 해서 ( root 계정으로 로그인) setup으로 가서 설정을 해줄 수 있다.

이렇게 설정이 끝나면 GUI환경에서는 자동으로 재시작이 되는 경우가 있지만 안되는 경우가 있으므로.

/etc/init.d/network restart를 이용해 network환경을 다시 시작해주도록 한후

인터넷을 실행시켜 보면 인터넷이 됨을 확인 할수 있다!!

(GUI가 이는 곳에서는 /sbin/ifconfig로 확인, ping google.co.kr로 확인)

Posted by 根™
2008/07/05 20:59

리눅스 최적화 및 보안지침 tip/APM2008/07/05 20:59

리눅스 최적화 및 보안지침
 
목차
 
OS 설치
1. 리눅스 설치
2. 파티션 나누기
3. 패키지 선택
 
OS 설치후 기본설정
1. 시스템정보 확인
2. 초기 실행 데몬 선택
3. 불필요한 패키지 제거
4. 시스템 및 CMOS 시간동기화
5. yum을 이용한 최신패키지 업데이트
6. grub.conf 설정
7. 시스템 리부팅
8. HDD 속도체크
 
시스템 운영 스크립트 활용
1. addon 사용자관리 명령어
2. mail 메일계정관리 명령어
3. dbadd 디비계정 관리명령어
5. APACHE, PHP, MYSQL 연동 자동인스톨
 
시스템 보안 설정
1. logout 시 command history 삭제하기
2. 자동 로그아웃 환경변수 설정
3. su 명령어 제한하기
4. PAM 및 ulimit를 활용한 리소스(resource) 제한
5. SUID와 SGID 파일 및 디렉토리
6. 무소속 파일찾아 소유권 부여하기
7. /dev 에 device 파일외의 것이 있는지 확인
8. 원격접속허용파일 생성 여부 점검
9. 숨김파일 또는 비정상적인 파일 존재 여부 점검
10. 파일시스템 마운트
11. ch_perm을 통한 파일 및 디렉토리 권한 설정
12. ssh 무차별 dos 공격에 대한 방어
14. 넥스트라인 방화벽(next_firewall) 정책설정
15. 커널 변수 조정
16. 시스템 이상시 기본적인 점검 사항 및 명령어
17. TCP-Wrapper 구성
 
서비스보안
1. APACHE 보안
2. PHP 보안
3. SSH 보안
4. FTP 보안
5. SENDMAIL 보안
6. MYSQL 보안
7. BIND 보안
 
보안프로그램
1. 웹 어플리케이션 보안 KWST (KISA Web Security Template)
2. 아파차 보안 모듈
 
---------------------------------------------------------------
리눅스 최적화 및 보안지침
 
1. OS 설치

1) 리눅스 설치
리눅스를 설치할 때 시스템을 어떤 용도로 사용할 것인가에 따라 파티션구성 및 패키지 선택이 달라질 수 있습니다. 서버는 여러 사용자에게 서비스를 제공하는 것을 목적으로 함으로써 X-windows나 컴파일러, 게임 등 불필요한 패키지는 설치하지 않도록 합니다.
 
2) 파티션 나누기
2-1 파티션닝 목적
디스크 파티션닝을 하는 것은 시스템 보안의 시작이자 기본이며 시스템 영역과 사용자 영역을 구분하여 파티션을 나누는 목적은 다음과 같습니다.
① 디스크공간 고갈 유형의 DoS(Denial of Service) 공격에 대한 방어
② SUID 프로그램에 대한 보호
③ 백업과 업그레이드 관리가 용이
④ 빠른부팅
⑤ 각 파일시스템에 대한 마운트 방법 제어 가능
⑥ 하드링크를 통한 해킹방지
⑦ 각 파티션별 보안설정
 
2-2 기본 파티션
파티션
권장용량
설명
Swap
1 ~ 2G
Virtual memory을 지원하기 위한 공간으로, 읽고 쓰기가 가장 빠른 HDD실린더의 가장 바깥부분에 만듭니다.
/
5G
시스템 루트파티션으로, 디스크공간 고갈로 인한 시스템 다운방지
/usr
5G
유틸리티 및 쉘 명령어들이 저장되는 곳입니다.
/var
5G
Mail 및 log 데이터가 쌓이는 공간이며, DoS 공격에 이용될 가능성이 있으므로 반드시 파티션닝 합니다.
/tmp
1G
누구나 읽고 쓸 수 있는 디렉토리로 공격자들이 일반유저 권한을 얻은 경우 이곳에 해킹소스를 구축하는 경우가 많으므로 반드시 파티션닝합니다.
/home
여유공간 모두 할당
일반 유저의 홈디렉토리입니다.







 
3) 패키지 선택
Custom 모드로 kernel,gcc,glib 외에 서버운영에 필요치 않은 X-windoiws, 게임, 패키지등을 모두 제거하여 서버운영에 최적화 될 수 있도록 설치되어 있습니다. 시스템에 설치되어 있는 패키지 리스트는 /root/nextinstall.log에 기록되어 있습니다.
 
---------------------------------------------------------------------------------------

2. OS 설치후 기본설정
1) 시스템정보 확인
pstree, ifconfig, netstat –anp, df –h, cat /rpoc/cpuinfo, cat /proc/meminfo, uname –a 등의 명령으로 OS설치후의 시스템의 기본정보를 체크합니다.
 
① 커널 버전 확인
[root@nextline ~]# uname –a

 
 
② 현재 오픈된 포트와 서비스 확인
[root@nextline ~]# netstat –anp
[root@nextline ~]# netstat -anp|grep LISTEN
tcp   0 0 0.0.0.0:3306   0.0.0.0:*    LISTEN 16561/mysqld  
tcp   0 0 0.0.0.0:110    0.0.0.0:*    LISTEN 2579/xinetd   
tcp   0 0 0.0.0.0:21   0.0.0.0:*     LISTEN 2579/xinetd   
tcp   0 0 61.100.191.46:53     0.0.0.0:*     LISTEN 2525/named    
tcp   0 0 127.0.0.1:53    0.0.0.0:*   LISTEN 2525/named    
tcp   0 0 0.0.0.0:22   0.0.0.0:*      LISTEN 2579/xinetd   
tcp   0 0 0.0.0.0:25    0.0.0.0:*     LISTEN 2598/sendmail: acce
tcp   0 0 127.0.0.1:953  0.0.0.0:*    LISTEN 2525/named    
tcp   0 0 :::80   :::* LISTEN 16205/httpd
 
apache, mysql, bind, sendmail, pop3, ssh, ftp 서비스가 구동중임을 확인하실 수 있습니다.
 
③ 현재 실행중인 프로세스를 트리구조로 보기
[root@nextline ~]# pstree
 

 
 
 
④ 네트워크 인터페이스에 설정된 아이피 주소 확인
[root@nextline ~]# ifconfig
HWaddr 00:0B:6A:DC:4B:FE # 인터페이스의 MAC 주소
Inet addr: 10.0.0.52      # 인터페이스에 할당된 주소
Bcast : 10.0.0.255             # 브로드캐스트 주소
Mask : 255.255.255.0     # 서브넷마스크 비트
MTU : 1500     # 최대 전송단위(Maximum Transfer Unit)
# 부팅 후 현재까지 받은 패킷정보
RX packets:473988 errors: 0 dropped:0 overruns:0 frame:0
# 부팅 후 현재까지 보낸 패킷정보
RX packets:473988 errors: 0 dropped:0 overruns:0 frame:0
Collisions:0 : # 충돌난 패킷 수

 
 
⑤ 디스크 용량을 확인
[root@nextline ~]# df –h


 
⑥ CPU 정보 확인
[root@nextline ~]# cat /proc/cpuinfo

 
 
⑦ 메모리 정보 확인
[root@nextline ~]# cat /proc/meminfo

 

실 메모리와 현재 사용중인 메모리 용량 확인
[root@nextline ~]# free –m
실 메모리 용량 : 768M
현재 사용중인 메모리 용량 : 94M

 
 
2) 초기 실행 데몬 선택
ntsysv을 통해 cron, network, xinetd, syslog 이외 시스템에 불필요한 데몬은 중지시킵니다.
[root@nextline bin]# ntsysv

 
부팅시 해당 서비스가 구동되도록 하시려면 해당 서비스 항목에 스페이스바를 이용하여[*] 를 체크하여 주시면 됩니다.

 
 
 
3) 불필요한 패키지 제거
시스템에 설치되어 있는 패키지 리스트는 /root/nextinstall.log 에 기록되어 있습니다.
rpm 명령어를 통해 패키지를 삭제합니다.
 
rpm 명령어 및 옵션
새로운 패키지를 설치하거나 업그레이드, 삭제시 사용
 
패키지 설치 옵션
-i : 새로운 패키지를 설치할 때 사용  (--install)
-U : 기존의 패키지를 새로운 버전의 패키지로 업그레이드할 때 사용하고 설치된 패키지가
  없을 경우 패키지를 설치( -i 옵션과 같음)
-F : 이전 버전이 설치되어 있는 경우에만 설치 (--freshen)
-v : 메시지를 자세히 보여줌
-h : '#'기호로 표시해 줌
 
--force : 기존에 설치된 패키지와 관계없이 강제로 설치 합니다.
--nodeps : 의존성 관계를 무시하고 설치 합니다.
-vv : 메시지를 아주 자세히 보줍니다.
--oldpackage : 구버전으로 다운그레이드할 때 사용합니다.
--rebuilddb : 특정한 패키지 설치후에 rpm패키지로 검색했으나 나타나지 않을 때 rpm데이
터베이스를 업데이트합니다
 
정리
-ivh : 새로운 패키지 설치
-Uvh : 업그레이드하거나 새로운 패키지 설치
-Fvh : 이전 버전의 패키지가 있는 경우에만 패키지 설치
 
rpm 명령어 사용 예제
 
proftpd 패키지를 설치하거나 업데이트 합니다.
[root@nextline ~]# rpm -Uvh proftpd-1.2.9-1.9.i386.rpm
 
패키지 제거옵션
 
옵션
-e : 설치된 패키지를 제거합니다.
--nodeps : 제거시 의존성을 무시하고 제거합니다.(해당 옵션 사용시 의존성 관련 패키지들이 오류가 발생할 수 있으니 주의 하시기 바랍니다.)
 
rpm 패키지 제거 옵션 사용 예제
 
sendmail 패키지 리스트를 확인합니다.
[root@nextline ~]# rpm -qa | grep sendmail 
sendmail-devel-8.11.6-27.73
sendmail-8.11.6-27.73
sendmail-cf-8.11.6-27.73
 
sendmail-devel-8.11.6-27.73 라는 rpm 패키지를 삭제 합니다
[root@nextline ~]# rpm -e sendmail-devel-8.11.6-27.73
 
proftpd 패키지에 의존성이 있더라도 무시하고 제거합니다.
[root@nextline ~]# rpm -e proftpd --nodeps
 
rpm 패키지 검색 옵션
설치된 패키지와 각 패키지에 포함된 파일들을 검색하여 확인해 볼 수 있습니다.
 
관련옵션
-q : 질의시에 꼭 써야하는 옵션입니다. 패키지를 찾으면 패키지이름과 버전만 표시합니다.
-i : 설치된 패키지의 정보를 보여준다. -p옵션과 사용하면 패키지 파일정보를 보여줍니다.
-l : 패키지에 포함된 모든 파일을 보여준다. 역시 -p와 사용하려면 정확한 파일명을 보여줍니다. (--list)
-p 파일명: 패키지의 파일에 대한 정보를 보여줍니다.  정확한 이름을 입력해야 합니다.
-a : 시스템에 설치된 모든 패키지목록을 보여줍니다. (--all)
패키지명을 잘 모르는 경우에는 '| grep 패키지명'을 붙여 사용하면 유용합니다.
-f 파일명: 지정된 파일이 포함된 패키지를 출력합니다.
-c : 해당패키지의 설정파일이나 스크립트파일을 보여줍니다.
-d : 해당패키지의 문서파일을 출력합니다.
-R : 어떤 패키지에 의존하고 있는지를 보여줍니다. (--requires)
 
rpm 패키지 검색 옵션 사용 예제
 
설치된 sendmail의 패키지이름과 버전을 보여준다.
[root@nextline ~]# rpm -q sendmail
sendmail-8.11.6-27.73
 
현재 설치된 모든 패키지를 보여준다.
[root@nextline ~]# # rpm –qa
 
sendmail관련 패키지를 보여준다.
[root@nextline ~]# rpm -qa |grep sendmail
sendmail-devel-8.11.6-27.73
sendmail-8.11.6-27.73
sendmail-cf-8.11.6-27.73
 
sendmail이 설치되어 있는 경로를 보여준다.
[root@nextline ~]# rpm -ql sendmail
 
4) 시스템 및 CMOS 시간동기화
/root/bin/timesync 스크립트를 통해 인터넷 시간서버와 매일 04시에 시스템 및 하드웨어 시간의 동기화 작업이 이루어집니다.
 
timesync 스크립트는 /root/bin/timesync 경로에 존재합니다.

 
 
timesync 스크립트는 crontab에 의해 매일 04시에 인터넷 시간서버와 동기화 될 수 있도록 설정되어있습니다.

 
 
5) yum을 이용한 최신패키지 업데이트
불필요한 패키지 제거 후 yum 서버를 통해 최신패키지로 업데이트 합니다.
 
Yum은 지정된 서버주소로부터 업데이트된 패키지들을 검사하여 다운로드하고 설치까지 처리해주는 텍스트 기반의 업데이트 프로그램입니다. 또한 의존성 문제도 같이 검사하여 관련 패키지들을 자동으로 설치해주기 때문에 이전에 다소 불편하던 RPM 기반의 프로그램 설치 및 업데이트를 대폭 개선한 패키지 관리자입니다.
 
① 설정 확인
 
yum 업데이트를 위해서는 업데이트 서버의 URL와 기타 세부적인 설정사항들을 확인해야 합니다. yum 동작에 필요한 설정은 /etc/yum.conf 파일에 기록되어 있으므로, 텍스트 편집기 등을 통해 yum 설정내용을 확인합니다. 업데이트 주소는 /etc/yum.repos.d/CentOS-Base.repo 파일에서 확인 및 수정 할 수 있습니다.
 
 
② 업데이트
위와 같이 설정사항에 이상이 없다면 바로 업데이트 명령을 통해 패키지를 업데이트 할 수 있습니다.
 
[root@nextline ~]# yum -y update

 
 
위의 명령을 입력하면 설정파일에 있는 경로를 참고하여 업데이트 서버에 접속한 뒤, 현재 시스템의 패키지들과 업데이트 서버의 패키지들을 비교하여 최신의 패키지를 모두 업데이트 하게 됩니다. 위의 명령은 손쉽게 모든 패키지들을 업데이트 할 수 있기에 가장 많이 사용되는 업데이트 방법입니다. 만일 특정한 패키지들만 업데이트 하고자 하는 경우에는 아래와 같이 원하는 패키지를 별도로 지정해 줍니다.
 
[root@localhost ~] # yum update [package_name1] [package_name2]...
 
패키지를 업데이트하기 전에 업데이트된 패키지가 있는지를 체크하기 위해서는 아래와 같이 체크 옵션을 사용합니다.
 
[rootlocalhost ~] # yum check-update
 
단, check-update의 경우 현재 시스템에 설치된 패키지를 기준으로 업데이트 목록을 출력해주기 때문에 업데이트 서버에는 등록되어 있지만 현재 시스템에 설치되지 않은 패키지 목록은 볼 수 없습니다. 이럴 경우 아래와 같이 list 명령을 사용해서 업데이트 서버에 있는 모든 패키지 목록을 확인할 수 있습니다.
 
[root@localhost ~] # yum list
 
반대로 현재 시스템에 설치되어 있는 패키지 목록을 확인하기 위해서는 아래와 같은 명령을 입력합니다.
 
[root@localhost ~] # yum list installed
 
③ 신규설치
 
yum을 이용하면 기존 설치되어 있는 프로그램의 업데이트 뿐만 아니라 시스템에 아직 설치되어 있지 않은 새로운 패키지들도 검사하여 설치가 가능합니다. 앞서 말한 yum list 명령으로 업데이트 서버에 있는 패키지 리스트를 확인한 다음, 설치를 원하는 새로운 패키지가 있습니다.면 install 명령으로 설치를 진행할 수 있습니다.
[root@localhost ~] # yum install package_name
 
여러 패키지들을 한 번에 설치하기를 원합니다면 해당 패키지를 계속해서 적어 줍니다. (install 옵션에서는 기본적으로 하나 이상의 패키지를 지정해야 합니다.)
 
[root@localhost ~] # yum install package_name1 [package_name2] ...
 
④ 패키지 삭제
 
yum을 이용하여 패키지를 업데이트하고 신규 설치하는 것 이외에 패키지를 삭제하는 기능도 수행할 수 있습니다.
 
[root@localhost ~] # yum remove package_name
여러 패키지들을 삭제하고자 합니다면, 신규설치의 경우와 같이 삭제 명령 뒤에 해당 패키지를 계속해서 지정해주면 됩니다.
 
⑤ 기타 기능
 
업데이트 서버에 등록되어 있는 패키지에 대한 상세한 정보를 보기 위해서는 아래와 같은 명령을 입력합니다.
[root@localhost ~] # yum info package_name
 
최근에 업데이트한 패키지에 대한 정보는 아래 명령으로 확인합니다.
[root@localhost ~] # yum info updates
 
6) grub.conf 설정
업데이트 된 커널로 부팅하기 위해 grub.conf 파일을 수정합니다.
[root@localhost ~] # vi /etc/grub.conf

 
 
 
항목설명
default=0
기본값으로 부팅되도록 설정하는 부분입니다. grub 선택화면에서 특별히 선택하지 않으면
여기에 설정되어진 값에 해당하는 운영체제를 로딩합니다. 현재 설정인 0값은 아래 항목중
에서 제일 먼저 설정되어 있는 운영체제를 말합니다.
 
timeout=10
grub 부트화면에서의 대기시간입니다. 단위는 초입니다. 현재 설정은 10초간 선택이 없으면
default에 설정된 값으로 부팅됩니다.
 
splashimage=(hd0,3)/boot/grub/splash.xpm.gz
부트 화면의 배경이미지를 지정하는 부분입니다. xpm형태의 그림이미지를 압축한 xpm.gz파일
을 사용합니다. (hd0,3)의 뜻은 /dev/hda4라는 뜻입니다.
 
기본구조
title 부트_엔트리_설명
root (하드디스크디바이스명,부트파티션명)
kernel /커널이미지경로 ro root=루트디바이스명
initrd /초기화에_필요한_이미지경로
 
7) 시스템 리부팅
업데이트된 최신커널로 부팅합니다.
 
8) HDD 속도체크
커널업데이트 후 하드디스크 속도체크를 합니다.
UDMA(Ultra DMA) 사용여부 체크
버스를 통하여 하드디스크 드라이브와 램간에 데이터를 전송하기 위한 프로토콜로서, 이전의 DMA 인터페이스 보다 2배 이상의 속도를 향상시켜 줍니다.

 
 
 
UDMA(Ultra DMA) 설정

 
 
 
UDMA(Ultra DMA) 해제

 
 
 
HDD 읽기 속도 체크
다음은 초당 24MByte 읽기 속도를 나타내고 있습니다.

 
 
---------------------------------------------------------------------------------------
 
3. 시스템 운영 스크립트 활용

1) addon 사용자관리 명령어
addon 명령어는 일반 쉘계정 생성, 아파치 VirtualHost 및 /etc/mail/local-host-names 등록을 한번에 설정할 수 있는 명령어입니다.
스크립트 경로 : /root/bin/addon

 
 
 
① 사용방법
[root@nextline bin]# /root/bin/addon nextline[계정명] nextline.co.kr[도메인]
위에서 입력한 계정(nextline)의 홈디렉토리가 도메인(nextline.co.kr)의 DocumentRoot 로 기본 설정됩니다.
-> nextline 의 비밀번호를 입력하십시오 : ***** [생성한 계정의 비밀번호를 입력합니다.]
-> 설치완료! [웹 + 메일서버 재가동 요망] [addon 명령어 실행 후 아파치와 sendmail에 적용될 수 있도록 데몬을 재가동 하시기 바랍니다.]

 
 
② 계정생성 확인
ftp을 이용하여 nextline 계정이 정상적으로 생성되었는지 확인합니다.

 
 
 
생성된 nextline 계정으로 정상적으로 ftp에 접속된 화면입니다.[도메인 리져빙 타임으로 인해 연결되지 않을 시 FTP주소란에 아이피를 기입하시기 바랍니다.]

 
 
 
③ 아파치 설정확인(httpd.conf)

 
 
addon 명령어를 통해 설정한 nextline.co.kr 도메인이 VirtualHost에 자동 등록되어 있습니다.

DocumentRoot /home/nextline/public_html
ServerName nextline.co.kr
ServerAlias www.nextline.co.kr


 
 
 
④ /etc/mail/ local-host-names 확인

 
⑤ 데몬 재가동
아파치 데몬 재가동
[root@nextline ~]# /usr/local/apache/bin/apachectl restart
Sendmail 데몬 재가동
[root@nextline ~]# /etc/rc.d/init.d/sendmail restart

 
 
2) mail 메일계정관리 명령어
mailadd 명령어는 메일계정을 자동 생성시켜주는 명령어입니다.
① 사용방법
[root@nextline ~]# /root/bin/mailadd next[계정명] nextline@nextline.co.kr[메일주소]   
next 의 비밀번호를 입력하십시오: ***** [생성한 메일계정의 비밀번호를 입력합니다.]   
설치완료! [메일서버 재가동 요망] [메일서버에 적용하기위해 sendmail을 재가동합니다.]

 
 
② /etc/mail/virtusertable 확인 및 sendmail 데몬 재가동

 
 
③ 메일계정 작동확인
생성한 메일계정이 정상적으로 작동하는지 아웃룩 셋팅을 통해 확인합니다.
넥스트라인 기술문서(Outlook-Express, Microsoft Outlook 설정하기)
http://nextline.net/?inc=support&html=manual#z
 
3) dbadd 디비계정 관리명령어
데이터 베이스 계정 및 디비를 자동생성해주는 명령어 입니다.
① 사용법
[root@nextline ~]# /root/bin/dbadd nextline[데이터베이스명] nextline[패스워드]
Enter password: [mysql root 패스워드을 입력합니다.]
데이터베이스명으로 입력한 nextline가 디비유저명과 동일하게 설정됩니다.

 
② 데이터베이스 계정 확인
위에서 생성한 nextline 계정으로 데이터베이스에 정상적으로 로그인 되는 화면입니다.
[root@nextline ~]# mysql -u nextline -p
Enter password:[nextline 데이터베이스 패스워드을 입력합니다.]

 
 
4) set_dns 초기 네임서버관리 명령어
set_dns 스크립트는 자체네임서버를 구축할 시 사용되는 명령어로 초기 네임서버 설정을 자동으로 설정해주는 명령어입니다.

① 사용방법
[root@nextline ~]# /root/bin/set_dns nextline.co.kr
set_dns 는 초기 네임서버 셋팅툴입니다 -> set_dns 로 네임서버 셋업을 진행하시겠습니까 ? [y/n]: [기본값 n]: y [y를 입력하여 set_dns을 이용해 네임서버 설정을 합니다.]
설치완료! [네임서버 재가동 요망][네임서버에 적용하기위해 named을 재가동 합니다.]

 
   
② /etc/named.conf 확인

 
 

 
 
③ zone 파일확인
[root@nextline ~]# cat /var/named/zone-nextline.co.kr

 
   
④ named 데몬 재가동
네임서버에 nextline.co.kr 도메인의 설정내용을 적용시키기 위해 named 데몬을 재가동 합니다.
[root@nextline ~]# /etc/rc.d/init.d/named restart

 
   
5) APACHE, PHP, MYSQL 연동 자동인스톨
① apm_install를 이용한 A.P.M 자동설치(초기 설치에 사용)
스크립트경로 : [root@nextline ~]# /root/bin/apm/apm_install

 
 
 
apm_install를 이용한 A.P.M 자동설치 (넥스트라인 기술문서)
http://nextline.net/?inc=support&html=pds_view&no=108&name=리눅스&home=Apache
② apm_reinstall를 이용한 A.P.M 자동설치(A.P.M 삭제 후 재설치시 사용)
apm_install 에서 보안설정이 제외된 스크립트입니다. 초기 apm_install 스크립트를 이용하여 설치하신 경우 보안 설정이 이미 완료된 상태이므로 보안 설정 중복으로 인한 오류를 발생되지 않도록 초기 설치를 제외한 A.P.M 재설치시에는 apm_reinstall 스크립트를 이용하여 설치합니다.
스크립트경로 : [root@nextline ~]# /root/bin/apm/apm_install

 
 
③ apm_uninstall를 이용한 A.P.M 자동삭제
스크립트경로 : [root@nextline ~]# /root/bin/apm/apm_uninstall

 
   
apm_uninstall를 이용한 A.P.M 자동삭제 (넥스트라인 기술문서)
http://nextline.net/?inc=support&html=pds_view&no=110&name=리눅스&home=Apache
④ apm_phpupdate를 이용한 PHP 자동업그레이드
스크립트경로 : [root@nextline ~]# /root/bin/apm/apm_phpupdate

 
 
apm_phpupdate를 이용한 PHP 자동업그레이드 (넥스트라인 기술문서)
http://nextline.net/?inc=support&html=pds_view&no=109&name=리눅스&home=PHP
⑤ APM 소스설치
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=116&name=리눅스&home=Apache
 
---------------------------------------------------------------------------------------
4. 시스템 보안 설정
 
1) logout 시 command history 삭제하기
root로 로그인시부터 사용했던 명령어의 사용기록을 로그아웃시에는 반드시 지우도록 설정합니다.
설정파일 : /root/.bash_logout
/etc/skel/.bash_logout 에 등록하면 일반계정 생성시에도 적용됩니다.

 

 
   
2) 자동 로그아웃 환경변수 설정
로그인후 아무런 입력이 없을 경우의 자동 로그아웃시간 등의 설정을 추가합니다.
[root@nextline ~]# vi /etc/profile

 
 
변경된 profile을 적용합니다.
[root@nextline ~]# source /etc/profile
 
3) su 명령어 제한하기
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=51&name=리눅스&home=보안
 
4) PAM 및 ulimit를 활용한 리소스(resource) 제한
시스템 자원을 너무 많이 사용하는 특정한 유저나 프로그램의 무한루프방지하기 위한 설정입니다. 서비스 거부공격(프로세스수, 메모리사용량 등) 예방
#사용자가 로그인시 적용됨
[root@nextline ~]# vi /etc/pam.d/login

 
 
[root@nextline ~]# vi /etc/security/pam_limits.so

 
 
*     soft    core    0  #CORE 파일을 생성하지 않습니다.
*     hard    rss     10000   #사용 가능한 메모리를 5M로 제한합니다.
@     hard    nproc   20 # 생성 프로세스를 20개로 제한합니다.
@nextline  soft    nproc   10 # 생성 프로세스를 10개로 제한합니다.
@nextline  hard    nproc   30 # 생성 프로세스를 30개로 제한합니다.
@nextline  hard    maxlogins    4  # 동시접속을 4개로 제한합니다.
*     hard    maxlogins    6  # 동시접속을 6개로 제한합니다.
* : 모든유저
@users : users라는 그룹에 속하는 유저
hard : 절대 한계를 넘을 수 없음
 
maxlogins 에 설정된 값 이상 접속시 /var/log/messages 에 다음과 같은 로그가 기록됩니다.
Mar 20 00:31:45 ns pam_limits[29668]: Too many logins (max 4) for nextline
 
5) SUID와 SGID 파일 및 디렉토리
일반 유저 권한으로 suid/sgid가 설정된 파일을 실행할 때에는 해당 파일의 소유자 또는 소유그룹 권한으로 작동하게 되므로 suid/sgid는 보안적인 관점에서 매우 중요한 역할을 합니다. 이 때문에 /usr/sbin/sendmail과 같이 전통적으로 root 권한의 suid/sgid가 설정된 파일에서 보안 취약성이 많이 발견된 것이 사실입니다. 따라서 초기 시스템 구축시 뿐만 아니라 정기적으로 시스템에서 suid/sgid가 설정된 파일을 모니터링 하여 suid/sgid가 불필요하다면 파일 자체를 삭제 하거나 s비트를 해제하는 것이 좋습니다.
 
[root@nextline ~]# find / -type f \( -perm 4000 –o –perm -2000 \)
또는
[root@nextline ~]# find / -type f –perm +6000 –ls
 
위 명령어 다음과 같은 파일들이 출력됩니다.(배포판이나 버전에 따라 결과가 다를 수 있습니다.)
 
CenOS 4.5 (2.6.9-67.0.4.ELsmp) 기준
/usr/lib/mc/cons.saver
/usr/sbin/lockdev
/usr/sbin/sendmail.sendmail
/usr/sbin/utempter
/usr/sbin/ccreds_validate
/usr/libexec/pt_chown
/usr/libexec/openssh/ssh-keysign
/usr/kerberos/bin/ksu
/usr/bin/ssh-agent
/usr/bin/lppasswd
/usr/bin/lockfile
/usr/bin/slocate
/usr/bin/sg
/usr/bin/jfbterm
/bin/su
/sbin/pam_timestamp_check
 
suid가 설정된 파일에서 s비트 해제
[root@nextline ~]# chmod u-s /usr/sbin/suid_file
suid가 설정된 파일에서 s비트 설정
[root@nextline ~]# chmod u+s /usr/sbin/suid_file
sgid가 설정된 파일에서 s비트 해제
[root@nextline ~]# chmod g-s /usr/sbin/suid_file
sgid가 설정된 파일에서 s비트 설정
[root@nextline ~]# chmod g+s /usr/sbin/suid_file
 
6) 무소속 파일찾아 소유권 부여하기
[root@nextline ~]# find / -nouser -o –nogroup
[root@nextline ~]# find / \( -nouser -o -nogroup \) \-exec chown root.root {} \;
 
7) /dev 에 device 파일외의 것이 있는지 확인
[root@nextline ~]# find /dev -type f
/dev/MAKEDEV 등과 같이 device 를 관리하고자 하는 파일 이외의 것이 검색되면 일단 의심해봐야 합니다.
CenOS 4.5 (2.6.9-67.0.4.ELsmp) 기준

 
 
8) 원격접속허용파일 생성 여부 점검
.rhosts 파일은 원격에서 패스워드 인증없이 바로 접속하기 위해서 사용되는 파일입니다.
 
[root@nextline ~]# find / -name .rhosts -exec ls -l {} \;
[root@nextline ~]# find / -name .rhosts -exec cat {} \;
 
9) 숨김파일 또는 비정상적인 파일 존재 여부 점검
[root@nextline ~]# find / -name ".. " -print -xdev
[root@nextline ~]# find / -name ".*" -print -xdev | cat -v
[root@nextline ~]# find / -name ".*" \-exec ls -alF {} \;
 
10) 파일시스템 마운트
웹해킹시 해킹에 필요한 파일이나 백도어 실행 파일이 업로드되는 곳으로 /tmp와 /dev/shm 디렉토리가 주로 이용됩니다.
이 디렉토리는 누구나 읽고 쓸 수 있는 곳으로 공격자들이 일반 유저 권한을 얻은 경우 이 디렉토리에 base 기지를 구축 하는 경우가 많습니다. 그러므로, /tmp 는 서버의 경우 반드시 별도의 파티션으로 나누어 noexec, nosuid, nodev 옵션을 설정하여 해킹에 이용되는 파일이 업로드 되더라도 실행을 금지시켜 백도어 포트가 오픈되는 것을 막도록 합니다.
마운트 옵션 설명
 
파일시스템 마운트 : fstab
설정화일 경로 : /etc/fstab
LABEL=/  /  ext3    defaults   1 1
none     /dev/pts     devpts  gid=5,mode=620  0 0
none     /proc   proc    defaults   0 0
none     /sys    sysfs   defaults   0 0
LABEL=/usr    /usr    ext3    defaults,nodev   1 2
LABEL=/var    /var    ext3    defaults,nodev   1 2
/dev/sda2     swap    swap    defaults   0 0
none     /dev/shm     tmpfs   defaults,noexec   0 0
LABEL=/home   /home  ext3   defaults,nosuid,usrquota,data=journal,noatime   1 2
LABEL=/tmp    /tmp    ext3    defaults,noexec,nosuid        1 2
 
[파일시스템 장치명] [마운트 포인트] [파일시스템 종류] [옵션] [dump관련설정] [파일점검 옵션]
 
-파일시스템 장치명 : 장치명을 지정
ex) /dev/hda2
 
-마운트 포인트 : 장치가 연결된 마운트 지점
ex) /home
 
-파일시스템 종류 : 파티션이 사용하는 파일시스템 지정
ex) ext2, ext3
 
-옵션 : 파일시스템의 속성을 설정하는 옵션
defaults (rw, nouser,auto,exec suid 속성을 모두 가지는 옵션)
auto : 부팅시 자동 마운트
noauto : 부팅시 자동마운트 안함
exec : 실행파일이 실행되는 것을 허용
no exec : 실행파일이 실행되는 것을 허용 안함
suid : setuid, setgid의 사용을 허용하는 옵션
nosuid : setuid, setgid의 사용을 거부
ro (read only) : 읽기 전용
rw (ead write) : 읽고 쓰기 가능
user : 일반 계정 사용자들도 마운트 할 수 있는 옵션
nouser : root만 mount 가능
usrquota : 일반 사용자 quota적용
grpquota : 그룹 quota 적용
 
-dump 관련 설정 : 0 또는 1을 지정
0 : 덤프되지 않은 파일시스템
1 : 데이터 백업을 위해 dump가능
 
-파일점검 옵션 :0,1,2값을 지정
0 : 부팅시 fsck를 사용하지 않음
1 : 루트 파일시스템을 의미
2 : 루트 파일시스템 이외의 파일시스템을 의미
 
11) ch_perm을 통한 파일 및 디렉토리 권한 설정
ch_perm 스크립트에 의해 kill, /etc/service, 등 주요 설정파일 및 명령어에 대한 퍼미션 보안이 crontab에 의해 주기적으로 실행됩니다.
 
ch_perm 스크립트는 /root/bin/ch_perm 경로에 존재합니다.

 
 
ch_perm 스크립트는 crontab에 의해 매일 03시에 주기적으로 갱신되어 쉘 명령어 및 주요 파티션의 퍼미션을 재설정합니다.

 
 
ch_perm 퍼미션 조정 내용
rm /usr/sbin/adduser > /dev/null 2>&1
rm -rf /var/tmp /usr/tmp > /dev/null 2>&1
chattr +i /etc/services > /dev/null 2>&1
chmod 751 / > /dev/null 2>&1
chmod 701 /bin > /dev/null 2>&1
chmod 700 /boot > /dev/null 2>&1
chmod 1777 /tmp > /dev/null 2>&1
chmod 701 /dev > /dev/null 2>&1
chmod 755 /dev/shm > /dev/null 2>&1
chmod 751 /etc > /dev/null 2>&1
chmod 751 /home > /dev/null 2>&1
chmod 751 /lib/modules > /dev/null 2>&1
chmod 700 /mnt > /dev/null 2>&1
chmod 700 /root > /dev/null 2>&1
chmod 751 /sbin > /dev/null 2>&1
chmod 751 /usr > /dev/null 2>&1
chmod 751 /usr/local > /dev/null 2>&1
chmod 701 /usr/local/apache/cgi-bin > /dev/null 2>&1
chmod 700 /usr/local/apache/conf > /dev/null 2>&1
chmod 705 /usr/local/apache/htdocs > /dev/null 2>&1
chmod 701 /usr/local/apache/logs > /dev/null 2>&1
chmod 751 /usr/local/bin > /dev/null 2>&1
chmod 751 /usr/local/sbin > /dev/null 2>&1
chmod 700 /usr/local/src > /dev/null 2>&1
chmod 751 /usr/sbin > /dev/null 2>&1
chmod 750 /usr/src > /dev/null 2>&1
chmod 751 /var > /dev/null 2>&1
chmod 750 /var/log > /dev/null 2>&1
chmod 751 /var/named > /dev/null 2>&1
chmod 751 /var/run > /dev/null 2>&1
chmod 755 /var/tmp > /dev/null 2>&1
chmod 750 /etc/cron.* > /dev/null 2>&1
chmod 640 /etc/crontab > /dev/null 2>&1
chmod 750 /etc/default > /dev/null 2>&1
chmod 600 /etc/exports > /dev/null 2>&1
chmod 600 /etc/fstab > /dev/null 2>&1
chmod 600 /etc/hosts.allow > /dev/null 2>&1
chmod 600 /etc/hosts.deny > /dev/null 2>&1
chmod 600 /etc/inittab > /dev/null 2>&1
chmod 400 /etc/issue > /dev/null 2>&1
chmod 400 /etc/issue.net > /dev/null 2>&1
chmod 600 /etc/login.defs > /dev/null 2>&1
chmod 750 /etc/logrotate.d > /dev/null 2>&1
chmod 600 /etc/mtab > /dev/null 2>&1
chmod 650 /etc/my.cnf > /dev/null 2>&1
chmod 750 /etc/rc.d > /dev/null 2>&1
chmod 600 /etc/redhat-release > /dev/null 2>&1
chmod 750 /etc/rpm > /dev/null 2>&1
chmod 600 /etc/rpc > /dev/null 2>&1
chmod 600 /etc/securetty > /dev/null 2>&1
chmod 751 /etc/security > /dev/null 2>&1
chmod 700 /etc/skel > /dev/null 2>&1
chmod 750 /etc/ssh > /dev/null 2>&1
chmod 750 /etc/sysconfig > /dev/null 2>&1
chmod 750 /etc/xinetd.d > /dev/null 2>&1
chmod 750 /etc/vsftpd > /dev/null 2>&1
chown named /etc/named.conf > /dev/null 2>&1
chown named /etc/rndc.* > /dev/null 2>&1
chmod 700 /sbin/netreport > /dev/null 2>&1
chmod 111 /usr/bin/sudo > /dev/null 2>&1
chmod 550 /usr/bin/last > /dev/null 2>&1
chmod 550 /usr/bin/uptime > /dev/null 2>&1
chmod 700 /usr/sbin/groupdel > /dev/null 2>&1
chmod 600 /etc/httpd/conf/httpd.conf > /dev/null 2>&1
chmod 600 /etc/lilo.conf* > /dev/null 2>&1
chmod 600 /etc/logrotate.conf > /dev/null 2>&1
chmod 600 /etc/mail/access > /dev/null 2>&1
chmod 600 /etc/mail/local-host-names > /dev/null 2>&1
chmod 600 /etc/mail/virtusertable > /dev/null 2>&1
chmod 600 /etc/proftpd.conf > /dev/null 2>&1
chmod 600 /usr/local/apache/conf/*.conf > /dev/null 2>&1
chmod 600 /usr/local/apache/logs/*_log > /dev/null 2>&1
chmod 600 /var/log/httpd/*_log > /dev/null 2>&1
chmod 640 /etc/named.conf > /dev/null 2>&1
chmod 700 /bin/cat > /dev/null 2>&1
chmod 550 /bin/df > /dev/null 2>&1
chmod 550 /bin/dmesg > /dev/null 2>&1
chmod 700 /bin/echo > /dev/null 2>&1
chmod 700 /bin/kill > /dev/null 2>&1
chmod 700 /bin/ln > /dev/null 2>&1
chmod 700 /bin/mail > /dev/null 2>&1
chmod 700 /bin/mount > /dev/null 2>&1
chmod 550 /bin/netstat > /dev/null 2>&1
chmod 500 /bin/ping > /dev/null 2>&1
chmod 550 /bin/ps > /dev/null 2>&1
chmod 700 /bin/rpm > /dev/null 2>&1
chmod 700 /bin/touch > /dev/null 2>&1
chmod 700 /bin/umount > /dev/null 2>&1
chmod 700 /bin/uname > /dev/null 2>&1
chmod 700 /etc/logrotate.d > /dev/null 2>&1
chmod 700 /etc/rc.d/init.d/* > /dev/null 2>&1
chmod 700 /sbin/fdisk > /dev/null 2>&1
chmod 700 /sbin/ifconfig > /dev/null 2>&1
chmod 700 /sbin/pwdb_chkpwd > /dev/null 2>&1
chmod 700 /sbin/route > /dev/null 2>&1
chmod 700 /sbin/unix_chkpwd > /dev/null 2>&1
chmod 700 /usr/bin/at > /dev/null 2>&1
chmod 700 /usr/bin/c++ > /dev/null 2>&1
chmod 700 /usr/bin/chage > /dev/null 2>&1
chmod 700 /usr/bin/chattr > /dev/null 2>&1
chmod 700 /usr/bin/chfn > /dev/null 2>&1
chmod 700 /usr/bin/chsh > /dev/null 2>&1
chmod 700 /usr/bin/crontab > /dev/null 2>&1
chmod 700 /usr/bin/curl > /dev/null 2>&1
chmod 700 /usr/bin/file > /dev/null 2>&1
chmod 550 /usr/bin/find > /dev/null 2>&1
chmod 700 /usr/bin/free > /dev/null 2>&1
chmod 700 /usr/bin/ftp > /dev/null 2>&1
chmod 700 /usr/bin/gcc > /dev/null 2>&1
chmod 700 /usr/bin/gpasswd > /dev/null 2>&1
chmod 751 /usr/bin/host > /dev/null 2>&1
chmod 700 /usr/bin/lsattr > /dev/null 2>&1
chmod 700 /usr/bin/make > /dev/null 2>&1
chmod 700 /usr/bin/man > /dev/null 2>&1
chmod 700 /usr/bin/mc > /dev/null 2>&1
chmod 700 /usr/bin/msgfmt > /dev/null 2>&1
chmod 700 /usr/bin/nc > /dev/null 2>&1
chmod 700 /usr/bin/ncftp > /dev/null 2>&1
chmod 700 /usr/bin/ncftpbatch > /dev/null 2>&1
chmod 700 /usr/bin/ncftpbookmarks > /dev/null 2>&1
chmod 700 /usr/bin/ncftpget > /dev/null 2>&1
chmod 700 /usr/bin/ncftpls > /dev/null 2>&1
chmod 700 /usr/bin/ncftpput > /dev/null 2>&1
chmod 700 /usr/bin/newgrp > /dev/null 2>&1
chmod 700 /usr/bin/nmap > /dev/null 2>&1
chmod 700 /usr/bin/nslookup > /dev/null 2>&1
chmod 700 /usr/bin/objdump > /dev/null 2>&1
chmod 700 /usr/bin/oldps > /dev/null 2>&1
chmod 700 /usr/bin/passwd > /dev/null 2>&1
chmod 700 /usr/bin/patch > /dev/null 2>&1
chmod 700 /usr/bin/pmake > /dev/null 2>&1
chmod 750 /usr/bin/pstree > /dev/null 2>&1
chmod 700 /usr/bin/python > /dev/null 2>&1
chmod 750 /usr/bin/rcp > /dev/null 2>&1
chmod 700 /usr/bin/rlog > /dev/null 2>&1
chmod 750 /usr/bin/rlogin > /dev/null 2>&1
chmod 750 /usr/bin/rsh > /dev/null 2>&1
chmod 700 /usr/bin/scp > /dev/null 2>&1
chmod 700 /usr/bin/ncftpbatch > /dev/null 2>&1
chmod 700 /usr/bin/ncftpbookmarks > /dev/null 2>&1
chmod 700 /usr/bin/ncftpget > /dev/null 2>&1
chmod 700 /usr/bin/ncftpls > /dev/null 2>&1
chmod 700 /usr/bin/ncftpput > /dev/null 2>&1
chmod 700 /usr/bin/newgrp > /dev/null 2>&1
chmod 700 /usr/bin/nmap > /dev/null 2>&1
chmod 700 /usr/bin/nslookup > /dev/null 2>&1
chmod 700 /usr/bin/objdump > /dev/null 2>&1
chmod 700 /usr/bin/oldps > /dev/null 2>&1
chmod 700 /usr/bin/passwd > /dev/null 2>&1
chmod 700 /usr/bin/patch > /dev/null 2>&1
chmod 700 /usr/bin/pmake > /dev/null 2>&1
chmod 750 /usr/bin/pstree > /dev/null 2>&1
chmod 700 /usr/bin/python > /dev/null 2>&1
chmod 750 /usr/bin/rcp > /dev/null 2>&1
chmod 700 /usr/bin/rlog > /dev/null 2>&1
chmod 750 /usr/bin/rlogin > /dev/null 2>&1
chmod 750 /usr/bin/rsh > /dev/null 2>&1
chmod 700 /usr/bin/scp > /dev/null 2>&1
chmod 700 /usr/bin/sftp > /dev/null 2>&1
chmod 700 /usr/bin/skill > /dev/null 2>&1
chmod 700 /usr/bin/ssh > /dev/null 2>&1
chmod 750 /usr/bin/telnet > /dev/null 2>&1
chmod 550 /usr/bin/top > /dev/null 2>&1
chmod 700 /usr/bin/users > /dev/null 2>&1
chmod 700 /usr/bin/vmstat > /dev/null 2>&1
chmod 550 /usr/bin/w > /dev/null 2>&1
chmod 700 /usr/bin/wget > /dev/null 2>&1
chmod 700 /usr/bin/whereis > /dev/null 2>&1
chmod 700 /usr/bin/which > /dev/null 2>&1
chmod 550 /usr/bin/who > /dev/null 2>&1
chmod 700 /usr/bin/whoami > /dev/null 2>&1
chmod 700 /usr/bin/whois > /dev/null 2>&1
chmod 700 /usr/bin/yes > /dev/null 2>&1
chmod 700 /usr/local/bin/php > /dev/null 2>&1
chmod 700 /usr/sbin/ping6 > /dev/null 2>&1
chmod 700 /usr/sbin/sshd > /dev/null 2>&1
chmod 700 /usr/sbin/tcpdump > /dev/null 2>&1
chmod 700 /usr/sbin/traceroute > /dev/null 2>&1
chmod 700 /usr/sbin/traceroute6 > /dev/null 2>&1
chmod 550 /usr/sbin/useradd > /dev/null 2>&1
chmod 550 /usr/sbin/userdel > /dev/null 2>&1
chmod 700 /usr/sbin/userhelper > /dev/null 2>&1
chmod 700 /usr/sbin/usermod > /dev/null 2>&1
chmod 700 /usr/sbin/usernetctl > /dev/null 2>&1
chmod 750 /bin/chmod > /dev/null 2>&1
chmod 500 /usr/bin/wall > /dev/null 2>&1
chmod 700 /usr/bin/write > /dev/null 2>&1
chmod 750 /usr/include > /dev/null 2>&1
chmod 751 /etc/mail > /dev/null 2>&1
chmod 751 /usr/local > /dev/null 2>&1
chmod 751 /usr/local/bin > /dev/null 2>&1
chmod 751 /usr/local/mysql > /dev/null 2>&1
chmod 751 /var/log > /dev/null 2>&1
chmod 751 /var/named > /dev/null 2>&1
chown root.users /bin/chmod > /dev/null 2>&1
ln -s /tmp /var/tmp > /dev/null 2>&1
 
12) ssh 무차별 dos 공격에 대한 방어
/var/log/secure 로그를 살펴보면 일정한 ID를 이용해서 SSH 접속 시도를 하는 것을 볼 수 있으며 이런 공격은 SSH Bruteforce(무차별 공격)로서, 패스워드 사전 파일을 이용해서 미리 지정한 아이디와 대입하여, 접속 계정을 알아 내는 해킹 방법입니다.
 
SSH Bruteforce(무차별 공격)을 차단하기 위해 넥스트라인에서는 ssh_dos_block.sh 스크립트를 crontab에 의해 주기적으로 공격시도 데이터를 주기적으로 업데이트 후 해당 아이피를 자동 차단시키는 툴을 제공하고 있습니다.
 
ssh_dos_block.sh 스크립트는 /root/bin/ssh_dos_block.sh 경로에 존재합니다.

 
 
 
ssh_dos_block.sh 스크립트가 매 30초마다 실행되도록 crontab에 등록되어 있습니다.

 
 
13) 백도어나 루트킷 방어를 위한 rkhunter 방어
백도어나 루트킷을 탐지하여 일반적으로 루트킷이 사용하는 파일 및 숨김 파일의 존재여
부를 판별해주며, 실행 시 관리자에게 각 파트별로 체크사항을 보여주는 리포트기능을 제공하는 툴입니다.
 
넥스트라인 기술문서(rkhunter을 통한 시스템 무결성 체크하기)
http://nextline.net/?inc=support&html=pds_view&no=125&name=리눅스&home=기타
 
주기적으로 rkhunter DB을 업데이트 하여 신종 루트킷이나 백도어에 대비할 수 있도록  crontab에 등록되어 있습니다.

 
 
14) 넥스트라인 방화벽(next_firewall) 정책설정
설정도구 : iptables
방화벽 경로 : /root/bin/next_firewall

 
 
 
기본 룰셋 :
inbound  : 외부에서 서버로의 접속은 다음 서비스포트에 대해서만 허용합니다.
ftp (21)/ ssh(22) / smtp(25) / dns(53) / http(80) / pop3(110) / mysql(3306) / ping
outbound : 서버에서 외부로는 모든 서비스포트를 허용합니다.
 
Next_firewall
### 룰셋 초기화
$IPTABLES -F
 
### 기본정책 설정
$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT
 
### Loopback 트래픽 허용
$IPTABLES -A INPUT -i lo -j ACCEPT
 
### 자기자신을 소스로 하는 트래픽 차단
$IPTABLES -A INPUT -i eth0 -s $IP_ADDR -j DROP
$IPTABLES -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP
 
### 상태추적 설정
$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A INPUT -p all -m state --state INVALID -j DROP
 
### 비정상적 tcp-flags 차단
$IPTABLES -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL PSH,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL URG,PSH,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,ACK,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,FIN,PSH -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,FIN,RST -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,FIN,RST,PSH -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,FIN,ACK,RST -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ALL SYN,ACK,FIN,RST,PSH -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
$IPTABLES -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
 
### 서비스포트 추가/제거를 위해서는, 반드시 아래의 설정만 수정하시기 바랍니다.
### $IPTABLES 구문앞의 (#)주석 제거후, next_firewall 를 재가동하시면 해당포트는 활성화 됩니다..
 
### ftp servive
$IPTABLES -A INPUT -p tcp --sport 1024: --dport 20 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p tcp --sport 1024: --dport 370 -m state --state NEW -j ACCEPT
 
### ssh servive
$IPTABLES -A INPUT -p tcp --sport 1024: --dport 37 -m state --state NEW -j ACCEPT
 
### telnet servive
#$IPTABLES -A INPUT -p tcp --sport 1024: --dport 23 -m state --state NEW -j ACCEPT
 
### smtp servive
$IPTABLES -A INPUT -p tcp --sport 1024: --dport 25 -m state --state NEW -j ACCEPT
 
### dns servive
$IPTABLES -A INPUT -p tcp --sport 1024: --dport 53 -m state --state NEW -j ACCEPT
$IPTABLES -A INPUT -p udp --sport 1024: --dport 53 -m state --state NEW -j ACCEPT
 
### http servive
$IPTABLES -A INPUT -p tcp --sport 1024: --dport 80 -m state --state NEW -j ACCEPT
 
### pop3 servive
$IPTABLES -A INPUT -p tcp --sport 1024: --dport 110 -m state --state NEW -j ACCEPT
 
### identd servive
$IPTABLES -A INPUT -p tcp --syn --dport 113 -j REJECT --reject-with tcp-reset
 
### imap servive
#$IPTABLES -A INPUT -p tcp --sport 1024: --dport 143 -m state --state NEW -j ACCEPT
 
### snmp servive
#$IPTABLES -A INPUT -p udp --sport 1024: --dport 161 -m state --state NEW -j ACCEPT
 
### https servive
#$IPTABLES -A INPUT -p tcp --sport 1024: --dport 443 -m state --state NEW -j ACCEPT
 
### rsync servive
#$IPTABLES -A INPUT -p tcp --sport 1024: --dport 873 -m state --state NEW -j ACCEPT
 
### mysql servive
$IPTABLES -A INPUT -p tcp --sport 1024: --dport 3306 -m state --state NEW -j ACCEPT
 
### ping servive
$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
 
넥스트라인 기본룰셋 이외 포트 추가하기
 
### 서비스명
$IPTABLES -A INPUT -p tcp --sport 1024: --dport "포트" -m state --state NEW -j ACCEPT
 
방화벽(next_firewall) 사용법 :
방화벽 시작   : next_firewall start

 
방화벽 중지   : next_firewall stop

 
방화벽 재가동 : next_firewall restart

 
 
15) 커널 변수 조정
arp 스푸핑 및 DDOS 공격을 차단하기 위한 커널변수들이 설정되어있습니다.
설정화일 경로 : /etc/sysctl.conf
적용방법 : sysctl –p

 
# proxy arp를 설정하지 않습니다.
net.ipv4.conf.eth0.proxy_arp=0
net.ipv4.conf.lo.proxy_arp=0
net.ipv4.conf.default.proxy_arp=0
net.ipv4.conf.all.proxy_arp=0
 
# 게이트웨이로부터의 redirect를 허용하지 않음으로써 스푸핑을 막기 위해 설정합니다.
net.ipv4.conf.eth0.secure_redirects=0
net.ipv4.conf.lo.secure_redirects=0
net.ipv4.conf.default.secure_redirects=0
net.ipv4.conf.all.secure_redirects=0
 
# 스푸핑을 막기 위해 source route 패킷을 허용하지 않습니다.
net.ipv4.conf.eth0.accept_source_route=0
net.ipv4.conf.lo.accept_source_route=0
net.ipv4.conf.default.accept_source_route=0
net.ipv4.conf.all.accept_source_route=0
 
# Broadcast로부터 오는 핑을 차단함(Smurt 공격을 차단함).
net.ipv4.icmp_echo_ignore_broadcasts=1
 
# IP 나 TCP 헤더가 깨진 bad icmp packet을 무시합니다.
net.ipv4.icmp_ignore_bogus_error_responses=1
 
# 자신의 네트워크가 스푸핑된 공격지의 소스로 쓰이는 것을 차단합니다.
net.ipv4.conf.eth0.rp_filter=2
net.ipv4.conf.lo.rp_filter=2
net.ipv4.conf.default.rp_filter=2
net.ipv4.conf.all.rp_filter=2
 
# bootp 패킷을 허용하지 않습니다.
net.ipv4.conf.eth0.bootp_relay=0
net.ipv4.conf.lo.bootp_relay=0
net.ipv4.conf.default.bootp_relay=0
net.ipv4.conf.all.bootp_relay=0
 
# 스푸핑된 패킷이나 소스라우팅, Redirect 패킷에 대해 로그파일에 정보를 남긴다.
net.ipv4.conf.eth0.log_martians=1
net.ipv4.conf.lo.log_martians=1
net.ipv4.conf.default.log_martians=1
net.ipv4.conf.all.log_martians=1
 
# 1/100초에 받아들이는 igmp "memberships"의 수
net.ipv4.igmp_max_memberships=1
 
# 매우 복잡한 사이트에서는 이 값을 늘리는 것도 가능하지만 64로 두는 것이 적당하며
# 더 늘렸을 경우에는 큰 문제가 발생할 수도 있습니다..
net.ipv4.ip_default_ttl=64
 
# 게이트웨이 서버가 아닌 이상 패킷을 포워딩 할 필요는 없다.
net.ipv4.ip_forward=0
 
# fragmented packet이 메모리에 존재하는 시간을 15초로 설정합니다.
net.ipv4.ipfrag_time=15
 
# SYN_Flooding 공격에 대한 대비로 백로그큐(Backlog Queue)가 가득차면 다른 접속 요구를 받아들이지 못합니다.
net.ipv4.tcp_max_syn_backlog=1024
 
# TCP 연결에서 Three-way Handshake가 성공적으로 이루어지지 않으면 더 이상 소스 경로를 거슬러 올라가지 않도록합니다.
# 따라서 적절한 연결 요청에 대해서만 연결을 맺는다.
# syncookies가 작동할 때 SYN Flooding 공격이 있으면 messages 파일에 아래와 같은 내용이 출력됩니다.
# possible SYN flooding on port 80. Sending cookies.
net.ipv4.tcp_syncookies=1
 
# 일정한 시간과 IP별로 보내고 받는 SYN 재시도 횟수를 3회로 제한합니다.
# 이 옵션은 스푸핑된(위조된) 주소로 오는 SYN 연결의 양을 줄여준다.
# 기본 값은 5(180 초에 대응)이며 255를 넘지 않아야 합니다.
net.ipv4.tcp_syn_retries=3
 
# passive TCP 접속시도가 재접속을 하기 위한 SYNACKs의 값을 정합니다. 255 보다 높
# 게 지정할 수 없다. 기본값은 5이며, 180초에 대응이 됩니다.
net.ipv4.tcp_synack_retries=3
 
# 무언가 문제가 있을 때 연결을 위해 재시도 할 횟수, 최소 값과 기본 값은 3입니다.
net.ipv4.tcp_retries1=3
 
# TCP 연결을 끊기 전에 재시도할 횟수.
net.ipv4.tcp_retries2=7
 
# 연결을 종료시 소요되는 시간을 줄여준다(기본 설정값: 60).
net.ipv4.tcp_fin_timeout=20
 
# 동시에 유지 가능한 timewait 소켓의 수입니다.
# 만약 지정된 숫자를 초과하였을 경우에는 timewait 소켓이 없어지며 경고 메시지가 출력됩니다.
# 이 제한은 단순한 DoS 공격을 차단하기 위해 존재하는데, 임의로 이 값을 줄여서는 안되며
# 메모리가 충분하다면 적절하게 늘려주는 것이 좋은데, 64M 마다 180000으로 설정하면 됩니다.
# 따라서 256M일 경우에는 256/4=4 4*180000=720000
 
# 64M -> 180000
# 128M -> 360000
# 256M -> 720000
# 512M -> 1440000
# 1G -> 2880000
# 2G -> 5760000
 
net.ipv4.tcp_max_tw_buckets=2880000
 
# 연결이 끊어졌다고 판단할 때까지, 얼마나 keepalive probe 를 보낼지 결정. 기본값 9회
# 간단한 DoS 공격을 막아준다.
net.ipv4.tcp_keepalive_probes=2
 
# keepalive 가 활성되 되어 있을 경우, 얼마나 자주 TCP 가 keepalive 메세지를 보
# 내게 할 것인지를 설정.
net.ipv4.tcp_keepalive_time=30
 
# keepalive_probes 를 보낼 간격을 정함. probe 를 보낸 후, probes * intvl 의 시
# 간이 지나도록 응답이 없으면 연결이 해제된 것으로 간주하게 됨. 기본 값의 사용
# 시 11분 15초 동안 재시도를 하고 연결을 취소함. 값은 초단위
net.ipv4.tcp_keepalive_intvl=10
 
# 서버 쪽에서 닫은 TCP 연결을 끊기 전에 확인하는 횟수를 정합니다. 기본 값은 7 로
# RTO 50 초에서 16 분 사이에 해당합니다. 웹 서버가 운영 중 이라면 이 값을 줄여서
# 소켓 등이 귀한 리소스를 소비하지 않도록 할 수도 있습니다..
net.ipv4.tcp_orphan_retries=2
 
# SYN 패킷을 전송한 후에 로스가 발생을 하여 ACK 를 일부 받지 못했을 경우, 선택
# 적으로 (selected) 받지못한 ACK 만 받도록 요청하는 것을 허락합니다. 로스가 많은
# 네트워크에서는 상당히 중요한 역할을 합니다.
net.ipv4.tcp_sack=1
 
16) 시스템 이상시 기본적인 점검 사항 및 명령어
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=190&name=리눅스&home=보안
 
17) TCP-Wrapper 구성
 
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=126&name=리눅스&home=기타

 
---------------------------------------------------------------------------------------
5. 서비스보안
 
1) APACHE 보안
 
리눅스를 사용하는 가장 큰 이유는 웹서버를 운영하기 위해서입니다. 이 웹서버를 가능하게 해주는 프로그램이 아파치입니다. 아파치의 보안에 대해 알아보도록 합니다.

보안설정 이외의 httpd.conf 상세한 설정내용은 넥스트라인 기술문서를 참조하시기 바랍니다.

넥스트라인 기술문서 - httpd.conf 환경설정
http://www.nextline.net/?inc=support&html=pds_view&no=204&name=리눅스&home=


APACHE 설정파일 : httpd.conf
소스 설치 설정파일 경로 : /usr/local/apache/conf/httpd.conf
rpm 설치 설정파일 경로 : /etc/httpd/conf/httpd.conf
 

APACHE 보안

 

1. 웹문서디렉토리(DocumentRoot)에서 불필요한 문서 제거

소스로 아파치를 설치하게 되면 기본 웹 문서가 위치하는 디렉토리가 /usr/local/apache/htdocs입니다. htdocs 디렉토리에는 아파치 관련정보가 들어있는 문서와 공개될 필요가 없는 문서가 위치하고 있습니다. 이 문서들을 제거합니다.

 

httpd.conf 지시자

DocumentRoot "/usr/local/apache/htdocs"

 

명령어

[root@nextline ~]# cd /usr/local/apache/htdocs/

DocumentRoot 디렉토리로 이동합니다.

 

[root@nextline htdocs]# rm -rf *

rm 명령어를 이용하여 /usr/local/apache/htdocs/ 하위의 모든 문서를 제거합니다.

 

또 다른 방법으로는 httpd.conf에서 DocumentRoot값을 새로운 경로로 지정합니다.

 

2. 불필요한 CGI 스크립트제거하기

apache를 설치하면 cgi-bin 디렉토리에 기본으로 CGI스크립트가 설치됩니다. CGI 스크립트가 공격에 이용될 수도 있기 때문에 모두 제거하도록 합니다. 특히 초기버전인 경우에 php.cgi등이 제공되었는데 해킹의 빌미를 제공하였다. cgi-bin 디렉토리에 있는 모든 파일을 제거합니다.

 

cgi-bin 경로

/usr/local/apache/cgi-bin

 

명령어

[root@nextline ~]# cd /usr/local/apache/cgi-bin

DocumentRoot 디렉토리로 이동합니다.

 

[root@nextline htdocs]# rm -rf *

rm 명령어를 이용하여 /usr/local/apache/cgi-bin 하위의 모든 문서를 제거합니다.

 

3. DocumentRoot, 사용자 홈디렉토리(/home)에 설정하는 디렉토리 옵션 설정하기

기본적인 설정을 모두 제거하고 보안과 관련있는 항목만 옵션으로 지정합니다.

 

httpd.conf 지시자 

/usr/local/apache/htdocs/">

  Options Indexes FollowSymLinks ExecCGI

AllowOverride All

Order allow,deny

  Allow from all

 

     Options Includes FollowSymLinks ExecCGI

     AllowOverride All

     Order allow,deny

     Allow from all

/usr/local/apache/htdocs/">

tag에 의하여 각 directory마다 적절하게 permission을 걸 수가 있습니다.

 

Options Indexes FollowSymLinks ExecCGI

 

None

어떤 옵션도 이용할 수 없습니다.

 

All

지정한 directory에서 모든 명령을 이용할 수 있습니다.

 

Indexes

URL에 지정된 디렉토리에 (index.html 같은) 지정된 파일이 없을 경우 디렉토리의 파일 목록을 보여주는 옵션입니다.

 

Includes

서버측의 추가적인 정보를 제공할 수 있게 합니다.

 

IncludesNoExec

서버측의 추가적인 정보를 제공할 수 있게 하지만, 어떠한 실행 파일을 실행하는 것을 방지합니다.

 

FollowSymLinks

디렉토리상의 심볼릭 링크를 사용 가능하게 합니다.

 

ExecCGI

CGI 스크립트를 실행할 수 있게 합니다.

 

MultiViews

All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용합니다.

 

AllowOverride All

.htaccess파일은 서버의 각 디렉토리에 만들어서 각 디렉토리에 대한 접근을 제어하기 위한 것으로 디렉토리에 .htaccess파일이 있으면, 서버 전체에 작용하는 access.conf 보다 우선권을 가집니다. .htaccess파일에 대한 Override에 대한 옵션입니다.

 

None

.htaccess파일을 읽을 수 없게 합니다.

 

All

모든 지정에 대해 가능하게 합니다.

 

Options

규정된 디렉토리 형식을 콘트롤하는 지정의 사용을 허락합니다.

 

FileInfo

문서형식을 콘트롤하는 지정의 사용을 허용합니다.

 

AuthConfig

사용자 인증 지정의 사용을 허용합니다. 사용자 인증 변수를 사용합니다.

 

Limit

호스트 접근을 콘트롤하는 지정을 허용합니다.

 

Order

Limit에 관련된 부분을 설정을 합니다. 서버가 access control을 수행하는 순서를 나타냅니다. 여기서는 allow기능을 먼저 수행하고, deny기능을 수행하라는 것입니다.

 

deny, allow

deny 지시자 부터 검사하고 allow 지시자를 검사 합니다.

 

allow, deny

allow 지시자 부터 검사하고 deny 지시자를 검사 합니다.

 

mutual-failure

allow목록에 없는 모든 host에게 접속을 거부 합니다.

 

allow from

나열되는 주소들에 대한 access control을 가능하게 합니다. 사용 가능한 주소는 도메인 네임, 호스트 이름 주소, 호스트 ip 주소, ip 주소의 앞부분 3바이트, 모든 주소에 해당하는 all 이 있습니다.

 

deny from

allow from과 반대되는 개념이며, 사용가능한 주소는 allow from과 같다.

 

Require

사용자, 그룹에 대한 접근을 통제할 수 있습니다.

사용방법 : require entity en1 en2 ... enn

entity에 들어갈 수 있는 것은 user, group, valid-user의 세가지이다.

 

User

지정된 사용자들에게만 접근을 허용하는 것으로, 지정된 사용자에 대한 정보는 AuthUserFile에서 지정한 파일에 있습니다.

 

Group

지정된 그룹에게만 접근을 허용하는 것으로, 지정된 그룹에 대한 정보는

AuthGroupFile에서 지정한 파일에 있습니다.

 

valid-user

AuthUserFile에 있는 모든 사용자에 대해 접근을 허용합니다.

 

4. ~ 태그 이용하기

태그는 각 디렉토리별로 HTTP Method의 사용여부를 통제하는 태그입니다. 파일의 업로드 및 파일의 수정, 삭제를 위해서 사용되는 HTTP Method PUT POST, DELETE 가 있는데 이 Method를 제한합니다.

 

httpd.conf 지시자

Require valid-user

개인 사용자 홈디렉토리에서 POST, PUT, DELETE Method를 패스워드 파일에 등록된 사용자만이 이용가능하도록 제한한 것입니다.

 

5. 헤더 정보 숨기기

클라이언트가 Apache 웹서버에 접속했을 때 웹서버에서는 응답 메시지의 헤더에 웹서버 버전, 설치된 응용프로그램 등과 같은 정보를 전달합니다.

 

① 헤더 정보 확인하기

[root@nextline ~]# telnet xxx.xxx.xxx.xxx 80

     Trying xxx.xxx.xxx.xxx...

     Connected to xxx.xxx.xxx.xxx.

     Escape character is '^]'.

     GET / HTTP/1.1

 

     HTTP/1.1 400 Bad Request

     Date: Sat, 14 Dec 2002 14:24:11 GMT

     Server: Apache/1.3.26 (Unix) PHP/4.2.2

     Connection: close

     Transfer-Encoding: chunked

     Content-Type: text/html; charset=iso-8859-1

 

이 정보는 공격자에 의해 Apache 웹서버 버전과 구동되고 있는 응용프로그램의 버전을 확인하고 알려진 취약점을 이용하여 공격하는데 유용하게 이용될 수 있습니다.

 

② 헤더 정보 숨기기

Apache 웹서버에서는 "ServerTokens"지시자를 수정함으로써 헤더에 의해 전송되는 정보를 바꿀 수 있습니다.

 

httpd.conf 지시자

ServerTokens 키워드

 

③ 키워드와 제공되는 정보

 

Prod[ductOnly]

웹서버 종류만 표기됩니다. ) Server:Apache

 

Min[imal]

Prod 키워드 제공정보 + 웹서버 버전 예) Server:Apache/1.3.26

 

OS

Min 키워드 제공 정보 + 운영체제 예) Server:Apache/1.3.26 (Unix)

 

Full

OS 키워드 제공정보 + 설치된 모듈(응용프로그램) 정보

) Server: Apache/1.3.26 (Unix) PHP/4.2.2

참고: ServerToken apache 1.3이상에서 가능하고 ProductOnly키워드는 1.3.12버전 이상에서만 사용가능하다. 일반적으로 ServerTokens httpd.conf에 명시되어 있지 않는 경우가 많다. 이런 경우에는 기본값인 "ServerTokens Full"이 적용되어 모든 정보가 응답   헤더에 포함되어 클라이언트에게 전송됩니다. 최소한의 정보를 주기 위해서는   "ServerTokens Prod"가 좋습니다.

 

6. 기본 사용자 인증 설정

기본 사용자 인증과 다이제스트 사용자 인증의 설정 방법은 매우 유사하다. 다음과 같이 두가지 절차를 거쳐 설정할 수 있습니다.

* 패스워드 파일 생성

* 패스워드 파일을 사용할 수 있도록 Apache 환경 설정

 

① 패스워드 파일생성

[root@nextline ~]# cd /usr/local/apache/bin/

아파치 bin 디렉토리로 이동합니다.

[root@nextline ~]# ./htpasswd -c /usr/local/apache/password nextline

New password: (패스워드입력)

Re-type new password: (패스워드입력)

패스워드 파일을 처음 생성할 경우에는 -c 옵션을 사용하여 만듭니다.

[root@www /usr/local/apache/bin]# ./htpasswd  /usr/local/apache/password nextline2

New password: (패스워드입력)

Re-type new password: (패스워드입력)

사용자를 추가할 경우에는 -c 옵션을 빼고 사용하면 됩니다. 만약 -c 옵션을 사용할 경우에는 기존의 등독된 사용자들은 지워지므로 주의해야 합니다.

 

[root@www /usr/local/apache/bin]# cat ../password

nextline:LT30X3txYYEuY

nextline2:/RfZRDXV1N/Eo

패스워드 파일을 확인해보면 사용자ID와 패스워드 필드로 구성되어 있는데, 패스워드  필드는 암호화되어 저장됩니다. 또한 두 사용자가 암호를 동일하게 입력해도 암호화된 값 은 다르게 나타납니다.

 

패스워드 파일을 사용가능하기 위한 환경설정

httpd.conf파일내에서 디렉토리별로 사용자 인증을 하기 위한 설정을 하면 됩니다.

 

httpd.conf 지시자

AllowOverride AuthConfig

 

사용자 인증이 필요한 디렉토리에 아래의 지시자들이 포함된 .htaccess파일을 생성 합니다.

 

지시자

AuthType

인증형태(Basic 또는 Digest)

AuthName

인증영역(웹브라우저의 인증창에 표시됨)

AuthUserFile

사용자 패스워드 파일의 위치

AuthGroupFile

그룹 파일의 위치(옵션)

Require

접근을 허용할 사용자 또는 그룹정의

 

예문

앞의 패스워드 파일에 등록된 nextline, nextline2라는 사용자만을 정해진 디렉토리에 접속할 수 있도록 설정해보자.

   [nextline@nextline ~]$ cat .htaccess

   AuthType Basic

   AuthName "Welcome nextline's Home

   AuthUserFile /usr/local/apache/password

   Require user nextline nextline   // 만약 패스워드파일에 등록된 모든 사용자를 접근가능하도록 설정하려면 Require valid-user 라고 하면 됩니다.

 

관련명령어

htpasswd

아파치 사용자 인증을 위한 파일을 생성하거나 업데이트를 하는 명령입니다.

 

사용법

htpasswd [options] password_file username

 

options

-c

새로운 패스워드 파일을 생성합니다.

 

[nextline@nextline ~]$ htpasswd -c /usr/local/apache/password nextline

password라는 파일을 생성하면서 nextline이라는 사용자를 등록합니다.

[nextline@nextline ~]$ htpasswd /usr/local/apache/password nextline2

nextline2 라는 사용자를 등록합니다.

 

7. 접근통제

클라이언트가 사용하는 호스트의 IP주소나 도메인에 의해서 웹서버의 데이터에 대한 접근을 통제할 수 있습니다.. 기본적인 서버 설정은 DocumentRoot의 내용에 대해 누구나 접속 을 허락하도록 설정되어 있습니다.

Apache "Allow" "Deny"지시자는 사용자 시스템의 호스트 이름과 호스트 주소를 근간으로 접속을 허락 또는 차단할 수 있도록 지정할 수 있습니다. 또한, "Allow" "Deny"지시자를 동시에 사용할 경우 그 순서를 정하는 "Order" 지시자를 사용하여 보다 정교한 정책설정을 할 수 있습니다.

 

Order Deny,Allow

Deny지시자가 Allow지시자보다 먼저 검사됩니다. 접근을 기본적으로 허용됩니다.

즉, Deny지시자나 Allow지시자에 일치하지 않는 클라이언트의 접속을 허용합니다.

 

Order Allow,Deny

Allow지시자가 Deny지시자보다 먼저 검사됩니다. 접근을 기본적으로 차단됩니다.

, Deny지시자나 Allow지시자에 일치하지 않는 클라이언트의 접속은 차단합니다.

 

Order Mutual-failure

Allow 리스트에 있고, Deny리스트에 없는 호스트만 접근을 허용합니다.순서는 "Allow,Deny"때와 같다.

 

(참고) 일반적인 Firewall이나 라우터의 접근통제 Rule은 순차적으로 비교하다가 최초로 일치하는 Rule을 적용하고 그 이후는 비교하지 않지만, Apache에서는 Allow Deny를 일단 모두 비교하고 둘 중에 하나라도 일치할 경우 적용합니다는 점에서 차이가 있습니다.. 또한 "Order"지시자 사용시 키워드(Allow 또는 Deny)는 콤마(,)에 의해서만 분리되고 공백이 들어가서는 안됩니다.

 

Order deny,allow

deny from all

allow from 172.16.10

"deny from" "allow from"지시자는 호스트, 도메인 이름, IP주소, 서브넷마스크를  가진 주소(예를 들면 172.16.10.0/255.255.255.0), CIDR(Classes InterDomain Routing)마스크를 가진 IP주소(172.16.10.0/24)를 사용할 수 있습니다.

 

8. 권한부여

권한부여는 특정한 자원에 접근할 사용자 퍼미션이 유효한지를 확인하는 것입니다. 어떤 퍼미션에 의해 허락되고 거부될지는 자원과 그 자원과 관련된 규칙들에 따라서 다양하다. 각 파일과 디렉토리구조는 다른 접근통제나 사용자인증 방법을 가질 수 있습니다. 접근통제와 사용자 인증방법을 사용하여 각 자원에 대한 다양한 권한을 부여할 수 있습니다. 가령 인터넷에서 접속 시에는 사용자이름과 패스워드를 확인하고 인트라넷에서 접속 시에는  요구하지 않도록 설정할 수도 있습니다. 이는 "Satisfy"지시자를 통해서 구현할 수 있습니다.

 

Satisfy any | all

all은 인트라넷 사용자에 대해 패스워드를 묻지 않고 접속이 가능하게 하는 것이고, any는인트라넷 사용자라도 패스워드를 묻는다.

 

     Order deny,allow

     deny from all

     allow from xxx.xxx.xxx.xxx

     AuthType Basic

     AuthName "Welcome Posein's Home"

     AuthUserFile /usr/local/apache/password

     Require nextline nextline2

     Satisfy Any

 

AuthName 항목에서 1.3버전에서는 겹따옴표가 앞쪽에 하나이고, 2.0버전에서는 겹따옴표가 앞뒤로 두개를 써야 합니다.

 



 
SSL/TLS 인증
앞에 열거된 사용자 인증기법들은 모든 웹 컨텐츠를 암호화하지 않습니다는 단점이 있습니다..최근 인터넷 뱅킹등과 같이 전송로상에 전송되는 웹컨텐츠 역시 보호되어져야 하는 경우가 많다. SSL/TLS는 사용자인증과 웹서버 데이터와 컨텐츠를 암호화하는 수단입니다. SSL을 지원하기 위해서 Apache는 Mod_SSL 모듈을 가지고 있고, 이 모듈은 SSL v2, v3 그리고 새로운 TLS을 사용하는 강력한 암호화를 제공합니다. 현재 이 모듈은 강력한 128bit암호화와 RSA, Diffie-Hellman암호화를 제공합니다.
동작원리: 최초 핸드쉐이크 후에 SSL은 비밀키를 생성하고 이 대칭키 암호화가 데이터 암호화를 위해 사용됩니다. 공개키(비대칭키)는 단말의 신원 인증과 대칭키 교환에 사용됩니다.     메시지 무결성은 MAC(Massage Authentication Code)에 의해 제공되고 신뢰된 접속을     가능하게 합니다.
SSL 프로토콜이 제공하는 주요기능
* 사설접속과 데이터 암호화
* 서버에 통신하는 단말 인증
* 신뢰된 접속
 
SSL 보안서버 설치
보안서버 SSL Linux Apache 1.X버전
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=165&name=리눅스&home=보안
 
보안서버 SSL ( Linux Apache 2.X 버전)
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=155&name=리눅스&home=보안
 
Apache SSL 설치방법
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=164&name=리눅스&home=보안
 
2) PHP 보안
php.ini 보안설정
 

보안설정 이외의 php.ini 상세한 설정내용은 넥스트라인 기술문서를 참조하시기 바랍니다.

넥스트라인 기술문서 - php.ini 환경설정
http://nextline.net/?inc=support&html=pds_view&no=207&name=리눅스&home=PHP

설정파일 경로 : /usr/local/lib/php.ini

 

php.ini 보안설정

safe_mode - On

safe_mode On 일 경우 파일을 이 디렉토리 및 그 하위로부터 include 하는 경우는 UID/GID 의 체크가 스킵됩니다. 이러한 디렉토리는 include_path 에 포함되도록 하거나 또는 include 시에 절대 경로를 사용해야 합니다. exec관련의 함수를 통해 실행할 수 있는 권한을 safe_mode_include_dir에 있는 실행파일만으로 설정합니다.

 

이 값을 On으로 설정하면 PHP에 의한 파일 액세스 시 권한을 점검합니다. 웹 프로그램이 /etc/passwd 등 주요 시스템 파일을 액세스 하지 못하도록 제한할 수 있으나, 이로 인해 웹 프로그램이 정상 작동하지 않을 수 있으니 주의하여야 합니다.

 

display_errors = On

Error Page 또는 Warning Page 노출을 피하기 위한 것입니다. 공격자들은 일부러 에러를 발생하여 서버에 대한 정보를 확인합니다. 이를 막기 위해 아래와 같이 수정합니다.

On 으로 했을 시 웹사이트의 파일 정보나 데이타베이스 스키마등의 시큐리티 정보를 접속 사용자에게 표출 될 수도 있기 때문입니다. 이 옵션을 On으로 설정하는 경우 PHP 실행 중 발생하는 에러 정보가 사용자 브라우저에 반환됩니다. 이 정보에는 웹 서버 상의 절대 경로, SQL 쿼리 등 공격자에게 유용한 정보가 포함되어 있으므로, 반드시 이 값을 Off로 설정하여야 합니다.

 

register_globals = On

혹시라도 낮은 버전을 사용하는 경우는 이 부분이 디폴트로 On 되어있는데, 특별한 이유가 없다면 Off 로 설정하는 것이 좋습니다.

이 값을 On으로 설정하면 PHP가 입력으로 받아들이는 값(환경 변수, GET, POST, 쿠키, Server 변수)을 무조건 전역(Global)변수로 다루게 됩니다. 전역 변수가 고전적인 C 프로그램에서 얼마나 많은 버그를 발생시켰는지 아신다면, 이 값을 Off로 설정하는 것이 왜 바람직한지 짐작할 수 있을 것입니다. 전역 변수는 프로그램의 동작 중 어디서나 변수값이 바뀔 수 있기 때문에, 웹 프로그램의 인자 조작, 예기치 못한 오동작 등 다양한 보안 문제가 발생할 수 있습니다. PHP 4.2.0 이후로는 보안상의 문제를 고려해 디폴트로 Off로 설정되어 나오지만, 아직 많은 프로그램이 On 상태에서만 작동하도록 개발되어 있어 서버 관리자들이 On으로 변경하는 경우가 많습니다. On 값에 의존하는 프로그램이 있으면 개발자에게 해당 문제를 알리고 수정을 요구하시는 것이 바람직합니다

 

safe_mode_gid - Off

위의 설정과 함께 파일 액세스 시 권한을 점검합니다. 이로 인해 웹 프로그램이 정상 작동하지 않을 수 있으니 주의하여야 합니다.

 

expose_php - Off

웹 브라우저의 요청에 대해 PHP 정보를 보내지 않습니다. 그러나 PHP 확장자 설정을 변경하는 등 추가적인 조치를 취하지 않습니다면, 여러분이 PHP를 사용 중이라는 사실이 손쉽게 노출될 수 있으므로 보안상 큰 도움이 되지 않습니다.

 

file_uploads - Off

해당 사이트의 PHP 프로그램들이 파일 업로드를 필요로 하지 않는다면 이 값을 Off로 설정하여, 파일 업로드 공격의 발생 가능성을 낮출 필요가 있습니다. 파일 업로드를 통한 사이트 장악은 매우 빈번하게 발생합니다.

allow_url_fopen Off 이 옵션을 On으로 설정하면 파일 액세스 시 외부 사이트의 파일을 불러올 수 있습니다. 이 기능은 분산 컴퓨팅과 개발, 관리 측면에서 매우 편리하지만, 외부 공격자에 의해 서버를 침탈당하게 되는 주요 원인이 되어 왔습니다. 특히 include(), require() 계열의 함수 사용시 심각한 보안 상의 문제를 유발하게 됩니다. 특수한 경우를 제외하고는 이 기능이 필요치 않으므로 이 옵션을 반드시 Off로 설정하시기 바랍니다.

 

magic_quotes_gpc = Off

Sql Injection 과 같은 공격을 막는데 도움이 됩니다. GET/POST/Cookie 의 입력 데이터에 관해서 특수 문자를 이스케이프 Get 방식으로 입력되는 ".." 는 일반적으로 필터링 하도록 설계되고 있습니다. 쉘에는 ".\./" ".."과 동일하게 간주됩니다. 특수문자에 대한 전체적인 제한이 필요하다.

 

이 옵션을 On으로 설정하면 PHP가 입력으로 받아들이는 값(환경 변수, GET, POST, 쿠키, Server 변수)에 단일 인용 부호('), 이중 인용 부호("), 백슬래쉬(), 널문자(NUL)가 포함된 경우 자동으로 해당 문자 앞에 백슬래쉬를 추가하여 특수 문자 처리를 합니다. 이로 인해 웹 프로그램의 인자를 변경하는 SQL 구문 삽입(injection) 공격의 성공률을 낮춰줍니다. 이 값을 Off로 설정하면 /etc/passwd%00 과 같이 널 문자를 사용해 시스템 상의 임의의 파일을 열람할 수 있으니 반드시 On으로 설정하여야 합니다.

 

magic_quotes_sybase - Off

Sybase 사용자의 정상적인 DB 접속을 위해 만들어진 기능이지만,

이 기능은 magic_quotes_gpc 설정을 무력화합니다. 여러분이 Sybase 사용자가 아니라면 반드시 이 값을 Off로 설정하여야 합니다. Sybase 사용자는 PHP가 입력으로 받아들이는 모든 변수에 대해 addslashes() 함수를 사용하여 명시적으로 특수 문자 처리를 하여야 합니다.

 

open_basedir - 디렉터리

이 옵션에 적절한 디렉터리를 설정하면, PHP의 파일 액세스 시 지정된 디렉터리(및 하위 디렉터리)를 벗어난 파일은 액세스 할 수 없게 됩니다.

 

safe_mode_exec_dir - 디렉터리

이 옵션을 지정하면 system(), exec(), passthru() 등 외부 명령어 실행 시 지정된 디렉터리에 존재하지 않는 프로그램은 실행할 수 없게 됩니다. 공격자가 임의로 업로드 한 공격 도구나 wget, xterm 등 공격에 사용될 만한 명령어를 실행할 수 없도록 막을 수 있습니다.

 

allow_url_fopen = On

URL(http:// ftp:// )을 파일로서 취급할지를 결정합니다.

많이 발생하고 있는 대규모 홈페이지 변조는 php의 외부사이트 소스 실행기능을 이용하여 악의적인 프로그램을 실행시킴으로써 발생시킵니다.

 

필요 시 특정 홈페이지만 외부 사이트의 소스 실행 허용을 설정할 수 있습니다.

   

   

    ServerAdmin webmaster@nextline.co.kr

    DocumentRoot /home/nextline/public_html

    ServerName nextline.co.kr

    php_admin_flag allow_url_fopen On     <---------- 라인 추가

    ErrorLog logs/nextline.co.kr-error_log

    CustomLog logs/nextline.co.kr-access_log common

   

 


 
3) SSH 보안
 
① 설정파일 보안적용

 
보안설정 이외의 sshd_conf 상세한 설정내용은 넥스트라인 기술문서를 참조하시기 바랍니다.

넥스트라인 기술문서 - SSH 환경설정
http://nextline.net/?inc=support&html=pds_view&no=203&name=리눅스&home=기타


 
설정파일 경로 : /etc/sshd/sshd_conf
 

sshd_conf 보안설정

 

Port 22

ssh가 사용할 기본 포트를 지정합니다. 포트 변경 시 /etc/services 파일에서 sshd 관련 포트 역시 변경할 포트로 변경해 주어야 합니다.

 

AllowUsers root nextline   

로그인 허락할 계정 nextline root 두 계정에게만 로그인 허용 합니다.

 

PermitRootLogin no

root 로그인 허용여부를 결정하는 것입니다. yes, no, without-password를 사용할 수 있습니다. 현재 no로 되어 있기 때문에 직접  root로 접속이 불가능합니다. 이옵션을 yes 로 하기보다는 일반계정으로 로그인후 su 명령으로 root로 전환하는 것이 보안상 안전합니다.

 

ListenAddress 0.0.0.0

sshd가 귀를 기울일 주소를 정해줍니다. 0.0.0.0은 모든 곳으로 부터 접속 을 받아들이겠다는 의미입니다. 하지만 패키징을 할때 어떻게 한것인지는 모르겠지만 tcp-wrapper의 영향을 받아서 hosts.deny에서 막혀 있으면 접속이 안되니 hosts.allow hosts.deny에서 sshd2 항목으로 제어를 할수가 있습니다.

 

AllowedAuthentications   publickey,password

Sshd2가 제공하는 인증은 password publickey 그리고 hostbased 방식이 있는데, 기본 적으로 public,password가 사용됩니다. 이는 순서대로 인증하는 방법을 보여주는데, 먼저 publickey로 인증하고, 두 번째로 password로 인증한다는 의미입니다.

 

DenyUsers  nextline, 3737

접근을 거부할 로컬의 유저를 지정합니다. 위 설정은 nextline uid 3737인 계정으로 ssh 접속 시도할 경우 접근이 거부됩니다.

 

DenyGroups

명시된 그룹은 ssh서비스에 접근할 수 없도록 하는 기능 입니다.

(DenyGroups sysadmin accounting) 와일드카드가 지원되며 공백 문자로 그룹을 구분합니다.

 

DenyHosts

명시된 호스트는 ssh서비스에 접근할 수 없도록 하는 기능 입니다.

(Deny Hosts shell.ourcompany.net).호스트 IP를 쓰거나 호스트 명을 쓸 수 있으며 와 일드 카드가 지원되고 공백 문자로 호스트를 구분합니다.

 

AllowHosts   1.2.3.0/24 192.168.1.3

로그인을 허가할 IP 또는 IP 대역을 지정합니다. 여러 개일 경우에는 공란이나 "," 로 구분하여 나열하면 되고 도메인 이름일 경우에는 reverse mapping이 제공되어야 합니다.

 

AllowGroups

ssh서비스에 접근 가능한 그룹을 명시합니다.

( : AllowGroups sysadmin accounting) 와일드카드가 지원되며 공백문자로 그룹을 구분합니다.

 

MaxConnections   0

최대 몇개의 접속을 허락할지를 지정합니다. 0은 제한을 하지 않습니다.

 

PasswordGuesses   3

암호인증 방식으로 인증할 때 최대 몇 차례 시도를 허용할 것인지 지정합니다.

 

ssh1Compatibility   no

클라이언트가 ssh1만 지원할 경우 ssh1 데몬을 실행할 것인지 여부를 지정합니다. ssh1은 보안상 취약하므로 no로 하는 것이 좋습니다.

 


 
② Prevent-SSH Bruteforce(무차별 공격) 방어 툴
 
SSH Bruteforce(무차별 공격) 방어 툴
 
Prevent 이란?
/var/log/secure 로그를 살펴보면 일정한 ID를 이용해서 SSH 접속 시도를 하는 것을 볼 수 있으며 이런 공격은 SSH Bruteforce(무차별 공격)로서, 패스워드 사전 파일을 이용해서 미리 지정한 아이디와 대입하여, 접속 계정을 알아 내는 해킹 방법입니다. Prevent은 /var/log/secure 로그의 실시간 분석하여 특정 아이피에서 일정횟수 이상 접속 실패가 이루어지면 공격 아이피에 대한 clipping level을 지정해서 5 level이상 올라가면 아이피을 블록 시키는 툴입니다.
 
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=187&name=리눅스&home=보안
 
③ SSH root 접근금지
 
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=158&name=리눅스&home=기타

4) VSFTP 보안

보안설정 이외의 vsftpd.conf 상세한 설정내용은 넥스트라인 기술문서를 참조하시기 바랍니다.

넥스트라인 기술문서 - vsftp 환경설정
http://nextline.net/?inc=support&html=pds_view&no=202&name=리눅스&home=기타

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

vsftp.conf 보안설정

chroot_local_user=YES (기본값 = NO)

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

FTP 사용자가 시스템에 접근할 수 있으면 위험하므로 반드시 활성화 하는것이 좋습니다.

 

passwd_chroot_enable=NO (기본값 = NO)

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

chroot_local_user 옵션이 활성화되었고, OpenSSH에 패치를 했을경우, SSH 또한 자신의홈상위 디렉토리를 접근할 수 없도록 설정할 수 있으며, /etc/passwd 파일의 홈 디렉토리필드의 /home/사용자/./와 같이 "/./"를 붙여 사용자를 홈디렉토리에 제한하게 합니다.

 

chroot_list_enable=NO (기본값 = NO)

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

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

 

chroot_list_file=/etc/vsftpd.chroot_list (기본값 =/etc/vsftpd.chroot_list)

사용자의 홈상위 디렉토리를 설정한 파일을 지정합니다.

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

 

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

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

 

 
5) SENDMAIL 보안

① 버전 정보 숨기기
sendmail이 리슨하고 있는 25번으로 접속하면 아래와 같이 sendmail의 버전 정보를 알 수있는데, 굳이 보여줄 필요가 없으므로 이 정보를 삭제하거나 다른 정보로 보여주도록 합니다.
 
 
 
 
이를 위해서는 아래와 같이 주석을 제거한 후 관련 부분을 삭제하거나 임의의 문자열을 추가한 후 sendmail을 재가동 합니다.
설정파일 경로 : /etc/mail/sendmail.cf
변경전)

 
변경후)

 
sendmail 재가동
[root@nextline ~]# /etc/rc.d/init.d/sendmail restart
25번으로 접속 시 버전정보가 출력되지 않습니다. 그러나 이 상태에서 HELP를 입력하면 아래와 같이 정보가 표시됩니다.

helpfile 파일을 삭제하거나 다른 이름으로 변경하면 HELP 입력시에도 버전 정보가 표시되지 않습니다.
/etc/mail/helpfile 파일명 변경

 
helpfile 파일명 변경후 HELP 입력시에도 버전 정보가 표시되지 않습니다.

 
② procmail을 이용한 스팸 필터링
 
Sendmail + Procmail + Hcode 연동설치
다운로드 : rpmfind.net
 
리눅스 설치시 기본적으로 sendmail, procmail 패키지는 설치되어 있으므로 한글디코딩에 필요한 hcode 패키지를 추가 설치하며 sendmail, procmail 이 설치되어 있지 않을경우 3가지 패키지를 모두 설치합니다.
 
hcode 다운로드

 
hcode 설치

 
sendmail + procmail + hcode 연동 확인
 

 
 
 
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')dnl
FEATURE(local_procmail,`',`procmail -t -Y -a $h -d $u')dnl
MAILER(procmail)dnl
 
위 내용이 출력되지 않거나 다르게 출력된다면 적절히 수정하고 다음을 실행합니다.
 
[root@nextline mail]# su -
Password:
[root@nextline mail]# cd /etc/mail
[root@nextline mail]# vi /etc/mail/sendmail.mc
[root@nextline mail]# make
[root@nextline mail]# /etc/rc.d/init.d/sendmail restart
 
/etc/procmailrc 파일생성 및 설정내용
[root@nextline mail]# vi /etc/procmailrc
 
procmailrc 설정
 
FILTERREASON = "100"
 
# 환경변수설정
 
# LOGFILE=/dev/null
# VERBOSE=on
VERBOSE=off
# DROPPRIVS=yes
PATH=/usr/bin:/usr/local/bin:/bin
SHELL=/bin/sh
FORMAIL=/usr/bin/formail
 
NL = "
"
TAB = "   "
NOW = `date +"%Y-%m-%d %H:%M"`
 
# 메일서버 해킹방지 (제목이 1024자 이상인것 삭제)
 
:0
* -1024^0
* ^Subject:\/.*
* 1^1 $MATCH ?? .
/dev/null
 
:0
* -19^0
* 1^1 $DEFAULT ?? .
{
    TAB = "    "
}
 
 
# 한글디코딩
 
:0 fhw
* ^(Subject|From|Cc|To):.*=\?EUC-KR\?(B|Q)\?
| $FORMAIL -c | hcode -dk -m
 
:0 fh w
* ^(Subject|From|Cc|To):.*=\?EUC_KR\?(B|Q)\?
| $FORMAIL -c | hcode -dk -m
 
:0 fh w
* ^(Subject|From|Cc|To):.*=\?ks_c_5601-1987\?(B|Q)\?
| $FORMAIL -c | hcode -dk -m
 
# 제목 구하기
 
EMAILSUBJECT = ""
REPLYSUBJECT = ""
 
:0
* ^Subject:\/.*
{
    ORGSUBJECT = "$MATCH"
    REPLYSUBJECT = "Re: $MATCH"
    EMAILSUBJECT = "$NL$MATCH$NL"
}
 
# 반송메일 필터링(삭제)
 
:0
* EMAILSUBJECT ?? Returned mail: see transcript for details
* $ ^To:.*@$HOST
/dev/null
 
# 서버에서 발송된 메일은 그대로 전송
 
:0
* ^FROM_DAEMON
$DEFAULT
 
# 메시지 아이디 존재여부 확인
# 파란메일과 모네타등 몇몇 사이트의 잘못된 개발로 추가된 항목입니다.
 
HASMESSAGEID = "no"
 
:0
* ^Message-ID:
* $ ! ^Message-ID:( )*[<][0-9]+[.][0-9a-zA-Z]+@$HOST[>]
{
  HASMESSAGEID = "yes"
}
 
:0
* ^X-Mailer: .*(ParanMail Web|Netpion Enterprise|Office Outlook)
*
{
   HASMESSAGEID = "yes"
}
 
# 수신자의 성명 존재여부 확인(광고메일은 수신자의 이름을 모른다.)
 
HASRECEIVERNAME = "no"
 
:0
* ^To:.*[<].*[>]
* ! ^To:( )*[<].*[>]
{
   HASRECEIVERNAME = "yes"
}
 
# 발신자의 성명 존재여부 확인
 
HASSENDERNAME = "no"
 
:0
* ^From:.*[<].*[>]
* ! ^From:( )*[<].*[>]
{
   HASSENDERNAME = "yes"
}
 
# 제목이 특수한 형태인가(예를들면 "[에피소드]..." 등등)
 
ISFORMATTEDSUBJECT = "no"
 
:0
* EMAILSUBJECT ?? ^( )*[[(<]+.*[])>]+
{
   ISFORMATTEDSUBJECT = "yes"
}
 
:0
* EMAILSUBJECT ?? ^( )*(읽음|Re|Fw):
{
   ISFORMATTEDSUBJECT = "yes"
}
 
# 메일전송경로가 세개 이상인것(광고/바이러스메일은 바로 전송되어 경로가 적습니다.)
# sendmail 은 메일포멧팅을 하기때문에 기본적으로 한 개이상입니다.
# 따라서 qmail 일 경우 "* -2^0" 를 "* -1^0" 로 변경하는것이 좋습니다.
 
HASMULTIPATH = "no"
 
:0
* -2^0
* 1^1 ^Received:.*$
{
   HASMULTIPATH = "yes"
}
 
# 로그화일 변경
 
LOGFILE=/var/log/procmail
 
# 광고표시메일 성인관련메일 필터링
 
ISSPAM = "no"
 
:0
* ! ISSPAM ?? yes
* ! EMAILSUBJECT ?? [[(<(]+(광.*고|廣.*告|홍.*보|동.*의|금.*융)[])>]+
* ! EMAILSUBJECT ?? @( )*$
* ! EMAILSUBJECT ?? (성인광고|성인정보|몰카|포르노|스와핑|빠구리|무삭제|노모자이크|자위한다|자위하는|뽀르노|페니스|쌩쇼|섹스)
* ! EMAILSUBJECT ?? (카[.-]+드|신[.-]+용|대[.-]+출|최[.-]+저[.-]+금[.-]+리)
* ! EMAILSUBJECT ?? ((광고)
{ }
 
:0 E
{
    ISSPAM = "yes"
    FILTERREASON = "201"
}
 
:0
* ISSPAM ?? yes
{
    LOG = "[$NOW] [Del$FILTERREASON] $DEFAULT$TAB$ORGSUBJECT$NL"
    LOGFILE
 
    :0
    /dev/null
}
 
# 100k 이상의 메일
# 첨부화일이 있으며, 정상적 이메일형태가 아닌것 필터링
# 기타메일 통과
 
ISVIRUS = "no"
 
:0
* ISVIRUS ?? no
* > 100000
* HASMESSAGEID ?? no
* HASRECEIVERNAME ?? no
* HASSENDERNAME ?? no
* HASMULTIPATH ?? no
* ^Content-Type: multipart[/]mixed
{
    ISVIRUS = "yes"
    FILTERREASON = "301"
}
 
:0
* ISVIRUS ?? yes
{
    LOG = "[$NOW] [Blk$FILTERREASON] $DEFAULT$TAB$ORGSUBJECT$NL"
    LOGFILE
 
    :0
    * ! ^Precedence:.*junk
    * ! ^X-Loop:.*
    /var/spool/mail/spam
 
    :0
    /dev/null
}
 
:0
* > 100000
{
    LOG = "[$NOW] [Pas$FILTERREASON] $DEFAULT$TAB$ORGSUBJECT$NL"
    LOGFILE
 
    :0
    $DEFAULT
}
 
# 15k - 100k 사이의 메일
# 첨부화일이 있으며, 정상적 이메일형태가 아니며, 첨부화일명이 한글이 아닌것 필터링
# 기타메일 통과
 
ISVIRUS = "no"
 
:0 B
* ISVIRUS ?? no
* > 15000
* ^Content-Type: audio[/]x-wav;
* ^.*(file)?name="?[a-z0-9 ._-]+\.(bat|cmd|com|cpl|exe|hta|scr|pif|vbs|zip)"?$
{
    ISVIRUS = "yes"
    FILTERREASON = "302"
}
 
:0 B
* ISVIRUS ?? no
* > 15000
* ^Content-Disposition: (attachment|inline);
* ^.*(file)?name="?[a-z0-9 ._-]+\.(bat|cmd|com|cpl|hta|scr|pif|vbs)"?$
{
    ISVIRUS = "yes"
    FILTERREASON = "303"
}
 
:0 B
* ISVIRUS ?? no
* > 15000
* < 65000
* ^Content-Disposition: (attachment|inline);
* ^.*(file)?name="?[a-z0-9 ._-]+\.(exe|zip)"?$
{
    ISVIRUS = "yes"
    FILTERREASON = "304"
}
 
:0
* ISVIRUS ?? yes
* > 15000
* < 65000
* ^Content-Disposition: (attachment|inline);
* ^.*(file)?name="?[a-z0-9 ._-]+\.(exe|vbs|zip)"?$
{
    :0
    * ! HASMULTIPATH ?? no
    { }
 
    :0 E
    {
    ISVIRUS = "no"
    FILTERREASON = "100"
    }
}
 
:0
* ISVIRUS ?? yes
{
    LOG = "[$NOW] [Vir$FILTERREASON] $DEFAULT$TAB$ORGSUBJECT$NL"
    LOGFILE
 
    :0
    * !
    * ! ^Precedence:.*junk
    * ! ^X-Loop:.*
    /var/spool/mail/spam
 
    :0
    /dev/null
}
 
:0
* > 15000
{
    LOG = "[$NOW] [Pas$FILTERREASON] $DEFAULT$TAB$ORGSUBJECT$NL"
    LOGFILE
 
    :0
    $DEFAULT
}
 
# 0k - 15k 사이의 메일
# 첨부화일이 없는 바이러스메일 필터링
 
ISVIRUS = "no"
 
:0
* ISVIRUS ?? no
* < 5000
* HASMESSAGEID ?? no
* HASMULTIPATH ?? no
* H ?? ^Content-Type:( )*multipart/mixed
* 2^0
* -1^1 B ?? ^Content-Type:
{
    ISVIRUS = "yes"
    FILTERREASON = "305"
}
 
:0
* ISVIRUS ?? yes
{
    LOG = "[$NOW] [Vir$FILTERREASON] $DEFAULT$TAB$ORGSUBJECT$NL"
    LOGFILE
 
    :0
    * !
    * ! ^Precedence:.*junk
    * ! ^X-Loop:.*
    /var/spool/mail/spam
 
    :0
    /dev/null
}
 
# 0-15k 사이의 메일 필터링
 
ISSPAM = "no"
 
:0
* !
* ISSPAM ?? no
* HASMESSAGEID ?? no
* HASRECEIVERNAME ?? no
* ISFORMATTEDSUBJECT ?? no
* HASMULTIPATH ?? no
{
    ISSPAM = "yes"
}
 
:0
* !
* ISSPAM ?? no
* ^Received: from [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+ [(][[][0-9]+\.[0-9]+\.[0-9]+\.[0-9]+[]][)]
{
    ISSPAM = "yes"
}
 
:0
* !
* ISSPAM ?? no
* < 8000
* ^Received: from .*[0-9]+-[0-9]+-[0-9]
{
    ISSPAM = "yes"
}
 
:0
* ISSPAM ?? no
* EMAILSUBJECT ?? (카드( )*(대납|고민|빚|연체|대출|소유자|소지자)|(긴급|급한)( )*자금|직장인.*공무원|공무원.*직장인)
{
    ISSPAM = "yes"
    FILTERREASON = "202"
}
 
:0
* ISSPAM ?? no
* EMAILSUBJECT ?? (돌려막|연체.*금리|금리.*연체|만원.*은행|은행.*만원|1[%]대금리|직장인.*여성우대|[(][0-9]*만원[)])
{
    ISSPAM = "yes"
    FILTERREASON = "202"
}
 
:0
* ISSPAM ?? no
* EMAILSUBJECT ?? [a-z ][a-z ][a-z ][a-z ][a-z ]$
* ISFORMATTEDSUBJECT ?? no
* ! EMAILSUBJECT ?? ^( )*(Re|Fw):
* ! EMAILSUBJECT ?? ^( )*[a-z0-9*?+[($^-]+
{
    ISSPAM = "yes"
    FILTERREASON = "203"
}
 
:0
* ISSPAM ?? no
* < 10000
* H ?? ^Content-Type:( )*multipart/alternative
* 2^0
* -1^1 B ?? ^Content-Type:
{
    ISSPAM = "yes"
    FILTERREASON = "204"
}
 
:0
* ISSPAM ?? no
* < 8000
{
    :0
    * ! ^From: .*@(paypal.com|mortghelper.com|blocjunk.com|mail2Maggie.com|blocspam.com|worldbusinesslink.org)
    * ! ^From: .*@(bisops.com|teadrive.com|superpowerball.com|proxad.net|jsivey.com|dbz.com|alapaz.com)
    { }
 
    :0 E
    {
   ISSPAM = "yes"
   FILTERREASON = "205"
    }
}
 
:0
* ISSPAM ?? no
* < 8000
{
    :0
    * ! HB ?? (Pain Relief|rx refill|rx meds|obesity|Viagra|Cialis|Xanax|Valium|Amvien|schlong|Prozac|V-I-A-G-R-A)
    * ! HB ?? (sexual health|porn|orgasm)
    * ! HB ?? (mor( )?t( )?g( )?a( )?g( )?e)
    { }
 
    :0 E
    {
   ISSPAM = "yes"
   FILTERREASON = "206"
    }
}
 
:0
* ISSPAM ?? no
* < 8000
* -2^0
* 1^1 HB ?? (meds|Medication|drug)
{
    ISSPAM = "yes"
    FILTERREASON = "207"
}
 
:0
* ISSPAM ?? no
* < 8000
* -5^0
* 1^1 HB ?? [.](com|net|org)"[>][<][/]a[>]
{
    ISSPAM = "yes"
    FILTERREASON = "208"
}
 
:0
* ISSPAM ?? yes
{
    LOG = "[$NOW] [Blk$FILTERREASON] $DEFAULT$TAB$ORGSUBJECT$NL"
    LOGFILE
 
    :0
    * ! ^Precedence:.*junk
    * ! ^X-Loop:.*
    /var/spool/mail/spam
 
    :0
    /dev/null
}
 
:0
{
    LOG = "[$NOW] [Pas$FILTERREASON] $DEFAULT$TAB$ORGSUBJECT$NL"
    LOGFILE
 
    :0
    $DEFAULT
}
 
sendmail 재가동
procmail 연동을 위해 sendmail 를 재가동 합니다.
[root@nextline ~]# /etc/rc.d/init.d/sendmail restart
 
필터링 메일계정 spam
/etc/procmailrc 파일에 의해 필터링된 메일들이 spam 계정으로 쌓이게 됩니다.

 
 
 
procmail 로그파일
/etc/procmailrc 에 설정한대로 /var/log/procmail 파일에 로그가 기록됩니다.

 
 
 
③ Clam AntiVirus를 이용한 메일서버 바이러스 차단
 
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=142&name=리눅스&home=보안
 
④ AUTH 설정
sendmail로 아웃룩을 사용시 보내는 메일(SMTP)의 인증 설정 부분이 있습니다.
/etc/mail/access 에서 아웃룩이 접속되는 IP대역을 설정하면 되지만, 어느 곳에서도 접속을 가능하게 하려면 SMTP Auth를 통하여 계정 인증을 통한 인증이 유용합니다.
 
설정파일 경로 : /etc/mail/sendmail.mc
 
수정전
dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
수정후 (주석 dnl 제거)
TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
 
수정전
dnl define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN
PLAIN')dnl
수정후 (주석 dnl 제거)
define(`confAUTH_MECHANISMS', `EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
 
수정전
dnl # DAEMON_OPTIONS(`Port=smtp,Addr=127.0.0.1, Name=MTA')dnl
수정후 (주석 dnl 제거 Addr=0.0.0.0 변경)
DAEMON_OPTIONS(`Port=smtp,Addr=0.0.0.0, Name=MTA')dnl
 
sendmail.cf 생성
[root@nextline ~]# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
 
sasl2 설정확인
[root@nextline ~]# cat /usr/lib/sasl2/Sendmail.conf
pwcheck_method:saslauthd
 
/etc/sysconfig/saslauthd 편집
MECH=shadow 이 부분의 값을 pam으로 변경
 
sendmail 재가동
[root@nextline ~]# /etc/rc.d/init.d/sendmail resetart
 
saslauthd 재가동
[root@nextline ~]# /etc/rc.d/init.d/salauthd restart
 
6) MYSQL 보안
 
① 리모트 엑세스 차단
 
먼저 MySQL이 디폴트로 리스닝하는 3306/tcp 포트를 차단해 데이터베이스가 로컬로 설치된 PHP 어플리케이션에 의해서만 사용되게 합니다. 3306/tcp 포트를 리스닝하지 못하게 하면 다른 호스트로부터 직접 TCP/IP 접속을 해서 MySQL 데이터베이스를 공격할 가능성이 줄어듭니다. 그러나 mysql.sock socket 을 통한 로컬 커뮤니케이션은 여전히 가능합니다. 3306/tcp 포트를 리스닝하지 못하게 하려면 /etc/my.cnf의 [mysqld] 부분에 다음을 추가하여 mysql을 재가동합니다.
 
skip-networking
또는
[root@nextline ~]# /usr/local/mysql/bin/mysqld_safe –skip-networking &
 
리모트로 데이터 백업을 한다든지 등의 이유로 데이터베이스를 리모트 엑세스 해야만 하는 경우 아래와 같이 SSH 프로토콜을 사용합니다.
 
[root@nextline ~]# ssh mysqlserver /usr/local/mysql/bin/mysqldump -A > backup
 
② 디폴트 사용자/데이터베이스 삭제
 
설치시 기본적으로 설치되는 test 디비 및 루트 어카운트를 제외한 모든 어카운트를 삭제합니다. 이렇게 하면 익명 접속으로 데이터베이스를 설정하는 것을 막을 수 있습니다.
 
[root@nextline ~]# mysql -u root -p
Enter password:
 
mysql> use mysql;
Database changed
mysql> drop database test;
Query OK, 0 rows affected (0.08 sec)
 
mysql> use mysql;
Database changed
mysql> delete from db;
Query OK, 3 rows affected (0.03 sec)
 
mysql> delete from user where not(host="localhost" and user="root");
Query OK, 4 rows affected (0.01 sec)
 
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
 
7) BIND 보안
 
① Bind 최신 패키지 업데이트
 
8.x 이전 버전은 잘 알려진 보안버그가 있으므로 최신 BIND 버전으로 업그레이드를 하도록 합니다. 또한, 버전별보안 취약점이 존재할 수 있으므로
http://www.isc.org/products/BIND/bind-security.html 에 주기적으로 방문하여 살펴보길 바랍니다.
 
② Bind-chroot 환경 적용
 
BIND는 root 계정 대신 named 계정으로 실행합니다. 또한, chroot 환경을 구성하여 네임서버의 보안 취약점으로 공격당하더라도 네임서버가 특정 디렉토리 이상의 상위로 벗어나지 못하게 설정합니다.
 
다운로드 : rpmfind.net
bind-chroot 패키지 설치

 
 
 
zone 파일경로

 
 
 
---------------------------------------------------------------------------------------
 
6. 보안프로그램
 
1) 웹 어플리케이션 보안 툴
 
웹 어플리케이션 보안템플릿 (PHP 버전)
 
KWST (KISA Web Security Template)
최근 홈페이지에 존재하는 웹 어플리케이션의 취약점을 이용하여 SQL Injection, iframe 삽입 등의 공격이 비번히 이루어지고 있으며, 이러한 웹 해킹으로 인하여 홈페이지 변조, 데이터유실, 심지어 시스템까지 해킹에 노출되어 막대한 피해를 입는 사례가 보고되고 있습니다.
웹 어플리케이션의 취약점을 보완하기 위해서는 취약점의 원인이 되는 홈페이지 소스를 직접 수정해야 하나 대부분의 중소 홈페이지의 경우, 개발인력의 미비로 인해 침해사고가 지속적으로 재발하는 문제가 발생하고 있습니다. KWST는 웹인터페이스를 이용한 간단한 설정으로 홈페이지 소스에 SQL Injection, iframe, XSS, 소스변조, 아이피 차단 등의 보안설정을 할 수 있는 보안 툴입니다.
 
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=194&name=리눅스&home=보안
 
2) 아파치 보안 모듈
 
ModSecurity를 이용한 아파치 웹서보 보안 구축
Mod Security는 Apache 웹 서버를 위한 오픈 소스 웹 방화벽입니다.
 
넥스트라인 기술문서
http://nextline.net/?inc=support&html=pds_view&no=130&name=리눅스&home=보안
Posted by 根™
FTP와 방화벽의 상관관계
 
FTP는 다른 서비스와는 달리 Active 모드와 Passive 모드 2개의 모드가 존재하며 또한 각각의 모드에서는 2개 또는 2개 이상의 포트가 작동합니다. 20번 또는 1024 이후의 포트는 DATA 전송용이며 21번은 접속 시 사용되는 포트입니다. 인터넷 사용자들이 가장 흔하게 접하는 웹 브라우저들은 일반적으로 Passive Mode 로 설정되어 있는데 반하여, 알FTP 나 WS-FTP, CuteFTP 같은 FTP 클라이언트 프로그램들은 일반적으로 Active Mode 가 기본값으로 설정되어 있다.
 
(1) FTP Active 모드와 Passive 모드의 차이점
 
① Active FTP 모드의 이해
 

 
Active 모드에서의 작동 방식은 위의 그림에서와 같이 먼저
① 클라이언트에서 서버의 21번 포트로 접속 후 클라이언트가 사용할 두 번째 포트를 서버에 알려줍니다.
② 서버는 이에 대해 ack로 응답하고
③ 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트로 접속을 시도합니다.
④ 마지막으로 클라이언트가 ack로 응답합니다. Active 모드의 문제점은 바로 3번째 단계 즉, 일반적인 TCP/IP의 특징인 ‘클라이언트가 서버에 접속을 시도하는 것’이 아니라 ‘서버가 클라이언에 접속을 시도한다’는 것입니다. 이 때문에 만약 클라이언트 PC등에 방화벽이 설치되어 있거나 FTP를 잘 이해하지 못하는 공유기 등을 사용하여 외부에서의 접속을 허용하지 않는다면 세 번째 프로세스가 작동하지 않게 되어 FTP 접속이 제대로 되지 않는 문제점이 있습니다. 이러한 경우 FTP 접속은 되지만 이후 데이터 목록을 받아오지 못하여 에러가 발생하게 됩니다.
 
즉, active 모드는 클라이언트에서 서버측 21번 포트로 접속시도 하고 데이터 포트는 서버에서 클라이언트로 접속 하여 데이터를 보내는 방식입니다.
 
② Passive FTP 모드의 이해
 

 

서버가 클라이언트에 접속시도를 하는 비정상적인 active 모드와 관련된 문제를 해결하기 위한 대안으로 passive 모드가 디자인되었습니다.
Passive 모드에서는
① 먼저 클라이언트가 command 포트로 접속을 시도하면
② 서버에서는 서버가 사용할 두 번째 포트를 알려줍니다.
③ 클라이언트는 다른 포트를 열어 서버가 알려준 이 포트로 접속을 시도하고,
④ 서버는 ack로 응답합니다. Passive 모드에서는 두 번째 data포트로서 active 모드가 사용했던 20번을 사용하지 않고 대신 1024 이후의 임의의 비 특권 포트를 사용하게 됩니다. 따라서 passive 모드는 서버에서 클라이언트로 연결을 시도하는 active 모드의 문제점을 해결하기는 했지만, 서버의 비 특권포트(1024 ~ 65535)를 방화벽에서 모두 열어 두어야 한다는 또 다른 문제점을 낳았습니다.
그러나 wu-ftp나 proftpd등 대부분의 ftp 데몬에서는 클라이언트가 passive 모드로 접속 시 사용할 수 있는 포트를 제한설정 할 수 있는 기능을 지원하므로 이의 문제점을 미봉책이나마 어느 정도는 해결할 수 있습니다.
 
위와 같이 passive 모드는 클라이언트에서 서버쪽 21번 포트로 접속 시도 하고 데이터 포트도 클라이언트에서 서버의 20번 포트로 접속하여 데이터를 받아오는 방식입니다.
 
(2) FTP 접속 장애요인

FTP 접속 모드에 따라 접속이 이루어지지 않거나 접속이 되어도 데이터 목록을 가져오지 못하는 현상이 발생하는 경우가 있는데 이는 이는 [서버] – [방화벽 또는 공유기] – [클라이언트] 로 연결되어 있는 방식으로 클라이언트 앞에 방화벽이나 공유기가 있다면 active 모드(서버에서 클라이언트로 접속)로는 방화벽 및 공유기로 인한 접속이 이루어지지 않는 현상이 발생하며 passive 모드(클라이언트에서 서버로 접속)로 접속해야 정상적인 접속이 이루어지기 때문에 서버와 클라이언트 사이의 방화벽 및 공유기 유무를 확인하여 적절한 모드로 접속을 하셔야 합니다.
 
① 서버단에 방화벽이 구축되어있는 경우 FTP 접속(Active 모드 접속이용)
서버단에 방화벽이 구축되어있을 경우는 active모드(서버에서 클라이언트로 접속)로 접속을 하셔야 하며 passive모드(클라이언트에서 서버로 접속)로 접속하실 경우 아래 화면 처럼 접속은 정상적으로 이루어지나 디렉토리 목록을 받아오지 못하는 현상이 발생합니다.
 
Active 모드 접속방법(프로그램별 모드설정은 기술문서 을 참고하시기 바랍니다.)
Passive Mode의 체크를 해제합니다.

 
Passive 모드로 접속할 경우 아래 화면과 같이 접속은 정상적으로 이루어지나 데이터 목록을 받아오지 못하는 현상이 발생합니다.

   
② 클라이언트측에 방화벽 및 공유기가 구축되어있는 경우 FTP 접속(Passive 모드 접속이용)
서버단에 방화벽이 구축되어있을 경우는 passive모드(클라이언트에서 서버로 접속)로 접속을 하셔야 하며 active모드(서버에서 클라이언트로 접속)로 접속하실 경우 아래 화면 처럼 접속은 정상적으로 이루어지나 디렉토리 목록을 받아오지 못하는 현상이 발생합니다.
 
Passive 모드 접속방법(프로그램별 모드설정은 기술문서 을 참고하시기 바랍니다.)
[Passive Mode 체크]

 
(3) FTP 프로그램 별 모드 설정
프로그램 및 버전별 모드설정 방법에 차이가 있으니 참고하시기 바랍니다.
 
① AL_FTP 접속모드 설정
[사이트맵] – [접속사이트 설정탭]

 
 
Passive 모드 – [Passive Mode 체크]
Active 모드 – [Passive Mode 체크해제]

 
② EditPlus 접속모드 설정
[파일] – [FTP] – [FTP 설정]

 
FTP 정보설정

 
Passive 모드 – [Passive FTP 모드 체크]
Active 모드 – [Passive FTP 모드 체크해제]
 

 
③ WSFTP 접속모드 설정
[Connect] – [Site Manager] – [Site Option] – [Advanced]
 
 


Passive 모드 – [Use Passive mode for data connections 체크]
Active 모드 – [Use Passive mode for data connections 체크해제]

 
④ Internet Explorer 접속모드 설정
[도구] – [인터넷 옵션] – [고급]

 
[방화벽 및 DSL 모뎀과 호환되는 수동 FTP 사용]
Passive 모드 - [체크]
Active 모드 - [체크해제]


[출처] 넥스트라인
Posted by 根™
2008/07/01 17:55

su 명령 제한하기 tip/APM2008/07/01 17:55

일반사용자들이 수퍼유저계정으로 변경을 하려면 su라는 명령어를 쓰게된다.

만약 su명령을 몇몇 사람들에게만 쓸수 있게 하려한다면 다음과 같이하면 된다.

]# vi /etc/pam.d/su

#%PAM-1.0
auth       sufficient   /lib/security/pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth       sufficient   /lib/security/pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth       required     /lib/security/pam_wheel.so use_uid               => 주석을 제거한다.
auth       required     /lib/security/pam_stack.so service=system-auth
account    required     /lib/security/pam_stack.so service=system-auth
password   required     /lib/security/pam_stack.so service=system-auth
session    required     /lib/security/pam_stack.so service=system-auth
session    optional     /lib/security/pam_xauth.so

위 설정은 wheel 그룹에 속한 사용자들만이 su 명령을 쓸수 있다는 것을 말한다.

wheel은 이러한 목적으로 사용될 수 있는 특별한 계정이다. 따라서 wheel 이외의 그룹은 위와같이 사용될 수없다. 

위 설정에서 wheel 그룹에 속한 사람만이 su 명령을 사용할 수있게 했으므로 su 명령을 써야하는 계정이 있다면 wheel 그룹에 추가시켜 주어야한다. 만약 in4mania 라는 계정을 wheel 그룹으로 추가하려면 다음과 같이한다.

다음 명령에서 G는 그룹을 나타내며, 10은 wheel 에 해당하는 값이다.

]# usermod -G10 in4mania

 

출처 리눅스베이

Posted by 根™
2008/07/01 17:53

Unix/Linux 시스템 분석 tip/APM2008/07/01 17:53

가. 시스템 상태 자료 수집

시스템에 대한 상태에 대한 정보수집은 운영체제에서 기본적으로 제공하는 다음과 같은 명령을 이용하여, 피해 시스템의 현재 프로세스, 열린 파일, 로그인 사용자 정보, 네트워크 상태 등을 수집할 수 있다.

명령어 설명
ps -elf 또는 ps -aux 현재 시스템에서 수행중인 프로세스 정보
netstat -an 현재 네트워크 활동에 대한 정보
lsof ps와 netstat를 대체할 수 있는 것으로 현 시스템의 모든 프로세스와 프로세스가 사용하는 포트 및 열린 파일 정보
last 사용자, 터미널에 대한 로그인, 로그아웃 정보
who 현재 시스템에 있는 사용자 정보
find / -ctime -ndays -ls
ndays 이전 시점부터 현재까지 ctime이 변경된 모든 파일에 대한 정보
nmap 네트워크 점검 도구인 nmap을 이용하여 원격에서 피해 시스템의 열린 포트 점검

●“ps -aux”명령은 각 프로세스의 사용자, 프로세스 ID, CPU점유율, 메모리사용률, 프로세스가 동작중인 TTY, 프로세스상태, 프로세스 시작시간 및 동작시간, 프로세스가 사용중인 명령들을 확인할 수 있다.
# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root   1 1.6 0.7 1336 476 ?   S   18:29 0:04 init
root   2 0.0 0.0   0   0 ?   SW 18:29 0:00 [keventd]
root   3 0.0 0.0  0   0 ?   SW 18:29 0:00 [kapmd]
root   4 0.0 0.0  0   0 ?   SWN 18:29 0:00 [ksoftirqd_CPU0]
root   5 0.0 0.0  0   0 ?   SW 18:29 0:00 [kswapd]
root   6 0.0 0.0   0   0 ?   SW 18:29 0:00 [bdflush]
root   7 0.0 0.0   0   0 ?  SW 18:29 0:00 [kupdated]
root   8 0.0 0.0   0   0 ?   SW 18:29 0:00 [mdrecoveryd]
root   12 0.0 0.0   0   0 ?   SW 18:29 0:00 [kjournald]
root   64 0.0 0.0   0   0 ?   SW 18:29 0:00 [khubd]
root   157 0.0 0.0   0   0 ?   SW 18:30 0:00 [kjournald]
root   422 0.0 0.0   0   0 ?   SW 18:30 0:00 [eth0]
root   489 0.0 0.9   1396 568 ?   S  18:30 0:00 syslogd -m 0
root   493 0.0 0.6   1336 420 ?   S   18:30 0:00 klogd -x
rpc   504 0.0 0.8   1484 532 ?   S   18:30 0:00 portmap
rpcuser   523 0.0 1.1   1528 724 ?  S   18:30 0:00 rpc.statd
root   602 0.0 0.7  1328 472 ?  S   18:30 0:00 /usr/sbin/apmd -p 10 -w 5 -W -P
/etc/sysconfig/apm-scripts/apmscript
root   640 0.0 2.3   3272 1440 ?   S   18:30 0:00 /usr/sbin/sshd

● netstat -an
“netstat -an”명령을 통해 현재 네트워크 연결상태, 연결에 사용된 로컬어드레스와 포트, 연결에 사용된 원격지어드레스와 포트, 연결상태를 확인할 수 있다.
# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp  0  0  0.0.0.0:1024  0.0.0.0:*  LISTEN
tcp  0  0  127.0.0.1:1025  0.0.0.0:*  LISTEN
tcp  0  0  0.0.0.0:3306  0.0.0.0:*  LISTEN
tcp  0  0  0.0.0.0:111  0.0.0.0:*  LISTEN
tcp  0  0  0.0.0.0:6000  0.0.0.0:*  LISTEN
tcp  0  0  0.0.0.0:21  0.0.0.0:*  LISTEN
tcp  0  0  0.0.0.0:22  0.0.0.0:*  LISTEN
tcp  0  0  127.0.0.1:25  0.0.0.0:*  LISTEN
tcp  0  20  172.16.5.28:22  172.16.5.19:3098  ESTABLISHED
udp  0  0  0.0.0.0:1024  0.0.0.0:*
udp  0  0  0.0.0.0:111  0.0.0.0:*

● lsof
lsof는 시스템에서 현재 실행되고 있는 모든 프로세스를 중심으로 각각의 프로세스이름 및 PID, Running 프로세스와 연관된 소유자, FD(File Descriptor), 파일 타입, 디바이스번호, 파일 크기, Inode 번호, 파일이름등의 정보를 볼 수 있으며, -i옵션을 이용할 경우 TCP/UDP 소켓을 사용하는 프로세스를 확인할 수 있다.
# lsof -i
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
portmap 504 rpc 3u IPv4 990 UDP *:sunrpc
portmap 504 rpc 4u IPv4 991 TCP *:sunrpc (LISTEN)
rpc.statd 523 rpcuser 4u IPv4 1061 UDP *:1024
rpc.statd 523 rpcuser 6u IPv4 1064 TCP *:1024 (LISTEN)
sshd 640 root 3u IPv4 1380 TCP *:ssh (LISTEN)
xinetd 654 root 5u IPv4 1426 TCP MyLinux:1025 (LISTEN)
xinetd 654 root 6u IPv4 1429 TCP *:ftp (LISTEN)
sendmail 677 root 4u IPv4 1476 TCP MyLinux:smtp (LISTEN)
mysqld 747 mysql 3u IPv4 1601 TCP *:mysql (LISTEN)
mysqld 774 mysql 3u IPv4 1601 TCP *:mysql (LISTEN)
mysqld 775 mysql 3u IPv4 1601 TCP *:mysql (LISTEN)
mysqld 776 mysql 3u IPv4 1601 TCP *:mysql (LISTEN)
mysqld 777 mysql 3u IPv4 1601 TCP *:mysql (LISTEN)
mysqld 778 mysql 3u IPv4 1601 TCP *:mysql (LISTEN)
mysqld 817 mysql 3u IPv4 1601 TCP *:mysql (LISTEN)
mysqld 818 mysql 3u IPv4 1601 TCP *:mysql (LISTEN)
mysqld 820 mysql 3u IPv4 1601 TCP *:mysql (LISTEN)
mysqld 823 mysql 3u IPv4 1601 TCP *:mysql (LISTEN)
X 850 root 1u IPv4 1726 TCP *:x11 (LISTEN)
sshd 859 root 4u IPv4 1758 TCP 172.16.5.28:ssh->172.16.5.19:3098 (ESTABLISHED)

나. 시스템 상태 자료 분석

● 수집한 정보 분석
명령어 설명
ps sniffer 또는 취약점 스캔 프로그램 등 공격 프로그램이 실행되고 있는지 확인
netstat 서비스하지 않는 포트가 열려 있는지 또는 이상한 사이트로 접속이 있는지 확인
lsof 공격 프로그램이 실행되고 있는지 또는 서비스하지 않는 포트가 열려 있는지 확인 (ps와 netstat 기능 대체
last 사용하지 않는 계정 또는 이상한 사이트에서 로그인한 정보가 있는지 확인
who 현재 누가 접속해 있는지 확인
find / -ctime -ndays -ls
ndays 이전 시점부터 현재까지 ctime이 변경된 모든 파일에 대한 정보
nmap 네트워크 백도어를 가장 빨리 찾을 수 있는 방법으로, 피해 시스템에 이상한 포트가 열려있는지를 확인

● 공격 시간대를 중심으로 분석
- 사고시스템에 남은 로그 등을 통하여 공격시간이 확인 가능한 경우
# find / -mtime -6 -ls : 현재로부터 6일 이전까지 변경된 파일을 점검
- 공격시간대를 알 수 없는 경우에는 파일의 inode 변경시간(ctime)을 점검
# find / -ctime -ndays -ls : 지난 n 날짜동안 수정된 inode를 갖는 모든 파일을 점검

다. 잘 알려진 공격기법에 대한 분석

● 시스템의 모든 로그 파일 검사
history 로그를 제외한 로그파일들을 유닉스 /usr/adm 또는 /var/adm 디렉토리에 저장하
고, 리눅스는 /var/log 디렉토리에 저장한다.
명령어 설명
aculog Dial-out 모뎀 사용 내역
history 사용자별 명령어
lastlog 사용자 최근 로그인 시간
loginlog 실패한 로그인 시도
maillog 메일 시스템 수행 내역
messages
부팅시의 시스템 콜솔 내용
secure 시스템 권한 관련 로그
sulog su 명령 사용 내역
utmpx 현재 로그인한 사용자 내역
vold.log 외부 매체 사용에 대한 에러 들
wtmpx 사용자의 로그인, 로그아웃 시간
xferlog ftp 사용 내역

로그 파일을 검사할 때는 주로 messages, last, secure등의 로그를 살펴 외부에서 공격한 공격로그가 남아있는지, 관리자가 추가하지 않은 사용자가 접속한 흔적은 있는지, 특정한 서비스에 접속한 흔적 등이 있는지 확인해 보아야 한다.

예) 버퍼오버플로우 공격을 받을 때 messages에 남는 로그
Jan 15 09:16:53 roo1-03 rpc.statd[838]: gethostbyname errorfor
^X??X??Z??Z??8x%8x%8x%8x%8x%8%62716x%hn%51859x%hn\
220\220\220\220\220\220\220\220\220\220\220\220\220\220\220\220\
220\220\220\220\220\220\220\220\220\220\220\220\220\220\220\220\220\

예) 관리자가 추가하지 않은 사용자가 접속해 secure에 남은 로그
Feb 3 00:23:54 localhost sshd[1515]: Accepted password for amc from 80.97.191.237 port 1145
Feb 3 02:04:27 localhost sshd[1662]: Accepted password for amc from 80.97.158.154 port 59786
Feb 3 02:19:12 localhost sshd[1842]: Accepted password for amc from 80.97.158.154 port 59891
Feb 3 05:48:36 localhost sshd[3149]: Accepted password for amc from 80.97.158.154 port 41685
Feb 3 06:08:20 localhost sshd[3301]: Accepted password for amc from 80.97.158.154 port 41698
Feb 3 23:07:03 localhost sshd[8532]: Accepted password for amc from 80.97.191.142 port 1334

● history 파일 점검
- root나 의심이 가는 사용자의 history 파일을 점검한다.
Linux : # more bash_history : 사용자의 홈 디렉토리에서 점검
Solaris : # more .history : / 디렉토리에서 점검

예) bash_history 로그를 통해 의심 가는 계정의 사용자가 한 작업을 볼 수 있다.
# more .bash_history|more
cd /tmp
wget esk.as/scanall.tar.gz
tar -zxvf scanall.tar.gz
./smurf5 213
./sl3 21
cd scanall
./sl3 21
dir
./x2 21
...

● /etc/passwd 파일 점검
- 관리자가 생성하지 않은 새로운 계정이나, uid=0인 계정, 패스워드가 없는 계정이 있는지
확인한다.
# ls -al /etc/passwd

예) /etc/passwd파일에 관리자가 만들지 않은 uid=0인 계정이 있는 경우
# more /etc/passwd
cgm:x:0:510::/home/cgm:/bin/bash
bind:x:0:511::/home/bind:/bin/bash

● 숨겨진 디렉토리 점검
- “ .”이나“..”으로 시작하는 디렉토리를 만들거나, 이는 관리자가 아무런 옵션 없이“ls”명령을 사용했을 때는 보이지 않게 된다.
# find / -name“ ..*”-print 또는 # find / -name“ .*”-print

● 공격자가 자주 사용하는 디렉토리 점검
- /dev, /var, 각종 /tmp 디렉토리, write가능한 디렉토리에 공격용 파일/디렉트리를 설치하는 경우가 많고, 특히 /dev 디렉토리는 루트킷이나 백도어 설정파일의 디폴트 디렉토리로 많이 사용된다.
# find /dev -type f -print -/dev 디렉토리는 일반파일이 존재불가능

● 백도어 파일 점검
- 사용자 홈 디렉토리의“.rhosts”파일, “.forward”파일, “etc/inetd.conf”파일, “/etc/services”파일, /etc/rc.d/ 디렉토리내의 파일들에 이상한 포트나 서비스가 열려 있는지 점검한다.

● 시스템날짜 변경 확인
- /bin 디렉토리나 /sbin 디렉토리 등 시스템 파일들의 날짜가 변경되었는지를 점검한다.
- 자주 사용되는 프로그램의 파일 사이즈를 똑같은 버전의 다른 시스템의 프로그램과 비교하거나 시스템 명령들은 OS를 설치할 때 한꺼번에 설치되므로 비슷한 시간속성을 가지고 있어야 하므로 해당프로그램의 생성날짜 또는 변경 날짜를 다른 프로그램의 날짜와 비교함으로써 변조유무를 알 수 있다.
# ls -alct /bin 또는 # ls -alct /sbin

예) ps, netstat을 변조시키고 원래의 ps, netstat파일을 .ps, .netstat로 바꾼 경우
# ls -alct|more
합계 6268
drwxr-xr-x 20 root root 4096 1월 17 17:06 ../
drwxr-xr-x 2 root root 4096 12월 16 08:35 ./
-rwxr-xr-x 1 root root 232 12월 16 08:35 netstat*
-rwxr-xr-x 1 root root 305 12월 16 08:35 ps*
-rwxrwxrwx 1 root 50 206 12월 16 08:35 xnet*
-rwxrwxrwx 1 root 50 260 12월 16 08:35 xps*
-rwxrwxrwx 1 root 50 218 12월 9 23:52 .netstat*
-rwxrwxrwx 1 root 50 257 12월 9 23:52 .ps*

- 시스템 파일들이 실행될 때 호출되는 시스템 콜과 정상적인 프로그램의 시스템 콜을 비교
함으로써 시스템 명령의 변조 유무를 확인할 수 있으며 strace(Linux), truss(Solaris) 명령
을 이용해 확인할 수 있다.
# truss -t open /usr/bin/ls
open“( /var/ld/ld.config”, O_RDONLY) Err#2 ENOENT
open“( /usr/lib/libintl.so.1”, O_RDONLY) = 3
open“( /dev/zero”, O_RDONLY) = 4
open“( /usr/lib/libc.so.1”, O_RDONLY) = 3
open“( /usr/lib/libdl.so.1”, O_RDONLY) = 3
open“( /usr/platform/SUNW,Ultra-60/lib/libc_psr.so.1”, O_RDONLY) = 3
open“( /usr/include/fs.h”, O_RDONLY) = 3
open64“( .”, O_RDONLY|O_NDELAY) = 3

출처 -한국정보보호진흥원 사이버안전메뉴얼 중
Posted by 根™
2008/07/01 17:52

[DNS] 2차 도메인 설정하기 tip/APM2008/07/01 17:52

※ 2차도메인 설정 방법에도 여러가지 방법이 있겠으나 , 여기에서는 보편적으로 사용하는 방법에 대하여 설명하고자 합니다.
 
① 먼저 zone 파일에서 사용 할 호스트를 추가 해줍니다.
   ** cd /var/named -> vi zone-test.com (사용하고계신 도메인이 test.com 이라 가정)

위의 예제는 주도메인 test.com 에 대하여 next.test.com이라는 2차도메인 생성을 위하여 존파일에 해당 호스트를 추가해준 예입니다.
 
② 위와 같이 사용할 호스트를 기입해주는 방법이 있으나 , 많은 호스트를 추가하여 사용하고자 한다면 일반적으로 아래와 같이 * 문자를 사용하는 방법이 있습니다.

**존파일수정후에는문법 검사를 필히 해주시기 바랍니다. 검사 방법에는 /etc/named.conf 파일 테스트와 해당 존파일 테스트 두가지 방법이 있습니다.
* named-checkconf /etc/named.conf
* named-checkzone test.com /var/named/zone-test.com
 
③ 위와같이 2차도메인으로 사용 할 호스트 추가가 끝났다면 다음으로 아파치 설정을 해주시면 됩니다. 아파치 설정은 소스설치하신 경로에있는 .../apache/conf/httpd.conf 파일에서 다음의 작업을 해주시면 됩니다.(rpm설치시에는 /etc/httpd/conf/httpd.conf)

위의 예는 2차도메인에 다른 계정을 지정하고자 할 때의 셋팅입니다. 같은 계정을 사용하고자 할 때에는 주도메인인 test.com 에 알리아스로 추가 해주시면 됩니다.
 
ServerAlias next.test.com

**아파치 설정변경 후에는 다음의 명령어로 설정에 대한 구문체크를 먼저 해보시는 것이 바랍직합니다.
 
apachectl configtest

위와같이 나온다면 정상적으로 설정이 된것입니다.
다음으로 아파치데몬 재가동 해주면 설정이 완료됩니다.
Apachectl restart ( /usr/local/apache/bin/apachectl restart , rpm 설치시에는 /etc/rc.d/init.d/httpd restart)

'tip > APM' 카테고리의 다른 글

VMware와 인터넷 공유하기  (0) 2009/02/23
리눅스 최적화 및 보안지침  (1) 2008/07/05
FTP Active 모드와 Passive 모드의 차이점  (1) 2008/07/01
su 명령 제한하기  (0) 2008/07/01
Unix/Linux 시스템 분석  (0) 2008/07/01
[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
Posted by 根™
2008/07/01 17:50

[DNS] 추가 도메인 설정하기 tip/APM2008/07/01 17:50

자체 도메인을 사용중인 분들께만 해당 됩니다.
예로, 기존에 ns.test.com 으로하여 자체네임서버를 운용하고 있었고 이에 nextline.com 이라는 도메인을 추가로 사용하고자 할 때의 설정을 예로 들도록 하겠습니다.
 
① 먼저 해당도메인에 대한 /etc/named.conf 파일을 설정합니다.
** vi /etc/named.conf
 

② /etc/named.conf 파일의 설정이 끝났다면 다음으로 영역(zone)파일을 생성 해주시면 됩니다. 존파일은 /var/named 에 설정되어있는 기존의 zone 파일을 그대로 카피해 주시면 됩니다.
 
*** cd /var/named
*** cp -a zone-test.com zone-nextline.com

위의 명령으로 복사 해주게 되면 권한까지 맞추어 주기 때문에 –a 옵션을 사용하시면 편리합니다.

 


③ 존파일 내에 다른 변동사항이 없다면 그대로 사용하도록하며 메일 MX값이나 A레코드값등 변동사항이 있다면 변경 사용하도록 합니다. 아래는 zone-nextline.com 존파일의 내용입니다.
 
 
④ 존파일에 대한 설정까지 마쳤다면 데몬 재실행 전에 구문체크부터 해봅니다.
** named-checkconf /etc/named.conf
** named-checkzone nextline.com /var/named/zone-nextline.com 


⑤ 구문체크가 정상으로 나온다면 데몬을 재가동합니다.
** /etc/rc.d/init.d/named restart
 

아파치 설정하기
 
먼저 사용 할 계정을 생성합니다.
** useradd next
** passwd next

아파치 설정 파일이 위치한 곳으로 이동합니다.
** cd /usr/local/apache/conf/httpd.conf (RPM 설치시에는 cd /etc/httpd/conf/httpd.conf)

아파치 설정 파일을 여신 후 하단에 추가로 설정할 도메인에 대한 설정을 하시면 됩니다.
아래의 내용은 설정 파일을 열고 도메인에 대한 설정을 한것입니다.)
** vi /usr/local/apache/conf/httpd.conf
 

 
아파치 설정 후에는 반드시 구문체크를 해봅니다.
** apachectl configtest ( /usr/local/apache/bin/apachectl configtest)

 
위와 같이 구문체크가 정상으로 나온다면 데몬을 재실행합니다.

** apachectl restart ( 아파치 설치위치까지 절대경로로 이동합니다. 실행 예로 설치위치가 /usr/local 이라면 /usr/local/apache/bin/apachectl restart , rpm 설치하셨다면/etc/rc.d/init.d/httpd restart 하시면됩니다.)

위와 같이 설정을 마쳤다면 디렉토리 경로인 /home/next/public_html 디렉토리로 이동하셔서 작업을 하시면 됩니다.

** cd /home/next/public_html

'tip > APM' 카테고리의 다른 글

리눅스 최적화 및 보안지침  (1) 2008/07/05
FTP Active 모드와 Passive 모드의 차이점  (1) 2008/07/01
su 명령 제한하기  (0) 2008/07/01
Unix/Linux 시스템 분석  (0) 2008/07/01
[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
php.ini 환경설정  (0) 2008/07/01
Posted by 根™
2008/07/01 17:49

[DNS] 네임서버 설정 검사하기 tip/APM2008/07/01 17:49

네임서버를 설정하고 난 후에는 아래의 명령어로 설정사항을 검사할 수 있습니다.

named-checkconf 명령과 named-checkzone 명령어에 대한 사용법을 알아보겠습니다.

=================================================================================
named-checkconf - /etc/named.conf 파일을 검사하는 명령

-사용법
named-checkconf [named 설정파일 경로]

[root@server21010910234 root]# named-checkconf /etc/named.conf
[root@server21010910234 root]#

엔터를 쳤을때 위와 같이 아무런 반응없이 프롬프트가 떨어지면 named.conf 파일에 이상이 없는 것 입니다.

=================================================================================
named-checkzone - /var/named 디렉토리 하위에 설정한 zone 파일을 검사하는 명령

-사용법
named-checkzone [zone 네임] [zone 파일 경로]

------------------------------
zone "yahoo.com" IN {
       type master;
       file "yahoo.zone";
       allow-update { none; };
};
------------------------------

/etc/named.conf 파일에 위와 같이 zone 설정이 되어 있을때, 아래와 같은 방법으로 검사를 할 수 있습니다.

[root@server21010910234 root]# named-checkzone yahoo.com /var/named/yahoo.zone
zone localhost/IN: loaded serial 42
OK
[root@server21010910234 root]#

'tip > APM' 카테고리의 다른 글

FTP Active 모드와 Passive 모드의 차이점  (1) 2008/07/01
su 명령 제한하기  (0) 2008/07/01
Unix/Linux 시스템 분석  (0) 2008/07/01
[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
php.ini 환경설정  (0) 2008/07/01
httpd.conf 설정  (0) 2008/07/01
Posted by 根™
2008/07/01 17:44

tar명령 사용법 tip/APM2008/07/01 17:44

tar 명령어 : 아카이브를 만들거나 풀때 사용하는 명령어 입니다.
 
아카이브는 여러 파일을 한 파일로 묶은 것을 말합니다.
tar는 압축하지 않고, 단지 하나의 파일로 묶는 역할만 합니다.
아카이브의 압축은 gzip이나 bzip2등을 사용합니다.
 
아카이브를 만드는 목적은 파일의 백업이나 배포를 편리하게 하기 위함입니다.
아카이브의 확장자는 .tar이며 일반적으로 tar로 묶인 아카이브를 gzip으로 압축하여
확장자가 .tar.gz인 압축 아카이브를 많이 이용합니다.
 
* 옵션
 
-f --file= 
-f 는 아카이브 파일의 이름을 지정해 주는 옵션입니다.. -f 로 아카이브의 이름을 꼭 명시해야 합니다.
 
-v --verbose
-v 옵션이 있으면 아카이브에 추가되거나 풀리고 있는 파일의 이름을 화면에 보여줍니다.
진행사항을 알 수 있기 때문에 사용하는게 좋으며 "ls -l" 과 같은 형식으로 파일을 보려면 v를 두번 써줍니다.
 
-c --create
새로운 아카이브를 생성합니다.
 
-t --list
아카이브의 내용(묶인 파일이름)을 보여줍니다.
 
-x --extract
아카이브에 묶인 파일이나 디렉토리를 풀어줍니다.
 
 
* 사용 방법
 
- aaa.tar이란 아카이브 풀기

- aaa, aaa.txt, bbb, bbb.txt 의 4개의 파일로 bbb.tar이란 아카이브 만들기

tar -tvf aaa.tar : aaa.tar이란 아카이브 내용보기

퍼미션을 유지하며 aaa, aaa.txt, bbb, bbb.txt의 4개의 파일을 ccc.tar이란 아카이브 만들기

 
* tar+gzip 압축하기
tar -czvf aaa.tar.gz 묶을파일과디렉토리들
aaa.tar.gz 라는 이름으로 aaa, aaa.txt, bbb, bbb.txt의 4개의 파일을 압축하여 묶어줍니다.
Gzip 으로 압축을 할때에는 –z 옵션을 사용합니다.

 
* tar+bzip2 압축하기
tar -cjvf aaa.tar.bz 묶을파일과디렉토리들
aaa.tar.bz 라는 이름으로 aaa, aaa.txt, bbb, bbb.txt의 4개의 파일을 압축하여 묶어줍니다.
bzip2 으로 압축을 할때에는 –j 옵션을 사용합니다.

 
* gzip으로 압축된 tar 풀기
tar -xvzf aaa.tar.gz
aaa.tar.gz 라는 tar 로 묶인뒤 gzip 으로 압축된 파일을 먼저 압축을 푼뒤에 묶인 파일까지 풀어줍니다.

 
* bzip2로 압축된 tar 풀기
tar -xvjf aaa.tar.bz
aaa.tar.bz 라는 tar 로 묶인뒤 bzip2로 압축된 파일을 먼저 압축을 푼뒤에 묶인 파일까지 풀어줍니다.

 
* tar 압축을 풀 때 원하는 파일만 압축풀기
tar –zxvf(gzip의경우 상용) [압축 파일명] [압축파일안의 압축을 풀고자하는 파일경로]
tar –jxvf(bzip2의경우 상용) [압축 파일명] [압축파일안의 압축을 풀고자하는 파일경로]
 
아래의 설명은 gzip으로 압축한 파일을 예로들어 기재한 내용입니다.
aaa.tar.gz 란 압축파일 안의 ddd파일만 압축을 풀어줍니다.
ddd파일이 aaa.tar.gz안의 어느 경로에 압축되어 있는지 경로를 알고 계셔야 합니다.
aaa.tar.gz의 파일안의 트리구조는 아래와 같다고 할때의 경우 ddd 파일의 경로는
aaa/ccc/ddd 이므로 tar –zxvf aaa.tar.gz aaa/ccc/ddd 의 명령어를 입력하여 실행합니다.
aaa/
aaa/ggg/
aaa/ccc/eee
aaa/ccc/ddd/
aaa/sss.txt
aaa.txt
bbb/
bbb.txt
아래의 그림을 보시면 aaa/ccc/의 폴더가 생성되어 있으며 기존 aaa.tar.gz으로 압축되기전의 ccc폴더안의 eee, ddd 폴더중 ddd 폴더만 압축이 풀려있는 것을 확인 하실수 있습니다.
 

 
* 용량이 많은 파일을 분할하여 압축하는 법(아래의 예제는 gzip으로 압축하는 방식 입니다.)
tar -cvzf – [압축할 파일 이름] | split -b 100m – [압축될 파일이름].tar.gz
test란 파일을 (약)100M으로 분할하여 압축을 하고자 한다면
tar –cvzf – test | split –b 100m – test.tar.gz 의 명령을 내리시면 됩니다.

 
ls –al 명령어로 확인하여 보시면 test.tar.gzaa, test.tar.gzab … 의 형식으로 용량이 100M로 분할되어 압축된 것을 확인하실수 있습니다.

 
* 분할하여 압축한 파일 풀기
cat [압축한 파일명]* | tar -xvzf –
“*”는 모든것이란 뜻입니다.
위에서 분할하여 압축된 test.tar.gz의 파일들을 압축을 푼 예제입니다.
cat test.tar.gz* | tar -xvzf –
 

 
아래의 그림을 확인하여 보시면 분할하여 압축한 파일들이 test란폴더에 풀려있는 것을 확인하실수 있습니다.



'tip > APM' 카테고리의 다른 글

su 명령 제한하기  (0) 2008/07/01
Unix/Linux 시스템 분석  (0) 2008/07/01
[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
php.ini 환경설정  (0) 2008/07/01
httpd.conf 설정  (0) 2008/07/01
mysql 에서 현재 status 확인 하기  (0) 2008/07/01
Posted by 根™
2008/07/01 17:42

sshd_config 환경설정 tip/APM2008/07/01 17:42

SSH 환경설정(sshd_config)

 

SSH 또는 Secure Shell은 네트워크 상의 다른 컴퓨터에 로그인하거나 원격 시스템에서 명령을 실행하고 다른 시스템으로 파일을 복사할 수 있도록 해 주는 응용 프로그램 또는 그 프로토콜을 가리킵니다. 기존의 rsh, rlogin, 텔넷 등을 대체하기 위해 설계되었으며, 강력한 인증 방법 및 안전하지 못한 네트워크에서 안전하게 통신을 할 수 있는 기능을 제공합니다. 기본적으로는 22번 포트를 사용합니다. SSH는 암호화 기법을 사용하기 때문에, 통신이 노출된다 하더라도 이해할 수 없는 암호화된 문자로 보이기 때문에 보안에 더욱 안전합니다.

 

설정파일 경로 : /etc/sshd/sshd_config

 

① 기본설정

 

Protocol 2  

openssh는 프로토콜 버전을 원하는 대로 선택할 수 있습니다. protocol 2로 설정에는 서버는 버전 2로만 작동하기 때문에 ssh1을 사용해 접속을 요청하는 클라이언트를 받아 들일 수 없다. protocol 1로 설정해서 가동시킬 경우에는 버전 2를 사용하는 ssh2 사용자의 요청을 받아 들일 수 없다. 보안상 protocol 1 은 사용하지 않습니다.

 

KeyRegenerationInterval 3600

서버의 키는 한번 접속이 이루어진 뒤에 자동적으로 다시 만들어진다. 다시 만드는 목적은 나중에 호스트의 세션에 있는 키를 캡처해서 암호를 해독하거나 훔친 키를 사용하지 못하도록 하기 위함 위함입니다. 값이 0이면 키는 다시 만들어지지 않습니다. 기본값은 3600초입니다. 이 값은 자동으로 키를 재생성하기 전까지 서버가 대기할 시간을 초단위로 정의합니다.

 

ServerKeyBits 1024

서버 키에서 어느 정도의 비트 수를 사용할지 정의합니다. 최소값은 512이고 디폴트 값은 768입니다.

 

SyslogFacility AUTH

/etc/syslog.conf에서 정의한 로그 facility 코드입니다. 가능한 값은 DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7입니다. 기본값은 AUTH입니다. Facilith란 메시지를 생성하는 하위 시스템을 말합니다.

 

LogLevel INFO

로그 레벨을 지정하는 것입니다. 가능한 값은 QUIET, FATAL, ERROR, INFO, VERBOSE 그리고 DEBUGS입니다.

  

LoginGraceTime 600

유저의 로그인이 성공적으로 이루어지지 않았을 때 이 시간 후에 서버가 연결을 끊는 시간입니다. 값이 0 이면 제한 시간이 없으며 기본값은 600초입니다.

 

strictModes yes

사용자의 홈 디렉토리인 /home/username의 권한 값 등을 체크하도록 설정되어 있는 지시자 입니다.

 

RSAAuthentication yes

RSA 인증의 시도여부를 정의합니다. ssh1 프로토콜에만 사용하기 위해 예약된 것으로,

ssh1을 사용하고 운영상 보다 안전하게 운영하려면 이 옵션을 yes로 설정해야 합니다.

RSA는 인증을 하기 위해 ssh-keygen 유틸리티에 의해 생성된 공개키 와 비밀키 쌍을 사용합니다. 현재 문서에서는 보안상 ssh1 프로토콜을 사용하지 않으므로 주석 처리합니다.

 

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

ssh에서 제공하는 인증에는 공개키 인증과 암호 인증법 이렇게 두가지가 있는데, 공개키인증을 사용할 것인지에 대해 설정하는 것입니다. 공개키 인증 사용시 공개키가 있어야 하므로 더욱 안전합니다.

 

RhostsAuthentication no

sshd rhosts 기반의 인증을 사용할 것인지 여부를 정의합니다. rhosts 인증은 안전하지 못하므로 ‘no’로 합니다.

 

IgnoreRhosts yes

IgnoreRhosts’ 명령은 인증시 rhosts shosts 파일의 사용여부를 정의합니다.

보안상의 이유로 인증할 때 rhosts shosts 파일을 사용하지 않도록 합니다.

 

RhostsRSAAuthentication no

rhost /etc/hosts.equiv파일이 있으면 이것을 사용해 인증합니다. 이것은 보안상 별로 안 좋은 방법이기 때문에 허용하지 않습니다. RSA 호스트 인증과 맞추어 rhosts 인증의 사용여부를 정의합니다.

 

HostbasedAuthentication no

호스트 기반의 인증 허용 여부를 결정합니다.

 

IgnoreUserKnownHosts yes

ssh 데몬이 RhostsRSAAuthentication 과정에서 각 사용자의 $HOME/.ssh/known_hosts

무시할 것인지 여부를 정의합니다. rhosts 파일을 허용하지 않았으므로 yes로 설정하는 것이 안전합니다.

 

PasswordAuthentication yes  

패스워드 인증을 허용합니다. 이 옵션은 프로토콜 버전 1 2 모두 적용됩니다. 인증할 때 암호기반 인증방법의 사용 여부를 결정합니다. 강력한 보안을 위해 이옵션은 항상 "no"로 설정해야합니다.

 

PermitEmptyPasswords no

패스워드 인증을 할 때 서버가 비어있는 패스워드를 인정하는 것입니다. 기본 값은 no입니다.

 

X11Forwarding no

원격에서 X11 포워딩을 허용하는 것입니다. 이 옵션을 yes로 설정하면 xhost보다 안전한 방법으로 원격에 있는 X프로그램을 사용할 수 있습니다.

 

PrintMotd yes 

사용자가 로그인 하는 경우 /etc/motd (the message of the day) 파일의 내용을 보여줄 것인지 여부결정. ssh 로그인을 환영하는 메시지나 혹은 공지사항 같은 것을 적어 놓으면 됩니다.

 

Subsystem   sftp    /usr/libexec/openssh/sftp-server

sftp는 프로토콜 버전 2에서 사용되는 것으로서 ssh와 같이 ftp의 보안을 강화하기 위해 사용되는 보안 ftp프로그램입니다.

openssh를 설치하면 /usr/local/ssh/libexec/sftp-server파일이 설치됩니다. 이것은 sftp 서버용 프로그램입니다. 클라이언트 sftp프로그램은 설치되지 않습니다. 따라서 서버로 일단 가동시키고 원도용 ssh클라이언트 프로그램이나 SSH2를 설치하면 sftp를 사용할 수 있습니다.

 

CheckMail (yes/no)

사용자가 로그인할 때 새메일이 도착했음을 알리도록 하는 기능을 설정하며 기본값은 yes로 되어있습니다.

 

Cipher (ciher)

세션을 암호화 할 때 사용할 방법을 명시해 줍니다

(idea,des,3des,blowfish,arcfour 또는 없음)

 

ForwardAgent

인증 대리인이 포워드되어야 하는지를 명시 합니다.

 

KeepAlive yes

RequireReverseMapping no

클라이언트에게 aliive메시지를 보낼 것인지 명시하는데 접속하는 곳의 도 메인이 revers Mapping 이 되는지를 활인하여 접속을 허가할지 안할지를 지정합니다. 실제로 internet상에 호스트 들중 revers mapping 이 안되는 호스트가 상 당수이므로 되도록 no로 설정할 것을 권장합니다. 만약 여러분이 사용하시는 host revers mapping 이 확실히 되면 보안상 yes로 하는것이 좋겠지만 revers mapping이 되지 않으면 접속이 불가능 하므로 조심하십시오.

 

PasswordAuthentication (yes/no)

패스워드 기반의 인증방법을 사용할 것인지를 명시 합니다.

 

 

PubkeyAuthentication (yes/no)

인증 순서를 지정합니다.

 

② 보안설정

 

Port 22

ssh가 사용할 기본 포트를 지정합니다. 포트 변경 시 /etc/services 파일에서 sshd 관련 포트 역시 변경할 포트로 변경해 주어야 합니다.

 

AllowUsers root nextline   

로그인 허락할 계정 nextline root 두 계정에게만 로그인 허용 합니다.

 

PermitRootLogin no

root 로그인 허용여부를 결정하는 것입니다. yes, no, without-password를 사용할 수 있습니다. 현재 no로 되어 있기 때문에 직접  root로 접속이 불가능합니다. 이옵션을 yes 로 하기보다는 일반계정으로 로그인후 su 명령으로 root로 전환하는 것이 보안상 안전합니다.

 

ListenAddress 0.0.0.0

sshd가 귀를 기울일 주소를 정해줍니다. 0.0.0.0은 모든 곳으로 부터 접속 을 받아들이겠다는 의미입니다. 하지만 패키징을 할때 어떻게 한것인지는 모르겠지만 tcp-wrapper의 영향을 받아서 hosts.deny에서 막혀 있으면 접속이 안되니 hosts.allow hosts.deny에서 sshd2 항목으로 제어를 할수가 있습니다.

 

AllowedAuthentications   publickey,password

Sshd2가 제공하는 인증은 password publickey 그리고 hostbased 방식이 있는데, 기본 적으로 public,password가 사용됩니다. 이는 순서대로 인증하는 방법을 보여주는데, 먼저 publickey로 인증하고, 두 번째로 password로 인증한다는 의미입니다.

 

DenyUsers  nextline, 3737

접근을 거부할 로컬의 유저를 지정합니다. 위 설정은 nextline uid 3737인 계정으로 ssh 접속 시도할 경우 접근이 거부됩니다.

 

DenyGroups

명시된 그룹은 ssh서비스에 접근할 수 없도록 하는 기능을 합니다.

(DenyGroups sysadmin accounting) 와일드카드가 지원되며 공백 문자로 그룹을 구분합니다.

 

DenyHosts

명시된 호스트는 ssh서비스에 접근할 수 없도록 하는 기능입니다.

(Deny Hosts shell.ourcompany.net).호스트 IP를 쓰거나 호스트 명을 쓸 수 있으며 와 일드 카드가 지원되고 공백 문자로 호스트를 구분합니다.

 

AllowHosts   1.2.3.0/24 192.168.1.3

로그인을 허가할 IP 또는 IP 대역을 지정합니다. 여러 개일 경우에는 공란이나 "," 로 구분하여 나열하면 되고 도메인 이름일 경우에는 reverse mapping이 제공되어야 합니다.

 

AllowGroups

ssh서비스에 접근 가능한 그룹을 명시합니다. ( : AllowGroups sysadmin accounting) 와일드카드가 지원되며 공백문자로 그룹을 구분합니다.

 

MaxConnections   0

최대 몇개의 접속을 허락할지를 지정합니다. 0은 제한을 하지 않습니다.

 

PasswordGuesses   3

암호인증 방식으로 인증할 때 최대 몇 차례 시도를 허용할 것인지 지정합니다.

 

ssh1Compatibility   no

클라이언트가 ssh1만 지원할 경우 ssh1 데몬을 실행할 것인지 여부를 지정합니다. ssh1은 보안상 취약하므로 no로 하는 것이 좋습니다.

 

 

'tip > APM' 카테고리의 다른 글

Unix/Linux 시스템 분석  (0) 2008/07/01
[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
php.ini 환경설정  (0) 2008/07/01
httpd.conf 설정  (0) 2008/07/01
mysql 에서 현재 status 확인 하기  (0) 2008/07/01
mysql 내용 덤프 및 백업  (0) 2008/07/01
Posted by 根™
2008/07/01 17:37

vsftpd.conf 환경설정 tip/APM2008/07/01 17:37

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)

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

 


'tip > APM' 카테고리의 다른 글

[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
php.ini 환경설정  (0) 2008/07/01
httpd.conf 설정  (0) 2008/07/01
mysql 에서 현재 status 확인 하기  (0) 2008/07/01
mysql 내용 덤프 및 백업  (0) 2008/07/01
tar압축풀기 & tar압축하기  (0) 2008/06/24
Posted by 根™
2008/07/01 17:36

php.ini 환경설정 tip/APM2008/07/01 17:36

PHP 환경설정(php.ini)

 

설정파일 경로 : /usr/local/lib/php.ini

 

php.ini 은 여러가지 세셕이 존재하지만 [자주 사용되는 섹션] 목록 이외에는 기본값을 유지하여 사용하시면 됩니다. php.ini 설정 변경 시 apache을 재 가동하여 설정내용을 적용하여 주시기 바랍니다.

 

[자주 하시는 질문]

[보안설정]

 

[자주 사용되는 섹션]

[1] 기본설정

[2] Resource Limits

[3] Error handling and logging

[4] Data Handling

[5] File Uploads

[6] Session

 

[기본값 유지 섹션]

[1] Assertion

[2] Fopen wrappers

[3] Dynamic Extensions

[4] Syslog

[5] Java

[6] SQL

[7] ODBC

[8] MySQL

[9] mSQL

[10] PostgresSQL

[11] Sybase

[12] Sybase-CT

[13] bcmath

[14] browscap

[15] Informix

[16] Paths and Directories

[17] Sockets

[18] Zend

 

 

[자주 하시는 질문]

 

1. php로 파일 업로드 처리시 용량제한 설정은 어떻게 하나요?

 

file_uploads = On

파일 업로드를 허용할지 설정하는 부분으로 당연히 ON으로 되어 있어야 합니다.

 

upload_max_filesize = 20M

최대 업로드 파일 사이즈입니다. 원하시는 용량만큼 설정하시면 됩니다.

 

post_max_size = 20M

Post방식으로 넘겨질 최대 데이터 사이즈입니다.

 

max_execution_time = 300

최대 실행시간을 설정합니다. 대용량 파일일수록 시간이 많이 걸리니 당연 실행시간을 늘려 주어야 합니다. 0으로 설정하면 무한대입니다.

 

memory_limit = 20M

스크립트 마다의 최대 메모리 소비량입니다. php 업로드 용량 설정은 위의 부분을 수정하여 주시면 됩니다. 크기를 memory_limit > post_max_size > upload_man_filesize 순으로 설정 해야 보다 정확합니다. upload_max_filesize, post_max_size, memory_limit는 보통 같은 값으로  설정을 해도 무관합니다.

 

2. 홈페이지에서 php스크립트 error가 출력되는데 임시로 보이지 않게 하는 방법은 없나요?

 

display_errors = on

php.ini 화일에서 위의 옵션을 off으로 설정하여 주시면 php 스크립트 error가 발생하여도

웹상에서는 보이지 않게 됩니다.

 

3. php 버전업데이트를 하였는데 변수 값이 정상적으로 넘어가지  않습니다.

 

register_globals = On

register_globals 옵션 설정을 On으로 설정하여 보시기 바랍니다.

GET, POST, COOKIE, SESSION 의 구분없이 변수명을 곧바로 이용할 수 있습니다.

php 의 상위버전부터는 보안상의 이유로 GET, POST, COOKIE, SESSION 등

변수명을 바로 이용하지 못하도록 php.ini 에 register_globals옵션이 off으로 설정되어 있습니다.

 

4. 로그아웃 하지 않는 경우엔 세션이 유지될 수 있도록 하고 싶습니다.

 

session.cookie_lifetime = 0

session.cookie_lifetime의 값을 0으로 설정하여 보시고 이방법에서도 적용이 되지 않는다면 php 설치시 컴파일 옵션에 --enable-trans-id 의 옵션을 추가하여 주시고

session.use_cookies의 옵션을 1으로 설정하여 주시기 바랍니다.

보통은 --enable-trans-id의 컴파일 옵션을 주지 않아도 session.use_cookies의 옵션을 1으로 주는것만으로도 설정이 이루어지나 확실한 방법은 php를 --enable-trans-id의 옵션을 주어 설치하는것이 좋습니다. 여러가지 방법이 있지만 php.ini 부분의 설정은 위와같이 설정하시면 세션이 끊기지 않습니다.

 

5. HTTP로 파일 업로드가 되지 않습니다.

 

file_uploads = On

file_uploads의 옵션이 On으로 설정되어 있는지 확인하여 보시기 바랍니다.

file_uploads의 옵션은 웹상에서 http프로토콜을 이용하여 파일 업로드의 허용여부를 설정합니다.

 

[보안설정]

 

safe_mode - Off

safe_mode On 일 경우 파일을 이 디렉토리 및 그 하위로부터 include 하는 경우는 UID/GID 의 체크가 스킵됩니다. 이러한 디렉토리는 include_path 에 포함되도록 하거나 또는 include 시에 절대 경로를 사용해야 합니다. exec관련의 함수를 통해 실행할 수 있는 권한을 safe_mode_include_dir에 있는 실행파일만으로 설정합니다.

 

이 값을 On으로 설정하면 PHP에 의한 파일 액세스 시 권한을 점검합니다. 웹 프로그램이 /etc/passwd 등 주요 시스템 파일을 액세스 하지 못하도록 제한할 수 있으나, 이로 인해 웹 프로그램이 정상 작동하지 않을 수 있으니 주의하여야 합니다.

 

display_errors = On

Error Page 또는 Warning Page 노출을 피하기 위한 것입니다. 공격자들은 일부러 에러를 발생하여 서버에 대한 정보를 확인합니다. 이를 막기 위해 아래와 같이 수정합니다.

On 으로 했을 시 웹사이트의 파일 정보나 데이타베이스 스키마등의 시큐리티 정보를 접속 사용자에게 표출 될 수도 있기 때문입니다. 이 옵션을 On으로 설정하는 경우 PHP 실행 중 발생하는 에러 정보가 사용자 브라우저에 반환됩니다. 이 정보에는 웹 서버 상의 절대 경로, SQL 쿼리 등 공격자에게 유용한 정보가 포함되어 있으므로, 반드시 이 값을 Off로 설정하여야 합니다.

 

register_globals = On

혹시라도 낮은 버전을 사용하는 경우는 이 부분이 디폴트로 On 되어있는데, 특별한 이유가 없다면 Off 로 설정하는 것이 좋습니다.

이 값을 On으로 설정하면 PHP가 입력으로 받아들이는 값(환경 변수, GET, POST, 쿠키, Server 변수)을 무조건 전역(Global)변수로 다루게 됩니다. 전역 변수가 고전적인 C 프로그램에서 얼마나 많은 버그를 발생시켰는지 아신다면, 이 값을 Off로 설정하는 것이 왜 바람직한지 짐작할 수 있을 것입니다. 전역 변수는 프로그램의 동작 중 어디서나 변수값이 바뀔 수 있기 때문에, 웹 프로그램의 인자 조작, 예기치 못한 오동작 등 다양한 보안 문제가 발생할 수 있습니다. PHP 4.2.0 이후로는 보안상의 문제를 고려해 디폴트로 Off로 설정되어 나오지만, 아직 많은 프로그램이 On 상태에서만 작동하도록 개발되어 있어 서버 관리자들이 On으로 변경하는 경우가 많습니다. On 값에 의존하는 프로그램이 있으면 개발자에게 해당 문제를 알리고 수정을 요구하시는 것이 바람직합니다

 

expose_php - Off

웹 브라우저의 요청에 대해 PHP 정보를 보내지 않습니다. 그러나 PHP 확장자 설정을 변경하는 등 추가적인 조치를 취하지 않습니다면, 여러분이 PHP를 사용 중이라는 사실이 손쉽게 노출될 수 있으므로 보안상 큰 도움이 되지 않습니다.

 

file_uploads - Off

해당 사이트의 PHP 프로그램들이 파일 업로드를 필요로 하지 않습니다면 이 값을 Off로 설정하여, 파일 업로드 공격의 발생 가능성을 낮출 필요가 있습니다. 파일 업로드를 통한 사이트 장악은 매우 빈번하게 발생합니다.

allow_url_fopen Off 이 옵션을 On으로 설정하면 파일 액세스 시 외부 사이트의 파일을 불러올 수 있습니다. 이 기능은 분산 컴퓨팅과 개발, 관리 측면에서 매우 편리하지만, 외부 공격자에 의해 서버를 침탈당하게 되는 주요 원인이 되어 왔습니다. 특히 include(), require() 계열의 함수 사용시 심각한 보안 상의 문제를 유발하게 됩니다. 특수한 경우를 제외하고는 이 기능이 필요치 않으므로 이 옵션을 반드시 Off로 설정하시기 바랍니다.

 

magic_quotes_gpc = Off

Sql Injection 과 같은 공격을 막는데 도움이 됩니다. GET/POST/Cookie 의 입력 데이터에 관해서 특수 문자를 이스케이프 Get 방식으로 입력되는 ".." 는 일반적으로 필터링 하도록 설계되고 있습니다. 쉘에는 ".\./" ".."과 동일하게 간주됩니다. 특수문자에 대한 전체적인 제한이 필요하다.

 

이 옵션을 On으로 설정하면 PHP가 입력으로 받아들이는 값(환경 변수, GET, POST, 쿠키, Server 변수)에 단일 인용 부호('), 이중 인용 부호("), 백슬래쉬(), 널문자(NUL)가 포함된 경우 자동으로 해당 문자 앞에 백슬래쉬를 추가하여 특수 문자 처리를 합니다. 이로 인해 웹 프로그램의 인자를 변경하는 SQL 구문 삽입(injection) 공격의 성공률을 낮춰줍니다. 이 값을 Off로 설정하면 /etc/passwd%00 과 같이 널 문자를 사용해 시스템 상의 임의의 파일을 열람할 수 있으니 반드시 On으로 설정하여야 합니다.

 

magic_quotes_sybase - Off

Sybase 사용자의 정상적인 DB 접속을 위해 만들어진 기능이지만,

이 기능은 magic_quotes_gpc 설정을 무력화합니다. 여러분이 Sybase 사용자가 아니라면 반드시 이 값을 Off로 설정하여야 합니다. Sybase 사용자는 PHP가 입력으로 받아들이는 모든 변수에 대해 addslashes() 함수를 사용하여 명시적으로 특수 문자 처리를 하여야 합니다.

 

open_basedir - 디렉터리

이 옵션에 적절한 디렉터리를 설정하면, PHP의 파일 액세스 시 지정된 디렉터리(및 하위 디렉터리)를 벗어난 파일은 액세스 할 수 없게 됩니다.

 

allow_url_fopen = On

URL(http:// ftp:// )을 파일로서 취급할지를 결정합니다.

많이 발생하고 있는 대규모 홈페이지 변조는 php의 외부사이트 소스 실행기능을 이용하여 악의적인 프로그램을 실행시킴으로써 발생시킵니다.

 

필요 시 특정 홈페이지만 외부 사이트의 소스 실행 허용을 설정할 수 있습니다.

    <VirtualHost xxx.xxx.xxx.xxx>

    ServerAdmin webmaster@nextline.co.kr

    DocumentRoot /home/nextline/public_html

    ServerName nextline.co.kr

    php_admin_flag allow_url_fopen On     <---------- 라인 추가

    ErrorLog logs/nextline.co.kr-error_log

    CustomLog logs/nextline.co.kr-access_log common

    </VirtualHost>

 

[자주 사용되는 섹션]

 

[1] 기본설정

engine = On

Apache 상에서 PHP 의 스크립트 언어 엔진을 유효하게 합니다.

 

short_open_tag = On

<? 태그의 사용을 허가합니다.

허가하지 않는 경우는 <?php <!-- script-x 태그만 인식되고 <? 태그는 인식하지 않습니다.

 

asp_tags = Off

ASP 스타일의 <% %> 태그를 허가합니다.

 

precision    =  12

부동 소수점을 표시할 때의 유효 자리 수를 설정합니다.

 

y2k_compliance = On

강제적으로 2000 년 문제를 대응하게 합니다.

(대응하고 있지 않는 브라우저의 경우는 문제를 일으킵니다)

 

output_buffering = Off

출력 버퍼를 4KB 로 설정합니다. 출력 버퍼링을 유효하게 하면 일반적으로는 기입 회수나 가끔 패킷의 송출 횟수가 줄어들어 퍼포먼스의 향상으로 연결됩니다. 이 지시문에 의해 어느 정도 퍼포먼스를 향상 시키지만 사용하고 있는 웹서버나 스크립트에 크게 의존합니다.

 

zlib.output_compression = Off

페이지 압축의 사용 여부. 이 옵션을 php.ini나 아파치 설정에서 "On"으로 지정하면,

브라우저가 "Accept-Encoding: gzip"이나 "deflate" 헤더를 보냈을때, 페이지를 압축합니다. "Content-Encoding: gzip"(혹은 "deflate")과 "Vary: Accept-Encoding" 헤더을 출력에 추가합니다. 헤더를 전송하기 전에 ini_set()을 사용해서 스크립트 내부에서 무효화할 수 있습니다. "Content-Type: image/" 헤더를 출력해도 압축을 무효화합니다(넷스케이프 버그로 인해) 이미지 content-type 헤더 호출을 추가한 뒤에 "ini_set('zlib.output_compression', 'On')"을 추가하여 다시 활성화 할 수 있습니다.

boolean "On"/"Off" 외에 정수값을 지정하여, 출력 버퍼 크기를 설정할 수 있습니다.

(기본값은 4KB) 'On'으로 지정했을 때, output_handler는 zlib.output_handler를 사용하지 말고, 비어있어야 합니다!

 

zlib.output_handler =

zlib.output_compression을 활성화 했을 때, 추가 출력 핸들러를 지정할 수 없습니다.

이 설정은 output_handler와 동일한 다른 명령입니다.

 

implicit_flush = Off

implicit_flush On 으로 설정하면 출력 층에 대해 각 출력 블록마다 자동적으로 플래시를 하게 됩니다. 이것은 즉, print(), echo() 및 각 HTML 블록의 뒤에 PHP 함수의 flush()를 부르는 것과 같은 내용이다. 이 옵션을 유효하게 하면 퍼포먼스의 문제와 밀접하게 관계되므로, 일반적으로는 디버그 용도만의 사용에 한정해야 할 것이다.

 

unserialize_callback_func=

php 엔진에서의 출력을 zlib 라이브러리를 이용하여 압출할 것인지를 지정합니다.

이 값이 On으로 되어 있다면 output_handler는 반드시 비어있어야 합니다.

 

allow_call_time_pass_reference = On

함수 사용시에, 변수를 강제적으로 참조 하는 것을 금지합니다. 이것을 PHP4 스타일로 실시하기 위해서는, 함수 정의 시에 관련하는 인수를 참조 하도록 합니다.

 

safe_mode_include_dir =                                                            

safe_mode On 의 경우 파일을 이 디렉토리 및 그 하위로부터 include 하는 경우는 UID/GID 의 체크가 스킵 됩니다. (이러한 디렉토리는 include_path 에 포함되도록 하거나 또는 include 시에 절대 경로를 사용해야 합니다.)

 

safe_mode_gid - Off

위의 설정과 함께 파일 액세스 시 권한을 점검합니다. 이로 인해 웹 프로그램이 정상 작동하지 않을 수 있으니 주의하여야 합니다.

 

safe_mode_exec_dir - 디렉터리

이 옵션을 지정하면 system(), exec(), passthru() 등 외부 명령어 실행 시 지정된 디렉터리에 존재하지 않는 프로그램은 실행할 수 없게 됩니다. 공격자가 임의로 업로드 한 공격 도구나 wget, xterm 등 공격에 사용될 만한 명령어를 실행할 수 없도록 막을 수 있습니다.

 

safe_mode_allowed_env_vars = PHP_

특정 환경 변수를 설정하는 것은 보안에 문제가 될 수 있습니다. 이 지시자는 콤마-구분자 리스트의 앞첨자(prefix)를 포함합니다. 안전 모드에서, 유저는 여기서 제공되는 앞첨자로

시작하는 이름을 갖는 환경변수만 변경할 수 있으며 기본값으로, 유저는 PHP로 시작하는 환경 변수만 설정할 수 있습니다.

 

safe_mode_protected_env_vars = LD_LIBRARY_PATH

이 지시자는 엔드 유저가 putenv()를 사용하여 변경할수 없는 콤마-구분자 리스트의 환경 변수를 포함합니다. 이 변수들은 safe_mode_allowed_env_vars에 설정되어 있어도 보호 될수 있습니다.

 

disable_functions =

이 지시문에서는 특정의 함수를 시큐리티적인 이유로써 사용할 수 없게 할 수 있다. 이것은 인수로서 fopen,fwrite , 단락의 리스트로 설정합니다. 이것은 safe_mode On/Off 에 관계없이 항상 유효하게 됩니다.

 

disable_classes =

보안적인 측면 때문에 특정 클래스를 비활성화 시켜줍니다.     

컴마로 구분된 함수명의 리스트를 취합니다. (httpd.conf에서는 설정할수 없습니다)

 

highlight.string  = #DD0000

highlight.comment = #FF9900

highlight.keyword = #007700

highlight.bg      = #FFFFFF

highlight.default = #0000BB

highlight.html    = #000000

문법의 하이라이트 표시할 때의 색의 지정. <font color="??????"> 의 것이라면 설정 가능하다.

 

[2] Resource Limits

max_execution_time = 30    

스크립트 실행 시간을 초단위로 설정합니다.(최대 실행시간)

max_input_time = 60   

스크립트 페이지로 제어가 넘어 오기 전에 php 엔진이 데이타를 업로더 받는 시간을 설정합니다.

 

memory_limit = 8M     

스크립트 실행 때 메모리 사용을 설정합니다.

 

[3] Error handling and logging

error_reporting = E_ALL & ~E_NOTICE

디폴트에서는 PHP E_NOTICE 형의 에러를 억제합니다. 이러한 에러 메세지는 중대하지 않는 에러에 대해서도 표출 되지만 그것들은 보다 큰 문제의 징조일 수도 있다.

 

display_startup_errors = Off

display_errors 가 On 의 경우여도 PHP 의 시작시의 에러는 표시되지 않습니다.

디버그시를 제외해 display_startup_errors 는 Off 인 채로 설정해 두는 것을 추천합니다.

 

log_errors = Off

이 옵션을 On으로 설정하는 경우 PHP 실행 중 발생하는 경고나 에러 정보를 error_log 에서 지정한 파일에 기록하게 됩니다. 해당 파일에 기록할 수 없는 경우 아파치 웹 서버의 에러 로그 파일에 기록하게 됩니다. 프로그램의 동작 상태 및 공격자의 공격 동향을 파악하기 위해서 반드시 On으로 설정하여야 합니다.

 

track_errors = Off

$php_errormsg에 마지막의 에러나 경고 메시지를 저장합니다.

 

html_errors = Off

에러 메세지중에 HTML 태그를 넣지 않게 합니다.

 

error_prepend_string = "<font color=ff0000>"

에러 메세지의 전에 출력하는 캐릭터 라인

 

error_append_string = "</font>"

에러 메세지의 뒤에 출력하는 캐릭터 라인

 

error_log = filename

PHP 실행 중 발생하는 경고나 에러 정보를 기록할 파일을 지정하는 옵션 입니다.

 

error_log = syslog

syslog 에 에러를 기록합니다.. (NT 에서는 이벤트 로그, Windows 95 에서는 무효)

 

[4] Data Handling

arg_separator.output = "&amp;"

PHP가 생성하는 URL의 인자를 구분하는 구분자입니다.

 

arg_separator.input = ";&"

입력 URL 를 퍼스 해 변수로 하기 위해서 PHP 로 사용되는 단락 문자의 리스트 입니다.

 

variables_order = "EGPCS"

이 지시문은 PHP 가 등록하는 GET, POST, Cookie 환경 변수 (순서에 G, P, C, E, S, 자주 EGPCS 나 GPC 등으로 불린다)에 있어서의 순서를 규정합니다. 등록은 왼쪽에서 오른쪽을 향해 행해져 새로운 값은 낡은 값을 덮어 씌웁니다. 환경 변수를 $HTTP_ENV_VARS[] 에 등록 하지 않게 합니다. 환경 변수에 사용하려면 getenv()를 사용하도록 합니다.

 

register_argc_argv = On

argc, argv 변수 (GET 의 정보에 포함될 가능성이 있다.) 를 선언할지 말지를 규정합니다. 이러한 변수를 사용하지 않으면 퍼포먼스를 개선합니다.

 

post_max_size = 8M

PHP 가 받아들이는 일을 할 수 있는 POST 데이터의 최대 사이즈를 설정합니다.

 

gpc_order = "GPC"

GET/POST/COOKIE 변수들이 PHP 스크립트로 넘겨지는 순서를 정합니다.

기본값 : GCP이며 GP호 정의하면 Cookie 값은 모두 제외되어 PHP 스크립트에서 쿠키 변수가 없어집니다.

이 지시문은 추천 되지 않습니다.. 대신에 variables_order 를 사용합니다.

 

magic_quotes_runtime = Off   

GET , POST , COOKIE 등으로 전달된 데이터에 ‘ " / 등의 문자가 존재할 경우 자동으로 ()역슬래쉬를 붙일지 여부를 설정합니다.

이것은 각 문자를 스크립트와 구별해서 인식시키기 위해 필요한 부분입니다.

 

auto_prepend_file =

INCLUDE와 비슷한 부분이고, 스크립트의 처음 부분에 포함될 파일명을 적어 줍니다.

(PHP 문서의 전후에 파일을 자동적으로 추가합니다.)

요청된 PHP 스크립트가 실행되기 전에 자동으로 미리 실행되어야 할 파일을 지정합니다.

auto_append와 마찬가지로 include()가 호출되는 것이기 때문에 include_path항목(옵션)에 따라 파일을 찾는 위치가 달라질 수 있습니다. none 값은 자동 미리 실행(auto prepend) 기능을 사용하지 않습니다.

 

auto_append_file =

auto_prepend_file와 같으며 마지막 부분에 포함될 파일명을 적어 줍니다.

(PHP 문서의 전후에 파일을 자동적으로 추가합니다.)

자동으로 PHP 스크립트의 제일 마지막에 여기서 지정한 파일을 include() 합니다. PHP가 자동으로 해주는 것이지만 실제로는 include()와 동일하게 동작하기 때문에

include_path가 사용됩니다. none값으로 정의하면 자동 덧붙임(Aout Appending) 기능을 사용하지 않습니다. 또한 실행되고 있던 스크립트가 exit() 문으로 끝나면 자동 덧붙임도 샐행되지 않습니다.

 

default_mimetype = "text/html"

PHP 의 4.0b4 현재의 디폴트에서는,

Content-type: 헤더로 항상 문자 인코딩을 출력합니다. charset 의 송신을 시키고 싶지 않으면, 설정값을 비웁니다.

 

default_charset = "iso-8859-1"

PHP 4.0b4 현재의 디폴트에서는, Content-type: 헤더로 항상 문자 인코딩을 출력합니다. charset 의 송신을 시키고 싶지 않으면, 설정값을 비운다. 디폴트는 text/html 이다.

 

always_populate_raw_post_data = On

PHP 스크립트에서 WebDAV http 요청(, PROPFIND, PROPPATCH, MOVE, COPY 등등..)

핸들링 할 있게 합니다.

이 요청들로부터 포스트 데이터를 얻기 원한다면,

always_populate_raw_post_data 설정해야 합니다.

 

[5] File Uploads

file_uploads = On

해당 사이트의 PHP 프로그램들이 파일 업로드를 필요로 하지 않는다면 이 값을 Off로 설정하여, 파일 업로드 공격의 발생 가능성을 낮출 필요가 있습니다. 파일 업로드를 통한 사이트 장악은 매우 빈번하게 발생합니다.

 

upload_tmp_dir =

파일이 업로드 될 디렉토리를 설정합니다. 기본적으로 /tmp 디렉토리로 업로드 됩니다.

 

upload_max_filesize = 2M

업로드 할 수 있는 최대 파일 크기를 설정합니다. post_max_size보다 작거나 같게

설정하면 되며 post_max_size보다 크게 주는 건 의미가 없습니다.

 

[6] Session

session.save_handler = files

세션과 해당 데이터를 저장하는 방식을 설정하는 부분입니다. 기본적으로 파일 방식이며 세션 항목은 이 책에 사용되는 회원제 부분에서 사용됩니다.

 

session.save_path = /tmp

세션 전달 인수를 정의 하는 부분이며 디폴트인 파일 방식일 경우 해당 파일의 경로를 적어 줍니다.

 

session.use_cookies = 1

세션에서 쿠키를 사용할 것인지를 지정합니다.

 

session.name = PHPSESSID

쿠키 이름으로 사용되어질 세션 이름을 설정합니다. 디폴트는 PHPSESSID입니다.

 

session.auto_start = 0

세션 요청 시에 자동 모듈 생성 여부를 설정합니다.

0 : off , 1 : on

 

session.cookie_lifetime = 0

해당 세션이 유지 되는 시간을 설정하며 디폴트의 경우 0이며 사용자의 브라우저가 종료 될 때까지 유지됩니다.

 

session.cookie_path = /

세션에서 사용하는 쿠키의 경로를 지정합니다.

 

session.cookie_domain =

세션에서 사용하는 쿠키의 도메인을 지정합니다.

 

session.serialize_handler = php

세션 자료를 처리할 방법을 지정합니다. php는 PHP기본 처리기를 사용합니다. 변경하지 않습니다.

 

session.gc_probability = 1

해당 세션 값이 제거 될 경우 낭비 되는 시스템 메모리 자원을 반납하는 시점을 설정합니다.

 

session.gc_divisor = 100

session.gc_probability와 설정을 이루는데 1/100 의 확률로 세션을 정리합니다.

즉 100번 호출을 하면 한번정리를 하게 됩니다. 서버이용자가 적어 세션이 제때 호출되지 못하는경우 이확률을 높여 해결이 가능합니다.

 

session.gc_maxlifetime = 1440

해당 세션의 시스템 메모리 자원 반납을 가질 수 있는 시간을 설정합니다.

 

session.referer_check =

세션이 올바른 것인지를 판단하기 위하여 HTTP_REFERER 환경변수를 검사할 것인지를 지정합니다.

 

session.entropy_length = 0

파일로부터 얼마나 많은 자료를 읽을 것인가를 지정합니다.

 

session.entropy_file =

세션 ID를 생성하는 파일을 지정합니다.

 

session.entropy_length = 16

파일로부터 얼마나 많은 자료를 읽을 것인가를 지정합니다.

 

session.entropy_file = /dev/urandom

세션 ID를 생성하는 파일을 지정합니다.

 

session.cache_limiter = nocache

HTTP 캐시를 지정합니다.

 

session.cache_expire = 180

문서를 얼마나 지난 후에 폐기할 것인가를 지정합니다.(초 단위 지정)

 

session.use_trans_sid = 0

세션에서 transient dis(Session ID) 가능하게 것인가를 지정합니다.

 

[기본값 유지 섹션]

 

[1] Assertion

assert.active = On

assert() 평가를 활성화합니다.

 

assert.warning = On

실패하는 assertion마다 PHP 경고를 발생합니다.

 

assert.bail = Off

assertion 실패시에 스크립트 실행을 종료합니다.

 

assert.callback = 0

assertion 실패시에 호출할 사용자 함수입니다.

 

assert.quiet_eval = 0

assertion 표현 평가 중에 error_reporting()의 현재 설정을 사용합니다.

활성화하면, 평가 도중에 에러가 보여지지 않습니다.

(error_reporting(0)에 상당) 비활성화하면, 에러는 error_reporting() 설정에 따라 보여집니다.

 

[2] Fopen wrappers

from="john@doe.com"

ftp관련 함수를 이용하여 익명 ftp 서버로 접근할때 사용하는 email주소를 적습니다.

anonymous ftp 의 패스워드 지정(당신의 메일 주소)

 

user_agent="PHP"

PHP가 전송하는 유저 에이전트를 지정합니다.

 

default_socket_timeout = 60

소켓 기반 스트림의 기본 시간을 제한 합니다.

 

auto_detect_line_endings = Off

on일 때, PHP는 fgets()과 file()으로 읽혀지는 데이터가 줄바꿈 방식으로 유닉스,

MS-DOS, 매킨토시 방식 중 어느걸 사용하는지 검사합니다.

이는 PHP가 매킨토시 시스템과 작업을 할 수 있게 하지만, 첫째 줄에서 EOL 방식을 검출하기 위해서 아주 작은 성능에 페널티가 존재하고, 유닉스 시스템에서 사람들이 아이템 구분자로 캐리지-리턴을 사용해왔었기에, 하위 호환성이 사라질 수 있는 이유로 인해, 기본값은 Off입니다.

 

[3] Dynamic Extensions

;extension=php_bz2.dll

;extension=php_cpdf.dll

;extension=php_crack.dll

;extension=php_curl.dll

;extension=php_db.dll

;extension=php_dba.dll

;extension=php_dbase.dll

;extension=php_dbx.dll

;extension=php_domxml.dll

;extension=php_exif.dll

;extension=php_fdf.dll

;extension=php_filepro.dll

;extension=php_gd2.dll

;extension=php_gettext.dll

;extension=php_hyperwave.dll

;extension=php_iconv.dll

;extension=php_ifx.dll

;extension=php_iisfunc.dll

;extension=php_imap.dll

;extension=php_interbase.dll

;extension=php_java.dll

;extension=php_ldap.dll

;extension=php_mbstring.dll

;extension=php_mcrypt.dll

;extension=php_mhash.dll

;extension=php_mime_magic.dll

;extension=php_ming.dll

;extension=php_mssql.dll

;extension=php_msql.dll

;extension=php_oci8.dll

;extension=php_openssl.dll

;extension=php_oracle.dll

;extension=php_pdf.dll

;extension=php_pgsql.dll

;extension=php_printer.dll

;extension=php_shmop.dll

;extension=php_snmp.dll

;extension=php_sockets.dll

;extension=php_sybase_ct.dll

;extension=php_w32api.dll

;extension=php_xmlrpc.dll

;extension=php_xslt.dll

;extension=php_yaz.dll

;extension=php_zip.dll

Dynamic Extensions 에서는 php확장 라이브러리를 적습니다. 이 곳에 적혀있는 라이브러리는 php가 시작할 때 같이 시작하고 추가 및 제거가 가능 합니다. 이를 사용하기 위해서는 extension_dir이 지정되어 있어야 합니다.

 

[4] Syslog

define_syslog_variables  = Off

로그 시스템을 위한 변수($LOG_PID, $LOG_CRON)를 정의할 것인지를 지정합니다.

성능을 위해 Off로 하는 것이 좋다.

 

SMTP = localhost

smtp 서버의 dns나 ip 주소를 지정합니다.

 

sendmail_from = me@localhost.com

보내는 메일 주소를 설정합니다.

 

sendmail_path =

sendmail 서버가 있는 위치를 적어 줍니다.

리눅스를 비롯한 유닉스에서 사용하는 설정으로 sendmail의 위치를 지정합니다.

대부분 /usr/sbin/sendmail을 지정합니다.

 

[5] Java

java.class.path = .\php_java.jar

java.home = c:\jdk

java.library = c:\jdk\jre\bin\hotspot\jvm.dll

java.library.path = .\

자바 관련 설정으로 configure를 실행할 때 java를 포함하지 않았다면 설정할 필요가 없습니다.

 

[6] SQL

sql.safe_mode = Off

SQL 관련 함수를 위한 것으로 안전모드를 사용 할 것인지를 지정합니다.

 

[7] ODBC

odbc.default_db    =  Not yet implemented

odbc.default_user  =  Not yet implemented

odbc.default_pw    =  Not yet implemented

특별히 지정하지 않은 경우 사용할 DB와 user, password를 지정하는 곳이지만 아직 구현되지 않았다.

 

odbc.allow_persistent = On

영구 접속을 사용할 것인지를 지정하며 apache의 KeepAlive와 같은 역할을 합니다.

 

odbc.check_persistent = On

영구 접속으로 사용되고 있는 연결이 사용가능한지를 검사합니다.

 

odbc.max_persistent = -1

영구접속의 최대 접속을 지정합니다.(-1은 무제한 입니다.)

 

odbc.max_links = -1

모든 접속의 최대치를 지정합니다.(-1은 무제한 입니다.)

 

odbc.defaultlrl = 4096

LONG 필드에 대한 처리로 변수의 크기를 지정 합니다.

 

odbc.defaultbinmode = 1

이진 데이터를 위한 처리로 0은 통과, 1은 원본 그대로, 2는 문자를 바꾸어 처리합니다.

변경할경우 데이터의 손상이 생길 우려가 있으므로 그대로 두는것이 좋습니다.

 

[8] MySQL

mysql.allow_persistent = On

영구 접속자 여부 설정

 

mysql.max_persistent = -1

영구 접속자 수 최대치 설정

 

mysql.max_links = -1

mysql 서버에 하나의 프로세스 가 동시에 연결할 수 있는 전체 연결 수를 제한 할수 있습니다.

 

mysql.default_port =

mysql의 기본 포트 설정을 합니다.

정의 되지 않으면 컴파일시에 연결한 mysql 라이브러리에 지정된 포트를 사용합니다.

 

mysql.default_socket =

MYSQL에서 사용할 기본 소켓의 위치를 지정합니다.

정의되지 않으면 컴파일시에 연결한 mysql 라이브러리에 지정된 소켓을 사용합니다.

 

mysql.default_host =

mysql_connect()에서 사용할 기본 호스트

 

mysql.default_user =

mysql_connect()에서 사용할 기본 사용자 이름

 

mysql.default_password =

mysql_connect()에서 사용할 기본 패스워드, 보안 문제가 생길수 있으므로 기제하지 않는 편이 좋습니다.

 

mysql.connect_timeout = 60

최대연결 시간을 제한 합니다.

 

mysql.trace_mode = Off

trace_mode활성시 sql 오류메세지가 출력 됩니다.

 

[9] mSQL

msql.allow_persistent = On

지속적인 연결 여부를 설정 합니다.

 

msql.max_persistent = -1

지속적인 연결의 수를 제한할 수 있습니다.

 

msql.max_links = -1

동시에 연결할수있는 연결 수를 제한할 수 있습니다.

 

[10] PostgresSQL

pgsql.allow_persistent = On

postgres에 영구 접속 기능을 사용할 것인지 결정합니다.

 

pgsql.auto_reset_persistent = Off

자동 리셋 기능 사용여부 설정합니다.

 

pgsql.max_persistent = -1

영구 접속할 수 있는 연결 수의 제한을 둘 수 있습니다.

 

pgsql.max_links = -1

mysql 서버에 하나의 프로세스가 동시에 연결할 수 있는 전체 연결 수를 제한할 수 있습니다.

 

pgsql.ignore_notice = 0

PostgreSQL 백엔드 경고의 무시 여부를 설정합니다.

 

pgsql.log_notice = 0

PostgreSQL 백엔드 경고 메세지의 기록 여부. 경고 메세지를 기록하기 위해서는

PHP 지시어 pgsql.ignore_notice를 off로 설정해야만 합니다.

 

[11] Sybase

sybase.allow_persistent = On

sybase에 영구 접속 기능을 사용할 것인지 결정합니다.

 

sybase.max_persistent = -1

영구 접속 할 수 있는 연결 수의 제한을 둘 수 있습니다.

 

sybase.max_links = -1

mysql 서버에 하나의 프로세스가 동시에 연결할 수 있는 전체 연결 수를 제한 할 수 있습니다.

 

sybase.interface_file = "/usr/sybase/interfaces"

"/usr/sybase/interfaces" : sysbase에서 사용하는 인터페이스 파일의 위치를 지정 합니다. 값이 정확한지를 판단하지 않으나 정확하게 작성해야 합니다.

 

[12] Sybase-CT

sybct.allow_persistent = On

sybase-CT에 영구 접속 기능을 사용할 것인지 결정합니다.

 

sybct.max_persistent = -1

영구 접속할 수 있는 연결 수의 제한을 둘 수 있습니다.

기본값은 무제한을 뜻하는 -1 입니다.

 

sybct.max_links = -1

mysql 서버에 하나의 프로세스가 동시에 연결할 수 있는 전체 연결 수를 제한할 수 있습니다. 기본값은 무제한을 뜻하는 -1 입니다.

 

sybct.min_server_severity = 10

sybase-CT 서버의 민감성의 최소값을 지정합니다.

sybct.min_server_severity보다 더 큰 값의 메세지가 서버로부터 리턴되면 경고가 발생합니다. 이 값은 PHP 스크립트실행 시간 동안에 sybct.min_server_severity() 함수를 이용하여 변경할 수 있습니다. 기본값은 에러를 의미하는 10 입니다.

 

sybct.min_client_severity = 10

클라이언트 라이브러리에서 리턴되는 메세지가 sybct.min_client_severity보다 클 경우 경고가 발생합니다. 이 값은 sybase_min_client_severity() 함수에 의해 변경될 수 있습니다. 기본값은 가장 효율적인 10 입니다.

 

[13] bcmath

bcmath.scale = 0

모든 bcmath 함수에서 사용하는 10진 정수의 수를 지정합니다. 0은 제한하지 않습니다.

 

[14] browscap

browscap = extra/browscap.ini

브라우저 정보가 들어 있는 파일을 지정합니다.

 

[15] Informix

ifx.default_host =

ifx_connect() 함수나 ifx_pconnect() 함수를 사용해서 Informix 서버에 접속할 때 호스트명을 지정하지 않으면 여기서 설정한 호스트가 사용됩니다. 이 기능은 스크립트에서 데이터베이스 관련 보안을 위해 사용될 수 있습니다.

 

ifx.default_user =

Informix 서버에 접속할 때 비밀번호를 지정하지 않으면 여기서 설정한 사용자명이 사용됩니다. 이 기능은 스크립트에서 데이터베이스 관련 보안을 위해 사용될 수 있습니다.

 

ifx.default_password =

Informix 서버에 접속할 때 비밀번호를 지정하지 않으면 여기서 설정한 비밀번호가 사용됩니다. 이 기능은 스크립트에서 데이터베이스 관련 보안을 위해 사용될 수 있습니다.

 

ifx.allow_persistent = On

Informix 에 영구 접속 기능을 사용할 것인지 결정합니다.

 

ifx.max_persistent = -1

영구 접속할 수 있는 연결 수의 제한을 둘 수 있습니다.

 

ifx.max_links = -1

mysql 서버에 하나의 프로세스가 동시에 연결할 수 있는 전체 연결 수를 제한할 수 있습니다. 접속 수 계산에는 현재 영구 접속 수까지 포함됩니다.

 

ifx.textasvarchar = 0

True 값이면 텍스트형의 칼럼이 select 문에 의해 리턴될 때 일반 문자열 형식으로 되고,

False 값이면 blob id 매개 변수를 사용하게 됩니다.

실행중에 변경하려면 ifx_textasvarchar() 함수를 이용합니다.

 

ifx.byteasvarchar = 0

True 값이면 Byte형의 칼럼이 select 문에 의해 리턴될 때 일반 문자열 형식으로 되고,

False 값이면 blob id 매개 변수를 사용하게 됩니다.

실행 중에 변경하려면 ifx_textasvarchar() 함수를 이용합니다.

 

ifx.charasvarchar = 0

True이면 페치되어 오는 CHAR 형의 칼럼 끝에 있는 공백 문자가 제거 됩니다.

 

ifx.blobinfile = 0

BLOB 타입의 칼럼이 리턴될 때 파일로 받을 것인지 아니면 메모리에서 받을 것인지를 결정합니다. ifx_blobinfile_mode() 함수를 이용해서 스크립트 실행 중에 변경할 수 있습니다.

 

ifx.nullformat = 0

True이면 NULL 칼럼이 리턴될 때 문자열 "NULL"로 변환되고, False이면 빈문자열 ""로 리턴됩니다. 실행중에는 fix_nullformat() 함수를 이용해서 변경할 수 있습니다.

 

[16] Paths and Directories

include_path = ".:/php/includes"

INCLUDE, REQUIRE 문의 파일 경로를 설정합니다.

 

include_path = ".;c:\php\includes"

INCLUDE, REQUIRE 문의 파일 경로를 설정합니다.

 

doc_root =

서버의 루트 디렉토리를 설정합니다. 안전 모드로 동작할 경우 해당 디렉토리를 벗어나 다른 쪽으로 접근을 할 수 없습니다.

 

user_dir =

PHP 파일을 사용하는 유저의 홈 디렉토리의 기본 이름입니다. 예를 들면, public_html이 있습니다.

 

extension_dir = "./"

확장 모듈이 있는 디렉토리입니다.

 

enable_dl = On

dl() 함수를 유효하게 할지를 설정합니다. dl() 함수는 IIS 나 Zeus 라고 하는 멀티 thread 서버에서는 올바르게 동작 하지 않고 자동적으로 무효가 됩니다.

 

cgi.force_redirect = 1

cgi.force_redirect는 대부분의 웹 서버에서 PHP를 CGI로 사용할 때 보안을 제공하기 위해 필요합니다. 미정의 상태라면, PHP는 기본값으로 on으로 인식합니다. 자신의 책임하에 끌 수 있습니다.

윈도우 유저: IIS에서는 이것을 꺼도 안전하며, 사실상 꺼야합니다.

OmniHTTPD나 Xitami로 작업한다면, 반드시 꺼야 합니다.

 

cgi.redirect_status_env = ;

cgi.force_redirect가 켜져있고, 아파치나 넷스케이프(iPlanet) 웹 서버를 사용하지 않습니다면, 계속해서 실행하기 위한 OK를 알리기 위한 환경 변수 이름을 설정해야 할 수도 있습니다. 이 변수를 설정하는 건 보안 문제가 될 수도 있습니다. 어떤 일을 하는지 우선적으로 알아보시기 바랍니다.

 

cgi.fix_pathinfo=0

CGI 위한 실제 PATH_INFO/PATH_TRANSLATED 지원을 제공합니다. PHP 이전 작동은 PATH_TRANSLATED SCRIPT_FILENAME으로 설정했고, 1로 설정하면 PHP CGI가 규격에 맞게 경로를 수정합니다. 0으로 설정하면 PHP는 이전과 같이 작동합니다. 기본값은 0입니다. PATH_TRANSLATED 대신 SCRIPT_FILENAME을 사용하도록 스크립트를 수정할 필요가 있습니다.

 

fastcgi.impersonate = 1;

IIS(WINNT 기반 OS)에서 FastCGI는 클라이언트 호출에 대한 가상 보안 토큰을 지원합니다.

이 지시자는 IIS에게 요청에 대한 보안 문장을 정의하도록 허용합니다.

아파치의 mod_fastcgi에서는 현재(2002/03/17) 이 기능을 지원하지 않습니다.

IIS에서 실행할 때는 1로 설정하십시오. 기본값은 0입니다.

 

cgi.rfc2616_headers = 0

 PHP가 HTTP 응답 코드를 보낼 때 어떤 형식의 헤더를 사용할지를 결정합니다.

0으로 설정하면, PHP는 아파치 및 기타 웹 서버에서 지원하는 Status: 헤더를 이용합니다.

이 옵션을 1로 설정하면, PHP는 RFC 2616 호환 헤더를 전송합니다.

어떤 일을 하는지 알 수 없는 한 0으로 설정해두시기 바랍니다.

 

[17] Sockets

sockets.use_system_read = On

소켓을 사용하면서 read()를 호출할 때 어떤 함수를 사용할 것인지를 지정합니다.

On으로 하면 시스템의 read()를 사용하고 Off로 하면 php_read() 함수를 사용합니다.

 

[18] Zend

zend_extension_manager.optimizer=/usr/local/Zend/lib/Optimizer-2_6_2

zend_extension_manager.optimizer_ts=/usr/local/Zend/lib/Optimizer_TS-2_6_2

zend_optimizer.version=2.6.2

zend_extension=/usr/local/Zend/lib/ZendExtensionManager.so

zend_extension_ts=/usr/local/Zend/lib/ZendExtensionManager_TS.so

zend_optimizer php 코드성능을 향상 시켜주는 엔진으로써 php와 연동하여 설치하면 zend_optimizer 엔진 라이브러리가 설정됩니다.

 

'tip > APM' 카테고리의 다른 글

[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
php.ini 환경설정  (0) 2008/07/01
httpd.conf 설정  (0) 2008/07/01
mysql 에서 현재 status 확인 하기  (0) 2008/07/01
mysql 내용 덤프 및 백업  (0) 2008/07/01
tar압축풀기 & tar압축하기  (0) 2008/06/24
Posted by 根™
2008/07/01 17:34

httpd.conf 설정 tip/APM2008/07/01 17:34

httpd.conf 설정

 

설정파일 경로

소스 컴파일 버전 : /usr/local/apache/conf/httpd.conf

RPM 설치 버전 : /etc/httpd/conf/httpd.conf

 

전체 환경 (Global Environment)

 아파치 웹서버 프로세스의 전체적인(global) 부분에 영향을 미치는 부분입니다. 이 부분의 지시자들을 수정(변경)하시면 아파치 메인서버(Section 2)와 가상호스트(Section 3)에 설정된 모든 웹사이트에 영향을 미치게 됩니다.

 

ServerType standalone

 서버의 구동방법으로는 standalone inetd방식이 있는데,  standalone 방식은 하나의 웹데몬(아파치서버)이 클라이언트의 접속을 모두 처리하는 방식으로 응답속도가 빠른 방법으로 주로 이방식을 사용합니다. inetd 방식은 inetd라는 시스템의 /etc디렉토리 끝에 존재하는 inetd라는 슈퍼데몬이 클라이언트의 접속요구가 있을 때마다 웹서버를 구동하는 방식이다. 일반적으로 응답속도가 빠르고 효율적인 standalone으로 설정하여 사용합니다.

 

ServerRoot "/usr/local/apache/htdocs"

아파치서버의 홈디렉토리를 지정하며 절대경로로 지정합니다. 이후로 나오는 대부분의 패스들은 이 경로에 대한 상대경로로 지정이 됩니다. 예를 들어 환경설정파일, 에러로그 파일등의 상대경로의 기준이 되는 위치이다.

 

LockFile logs/accept.lock

아파치 컴파일 시 USE_FCNTL_SERIALIZED_ACCEPT USE_FLOCK_SERIALIZED_ACCEPT으로

컴파일 했을 때 사용되는 LockFile의 경로 지정시에 사용됩니다. 가급적 기본값으로

사용합니다.

 

PidFile /var/run/httpd.pid

PidFile 설정은 ServerType Standalone으로 설정했을때만 유효한 것으로 아파치 서버의 프로세스가 생성되어 있을 때 그 프로세서ID(PID)를 기록하는 파일을 지정합니다.  당연히 아파치서버가 재시작되거나 과부하로 인해 PID가 바뀌게 될 경우에는 이 파일의 PID값도 바뀌게 됩니다. 즉 다시말해서 여기서 지정된 파일(httpd.pid)에 실행되고 있는 아파치 서버의 프로세스번호(PID)값이 기록됩니다고 하면 정답이다. ServerRoot를 기준으로한

상대경로로 지정됩니다.  절대경로로 지정하려면 "/"로 시작하는 절대경로를 적어주면 됩니다.

 

ResourceConfig conf/srm.conf

AccessConfig conf/access.conf

아파치 서버의 환경설정파일은 3개이며 httpd.conf, srm.conf, access.conf 가 그것입니다. 그러나 하나의 설정파일로 하는 것이 효율적이기 때문에 지금은 httpd.conf파일안에 3개의 파트(Section)로 나누어서 하나의 파일안에서 설정을 하고 있습니다. srm.conf access.conf파일의 내용은 현재 비어있는 상태이지만, 필요합니다면 이 파일 내에도 설정을 할 수 있습니다. 아파치 서버가 실행이 될 때는 httpd.conf, srm.conf, access.conf 순으로 언제나 이 3개의 파일을 모두 읽고 난뒤에 실행이 되기 때문이다. 만약 이 두 개의 파일을 서버가 무시하도록 하려면 다음과 같이 하거나 ""으로 붙여 두면 주석 처리되어 무시됩니다.

 

Timeout 300

 클라이언트의 요청에 의해 서버와 연결이 되었을 때 클라이언트와 서버간에 아무런 메시지가 발생하지 않았을 때 오류로 처리될 시간을 초단위로 설정합니다. 초기값은 1200이며 보통은 300초로 지정을 합니다. 네트웍의 속도가 나쁠수록 수치값은 높게 설정하는 것이 좋다.

 

KeepAlive On

HTTP 1.0에서는 요청이 일어날 때마다 client Server간에 새로운 연결이 만들어 지는데 이 설정으로 인하여 하나의 연결에서 여러 요청이 가능하므로 요청을 처리하는 시간을 증진 시킨다. 이 기능을 끄려면 off로 합니다.

대형 site일 경우에는 이 기능을 끄기를 권장합니다. 이 기능을 Off를 시킬 경우에 system의 부하가 상당히 늘어 나는 것을 느낄 수는 있으나 Web상의 속도에서는 속도가 On일 경우보다 더욱 빠르다는 것을 체감할 수 있습니다. Web Server만을 돌린다면 Off로 하는 것을 권장하며 여러 서비스를 할 경우에는 On으로 하라는 의미이다. 참고로 이런 것을 체험할 정도의 대형 서비스란 하루 웹로그가 1G이상 쌓이는 경우를 의미 하며 왠만한 site에서는 이 부분에 대해서 신경을 쓰지 않아도 상관이 없다.

 

MaxKeepAliveRequests 100

접속된채로 특별한 요청이 없음에도 계속 연결을 유지시킬 수치를 지정합니다. 값이 너무 크면 하나의 client Server resource를 독점 할 수 있으므로 적당 하게 잡는 것이 좋다.

 

KeepAliveTimeout 15

아파치 서버는 같은 접속상태의 클라이언트에서 여기서 지정한 초만큼의 요청이 없었을 때 접속을 끊게 됩니다.

 

MinSpareServers 8

MaxSpareServers 20

아파치 웹서버는 성능향상과 빠른 응답속도를 위해 유휴서버(현재 서비스대기 중인 프로세스)를 만들게 되는데 이 유휴서버의 개수는 시스템의 상황에 따라 달라지게 됩니다. 유휴서버가 MinSpareServers의 개수(5) 보다 적게되면 추가로 생성을 하게 되며 MaxSpareServers의 개수(10)보다 많게 되면 죽이게 됩니다. , 유휴서버의 개수를 적절히 조절하기 위한 것이라 생각하면 됩니다.

 

StartServers 10

httpd 서버를 처음 실행시킬때, 여분의 프로세스를 생성시킬 수치를 지정합니다. 반응 시간을 짧게 하기 위해 StartServers항목에서 말하는  만큼의 Server process를 이미 만들어 두는 것인데, 실제로  Service를 하고 있지 않을 경우에는 잠자고 있으므로 System에 부하를 주거나 하지는 않는다.

 

MaxClients 150

아파치웹서버에 접근할 수 있는 클라이언트의 최대갯수는 이 상한값으로 제한합니다. 여기서 지정한 개수이상의 클라이언트의 요청이 생긴다면 아파치는 응답하지 않고 이 요청을 무시합니다.  이를 제한하는 이유는 시스템의 자원을 아파치 웹서버가 무한정 차지하는 것을 방지하기 위한 것입니다.

 

MaxRequestsPerChild 100

아파치 웹서버의 자식프로세스들이 클라이언트의 요청 개수를 지정합니다. 만약 자식프로세스가 이 값만큼의 클라이언트요청을 받았다면 이 자식프로세스는 자동으로 죽게됩니다. 이 값이 0으로 설정이 됩니다면 자식프로세스가 자동으로 죽는일은 없을 것입니다. 그러나 0아닌 다른 값으로 설정함으로서 프로세스의 수를 적절히 조절하여 시스템의 부하조절과 자원낭비를 어느정도 방지 할 수 있습니다.

 

Listen 3000

Listen 12.34.56.78:80

시스템의 기본값 이외에 다른 IP Address와 포트에 대해서도 연결할 수 있도록 해 줍니다. 환경설정파일(httpd.conf) 맨뒤에 나오는 가상호스트(Virtual Host)부분에서 설정되는 가상호스트를 설정하기 위해 필요합니다.

 

BindAddress *

서버가 응답할 수 있는 IP Address를 설정하는 것입니다. 하나의 시스템에있는 아파치웹서버 하나로 여러 웹서버처럼 관리하는 웹호스팅서비스등에서 많이 이용하는 것으로 여러 IP Address를 인식할 수 있게 합니다. "*"으로 설정이 되었다면 모든  IP Address에 대해 응답할 수 있으며, IP Address를 지정합니다면 지정한 IP Address에 대해서만 응답할 수 있게 됩니다.  여러개의 IP Address ISP로부터 할당받아서 웹호스팅서비스를 하고자 합니다면 이부분에서 지정해 주면 됩니다.

이 설정파일의 맨 뒷부분에 나오는 <VirtualHost> ~ </VirtualHost>부분의 IP bind 가상호스트부분에서 아파치 웹서버가 응답할 수 있도록 하려면 여기서 IP Address를 지정해 줘야 합니다.

 

ExtendedStatus On

server-status로 아파치웹서버의 상태를 상태를 모니터링 할 때 "자세한상태정보"기능을 제공할 것인지(On) 아닌지(Off)를 설정하는 것입니다.

 

'(Main)' 서버 설정

이 부분은 가상호스트에서 핸들링되지 않는 요구들에 응답하는 아파치 메인(기본, default)서버의 설정부분입니다. Section 2 에서 설정하는 항목들은 아파치의 주된 서버가 사용할 값들을 지정합니다. Section 3 에 설정하는 <VirtualHost>에 정의된 가상호스트들에서 지정하지 않는 것은 여기서 지정된 값이 기본값으로 적용됩니다.

또한 여기서 지정하는 값을 각 <VirtualHost>내에도 지정할 수 있으며 이경우엔 각 <VirtualHost>내에서 지정한 값이 우선적으로 적용됩니다. , 이 섹션의 지시자들은 <VirtualHost>정의에 의해 서비스되지 않는 요구들에 대한 부분만 응답하는 아파치메인서버 설정값들을 설정합니다. 또한 중요한 것은 여기서 설정하는 값들은 이 파일의 뒷부분에서 설정하고 있는 <VirtualHost>내의 기본값을 제공하는 역할도 합니다는 것을 기억하시기 바랍니다. 그리고 Section 2 에서 설정하는 모든 지시자들은 Section 3 부분의 <VirtualHost>내에서도 별도로 사용될 수 있습니다. 만약 동일한 지시자가 Section 2 Section3 <VirtualHost>애에 모두 설정이 될 경우에는 Section 3 <VirtualHost>내의 설정이 적용됩니다는 점도 반드시 알아두셔야 합니다.

 

 

Port 80

아파치웹서버의 기본포트를 지정합니다. 특별하게 사용하는 것이 아니라면 80번으로 해둬야 합니다. 사용가능한 포트는 0 ~ 65535이며 1024이하의 포트번호는 시스템에서 특별하게 예약되어 있으므로 80번 이외의 다른 포트를 사용하려면 1024이상의 포트번호를 지정해서 사용해야 할 것입니다.

특별한 지정이 없다면 <VirtualHost>에 정의된 각각의 가상호스트들의 기본포트가 됩니다. 만약 <VirtualHost> 내에서 Port가 지정이 됩니다면 그 포트번호가 우선합니다.

 

(특별히 PORT를 따로 지정해 줄 필요가 있을 때는 따로 지정해 주며, 이때는 웹서버로 접근할 때 반드시 따로지정한 PORT번호로 접근해야 합니다. 예를들어 Port 1234로 지정했다면, 접근시 : http://www.domain.co.kr:1234 로 접속해야합니다. , 80번은 default이므로 Port번호를 입력하지 않아도 도메인만으로 그냥 접근할 수 있습니다. : http://www.domain.co.kr )

 

User nobody

Group nobody

아파치 웹데몬이 요청을 받았을 때 여기서 지정한 user group으로 응답을 하게됩니다. 이 설정은 ServerType Standalone방식이며, 아파치의 실행이 root권한으로 실행이 되었을 때 유효한 것입니다. 많은 웹서버관리자들이 nobody로 설정을 해 두고 있으며, 만약 시스템에 nobody user가 없다면 새로생성(useradd)을 해야 할 것입니다. , root로 설정하는 것은 절대로 있어서는 안되며 nobody이외의 다른 시스템사용자 id로 지정을 합니다면 정말 신중히 모든면(시스템 보안 및 자원사용등)에서 깊게 고려를 해봐야 합니다.

 

ServerAdmin admin@nextline.co.kr

여기서 지정하는 email address는 웹 문서 로딩 에러 등의 문제에서 클라이언트측으로 보내질 메일 주소 값 이다. 대부분 웹 서버관리자의 email address로 설정을 합니다.

 

ServerName www.nextline.co.kr

클라이언트에게 보여주는 호스트이름을 지정합니다.

www를 쓰지 않는 호스트에서 www를 쓰는 것처럼 보이게 할 수 있습니다.

예를 들어 bbs.nextline.co.kr www.nextline.co.kr로 지정해서 쓸 수 있습니다. 이곳에 IP Address를 적게 되면 클라이언트에는 Ip Address를 보여줍니다.

 

DocumentRoot "/usr/local/apache/htdocs"

아파치 웹서버의 웹문서가 있는 경로를 지정합니다.

예를 들어 "http://www.nextline.co.kr/index.html"의 초기 문서라면 이 초기문서의 절대 경로는 여기서 지정된 "/usr/local/apache/htdocs/index.html"이 됩니다.

경로의 맨 마지막에 "/"를 추가해서는 안됩니다. Alias를 사용하여 다른 위치를 지정할 수도 있습니다.

 

<Directory />

   Options FollowSymLinks

   AllowOverride None

   Order allow,deny

   Allow from all

   Deny from env=no_access

</Directory>

<directory> tag에 의하여 각 directory마다 적절하게 permission을 걸 수가 있습니다.

"Deny from env=no_access" 설정에 대해서는 뒤에 다루기로 합니다.

 

<Directory "/usr/local/apache/htdocs">

 Options Indexes FollowSymLinks Includes

 

Options

 

None

어떤 옵션도 이용할 수 없습니다.

 

All

지정한 directory에서 모든 명령을 이용할 수 있습니다.

 

Indexes

URL에 지정된 디렉토리에 (index.html 같은) 지정된 파일이 없을 경우 디렉토리의 파일 목록을 보여주는 옵션입니다.

 

Includes

서버측의 추가적인 정보를 제공할 수 있게 합니다.

 

IncludesNoExec

 서버측의 추가적인 정보를 제공할 수 있게 하지만, 어떠한 실행 파일을 실행하는 것을 방지합니다.

 

FollowSymLinks

디렉토리상의 심볼릭 링크를 사용 가능하게 합니다.

 

ExecCGI

CGI 스크립트를 실행할 수 있게 합니다.

 

MultiViews

All 옵션이 설정되었을 때만 지정된 목록의 multiviews를 허용합니다.

 

AllowOverride None

.htaccess파일은 서버의 각 디렉토리에 만들어서 각 디렉토리에 대한 접근을 제어하기 위한 것으로 디렉토리에 .htaccess파일이 있으면, 서버 전체에 작용하는 access.conf 보다 우선권을 가집니다. .htaccess파일에 대한 Override에 대한 옵션입니다.

 

None

.htaccess파일을 읽을 수 없게 합니다.

 

All

모든 지정에 대해 가능하게 합니다.

 

Options

규정된 디렉토리 형식을 콘트롤하는 지정의 사용을 허락합니다.

 

FileInfo

문서형식을 콘트롤하는 지정의 사용을 허용합니다.

 

AuthConfig

사용자 인증 지정의 사용을 허용합니다. 사용자 인증 변수를 사용합니다.

 

Limit

호스트 접근을 콘트롤하는 지정을 허용합니다.

 

Order allow,deny

Allow from all

Deny from env=no_access

Limit에 관련된 부분을 설정을 합니다.

 

Order

서버가 access control을 수행하는 순서를 나타낸다. 여기서는 allow기능을 먼저

수행하고, deny기능을 수행하라는 것입니다.

 

deny, allow

deny 지시자 부터 검사하고 allow 지시자를 검사 합니다.

 

allow, deny

allow 지시자 부터 검사하고 deny 지시자를 검사 합니다.

 

mutual-failure

allow목록에 없는 모든 host에게 접속을 거부 합니다.

 

allow from

나열되는 주소들에 대한 access control을 가능하게 합니다. 사용 가능한 주소는 도메인 네임, 호스트 이름 주소, 호스트 ip 주소, ip 주소의 앞부분 3바이트, 모든 주소에 해당하는 all 이 있습니다.

 

deny from

allow from과 반대되는 개념이며, 사용가능한 주소는 allow from과 같다.

 

Require

사용자, 그룹에 대한 접근을 통제할 수 있습니다.

사용방법 : require entity en1 en2 ... enn

entity에 들어갈 수 있는 것은 user, group, valid-user의 세가지이다.

 

User

지정된 사용자들에게만 접근을 허용하는 것으로, 지정된 사용자에 대한 정보는 AuthUserFile에서 지정한 파일에 있습니다.

 

Group

지정된 그룹에게만 접근을 허용하는 것으로, 지정된 그룹에 대한 정보는

AuthGroupFile에서 지정한 파일에 있습니다.

 

valid-user

AuthUserFile에 있는 모든 사용자에 대해 접근을 허용합니다.

</Directory>

 

 

UserDir public_html

계정 사용자들의 home directory를 지정합니다.  보통 http://url/~계정 이런식으로 접속했을 때 계정에 이곳에 지정된 이름의 directory를 만들고 home directroy로 사용하면 됩니다. 보통 public_html 이나 htodcs, home 을 많이 쓴다. 다른 이름으로 해도

상관은 없다. 계정 사용자가 사용을 못하게 하려면 DISABLED 옵션을 주면 됩니다.

참고를 할것은 RedHat 계열에서는 user를 생성을 하면 user home directory 700의 권한을 갖게 되므로 httpd.conf에서 아무리 설정을  해 줘도 forbidden error만 만나게 됩니다. 그러므로 계정에서 homepage를 운영하기 위해서는 꼭 chmod a+x ~accountname 명령을 실행을 해 줘야 합니다.

 

<Directory /*/public_html>

     AllowOverride FileInfo AuthConfig Limit

     Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec

     <Limit GET POST OPTIONS PROPFIND>

         Order allow,deny

         Allow from all

     </Limit>

     <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>

         Order deny,allow

         Deny from all

     </Limit>

 </Directory>

UserDir 디렉토리에 대한 접근을 제어합니다다음은 사용자 홈   페이지에 대하여 읽기만 가능하도록 한 예제 설정 내용입니다.

위의 설정 중 "*" 사용에 관해서 언급을 할 것이 있습니다.

보통 "*" all  의미로 많이 사용이 됩니다.

즉 위에서 /*/public_html 은 어떠한  경로에 있는 모든 public_html을 뜻합니다고 할수 있습니다. 하지만 이는  그렇게 호락호락하게 되지는 않는 듯 합니다.

필자의 경험에 의하면  같은 레벨의 깊이에 있는 public_html 만 적용이 되는듯 합니다.

 위의 설정대로라면 /home/public_html은 적용이 되지만 /home/nextline/publci_html 은 적용이 되지 않더란 말입니다.

 

 DirectoryIndex index.html index.htm index.shtml index.php3 index.cgi

디렉토리만을 지정했을 경우에 그 디렉토리에서 찾게될 문서의 순서를 지정해 줍니다.

, 디렉토리 이름만을 지정하더라도 여기서 지정한 index.html을 찾아서 웹브라우즈에 보여줍니다. 여러개의 파일을 지정할 수 있으며, 이런 경우에는 순서대로 찾아서 보여줍니다. 예를 들어 "DirectoryIndex index.html index.htm"로 지정했다면 먼저 "index.html"을 찾아서 있다면 이 파일을 로딩하고, "index.html"이 없다면 "index.htm"

찾아서 로딩해 줍니다.

 

 AccessFileName .htaccess

디렉토리별로 접근 제어할 정보(ID, Password)를 담고 있는 파일을 지정합니다. 디렉토리별로 인증을 거쳐서 접근할 수 있는 설정을 하기 위한 것입니다. 예를 든다면 어떤 홈페이지의 전부나 혹은 일부에서 접근하려고 할 때 ID, Password를 묻는 창이 뜨면서 맞게 입력한 경우에만 접근 허용하는 것입니다.  보안상의 이유로 이 파일의 이름을 다른 이름으로 바꾸고 싶다면 ".htaccess" 대신에 다른 이름을 적어주면 됩니다.

 

 <Files "^\.ht">

     Order allow,deny

     Deny from all

 </Files>

바로 위에서 설정한 파일(".htaccess")의 내용을 볼 수 없게 할 때 사용하는 옵션이다. 보안상의 이유로 이 옵션은 설정해 두는 것이 좋다. 만약 이 옵션을 주석 처리해 둔다면 ".htaccess"파일에 대한 보안은 누구도 장담할 수 없을 것입니다.

 

CacheNegotiatedDocs

이 설정은 Proxy Server를 거치는 사용자들을 위한 것입니다. Proxy  Server "교섭" 문서, CGI script의 출력이나 Server가 생성한  index page처럼 직접 수신되지 않는 문서를 cache 하도록 합니다. Default로 주석 처리 되어 있고 그냥 이대로 두면 됩니다.

 

UseCanonicalName On

웹서버의 mime type을 지정한 파일을 지정합니다. mime.types파일은 서버에 의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.

 

TypesConfig /etc/mime.types

웹서버의 mime type을 지정한 파일을 지정합니다. mime.types파일은 서버에 의해 리턴될 수 있는 파일명과 mime형식을 기술해 놓은 파일이다.

 

DefaultType text/plain

mime.types 파일에 정의 되어있지 않은 파일형식에 대한 요청을 받았을 때 알 수 없는 문서타입에 대하여 사용할 기본적인 mime 타입을 정해둔다.

 

 <IfModule mod_mime_magic.c>

     MIMEMagicFile conf/magic

 </IfModule>

이것 역시 1.3.12에서 부터 새로 추가된 module이다. 사용을 하기  위해서는 DSO 설정에서 mod_mime_magic line의 주석을 해제해야 합니다.

 

 

HostnameLookups Off

웹서버의 로그(access_log)를 지정하는 Format에서 "DNS Lookup"으로 지정하였을 때, domain으로 남길 것인가, IP Address로 남길 것인가를 지정합니다. Default OffIP Address로 남기는 것이며, Domain으로 변경할 필요가 없으므로 on으로 설정한 것보다는 속도가 조금빠르다.on으로 하게 되면 IP address IP Domain으로 변환해야 하므로 속도가 조금 느릴 수 있습니다.

 

 

 ErrorLog logs/error_log

아파치 웹서버의 에러로그 기록파일을 지정합니다.  참고할 사항은 맨 마지막에 설정하는 <VirtualHost>부분에서 각서버에 대한 에러파일을 지정해 두지 않으면 그에 대한 에러로그도 여기에 기록되며, 지정해 두게 되면 그에 해당하는 로그는 이 파일에 기록되지 않는다.  만약 ErrorLog를 남기고 싶지 않다면 /dev/null로 지정을 해 주면 됩니다.

: ErrorLog /dev/null

 

LogLevel warn

바로위에서 설정한 에러로그 파일에 얼마나 자세하게 적을 것인지를 결정합니다. 다음에 해당하는 순서대로 중요도가 정해진다.

" debug info notice warn error crit alert emerg "

 

 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\"

                   \"%{User-Agent}i\"" combined

 LogFormat "%h %l %u %t \"%r\" %>s %b" common

 LogFormat "%{Referer}i -> %U" referer

 LogFormat "%{User-agent}i" agent

바로 아래에서 사용할 CustomLog에서 사용할 몇가지 로그형식의 별명을 정한 곳이다.

웹서버의 관리자나 서버관리자는 이 부분을 특히 유심히 봐둬야 합니다. 웹서버의 로그를 어떤 식으로 남길 것인가를 결정하는 Format을 지정하는 곳이다. 원하는 정보를 지정해서 볼 수 있으므로, 관리자에게 필요한 Format으로 설정해야 하며, 또한 접속통계를 내기에 적당한 Format으로 설정해 둬야 합니다.

 

CustomLog logs/access_log common

위에서 정한 로그형식(여기선 common)대로 로그를 남기게 됩니다.

맨마지막에서 지정하는 <VirtualHost>부분에서도 아파치 1.3.9버전 부터는 CustomLog를 가상호스트별로 지정할수 있도록 CustomLog를 제공합니다. <VirtualHost>에서 CustomLog를 지정하지 않으면 여기서 지정한 형식대로 로그를 남기게 되며 <VirtualHost>부분에서 CustomLog를 지정했을 경우에는 여기서 지정한 로그형식은 무시됩니다.

 

CustomLog logs/referer_log referer

CustomLog logs/agent_log agent

위에서 지정한 4가지의 로그형식(combind, common, referer, agent)중에서 원하는 부분의 (주석행)을 제거하면 지정됩니다.

 

CustomLog logs/access_log combined

이 설정은 위의 CustomLog logs/referer_log referer,  CustomLog logs/agent_log agent 를 합쳐 놓은 것이라 생각하면 됩니다. 이 행의 주석을 풀어 주기 위해서는 위의 두행이 주석처리가 되어 있어야 합니다.

 

ServerSignature On

서버가 생성하는 문서(error documents, FTP directory listings,

mod_status and mod_info output etc., but not CGI generated documents)

trailing footer line의 설정을 가능하게 합니다.

 

 Alias /icons/ "/usr/local/apache/icons/"

 

 <Directory "/usr/local/apache/icons">

     Options Indexes MultiViews

     AllowOverride None

     Order allow,deny

     Allow from all

 </Directory>

필요한 만큼의 디렉토리 별칭을 만들어 쓸 수 있습니다. 사용하는 형식은 다음과 같다.

Alias fakename(가상이름) realname(진짜이름)

 

ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/"

 

<Directory "/usr/local/apache/cgi-bin">

   AllowOverride None

   Options ExecCGI

     Order allow,deny

     Allow from all

 </Directory>

ScriptAlias는 서버스크립트를 포함합니다. ScriptAlias는 실제디렉토리 안에 들어있는 문서를 서버에 의해 응용프로그램으로 취급되어 실행되는 것을 제외하고는 근본적으로 Aliases와 같다.

 

IndexOptions FancyIndexing

IndexOPtions는 디렉토리목록을 표시할 때 사용할 옵션을 지정합니다. Standard는 표준적

인 디렉토리를 나타내며, FancyIndexing은 좀더 예쁜 디렉토리목록을 표시해 줍니다.

 

아래에서 지정하는 AddIcon으로 시작하는 설정은 바로위에서 설정한 디렉토리인덱싱 옵션

FancyIndexing으로 한 경우에 해당하며 디렉토리 목록을 표시할 때 각 파일 확장자에

따라서 어떤 아이콘을 선택하여 보여줄 것인지를 지정합니다.

 

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*

AddIconByType (IMG,/icons/image2.gif) image/*

AddIconByType (SND,/icons/sound2.gif) audio/*

AddIconByType (VID,/icons/movie.gif) video/*

IndexOptions에서 FancyIndexing이 지정되었을 때 이 지시자는 file마다 MIME type에 따라 어떤 icon을 사용 할지 정합니다.

 

 AddIcon /icons/binary.gif .bin .exe

 AddIcon /icons/binhex.gif .hqx

 AddIcon /icons/tar.gif .tar

 AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv

 AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip

 AddIcon /icons/a.gif .ps .ai .eps

 AddIcon /icons/layout.gif .html .shtml .htm .pdf

 AddIcon /icons/text.gif .txt

 AddIcon /icons/c.gif .c

 AddIcon /icons/p.gif .pl .py

 AddIcon /icons/f.gif .for

 AddIcon /icons/dvi.gif .dvi

 AddIcon /icons/uuencoded.gif .uu

 AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl

 AddIcon /icons/tex.gif .tex

 AddIcon /icons/bomb.gif core

 

 AddIcon /icons/back.gif ..

 AddIcon /icons/hand.right.gif README

 AddIcon /icons/folder.gif ^^DIRECTORY^^

 AddIcon /icons/blank.gif ^^BLANKICON^^

 Server file Directofy를 표시하는데 어떤 icon을 사용할 지 지정합니다.

 

 

DefaultIcon /icons/unknown.gif

여기서 지정한 확장가가 아닌 경우에 여기서 지정한 기본아이콘으로 보여줍니다.

 

AddDescription "GZIP compressed document" .gz

AddDescription "tar archive" .tar

AddDescription "GZIP compressed tar archive" .tgz

AddDescription은 서버가 생성한 인덱스의 파일 뒤에 간단한 설명을 표시할 때 사용합니다. 이 설정은 IndexOptions FancyIndexing으로 설정되었을때만 표시되며, 설정형식은 다음과 같습니다.

형식 : AddDescription "표시할 설명" 파일확장자

 

 AddDefaultCharset Off

 AddDefaultCharset euc-kr

이 설정은 apache 1.3.12에 들어와서 Cross Site Scripting 보안 문제  패치를 하면서 기본 글꼴을 iso-8859-1 로 하는 현상이 발생 하므로  한글 사용을 위해서는 어쩌면 필요한 설정일지도 모른다. 일단 문제가  없으면 그냥 놔두는 것도 괜찮을지 모르겠지만 문제가 됩니다면 설정을 해보는 것도 괜찮을것 같다. 일단 필자의 테스트 로는 euc-kr로의

 설정은 문제가 발생합니다.

 

ReadmeName README

HeaderName HEADER

디렉토리 목록을 보여줄 때 목록의 마지막 부분 뒤와 목록의 시작  전에 보여줄 내용을 담고 있는 파일을 지정합니다. 여기서는 목록의 뒤에 README, 목록의 처음에 HEADER를 보여주게 지정되어 있습니다.

 

IndexIgnore .??* *~ *   HEADER* README* RCS CVS *,v *,t

디렉토리를 출력할 때 무시할 파일들을 지정합니다.

 

AddEncoding x-compress Z

AddEncoding x-gzip gz

압축 코드에 대한 인코딩 정보를 지정합니다.

 

<IfModule mod_negotiation.c>

  AddLanguage ko .ko

  AddLanguage en .en

  AddLanguage fr .fr

  AddLanguage de .de

  AddLanguage da .da

  AddLanguage el .el

  AddLanguage it .it

</IfModule>

Server가 다국 언어로 문서를 제공합니다면 이 지시자를 사용해 file  확장자를 언어를 지정 하는 약어에 대응시킨다. 언어의 약어는 보통  인터넷 국가 코드를 사용합니다. client home.html이라는 file  요청하면 browser는 프랑스어 사용자라는 것을 전하고 server  이 지시자를 찾아서 어떤 file 확장자가 프랑스어 문서에 사용되는지

 알아본다. 프랑스어 사용자라면 home.html.fr을 받게 됩니다. 다만  home.html이라는 file이 존재 합니다면 home.html.fr을 받지 못하고 home.html을 받아 버리게 됩니다.

 

<IfModule mod_negotiation.c>

  LanguagePriority ko en fr de

</IfModule>

site에 위에서 지정한 것과 같은 home.html.fr과 같은 문서가 있고  client가 언어를 선택하지 않고 home.html을 요청할때(home.html  없을 경우) 서버가 보낼 문서를 지정합니다. 이 지시자는 여러 언어를 내침 차순으로 나열합니다.

 

AddHandler cgi-script .cgi .pl .sh

서버의 어떤 위치에 있던지 '.cgi' 확장자를 가진 파일은  cgi-script로 인식하게 합니다. '.pl', '.sh' 등의 다른 확장자도  추가할 수 있습니다. 보안을 이유로 account user들에게 CGI 권한을  주지 않으려면 이행을 주석 처리해야 합니다. 반대로 account user  들에게 CGI권한을 주기 위해서는  이 행의 주석을 풀어 줘야 합니다.

 

AddType text/html .shtml

AddHandler server-parsed .shtml

AddHandler text/x-server-parsed-html .html .txt

Server Side Includes (SSI)를 사용할 때 필요합니다. SSI HTML파일  속에 어떤 실행 프로그램의 결과나 특정 파일을 포함할 수 있게 합니다.

shtml 확장자가 아닌 파일에서도 SSI를 사용할 수 있게 하려면 위에서와  같이 x-server-parsed-html mime type설정을 이용합니다.

 

MetaDir .web

MetaDir은 아파치가 찾을 메타정보파일들의 디렉토리 이름을 지정합니다. 이 파일들은 문

서를 전송할 때 포함되는 HTTP 헤더정보가 포함되어 있습니다.

 

 

MetaSuffix .meta

MetaSuffix는 메타정보를 포함하고 있는 접미어의 이름을 지정합니다.

 

ErrorDocument 400 /message/400error.html

ErrorDocument 401 /message/401error.html

ErrorDocument 403 /message/403error.html

ErrorDocument 404 /message/404error.html

ErrorDocument 405 /message/405error.html

ErrorDocument 500 /message/500error.html

ErrorDocument 501 /message/501error.html

 

또는 스크립트를 이용하여 변수를 전달 시킬 수 도 있습니다.

 

ErrorDocument 400 /message/error.php?ecode=400

ErrorDocument 401 /message/error.php?ecode=401

ErrorDocument 403 /message/error.php?ecode=403

ErrorDocument 404 /message/error.php?ecode=404

ErrorDocument 405 /message/error.php?ecode=405

ErrorDocument 500 /message/error.php?ecode=500

ErrorDocument 501 /message/error.php?ecode=501

서버에러에 대한 응답을 지정해 주는 부분이다. 각 에러 코드에  대한 응답을 cgi나 일반 텍스트로 만들어서 사용자에게 보여줄  수 있습니다. 어떤 서버에 접속하면 해당 URL이 없다는 등의 한글  메시지가 가능한 것도 이것을 이용하는 것입니다.

아래는 (2)번의 내부 redirects를 사용한 예이다. 나의 경험 상으 로는 외부 방향 전환을 이용했을때 CGI htaccess 인증시에 505  Internal Server error가 발생 했다. 왜 그런지 이유는 잘 모르겠다.  내부 방향 전환에는 전혀 이상이 없었다.  

 

BrowserMatch "Mozilla/2" nokeepalive

BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 \

                            force-response-1.0

다음 지시자는 보통의 HTTP 반응 방식을 수정합니다.

첫번째 것은 네스케이프 2.x 또는 그를 흉내내는 브라우져에  대하여 KeepAlive 기능을 쓰지 않도록 합니다이 브라우져들은 KeepAlive 구현에 문제점을 갖고 있기 때문이다.

두번째 것은 HTTP/1.1을 잘못 구현하였고 301 또는 302 (redirect) 반응에 대하여 KeepAlive를 제대로 지원하지 못하는 Micro$oft 인터넷 익스플로러 4.0b2를 위한 것입니다.

 

BrowserMatch "RealPlayer 4\.0" force-response-1.0

BrowserMatch "Java/1\.0" force-response-1.0

BrowserMatch "JDK/1\.0" force-response-1.0

다음은 기본적인 1.1 반응도 제대로 처리하지 못함으로써 HTTP/1.1 스펙을 위반하고 있는 브라우져에 대하여 HTTP/1.1 반응을 하지 않도록 합니다.

 

 BrowserMatch "WebZIP" no_access

 BrowserMatch "Teleport" no_access

 BrowserMatch "NamoWebEditor" no_access

 BrowserMatch "WebTrack-HTTPP" no_access

 BrowserMatch "WebSymmetrix" no_access

BrowserMatch 지시자를 이용하여 User Agent별로 접근을 제어 하도록 합니다.

 

 <IfModule mod_status.c>

   <Location /server-status>

       SetHandler server-status

       Order deny,allow

       Deny from all

       Allow from localhost

       Allow from all

       AuthName "administrator Area"

       Authtype Basic

       AuthUserFile /home/.htpasswd

       AuthGroupFile /dev/null

       require valid-user

       satisfy all

   </Location>

 </IfModule>

서버의 상태결과를 http://servename/server-status URL에 접근  하면 볼 수 있게 해주는 옵션이다. 'allow from 서버 도메인네임'  형식 으로 접근이 가능합니다.

 

하단의 주석 처리가 되어진 부분은 .htpasswd file에 기록되어 있는 User Password로 인증을 하여 보게 하는 설정의 예이다.  .htpasswd 인증을 위해서는 mod_auth.c 가 활성화되어 있어야 합니다. 그럼 여기서 살짝 꽁수를 써보도록 하겠다. 일정 ip address에서는 ip address check만하고 인증을 안하도록 하고 다른 ip address에서  는 인증을 하게 하는 방법을 설정해 보도록 하겠다.

 

 <IfModule mod_status.c>

   <Location /server-status>

       SetHandler server-status

       Order deny,allow

       Deny from all

       Allow from localhost

       AuthName "administrator Area"

       Authtype Basic

       AuthUserFile /home/.htpasswd

       AuthGroupFile /dev/null

       require valid-user

       satisfy any

   </Location>

 </IfModule>

원래의 설정과 위의 설정과의 차이를 보도록 하면, 일단 원래의 설정에서  주석 처리 되어 있는 부분이 모두 주석이 제거가 되어 있습니다. 그리고 제일  마지막 option satisfy의 값이 all에서 any가 되어 있습니다. 이것이 바로  키포인트이다. Allow from에 지정된 ip address domain name은 인증  을 안하고 바로 보여주며, 그 외의 주소들은 /home/.htpasswd 에 있는 유  저의 이름과 패스워드를 비교하여 인증을 해서 출력을 하게 됩니다. 이것은 아래의 server-info에도 적용이 가능합니다.

 

 <IfModule mod_info.c>

   <Location /server-info>

       SetHandler server-info

       Order deny,allow

       Deny from all

       Allow from localhost

       Allow from all

       AuthName "administrator Area"

       Authtype Basic

       AuthUserFile /home/.htpasswd

       AuthGroupFile /dev/null

       require valid-user

       satisfy all

   </Location>

 </IfModule>

1.3.4 에서 부터 새로 추가된 module이다. 이 기능은  http://servername/server-info url로 접근을 했을 경우 apache  에서 실행이 가능한 module들의 목록 등 apache의 전반적인 정보를  보여줍니다.

 

<Location /cgi-bin/phf*>

    Deny from all

    ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi

</Location>

1.1 버전 이전의 오래 된 버그를 악용하려는 사람들이 있습니다는 보고를 받았다. 이 버그는 아파치 일부분으로 제공한 CGI 스크립트와 연관 있습니다. 이 부분의 주석 처리를 없애면 이 버그를 악용하는 공격이 있을 때 phf.apache.org 상의 기록 스크립트로 방향 전환시킬 수 있습니다. 또는 support/phf_abuse_log.cgi 스크립트를 사용하여 여러분 직접

기록할 수도 있습니다.

 

<IfModule mod_proxy.c>

   ProxyRequests On

아파치 웹서버를 Proxy서버로 사용할 때 on을 해줘야 합니다.

즉 프락시 서버 지시자로서 프락시 서버를 on 시킵니다.

   

<Directory proxy:*>

     Order deny,allow

     Deny from all

     Allow from .your_domain.com

</Directory>

 

ProxyVia On

HTTP/1.1 "Via:" 헤더를 처리할 것인지 여부를 결정합니다.

("Full"은 서버 버전을 포함하고 "Block"은 나가는 모든 자료에서 Via: 헤더를 제거합니다.) Off | On | Full | Block 중 하나의 값을 지정합니다.

 

CacheRoot "/usr/local/apache/proxy"

CacheSize 5

CacheGcInterval 4

CacheMaxExpire 24

CacheLastModifiedFactor 0.1

CacheDefaultExpire 1

NoCache a_domain.com another_domain.edu joes.garage_sale.com

캐쉬 기능도 사용하기 위해서는 다음 행의 주석을 풀어줍니다

(CacheRoot가 없으면 캐쉬하지 않음)

 

 </IfModule>

 

가상 호스트

아파치 가상호스트 설정부분입니다. 하나의 아파치 웹서버에서 여러 개의 도메인 또는 멀티도메인, 또는 서브도메인등으로 여러 개의 웹사이트를 운영하고자 하신다면 가상호스트 설정지시자를 이용하시면 됩니다. 대부분의 경우 여러 개의 IP주소를 사용할 필요없이 하나의 IP주소를 사용하여 여러 개의 웹사이트를 운영할 수 있기 때문에 이름기반의 가상호스트(name-based virtual host)를 사용합니다.

VirtualHost: 여러분의 리눅스 박스에 여러 개의 도메인/호스트 이름을 관리하고 싶다면 각각에 대하여 VirtualHost 컨테이너를 설정 합니다. 가상 호스트를 설정하기에 앞서 자세한 설명을 <URL:http://www.apache.org/docs/vhosts/>에 들러 읽어보기 바란다.

가상 호스트 설정 내용을 점검해보기 위해서는 아파치를 실행할 때 명령행 옵션으로 '-S'를 사용합니다.

 

NameVirtualHost 12.34.56.78:80

NameVirtualHost 12.34.56.78

이름 기반의 가상 호스트를 사용하려면 사용할 IP 주소 (최소 1 , 그리고 포트 번호)를 정의해주어야 합니다.

 

<VirtualHost xxx.xxx.xxx.xxx>

   ServerAdmin ask@nextline.co.kr

   DocumentRoot /home/nextline/public_html

   ServerName www.nextline.co.kr

   ErrorLog /home/nextline/public_html/logs/error_log

   CustomLog /home/nextline/public_html/logs/access_log common

</VirtualHost>

 

ServerAdmin은 해당서버의 관리자 전자우편이며,

DocumemtRoot는 해당서버의 홈디렉토리이며,

ServerName은 해당서버의 도메인이며,

ErrorLog는 해당서버의 에러파일 위치이며

CustomLog는 로그파일위치와 포맷을 지정한 것입니다.

 

<VirtualHost _default_:*>

</VirtualHost>

 

Default 가상호스트 설정으로 위에서 설정되지 않은 다른 모든 호스트에 대해서 응답을

하고자 할 경우 설정해 줍니다.

 

 


'tip > APM' 카테고리의 다른 글

[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
php.ini 환경설정  (0) 2008/07/01
httpd.conf 설정  (0) 2008/07/01
mysql 에서 현재 status 확인 하기  (0) 2008/07/01
mysql 내용 덤프 및 백업  (0) 2008/07/01
tar압축풀기 & tar압축하기  (0) 2008/06/24
Posted by 根™
2008/07/01 17:25

mysql 에서 현재 status 확인 하기 tip/APM2008/07/01 17:25

mysql의 현재 상태를 확인 하는 명령과 각 항목의 설명입니다.

사용명령:
# /usr/local/mysql/bin/mysqladmin status -p
또는
mysql 에 접속후  mysql> show status; 로도 볼수 있습니다.

설명:
Aborted_clients : 클라이언트가 연결을 적절히 닫지않아서 죽었기때문에 끊어진 연결수.
Aborted_connects : 연결실패된 mysql서버에 연결시도 수.
Bytes_received : 모든 클라이언트로 부터 받은 바이트 수
Bytes_sent : 모든 클라이언트에게 보낸 바이트수
Connections : mysql서버에 연결시도한 수
Created_tmp_disk_tables : sql문을 실행하는 동안 생성된 디스크에 존재하는 임시테이블 수
Created_tmp_tables : sql문을 실행하는 동안 생성된 메모리에 존재하는 임시테이블 수
Created_tmp_files : 얼마나 많은 임시파일을 mysqld가 생성했는가
Delayed_insert_threads : 사용중인 insert handler threads가 지연되고 있는 수
Delayed_writes : INSERT DELAYED로 쓰여진 rows수
Delayed_errors : 어떤 에러(duplicate key로인한 때문에 INSERT DELAYED로 쓰여진 rows수
Flush_commands : 초과 flush명령수
Handler_delete : 테이블로 부터 지워진 rows수
Handler_read_first : 인덱스로 부터 읽혀진 처음 entry수. 이것이 높으면 서버는 많은 full
                         index scans를 하고 있다는 것을 의미. 예를 들어 SELECT col1 FROM
                         foo는 col1은 인덱스되었다는 것을 추정.
Handler_read_key : 키가 존재하는 row를 읽는 요청수. 이것이 높으면 당신의 쿼리와 테이블
                        이 적절히 인덱스화되었다는 좋은 지적이 된다.
Handler_read_next : 키순서대로 다음 row를 읽는 요청수. 이것은 만약 range constraint와  
                         함께 인덱스컬럼을 쿼리할 경우 높아질 것이다. 이것은 또한 인덱스 스캔
                        하면 높아질 것이다.
Handler_read_rnd : 고정된 위치에 존재하는 row를 읽는 요청수. 이것은 결과를 정렬하기를
                           요하는 많은 쿼리를 한다면 높아질 것이다.
Handler_read_rnd_next : 데이타파일에서 다음 row를 읽기를 요청수. 이것은 많은 테이블 스
                            캔을 하면 높아질 것이다.
Handler_update : Number of requests to update a row in a table.
                       한테이블에 한 row를 업데이트를 요청하는 수
Handler_write :  한테이블에 한 row를 insert요청하는 수
Key_blocks_used :  key 캐시에서 블럭을 사용하는 수
Key_read_requests : 캐시에서 키블럭을 읽기를 요청하는 수
Key_reads : 디스크로부터 키블럭을 물리적으로 읽는 수
Key_write_requests : 캐시에서 키블럭을 쓰기위해 요청하는 수
Key_writes :  디스크에 키블럭을 물리적으로 쓰는 수
Max_used_connections : 동시사용 연결 최대수
Not_flushed_key_blocks : 키캐시에서 키블럭이 바뀌지만 디스크에는 아직 flush되지 않는다.
Not_flushed_delayed_rows :  INSERT DELAY queue에서 쓰여지기를 기다리는 row수
Open_tables : 현재 오픈된 테이블수
Open_files : 현재 오픈된 파일수
Open_streams : 주로 logging에 사용되는 현재 오픈된 stream수
Opened_tables : 지금까지 오픈된 테이블 수
Select_full_join : 키없이 조인된 수(0이 되어야만 한다)
Select_full_range_join : reference table에서 range search를 사용한 조인수
Select_range : 첫번째 테이블에 range를 사용했던 조인수. 보통 이것이 크더라도 위험하진 않다.
Select_scan : 첫번째 테이블을 스캔했던 조인수
Select_range_check : 각 row후에 key usage를 체크한 키없이 조인한 수(0이어야만 한다)
Questions : 서버에서 보낸 쿼리수
Slave_open_temp_tables : 현재 slave thread에 의해 오픈된 임시 테이블 수
Slow_launch_threads : 연결된 slow_launch_time보다 더 많은 수를 갖는 쓰레드수
Slow_queries : long_query_time보다 더 많은 시간이 걸리는 쿼리 수. Slow Query Log참고
Sort_merge_passes : 정렬해야만 하는 merge수.
                           이 값이 크면 sort_buffer를 증가하는것에 대해 고려해야 한다.
Sort_range : Number of sorts that where done with ranges.
Sort_rows : 정렬된 row수
Sort_scan : 테이블 스캔에 의해 행해진 정렬수
Table_locks_immediate : 즉시 획득된 테이블 lock 시간 (3.23.33부터 추가된 항목)
Table_locks_waited : 즉시 획득되지 않고 기다림이 필요한 테이블 lock 시간. 이것이 높아지면 성능에 문제가 있으므로, 먼저 쿼리를 최적화 시키고, 테이블을 분산시키거나 복제를 사용해야 한다. (3.23.33부터 추가된 항목)
Threads_cached : 스레드 캐시에서 쓰레드 수
Threads_connected : 현재 오픈된 연결수
Threads_created : 연결을 다루기위해 생성된 쓰레드 수
Threads_running : sleeping하지 않는 쓰레드 수
Uptime : 서버가 스타트된 후로 지금까지의 시간

'tip > APM' 카테고리의 다른 글

[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
php.ini 환경설정  (0) 2008/07/01
httpd.conf 설정  (0) 2008/07/01
mysql 에서 현재 status 확인 하기  (0) 2008/07/01
mysql 내용 덤프 및 백업  (0) 2008/07/01
tar압축풀기 & tar압축하기  (0) 2008/06/24
TAG MYSQL, status
Posted by 根™
2008/07/01 17:24

mysql 내용 덤프 및 백업 tip/APM2008/07/01 17:24

데이터 베이스를 운영하는 사람이라면 누구나 한번쯤은 고민하게 되는 것에 데이터 베이스 덤프 및 백업이다.
어찌 보면 당연한 것이 백업인데, 막상 운영해보면 맘이 몸같지 않으지라 걱정이 되는데 같이 한번 간단히 해결해 보자.

[목차]

1. mysqldump 사용법
2. mysqldump를 이용하여 화일로 백업하기
2.1 한개의 테이블 덤프하기
2.2 한개의 데이터 베이스 덤프하기
2.3 전체 데이터 베이스 덤프하기
2.4 덤프한거 다시 mysql 에 넣는 방법
3. 복사를 이용한 백업

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

1. mysqldump 사용법

Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]

2. mysqldump를 이용하여 화일로 백업하기

2.1 한개의 테이블 덤프하기
root]mysqldump -uroot -p 데이터베이스이름 덤프를원하는테이블이름 > 덤프할이름.sql
이렇게 하면 덤프가 됩니다.
그렴 현재의 디렉토리에 [덤프할이름.sql]
가생성됩니다.

2.2 한개의 데이터 베이스 덤프하기
root]mysqldump -uroot -p 데이터베이스이름 > 덤프할이름.sql

2.3 전체 데이터 베이스 덤프하기
root]mysqldump -uroot -p --all-databases > 덤프할이름.sql

2.4 덤프한거 다시 mysql 에 넣는 방법
root]mysql -uroot -p 넣고싶은DB이름 < 덤프된이름.sql

3. 복사를 이용한 백업

mysql이 이는 디렉토리가 data/DB이름 이면 다음과 같이하면 됩니다.
tar -cf mysql_backup.tar /data/*
gzip mysql_backup.tar
cp mysql_backup.tar.gz /백업을 원하는 디렉토리

복구는 간단합니다.
tar -zxvf mysql_backup.tar.gz 하시면 됩니다.

'tip > APM' 카테고리의 다른 글

[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
php.ini 환경설정  (0) 2008/07/01
httpd.conf 설정  (0) 2008/07/01
mysql 에서 현재 status 확인 하기  (0) 2008/07/01
mysql 내용 덤프 및 백업  (0) 2008/07/01
tar압축풀기 & tar압축하기  (0) 2008/06/24
Posted by 根™
2008/06/24 14:10

tar압축풀기 & tar압축하기 tip/APM2008/06/24 14:10

압축 하기

tar cvf data_home.tar /data_home


풀기

tar xvf data_home.tar

'tip > APM' 카테고리의 다른 글

[DNS] 2차 도메인 설정하기  (0) 2008/07/01
[DNS] 추가 도메인 설정하기  (0) 2008/07/01
[DNS] 네임서버 설정 검사하기  (0) 2008/07/01
tar명령 사용법  (0) 2008/07/01
sshd_config 환경설정  (0) 2008/07/01
vsftpd.conf 환경설정  (0) 2008/07/01
php.ini 환경설정  (0) 2008/07/01
httpd.conf 설정  (0) 2008/07/01
mysql 에서 현재 status 확인 하기  (0) 2008/07/01
mysql 내용 덤프 및 백업  (0) 2008/07/01
tar압축풀기 & tar압축하기  (0) 2008/06/24
Posted by 根™