하면 된다!!!

root 유저로 ssh 접근 제어 해야할 때

프로그래밍/기타

ssh를 이용해서 외부 접근을 하는 경우에 root 유저로 붙을 수 있게 되면 아무래도 보안상 위험하겠지요.

원격으로 해킹 시도가 상당히 발생할 수 있습니다.


이에 따라서 root 유저는 통상적으로 ssh 접근을 못하도록 하고, 일반 유저로 접근해서 su 또는 sudo를 이용해서 접근하도록 제어합니다.


$ sudo vi /etc/ssh/sshd_config

PermitRootLogin yes    << yes : 접근, no : 접근 안됨


$ sudo systemctl restart sshd  << sshd 서비스 재기동 (centos의 경우)


접속을 시도해보시면... 로그인이 안되도록 변경됩니다.



CentOS - SVN 설치시 에러

프로그래밍/기타

CentOS에 svnserve를 설치하다가...


이 사이트 참고 했음 : http://b1ix.net/290


설명이 매우 잘 되어있어서 따라하면 땡...


다만 중간 부분에 나와있는 이 부분!!!


[root@localhost checkout1]# svn checkout svn://localhost/svn_repos svn: E000013: Unable to connect to a repository at URL 'svn://localhost/svn_repos' svn: E000013: file '/home/svn/svn_repos/format' 를 열 수 없습니다: 허가 거부


이에 대한 해결책이 필요했다.

위의 에러는 selinux가 보안상 막고 있어서 발생하는 것이 맞다.


이를 해결 하기 위해서는... repository 타깃이 되는 폴더명을 뒤에 써준다.


$ chcon -R -t svnserve_content_t /home/svn/svn_repos


이렇게 해주면 된다.

selinux를 그냥 disabled 시켜 버리면 보안에 구멍이~!!!


Linux 프로세스 관리 쉘

프로그래밍/기타

###################################


1. 특정 프로세스를 찾아서 죽이기


#!/bin/bash

ps -ef | grep -v grep | grep 프로세스명 | awk '{print $2}' | xargs --no-run-if-empty kill -9 $1



###################################


2. 특정 프로세스가 살아있는지 체크해서 죽어있으면 살리는 쉘


$ vi /var/test/run.sh


#!/bin/bash

PROCESS_CNT=`ps -ef | grep 프로세스명 | grep -v grep | awk '{print $2}' | wc -l`

if [ "$PROCESS_CNT" == 0 ];

then

    echo "[`/bin/date +\%Y\%m\%d_\%H\%M\%S`] Process : Dead!!"

    실행시킬_프로세스명

else

    echo "[`/bin/date +\%Y\%m\%d_\%H\%M\%S`] Process : Alive!!"

    exit 0

fi


위와 같은 쉘을 하나 만들어두고 crontab 에 1분에 한번씩 돌게 해주면 1분에 1회씩 프로세스가 살아있는지 체크하고 죽어있으면 실행 시키도록 할 수 있다.


$ crontab -e

* * * * * /var/test/run.sh >> /var/test/proc_mon.log


$ tail -f /var/test/proc_mon.log

1분에 1회씩 로그가 쌓이는 것을 확인할 수 있습니다.



SSH 접속 세션 시간 조정

프로그래밍/기타

SSH 접속이 자주 끊겨서 고생하는 경우들이 있는데... 그에 대한 해결책을 간단히 노트해둔다.

  1. SSH 클라이언트 접속 시간 조정
    • sudo vi /etc/ssh/ssh_config
    • # otehr configs 부분에 아래 내용을 주석 해제하고 숫자값을 정해준다.
      ServerAliveInterval 100

  2.  SSHD 서버에서의 접속 시간 조정
    • sudo vi /etc/ssh/sshd_config
    • 아래와 같이 주석 해제하고 값을 지정해주시면 됩니다.
      ClientAliveInterval 600
      TCPKeepAlive yes
      ClientAliveCountMax 10
    • SSHD 서버 재기동이 필요합니다.
      $ sudo service ssh restart


Jenkins 포스트 쉘 스크립트 권한 관련 문제

프로그래밍/Java

리눅스 장비에 jenkins 를 설치하고나서 배포를 하다가 포스트 쉘 스크립트를 넣었다가 권한 문제로 에러를 여러차례 겪었는데...


jenkins는 jenkins 유저를 사용하고 있기 때문에 사용하려는 쉘에 접근하기 위해서는 권한이 필요했다.


이를 해결하기 위해서 jenkins 유저에 sudo 권한을 주고 포스트 쉘 쪽에는 sudo /path/to/abcd.sh 이렇게 처리를 해보는 것으로...


우선 sudoers에 유저와 권한을 넣어줘야 한다.


$ vi /etc/sudoers

# User_Alias ADMINS = jsmith, mikem << 요런 라인이 있는데 이 라인 아래에다가...


jenkins ALL=(ALL) NOPASSWD: ALL


이렇게 추가해준다.

NOPASSWD 라고 해주면 sudo 명령을 내리더라도 비번을 별도로 묻지 않게 됩니다.


물론 이렇게 셋팅을 하게 되면 sudo 커맨드를 이용해서 루트 권한으로 모든 커맨드를 실행할 수 있으니 문제가 있을 수 있다.

권한을 축소하려면 특정 경로나 파일을 지정해서 열어주는 것도 방법이다.


맨 뒤에 있는 ALL 을 대신해서 경로나 파일을 지정해주면 된다.


jenkins ALL=(ALL) NOPASSWD: /root/deployshell/


이런 식으로 해두게 되면 /root/deployshell/ 디렉토리 하단에 대한 권한을 지정해줄 수도 있다.


나이먹고 이런 삽질은 참 쉽지 않다. ㅠㅠ 어릴때 공부해뒀어야 하는데... 하는 생각뿐이다.


Raspberry PI 에 NginX 웹 서버, 톰캣 설치하기

마이 스토리/Raspberry PI 놀이

뭐 이 부분은 따로 설명한 부분도 아니다.

데비안 계열의 리눅스이기 때무네 apt-get 을 이용해서 원하는 패키지를 넣으면 설치가 된다


NGINX 설치하기

sudo apt-get install nginx


Tomcat 8 설치하기

sudo apt-get install tomcat8


설치하면 프로세스까지 자동으로 서비스까지 올라간다.


NginX와 Tomcat 연동은 뭐... 굳이 여기서 설명 필요 없을 것 같아서 생략~



리눅스에다가 나만의 SVN 셋팅하기

프로그래밍/기타

리눅스에다가 나만의 SVN 셋팅하기


어렵다고 생각했는데 해보니 쉽군요.

제가 일일이 정리하려다가... 검색하니 잘...정리하신 분이 계셔서 그냥 링크로 대신합니다.


CentOS 5.3에서 Subversion (SVN) 셋팅하기


http://ezgreg.tistory.com/40


좋은 정보 감사드립니다. ^^

Linux Find command 정리 자료 (펌)

프로그래밍/기타

원문 : http://coffeenix.net/board_view.php?cata_code=95&bd_code=36


제  목 : 유용한 find 명령어 예 모음
작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
작성일 : 수시로 추가했음

아래는 제가 자주 쓰는 find 명령인데, 유용할 듯 해서.
지금까지 적어뒀던 것과 아주 보편적이라고 생각되는 것입니다.
계속 추가됩니다. ^^

-------------------------------------------------------
1. 현재 디렉토리( . ) 이하에 확장자가 .html( -name "*.html" ) 인 파일만 ( -type -f )

find . -name "*.html" -type f -ls

2. 파일 크기

# 파일 크기가 300KB 이상( -size +300k )인 파일만 
# (호스팅되는 홈피내에 큰 사이트의 파일이 있는지 찾을 때 유용)
find . -size +300k -ls

# 파일 크기가 500bytes 이하( -size -500c )인 파일만  
find . -size -500c -ls 

3. 수정일

# 수정한지 20일 이상( -mtime +20 )된 파일과 디렉토리
find . -mtime +20 -ls 

# 수정한지 20일 이상된 파일만
find . -mtime +20 -type f -ls

# 수정한지 20일 이상된 파일만 삭제 ( -exec rm {} \; ) 
# (정기적으로 20일이 지난 파일을 삭제할 때 유용)
find . -mtime +20 -type f -ls -exec rm {} \;

# 수정한지 3일 이내( -mtime -3 )의 파일만 (백업할 때 유용)
find . -mtime -3 -type f -ls

# 수정한지 30분 이내( -mmin -30 )의 파일만
find . -mmin -30 -type f -ls

4. 퍼미션 및 파일 소유

# 파일시스템 전체( / )에서 SUID/SGID가 설정된 모든 파일 목록을 얻음
find / -type f \( -perm -04000 -o -perm -02000 \) -ls

# 소유자가 없는 파일 목록을 얻음 (사용자는 이미 삭제했는데, 파일이 남은 경우)
find / -nouser -o -nogroup

5. 출력 형식 지정

# 출력 형식을 printf로 만들어서 (출력 결과를 다른 프로그램에서 받아서 쓸 때 유용)
# %h = 경로, %f = 파일명, %k = KB, %s = Bytes

# 형식 : <경로/파일명> <파일크기KB>
find . -printf "%h/%f \t %kKB \n"
... 생략 ...
./public_html/phps/icon/type/pcx.gif      4KB
./public_html/phps/icon/type/ra.gif       4KB
./public_html/phps/icon/type/sound.gif    4KB
./public_html/phps/icon/type/text.gif     4KB

# 형식 : <경로/파일명> <파일크기Bytes>
find . -printf "%h/%f \t %sKB \n"
... 생략 ...
./public_html/phps/icon/type/movie.gif    912Bytes
./public_html/phps/icon/type/mp3.gif      958Bytes
./public_html/phps/icon/type/pcx.gif      897Bytes
./public_html/phps/icon/type/ra.gif       903Bytes
./public_html/phps/icon/type/sound.gif    932Bytes

6. 홈페이지 포팅할 때 퍼미션 안 맞는 경우 유용한 것

# 확장자가 .htm* .gif, .js, .css 인 것만 퍼미션을 644(rw-r--r--)로
find . -name "*.htm*" -o -name "*.gif" -o -name "*.js" -o -name "*.css" -exec chmod 644 {} \;

# 파일은 퍼미션을 644로
find . -type f -exec chmod 644 {} \;

# 디렉토리는 퍼미션을 701로
find . -type d -exec chmod 701 {} \;

# 하위의 모든 퍼미션을 바꾸지 않고 depth를 지정하여 제한을 둘 때
# 옵션 : -maxdepth 숫자  (1=현재디렉토리만, 2=현재디렉토리 포함하여 한단계 하위디렉토리까지만)
find . -maxdepth 1 -type d -exec chmod 701 {} \;

※ -maxdepth는 -type나 -perm 등의 조건연산자가 아닌 옵션이다. 
   따라서 조건연산자보다 먼저 사용해야한다. (다른 명령처럼 옵션을 먼저쓰는 것으로 이해하면 됨)
   find . -type -d -maxdepth 1 과 같이 사용하는 것은 옳지 않다.

리눅스에서 특정 IP 접속 차단하는 방법

프로그래밍/기타

LINUX에서 IP및 도메인 차단은 2가지를 사용합니다. route명령을 이용하는것과 iptables를 이용하는 방법이 있스빈다.차이가 있다면 route는 실행한 곧바로 적용되지만 iptables은 차단/해제 시마다
데몬을 재가동(서비스 재가동)시켜야 합니다. 이외에도 아파치나 다른 프로그램을 이용해 차단가능합니다.

둘다 수동적으로 한번씩 명령을 주어야 하는 나쁜점이 있으면 ip하나별로 입력가능합니다.
범위 지정이 불가능합니다.(x.x.x.x ~ x.x.x.x)

※ iptables는 네트워크 서비스이기때문에 재시작을 해줘야 적용됩니다.
route는 재시작을 안해도 되지만 route는 짧은 시간 간격으로 수시로 체크하기 때문입니다.

0.lokkit를 이용한 포트 차단

lokkit을 이용하면 gui방식으로 쉽게 방화벽 구성이 가능하다.
security level을 enabled로 놓고 customize에서 원하는 포트만 체크하여 open한다.


1.route를 이용한 ip/도메인 차단

route : rounting table을 설정한다.
route(라우팅 테이블 추가/삭제하기)
 
차단하기(리눅스)
route add -host 도메인(ip) reject
해제하기(리눅스)
route del -host 도메인(ip) reject
 
현재관리ip리스트보기(리눅스)
route
 
현재관리ip리스트보기(원도우)
route print
 
2. iptables 프로그램을 이용한 IP 차단
iptables는 Kernel 2.4.x 기반의 리눅스 설치시에 설치되며 /sbin 디렉토리 아래에 있다.
 
차단하기(리눅스)
 
iptables -A INPUT -s 211.255.32.38 -j DROP
//211.255.32.38 아이피는 서버에 접근할수 없다.
 
iptables -A INPUT -t filter -s 211.218.150.0/24 -j DROP
//211.218.150.0~255 까지 256개의 IP를 한꺼번에차단합니다.
 
※ 설정후 iptables 프로그램을 리스타트 하지 안해도 적용된다.
 
해제하기(리눅스)
 
iptables -A INPUT -s 211.255.32.38 -j ACCEPT
 
※ 이해가 안되는 부분이 A아이피를 차단한후 A아이피를 다시 해제해도 A아이피는 계속
차단된다. 왜그럴까?
※ 더웃긴건 A아이피를 해체한후 A아이피를 다시 차단해도 A아이피는 접속이 가능하다.
※ 그 이유는 iptables은 위에 있는 정책이 우선이기 때문이다.
 
3. iptables 프로그램으로 아이피 대역대 차단하는 방법
http://whois.apnic.net 에서 아이피찍어보시면 할당된 아이피대역이 나옵니다.
222.51.178.135 는 222.32.0.0 - 222.63.255.255 이렇게 할당되어 있는데
아랫쪽에 친절하게 route: 222.32.0.0/11 라고 알려주네요.
/sbin/iptables -A INPUT -s 222.32.0.0/11 -j DROP
쉘상에서 이렇게 입력하시면
222.51.178.0 ~ 222.51.178.255 아이피대역은 아예 차단시켜버립니다.
현재관리ip리스트보기(리눅스)
 
iptables -L
//# 현재 차단하거나 허용된 아이피 리스트가 나온다.
iptables -F
//# 현재 차단하거나 허용된 아이피 리스트를 모두 지우고 초기화 한다.
 
IP를 차단하는 방법의 단점 :
 
접속시도를 하는 IP가 많을 경우에는 관리가 복잡해 질 수 있습니다.
또는 꼭 접속해야 하는 IP가 막히는 상황이 발생할 수도 있습니다.

필요해서 검색해보앗더니... 나와서 퍼다 넣습니당.

원문 : http://www.zetblog.net/?0021360097