카테고리 Archives: Server engineering

mysql sleep 자동 킬 스크립트

음 php 프로그래머의 실수에 따라 DB사용을 하지 않으나 장시간 sleep이 나는 경우가 있다.

뭐 프로그램 짜다보면 그럴수 있을것이다 =3=a

  •  프로그램이 mysql_pconnect 을 사용하거나 (apache keepalive 시간 동안 접속을 대기 탈 것이다.)
  • mysql 접속후 mysql.close()를 안했거나
  • 로그테이블 등의 크기가 커져서 lock 걸리는 시간이 증가하면 다른 접속자 로그를 쓰기 위해 wait 가 걸리기 때문에 mysql 커넥션이 과도하게 증가하기도 함..
  • 서버 사양 대비 동시접속자수가 많거나…

서버 관리자 입장에서는 서버 메모리에 부담을 주고 sleep 프로세스의 과다 접속에 의해 my.cnf에서 설정된

max connctions 값 에 의해 추가 신규 접속이 불가능한 상황을 방지 해야 한다.

그리하여 이러한 스크립트를 만들었습니다 🙂 – (mysql.close()가 제대로 되지 않는 경우를 상정.)

all_user_target 값을 Y로 해두면 모든 계정에 대해 kill을 수행합니다만.

ssh 접속해서 mysql 작업하면서 장시간 가만히 있으면 강제적으로 프로세스 종료 까지 될수 있습니다.

그래서 all_user_target=”N” 으로 하고 문제시 되는 계정만 target_id 에 설정하여 운용하도록 합니다. ‘ㅅ’a

 

PS. pconnect 를 사용하면 일반 connect 으로 사용하도록 유도 하고, log 테이블이 커졋다면 일정부분 날려서 정리를 해야 할꺼고 사양이 부족하다면 사양 업그레이드를 하거나 DB query cache 를 구현 하는 방법으로 해결 해야 할꺼 같다 ‘ ‘a 이 스크립트는 임시 방편일 뿐이다.

 

TLS통신을 위한 Public Certificate 발급&갱신

dovecot, sendmail, proftpd, pure-ftpd 를 위한 개인인증서 발급 혹은 갱신용 스크립트 이다.

스크립트 설명 :  sendmail.pem 인증서의 만료일 2주 미만으로 남았거나 인증서가 없으면 생성해준다.

cron 에 등록하여 일주일에 한번 정도씩 돌려주면 개인인증서 갱신 걱정 없이 사용할 수 있겠다.

vi /etc/cron.weekly/public_cert_make.sh 이런 위치에 넣어두면 일주일에 한번씩 돈다 ‘ㅅ’a

chmod 700 /etc/cron.weekly/public_cert_make.sh 해둬야 돈다 . 잊지 말자.

 

아래 설정값은 플레인 로그인을 막는 설정이 아니다.

LOGIN PLAIN, TLS 둘다 활성화 하는 옵션들 이다.

1. dovecot – STARTTLS 설정( /etc/dovecot/conf.d/10-ssl.conf )

평문 패스워드 막는건 /etc/dovecot/conf.d/10-auth.conf  파일의 disable_plaintext_auth 옵션이다.

 

2. sendmail – STARTTLS 설정( /etc/mail/sendmail.mc )

confAUTH_OPTIONS 는 주석 처리 해버린다 ‘ㅅ’a

평문 패스워드 막는건 define(confAUTH_OPTIONS', A p’)dnl 이렇게 주석 제거 하고 하면 된다.

( TLS연결 테스트 :  https://starttls.info  ) 혹은 아래 명령어.

 

 

3. proftpd – FTP over TLS 설정( /etc/proftpd.conf )

평문 패스워드 막는건 TLSRequired 값을 on 으로 하면 된다.

 

4. pure-ftpd – FTP over TLS 설정( /etc/pure-ftpd/pure-ftpd.conf )

평문 패스워드 막는건 TLS 값을 2 으로 하면 된다.

 

pure-ftpd 설치 및 설정(centos6)

1. pure-ftpd 다운로드 : http://download.pureftpd.org/pub/pure-ftpd/releases/

 

2. 압축 해제, 컴파일 및 selinux 끄기

 

3. /etc/pam.d/ftp 설정

 

4. TLS 통신 활성화를 위한 퍼블릭키 생성.

 

5. /etc/pure-ftpd/pure-ftpd.conf 설정

36번째줄 설정은 서버 인코딩셋에 따라 euckr 으로 지정해야 할수 있다.

echo $LANG 로 서버 인코딩셋을 확인하거나 /etc/stsconfig/i18n 을 확인하거나 수정 후에 맞추어 준다.

 

6. pure-ftpd 명령어 생성

 

7. 데몬 시작 및 chkconfig 등록.

yum을 이용한 proftpd 설치 및 설정 (centos6)

1. yum 설치 및 selinux 끄기.

 

2. /etc/pam.d/proftpd 설정

 

3. TLS 통신 활성화를 위한 퍼블릭키 생성.

 

4. /etc/proftpd.conf 설정.

37번째줄 설정은 서버 인코딩셋에 따라 euckr cp949 으로 지정해야 할수 있다.

echo $LANG 로 서버 인코딩셋을 확인하거나 /etc/stsconfig/i18n 을 확인하거나 수정 후에 맞추어 준다.

설정은 system-auth 를 이용한 인증제 이며 FTP 및 FTP over TLS 을 지원, 최대 접속자수 30명, 한개의 IP에서 5개 동시접속 허용값이다.

umask 는 022 로 필요에 따라(아파치 보안정책) 027 등으로 교체해서 사용한다.

 

5. 데몬 시작 및 chkconfig 등록.

history 로그를 남기자 ‘ㅅ’a (history_to_syslog)

서버 접속에서 삽질하는 애들중에 history 로그를 날리고 나가는 애들이 있어서..

/etc/profile.d/ 안에 파일을 만들어서 쓰는 커멘드를 /var/log/messages 로그에 남기 도록 한다.

보기 좋게 출력을 하도록 약간 수정을 하였다 ‘ㅅ’a

로그는 아래와 같이 찍힌다.

슈퍼유져(root) 권한을 획득한 유져(userA)의 로그

일반 유져(userB)의 로그

 

who, sed, awk, logger 명령어가 사용자에게 실행(755)권한이 있어야 한다.