반응형

쉘 스크립트를 사용하다보면 스크립트 중간에 그 다음 로직으로 넘어가기전 특정 시간동안 멈추고 싶을 경우가 있다.


그럴 경우 다음과 같이 원하는 시간만큼 간편히 sleep 시킬 수 있다.


[ shell script 간편 sleep 포맷 ]

sleep .5 # Waits 0.5 second.

sleep 5  # Waits 5 seconds.

sleep 5s # Waits 5 seconds.

sleep 5m # Waits 5 minutes.

sleep 5h # Waits 5 hours.

sleep 5d # Waits 5 days.


반응형
반응형

특정 포트의 프로세스를 죽이고 싶을 때 사용


특정 포트를 사용하는 프로세스를 찾고 싶을 때

lsof (list open file)을 나타내며, 

시스템에서 열린 파일 목록을 알려주고 사용하는 프로세스, 디바이스 정보, 파일의 종류등 상세한 정보를 출력해준다.

lsof -n -i4TCP:8080(원하는 port)


lsof 명령이 안먹힌다면 netstat

netstat -anp | grep LISTEN | grep :포트번호

> tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 2542/java


뒤에 2542가 프로세스ID이다.



[ lsof 실행결과 ]

COMMAND  PID   USER   FD   TYPE    DEVICE SIZE/OFF NODE NAME

java    6079 irteam   70r  IPv6 197862007      0t0  TCP 172.20.0.5:webcache->10.161.240.88:35522 (ESTABLISHED)


PID를 찾아서


kill -9 PID(6079)


생각보다 서버운영시 필요할때가 많기 때문에 되도록이면 외우도록 하자~!

반응형
반응형

리눅스(Linux) 페이지 캐시


리눅스는 파일 I/O의 성능 향상을 위해 페이지 캐시라는 메모리 영역을 만들어서 사용한다.


한 번 읽은 파일의 내용을 페이지 캐시라는 영역에 저장 시켜 놨다가 다시 한 번 동일한 파일 접근이 일어나면 디스크에서 


읽지 않고 페이지 캐시에서 읽어서 제공해 주는 방식.


free -k 명령으로 파일을 읽기전 cached 영역과 cat으로 파일을 읽은 후 free -k 명령으로 확인해 볼 수 있다.



반응형
반응형

vi 로 파일을 열었을 때 파일의 마지막 줄이 개행문자로 끝나지 않았을  경우 콘솔 하단에 파일이름 옆 [noeol]이라고 적혀있는 것을 볼 수 있다.


해당 문제를 해결하기 위해서 다음 명령어를 실행해준다.


echo "" >> fileName




반응형
반응형


리눅스 소유자/그룹 변경 root 에서 irteam 으로~!소유자가 root일 경우에는 일반 계정으로 해당 스크립트 수정이 안되거나 빌드시 해당 스크립트에 접근이 안되는 문제가 있다. 따라서 톰캣, 아파치 등 설치할 때 sudo 계정이 아닌 일반 계정으로 설치하는 것이 좋다.

부득이하게 sudo 권한으로 설치를 했다면 다음과 같은 명령어로 권한 변경

sudo chown -R[옵션] [소유자:소유그룹] [디렉토리 or 파일명]> -R : 하위 디렉토리/파일에 모두 적용> 해당 파일의 모든 파일들을 순환하며 소유자 그룹 변경

그림에서 보면 logging.properties와 server.xml이 root로 되어있어서 일반 계정으로 수정 불가능

sudo chown -R irteam:irteam server.xml로 소유자 변경

변경된 것을 확인 할 수 있다.

서버 작업 시 특정 계정으로 스크립트를 실행했는데 접근이 안된다면 chown 명령어를 통해 소유자 및 그룹을 변경하도록 하자!!!




반응형
반응형



 안녕하세요. 오늘은 crontab에 대한 간단한 소개와 crontab을 통한 특정 기간 이상이 지난 log를 삭제하는 법에 대해서 살펴보도록 하겠습니다. 지나치게 불필요한 log를 많이 가지고 있게 되면 서버 메모리 공간에 여유가 부족해 문제를 일으킬 수도 있기에 일정 기간이 지난 로그 혹은 불필요 로그는 가지고 있지 않는 편이 원할한 서버 관리에 도움을 줄 수 있음을 상기하고 포스팅 시작해보도록 하겠습니다.

#CrontabCron은 원하는 시간에 특정 명령을 서버에서 실행 시키기 위한 데몬으로 특정 시간에 특정 작업이 필요할 경우 사용하게 됩니다.예를 들어 매일 자정에 그 날에 자료를 백업을 한다거나 매일 새벽 2시에 로그를 백업하는 작업이 필요한 경우 등 이렇게 특정 시간에 반복적으로 작업을 할 경우에 사용됩니다.한 마디로 일정 기간마다 특정 명령을 실행하도록 하는 것이다.

#Crontab 사용하기

crontab -l> 현재 crontab에 등록 된 작업보기

crontab -e> crontab 편집하기


crontab 등록




#Crontab 작업~ crontab -e를 열어 원하는 시간대에 작업이 이루어질 명령어를 등록해 줍니다.

제가 등록해준 작업은 #Tomcat log 쪽으로 매일 23시 59분에 rotatelog.sh를 실행하게 됩니다.

rotatelog.sh에서는 아파치로그, 프로젝트 로그, 톰캣로그를 삭제하는 스크립트가 작성되어 있습니다.



현재 3년 이상 된 로그들도 쌓여 있는 것을 확인 할 수 있는데 서비스 특성상 1년 까지만 보관하면 별문제 없을 것 같아 현재 날짜를 기준으로 일년이 지난 로그들을 삭제하도록 하였습니다.

#Crontab 등록 스크립트 작성시 find명령어 간단 정리

 

                                      이미지 출처 : http://dbrang.tistory.com/867



이상으로 포스팅을 마치겠습니다.




반응형
반응형


 안녕하세요. 이번에는 전에 한 번 포스팅 했던 '아파치 톰캣7 따라잡기 Part.1"에서 정리하지 못한 부분을 추가적으로 포스팅하도록 하겠습니다. 책을 정리하는 입장에서 제가 잘 몰랐던 부분이나 필요 부분을 문서화 시키는 작업임에 다소 설명적인 부분이 많이 생략될 수 있음을 이해해주시면 감사하겠습니다. 정리를 시작하도록 하겠습니다.


왜 아파치 HTTP 서버를 사용하는가?# 정적 컨텐츠를 효율적으로 제공톰캣도 정적 컨텐츠를 제공할 수는 있지만 아파치 HTTP 서버에 비해 반응 시간이 느리다.

# 10퍼센트 속도 증가아파치 HTTP 서버는 콤캣과 비교해 10퍼센트 정도 더 효율적으로 정적 컨텐츠를 제공한다. 사용자 부하가 높은 상황에서는 아파치를 통합하는 것이 좋다.

# 클러스터링아파치는 톰캣에 다중 인스턴스 연결을 안정적으로 제공하는 가장 효율적인 서버다.

# 보안아파치는 사용자와 호스트 기반 보안을 제공한다. 톰캣에서도 이 기능을 제공한다. 따라서 우리는 애플리케이션의 요구사항을 고려해 아파치와 톰캣 둘 중 누구의 보안을 활성화할 것인지 결정해야 한다.

# 다중 웹사이트 호스팅아파치 HTTP 서버의 가장 훌륭한 기능 중 하나는 다중 웹사이트 호스팅 기능이다. 다중 웹사이트 호스팅은 톰캣 7에서 처음 선보인 기능으로 http.conf를 이용해 32개가 넘는 가상 호스트를 설정할 수 있다. 32개 이상의 가상 호스트를 설정하려면 virtual.conf 파일을 별도로 만든 다음 http.conf에서 virtual.con를 포함하도록 설정해야 한다. (32개 이상이 아니더라도 virtual.conf 파일을 두어 사용하는 경우도 있음)


아파치 Jserv 프로토콜 (Apache JServ Protocol)Jserv는 평문 텍스트가 아닌 바이너리 형태의 데이터를 네트워크로 전송하도록 개발된 프로토콜이다. Jserv는 TCP와 패킷 기반 프로토콜을 사용하므로 웹 서버 성능이 증가한다. 보통 AJP라 부른다.AJP 프로토콜은 mod_jk와 mod_proxy로 이루어졌다. mod_jk와 mod_proxy는 브라우저를 통해 높은 컨텐츠 응답률을 전송할 때도 도움이 된다.

mod_jkmod_jk는 아파치느 IIS(Internet Information Service) 같은 웹 서버를 톰캣 7과 통합할 때 사용하는 AJP 커넥터다. mod_jk를 설치하지 않으면 톰캣에 프론트엔드 웹 서버를 제공할 수 없다. mod_jk는 프론트엔드 웹 서버 뒤에 톰캣을 숨기고 URL을 접근할 때 포트 번호를 제거하는 데 상당히 유용한 모듈이다.

mod_jk.conf 파일의 세부 정보모듈 경로아파치를 시작할 때 모듈을 로드할 위치를 정의한다.EX ) LoadModule jk_module modules/mod_jk.so

작업자 파일 경로작업자 파일 위치를 정의한다. 작업자 파일은 톰캣 인스턴스의 IP, 포트, 로드 분산 방법 등의 정보를 포함한다.EX ) JkWorkersFile conf/workers.properties

# 로그 파일로그 파일은 아파치 톰캣 통합 과정이 기록된다. 아파치/톰캣 간의 연결 양호 상태도 기록된다.EX ) JkLogFile logs/mod_jk.log

# URL 매핑URL 매핑은 아파치 컨텍스트 경로, 정의된 URL 요청 재전송 규칙을 정의한다. 다음과 같이 URL 매핑을 설정했다면 사용자가 http://localhost/sample라는 URL을 입력햇을 때 해당 요청을 톰캣 node1으로 재전송한다.EX ) JkMount /sample/* node1

# 로그 수준로그 수준 파라미터는 mod_jk에서 수행하는 다양한 이벤트를 logs가 어떻게 처리할지를 정의한다.EX ) JkLogLevel info

workers.properties의 세부 정보# 노드 이름호스트의 공통 이름worker.list = node1

# 톰캣의 AJP 포트 세부 정보톰캣에서 AJP 요청을 어떤 포트로 수락하는지worker.node1.port = 8009

# 톰캣 호스트 IP톰캣 인스턴스가 실행 중인 IP 주소worker.node1.host = 10.130.240.31

# 사용중인 프로토콜통신에 사용하는 프로토콜. 기본값은 AJPworker.node1.type = ajp13

# 부하 분산 방법라운드 로빈, 연결 지속 등worker.noe1.1bfactor = 1

톰캣 설정커넥터 포트기본적으로 톰캣은 HTTP 프로토콜 8080포트에서 실행된다. 모든 사람이 기본 포트 번호를 알고 있으므로 해커는 쉽게 포트에 접근해 서버 공격을 시도할 수 있다. 따라서 톰캣의 보안상 가능하면 항상 커넥터 포트와 AJP 포트(기본 값 8009)를 바꾸는 것이 좋다.

# 톰캣을 루트 사용자로 실항하는 것은 치명적인 결과를 초래할 수 있다. 따라서 루트가 아닌 새 사용자를 만들고 만든 사용자가 톰캣 서버를 실행할 수 있도록 권한을 부여하는 방식을 이용한다. 루트와 사용자 그룹에서 설정 파일에 접근할 수 있어야 하며, 이 사용자/그룹에 logs 등의 다른 디렉터리의 읽기/쓰기 권한도 줘야 한다.

# 톰캣 7의 SSL 설정 : 데이터 통신을 안전하게 보호하는 방버븡로 SSL(Secure Socket Layer)이  있다. SSL은 안전한 채널을 통해 데이터를 전송하는 암호 프로토콜이다. 서버가 암호키를 클라이언트 브라우저로 전송하면 클라이언트 브라우저가 암호키를 복호화 한 다음 서버오 클라이언트간에 핸드셰이크(handshake)가 이뤄진다. (이를 가리켜 안전 계층에서 두 방향 핸드셰이크가 일어났다고 한다.)언제 톰캿애 SSL이 필요한가?톰캣을 프론트엔드 서버로 사용할 때 SSL을 더 효과적으로 활용할 수 있다. 아파치나 IIS를 사용한다면 아파치나 IIS 서버에 SSL을 설치할 것을 권장한다.


다음은 마지막 톰캣에서 직면하는 문제들에 대한 해결책에 대해 책의 마지막 부분을 정리하도록 하겠습니다.




반응형
반응형

 


  안녕하세요. 오늘은 아파치 권장 설정인 ServerTokens에 대해 알아보도록 하겠습니다. 최근 이슈중에 보안팀에서 저희가 서비스하는 서버의 정보가 다 노출되고 있다는 메일을 받았습니다. 메일을 받고 실제로 curl --head URL주소를 처서 보니 서버정보가 다 노출되고 있는 것을 확인 할 수 있었습니다. 그럼 어떻게 서버정보가 노출이 되고 있었는지, 해결책은 무엇인지에 대해서 알아보도록 하겠습니다.


문제상황 ] 

 

위의 그림을 보시면 curl --head UR을 통해 요청에 의한 reponse의 head값을 받아 오는 것을 확인할 수 있습니다. 문제는 SERVER의 정보가 모두 노출되고 있다는 점입니다. 이로인해 클라이언트는 해당 서버의 정보(웹 서버 종류, 운영체제의 종류, 설치된 모듈, 마이너버전, 메이저 버전 등)가 다 노출되게 됩니다. 이렇게 서버 정보가 필요 이상으로 노출 될 경우 악의적으로 이용될 수 있음에 꼭 기본적인 내용만을 노출하도록 할 필요가 있습니다.


해결책 ]

위와 같은 문제점을 해결하기 위해 필요한 것이 ServerTokens 입니다. 보통 아파치 설정파일인 httpd.conf내에서 정의합니다. ServerTokens의 역할은 클라이언트 웹브라우저에게 서버의 정보를 얼마나 알려주냐를 설정하는 것입니다. 따라서 아래와 같은 순서로 서버 정보 노출을 예방하도록 해야합니다.


1. 자신의 서버의 정보가 노출되고 있는지 확인한다.


2. 확인이 되고 있다면 Apache의 httpd.conf에 ServerTokens가 설정되어 있는지 확인한다. (아파치 내에서 http-default.conf를 Include 하고 있다면 해당 부분에 설정이 되어 있는지 확인한다 꼭!!!)


3. 설정된 곳을 찾아 ServerTokens 옵션을 Prod로 변경해준다. 이 때 ServerSignature도 On에서 Off로 변경해준다.(보통 함께 붙어 있다. On에서 Off로 변경시 브라우저 상에서 아파치 서버 정보를 노출하지 않겠다는 의미)

 

#ServerTokens의 설정 값은 Prod, Major, Minor, Min, OS, FULL이 있다.


4. 설정을 변경한 후 아파치를 재시작 해준다.


이렇게 ServerTokens를  Prod로 설정을 마치고 다시 재시작한 결과는 다음과 같다.


서버정보에 웹 서버의 이름만 표시된 걸 확인할 수 있다.



이렇게 간단한 설정으로 인해 우리의 중요한 서버정보가 노출됨을 막을 수 있다. 지금 당장 확인해보고 필요 이상의 서버정보가 노출되고 있다면 요렇게 변경해 주길 바란다. 참고로 ServerTokens 지시어는 디폴트로 설정되어 있지 않고 ServerTokens 지시어 설정을 안했을 경우 Full 설정 처럼 모든 정보를 노출하게 된다! 지금 당장 확인 고고씽~!!!

 

 



반응형
반응형


  안녕하세요. 오늘은 클라이언트가 GET, POST이외의 메소드로 작업 요청을 하였을 경우 문제가 될 수 있는 PUT, DELETE 등의 메소드를 비활성화 시키는 내용에 대해 포스팅 하도록 하겠습니다. 해당 이슈 또한 서버 보안이슈로 보통 주로 사용하는 GET, POST이외의 메소드 이외의 메소드로 인해 서버의 정보가 변조/삭제당하거나 악의적인 파일이 삽입될 수 있는 등 악의적으로 이용 될 수 있습니다. 따라서 불필요한 HTTP 메소드들을 비활성화 시켜주도록 합니다.

문제상황 다음과 같은 그림과 같이 PUT메서드로 해당 URL에 요청을 한 결과 200이 떨어지는 것을 확인 하실 수 있습니다.



참고로 PUT 메소드는 서버에서 포함되어 있는 개체를 저장하는데 사용되며(악성 파일 업로드 등의 악의적으로 이용 가능), DELETE 메소드는 서버에서 리소스를 제거(리소스 삭제 등 악의적 이용 가능)하는데 사용 됩니다. 따라서 해당 메소드들의 사용을 비활성화 시켜줘야 한다.


해결방법 나와 같은 경우에는 대부분의 요청이 tomcat으로 처리되고 있었기 때문에 web.xml에 다음과 같은 security-constraint설정을 통해 해당 문제를 해결해 주었다.

그림을 보면 운영에 필수적인 메소드 외의 PUT, DELETE, TRACE 메소드의 사용을 막게끔 web.xml을 통해 설정하고 있다.아파치를 통해서도 해당 문제를 해결 할 수 있는 방법이 있는데 이 경우에는 다음과 같이 처리해줄 수 있다. 아파치의 httpd.conf에서 처리해준다.

<Directory /home> // 해당 도메인의 경로<Limit PUT DELETE CONNECT OPTIONS> // 차단하려는 메소드allow from IP // 허용하려는 사람의 IPdeny from all // 그 외 모든 접속 차단함</Limit></Directory>


혹은 반대로 허용하는 메소드만 정의해줄 수도 있다.

<Directory /home> // 해당 도메인의 경로    <LimitExcept GET POST> // 허용메소드        Order deny,allow

        Deny from all

    </LimitExcept>

</Directory>



해결후 테스트밑의 그림과 같이 PUT 메소드로 해당 URL을 요청한 결과 응답으로 403 Forbidden이 뜬 모습을 볼 수 있다.



이와 같이 많은 힘이 들지 않고도 우리의 서버를 안전하게 지킬 수 있다. 모두들 한 번 점검해보고 안전한 서버 운영을 위해 불필요한 메소드를 비활성화 해주길 바란다.

최근 숙박앱 '여기 어때'에서  SQL Injection공격으로 인해 개인정보 유출 사건이 있었다. 항상 보안을 염두하도록 하자.








반응형

+ Recent posts