'팁&테크/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 서비스에 등록

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


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 명령을 마음껏 사용하자.