'팁&테크/Linux'에 해당되는 글 69건

  1. 2012.02.08 리눅스 설치시 처리해야 되는 작업
  2. 2012.02.06 리눅스 파일 인코딩 변경(iconv)
  3. 2012.02.02 MySql DB 별 백업 쉘스크립트(메모)
  4. 2012.02.02 웹계정 증분 백업 쉘 스크립트(메모)
  5. 2012.01.09 favicon.ico & MaSiteInfo.ini error_log 처리 방법
  6. 2011.12.22 YUM Centos 5버젼 daum repo
  7. 2011.12.08 /etc/sysconfig/iptables 내용(메모)
  8. 2011.11.07 httpd.conf 디렉토리 권한설정 옵션 설명
  9. 2011.11.07 특정 디렉토리에 php 실행 끄기
  10. 2011.08.18 Nginx 서비스에 등록
2012. 2. 8. 11:11

리눅스 설치시 처리해야 되는 작업


1. 원격 SSH로 ROOT 원격접속 금지
/etc/ssh/sshd_config
PermitRootLogin no

2. YUM 사용시 가장 빠른 미러사이트로 연결해주는 플러그인 설치
- 네트웍으로 충분히 빠른 미러로 설치했을 경우 안하는게 나음

Cent OS 4.X 
yum install yum-plugin-fastestmirror -y

Cent OS 5.X
yum install yum-fastestmirror -y

3. 최신 RPM으로 업데이트
yum -y update

4. 포트열기
/etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp --dport 포트번호 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m multiport --dport  포트,포트,포트  -j ACCEPT

4-1. 80포트는 접속트래킹 제외
/etc/sysconfig/iptables  
# *fileter 위에 추가 해줌 
*raw
-A PREROUTING -p tcp --dport 80 -j NOTRACK
-A OUTPUT -p tcp --sport 80 -j NOTRACK
COMMIT
# 80포트는 상태 옵션을 빼고 설정함 
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT 


5. VSFTPD 상위 이동 막기, anonymous 막기, 버젼노출 막기,시스템 시간 사용
/etc/vsftpd/vsftpd.conf
chroot_local_user=YES
anonymous_enable=NO
ftpd_banner=접속시 출력 메세지
use_localtime=YES
write_enable=YES

6. SSH 특정 아이피만 접속 가능하게 하기
tcp wrapper 만으로는 불안함 iptable 로 바꿈
/etc/hosts.deny

sshd : ALL
/etc/hosts.allow
sshd : 아이피 : ALLOW -> 아이피 형식은 특정대역을 원하면 222.222.222. 까지만 입력하면 뒷쪽 대역 포함됨

 
/etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -s 
허용할IP  -m tcp --dport 포트번호 -j ACCEPT  
아이피는 192.168.0.100 과 같은 단독 IP 및  192.168.0.0/24 과 CLASS로 설정가능

-A INPUT -p tcp -m state --state NEW -s  허용할IP -m multiport --dport 20,21,22 -j ACCEPT
위 같이 여러개 포트로도 설정가능  

-A INPUT -p all -m iprange --src-range 113.120.0.0-113.127.255.255 -j DROP
아이피 대역으로 차단시

7. ROOT로 오는 메일을 다른 계정으로 가도록 변경
/etc/aliases
root: 계정명 #root로 오는 메일이 전부 지정한 계정으로 감

8. Cron 데몬이 root로 메일 보내는거 막기
/etc/crontab
MAILTO=root -> MAILTO="" 로 변경
service crond restart #크론탭 재시작

9. Logwatch가 발송하는 메일 변경(필요없으면 안해도..)
/etc/cron.daily/0logwatch -> /usr/share/logwatch/scripts/logwatch.pl
$Config{'mailto'} = "root"; -> 사용하는 계정이나 메일로 바꿈

10. php mail 함수 사용시 헤더에 정의된 return-path 적용하기
/etc/php.ini -> rpm 설치시 경로
sendmail_path = /usr/sbin/sendmail -t -i -ba -> -ba 추가

11. SSH 한글설정
/etc/sysconfig/i18n -> 수정
<<EUC-KR로 접속시 : 시스템상 환경파일등이 UTF-8로 저장되므로 UTF-8설정을 추천함>>
LANG="ko_KR.eucKR" 
SUPPORTED="en_US.iso885915:en_US:en:ko_KR.eucKR:ko_KR:ko"
SYSFONT="latarcyrheb-sun16"
<<UTF-8로 접속시>> 
LANG="ko_KR.UTF-8" 
SUPPORTED="en_US.iso885915:en_US:en:ko_KR.UTF-8:ko_KR:ko"
SYSFONT="latarcyrheb-sun16"
않될경우 아래 패키지도 설치 
yum install kde-i18n-Korean
yum install fonts-korean

12. 아파치 access_log에 불필요 기록 안남기기
/etc/httpd/conf/httpd.conf -> 수정(yum 설치시)
SetEnvIfNoCase Request_URI "\.(gif|jpg|png|js|css|swf)$" do_not_log
CustomLog logs/access.log combined env=!do_not_log

13. fail2ban 모듈 설치
http://wyseburn.tistory.com/175 

14. 시간동기화
00 03 * * * rdate -s zero.bora.net | hwclock -w >& /dev/null
크론에 추가, 시간 및 time서버는 다른걸로 바꿔도 무관함 

15. 사용자 계정 기본 디렉토리 생성
mkdir /etc/skel/public_html

16. 관리자용 파일 퍼미션 변경
chmod 100 /usr/bin/top
chmod 100 /usr/bin/pstree
chmod 100 /usr/bin/w
chmod 100 /bin/ps
chmod 100 /usr/bin/who
chmod 100 /usr/bin/find
chmod 100 /bin/df
chmod 100 /bin/netstat
chmod 100 /sbin/ifconfig
chmod 100 /usr/sbin/lsof
chmod 100 /usr/bin/make
chmod 100 /usr/bin/gcc
chmod 100 /usr/bin/g++
chmod 100 /usr/bin/c++
chmod 100 /usr/bin/perl 
chmod 100 /usr/bin/python

17. APM소스 설치 시 서비스로 등록
http://wyseburn.tistory.com/231 


18. /etc/security/limits.conf 내용변경

Centos 6.x 버젼부터 기본으로 max user processes 수가 1024로 제한됩니다.
그래서 사용자 프로세서들의 수가 1024가 되면 mysqld, httpd 등에 따로 프로세스의 수가 정의되 있다고 하더라도 더 이상 늘어나지 않게됩니다.

/etc/security/limits.conf 파일을 열어 아래와 같이 허용할 사용자 프로세스의 수를 적어 준후에 리부팅합니다.
열어줄 갯수는 서버의 가용리소스 등을 염두해서 갯수를 지정합니다. 아니면 unlimited 라고 해두면 커널에서 허용한 최대갯수까지 늘어나므로 
unlimited 로 해도 됨 

(주의 : nofile 을 unlimited 로 할경우 PAM쪽에 문제가 생겨서 접속 안되니 unlimited 로 하지 말것)

그리고 open file 갯수가 기본으로 1024로 되있어서 프로세스가 늘어나도 해당 프로세서가 파일을 사용해야 한다면(DB나 HTTP) 문제가 발생하니 open file 갯수도 늘려줘야 함

*    -    nproc    unlimited
*    -    nofile    409600

관련 명령 : ulimit 

19. file descriptor 허용 갯수 변경

Too many open file... 과 같은 에러가 난다면 더 늘려주자.
nofile 와도 연관이 있는데 fd 의 갯수를 nofile보다 크게 잡아줘야 한다. (기본으로 더 크게 되있음)

nofiles 에 갯수를 조정할때 참고 하면 된다.

확인 : 
# sysctl -a | grep file

file-max 는 허용된 file descriptor 갯수
file-nr 은 현재 열려진 file descriptor 갯수이다.

변경 : 
# vi /etc/sysctl.conf
fs.file-max = 500000

적용 :
#sysctl -p




2012. 2. 6. 18:19

리눅스 파일 인코딩 변경(iconv)

리눅스는 기본적으로 UTF-8 인코딩을 사용하는데 EUC-KR(CP949)등을 사용하는 설정파일들을 보면 깨진다.

그래서 한글을 EUC-KR로 사용할 필요가 없는 설정파일들은 그냥 UTF-8로 변환해서 주석등을 관리하는게 보기가 좋다.

EUC-KR -> UTF-8 파일 인코딩 변경

iconv -c -f euc-kr -t utf-8 euckr.txt > utf8.txt

파일명이 EUC-KR인 경우 convmv를 이용해서 파일명을 변경

convmv -f euc-kr -t utf-8 --notest 한글.txt

2012. 2. 2. 10:37

MySql DB 별 백업 쉘스크립트(메모)

매일 디렉토리 생성 후 데이타베이스별로 백업 후 압축
15일이 지난 백업분 제거

#!/bin/sh

DBHOST="호스트"
DBUSER="계정"
DBPWD="비번"

BACKUPDIR="/root/backup/"
OPTIONS="--skip-comments --default-character-set=utf8 --routines --single-transaction --quick"

DATE=`date +%Y%m%d`
DELDATE=`date --date "15 day ago" +%Y%m%d`

rm -rf ${BACKUPDIR}${DELDATE}
mkdir ${BACKUPDIR}${DATE}

RESULT=`/usr/local/mysql/bin/mysql -u$DBUSER -p$DBPWD -h$DBHOST -e "show databases" | grep -v Database`

for DB in $RESULT; do

  FNAME=${BACKUPDIR}${DATE}/${DB}${DATE}.sql
  /usr/local/mysql/bin/mysqldump -u$DBUSER -p$DBPWD -h$DBHOST $OPTIONS $DB >> $FNAME
  echo "set foreign_key_checks=1;" >> $FNAME
  gzip --rsyncable $FNAME

done
2012. 2. 2. 10:34

웹계정 증분 백업 쉘 스크립트(메모)

웹계정에서 MVC 형태로 구성되 있는 웹 계정의 증분 백업
엄밀히 말하면 모델+컨트롤러+뷰(html), 뷰(img,css,js등), 첨부파일 의 개별 백업임
월별로 백업(1일 전체, 1일 이후 증분방식), 62일이 지난 백업 디렉토리 삭제

#!/bin/sh

DATE=$(date +%Y%m%d)
YY=$(date +%Y)
MM=$(date +%m)
DD=$(date +%d)

BACKUPSRC="/home/test/public_html"
BACKUPDST="/restore/backup/"$YY$MM

mkdir $BACKUPDST
touch $BACKUPDST'/'_snapshot.list
touch $BACKUPDST'/'_snapshot_data.list
touch $BACKUPDST'/'_snapshot_public.list

tar -g $BACKUPDST'/'_snapshot.list -czf $BACKUPDST'/'test_$DATE.tar.gz $BACKUPSRC --exclude=$BACKUPSRC'/'data --exclude=$BACKUPSRC'/'public
tar -g $BACKUPDST'/'_snapshot_data.list -czf $BACKUPDST'/'test_data_$DATE.tar.gz $BACKUPSRC'/'data
tar -g $BACKUPDST'/'_snapshot_public.list -czf $BACKUPDST'/'test_public_$DATE.tar.gz $BACKUPSRC'/'public

find /restore/backup -type d -mtime +62 -exec rm -rf {} \;
2012. 1. 9. 19:03

favicon.ico & MaSiteInfo.ini error_log 처리 방법


httpd.conf 에 아래 내용 추가

# Don't bother looking for favicon.ico & MaSiteInfo.ini

Redirect 404 /favicon.ico

Redirect 404 /MarkAny/Websafer/MaSiteInfo.ini

 

# Don't bother sending the custom error page for favicon.ico & MaSiteInfo.ini

<Location /favicon.ico>

    ErrorDocument 404 "No favicon"

</Location>

<Location /MarkAny/Websafer/MaSiteInfo.ini>

    ErrorDocument 404 "No MaSiteInfo"

</Location>

2011. 12. 22. 14:42

YUM Centos 5버젼 daum repo


[base]
name=CentOS-$releasever - Base
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
baseurl=http://ftp.daum.net/centos/$releasever/os/$basearch/
gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-5 

#released updates
[updates]
name=CentOS-$releasever - Updates
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
baseurl=http://ftp.daum.net/centos/$releasever/updates/$basearch/
gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-5 

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras
baseurl=http://ftp.daum.net/centos/$releasever/extras/$basearch/
gpgcheck=1
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-5 

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus
baseurl=http://ftp.daum.net/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-5 

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
#mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib
baseurl=http://ftp.daum.net/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-5
gpgkey=http://ftp.daum.net/centos/RPM-GPG-KEY-CentOS-5 
2011. 12. 8. 09:27

/etc/sysconfig/iptables 내용(메모)

# Generated by iptables-save v1.3.5 on Fri Nov 11 10:44:22 2011
*raw
-A PREROUTING -p tcp --dport 80 -j NOTRACK
-A OUTPUT -p tcp --sport 80 -j NOTRACK
COMMIT 
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16:3316]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -s 아이피 -m multiport --dport 20,21,22,873 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -s ???.???.???.0/24 -m multiport --dport 20,21,22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Fri Nov 11 10:44:22 2011
2011. 11. 7. 16:31

httpd.conf 디렉토리 권한설정 옵션 설명

#AllowOverride 설명
AllowOverride는 클라이언트의 디렉토리 접근 제어에 관한 설정이다. 
AllowOverride 는 AccessFileName(보통 .htaccess)파일 지시자와 밀접한 관계를 가지고 있다. 

아래의 각 설정값들은 AccessFileName 지시자에서 설정한 파일에 적용된다.
None : AllowOverride를 off 한다는 것이다. 
All : AccessFileName 지시자로 설정한 파일에 대해 민감하게 반응한다. 모든 지시자를 사용할 수 있다.
AuthConfig : AccessFileName 지시자에 명시한 파일에 대해서 사용자 인증 지시자 사용을 허락한다.
--> AuthDBMGroupFile, AuthDBMUserFile, AuthGroupFile, AuthName, AuthType, AuthUserFile, require등을 사용할 수 있다. 
FileInfo : AccessFileName 지시자로 설정한 파일에 대해서 문서 유형을 제어하는 지시자 사용을 허락한다.
--> AddEncoding, AddLanguage, AddType, DefaultType, ErrorDocument, LanguagePriority등을 사용할 수 있다.
Indexes : AccessFileName 지시자로 설정한 파일에 대해서 디렉토리 Indexing을 제어하는 지시자 사용을 허락한다.
--> AddDescription, AddIcon, AddIconByEncoding, AddIconByType, DefaultIcon, DirectoryIndex, FancyIndexing, HeaderName, IndexIgnore, IndexOpions, ReadmeName등을 사용할 수 있다.
Limit : AccessFileName 지시자로 설정한 파일에 대해서 호스트 접근을 제어하는 지시자 사용을 허락한다. 
--> Allow, Deny, order 등을 사용할 수 있다.
Options : AccessFileName 지시자에 명시한 파일에 대해서 Options 그리고 XBiHack 등과 같은 지시자 사용을 허락한다.
--> Options, XBitHack, php_flag, php_value 등을 사용할 수 있다.


#Options(옵션) 설명 ;
옵션 구문은 Options 라는 키워드로 시작된다.
FollowSymLinks : 실볼릭 링크를 허용한다.
SymLinksIfOwnerMatch : 링크를 허용하지만 링크 하고자 하는 사용자의 소유로 되어 있는 것만 링크 가능하다.
ExecCGI : CGI 실행을 허용한다.
Includes : SSI를 허용한다.
IncludesNOEXEC : SSI를 허용하지만 "#exec" 와 "#include"로 정의한 CGI 실행은 거부한다.
Indexes : 웹 서버의 디렉토리에 접근 했을 때 DirectoryIndex 지시자로 설정한 파일이 없을 경우 디렉토리안의 파일 목록을 보여준다.
MultiViews : 클라이언트의 요청에 따라 적절하게 페이지를 보여준다. 쉽게 생각하면 HTTP 헤더 정보가 Accept-Language:ko 라면 Korea 언어에 맞게 데이터를 클라이언트에 전송한다.
None : 모든 설정을 사용하지 않는다.
All : MultiViews를 제외한 옵션을 의미한다. 


2011. 11. 7. 15:39

특정 디렉토리에 php 실행 끄기

httpd.conf를 이용하는 방법
 <DirectoryMatch "/home/userid/public_html/bbs/data/">
    AddType application/x-httpd-php3-source .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs .ins .php4
    AddType application/x-httpd-php-source .phps .php .ph .php3 .cgi .sh .pl .html .htm .shtml .vbs .ins .php4
    <Files ~ ".*\.ph$">
      Order allow,deny
      Deny from all
    </Files>
</DirectoryMatch>

디렉토리의 .htaccess를 이용하는 방법(단 httpd.conf 에 AllowOverride Options 옵션이 설정되어 있어야함) 
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>
<IfModule mod_php4.c>
  php_flag engine off
</IfModule>
/data/.htaccess 와 같이 업로드 했다면 /data 폴더를 포함한 하위 폴더 전체에 php 실행이 금지 된다.
 
2011. 8. 18. 12:50

Nginx 서비스에 등록

소스 컴파일로 설치하면 아무래도 시작과 종료가 좀 귀찮다. 그래서 서비스에 등록해서 일반적인 서비스의 시작,종료 명령으로 처리되도록 해보자.
서비스의 사작,종료와 관련된 쉘 스크립트는 /etc/rc.d/init.d 에 모두 모여 있다.

1. 서비스 쉘스크립트 설치
첨부된 쉘스크립트 

를 /etc/rc.d/init.d 로 복사한다.
참 모든 경로는 소스설치 기준인 /usr/local/nginx 로 설정되어 있다.그리고 이 스크립트는 yum으로 설치한 0.8버전에서 경로만 수정한 것이다. 

2. 서비스 등록
chkconfig --add nginx 명령을 이용해서 nginx를 서비스에 추가한다.
시작레벨은 chkconfig --level 3 nginx on 으로 하거나 ntsysv를 통해 자동 시작되도록 설정한다.

3. 사용
service nginx start | stop | restart | reload 명령을 마음껏 사용하자.