Rey의 Open Source Software 이야기

OpenSSH Client 연결 시 permission denied(publickey) 오류 출력하며 접속 안되는 경우

by Rey on 9.21, 2011, under Linux

요즘 회사에서 아마존 웹 서비스(이하 AWS)를 이용하여 서비스를 구축하고 있다.

그런데 AWS EC2로 Linux를 선택한 경우 경우에 따라 putty나 SSH Client에서 Permission denied(publickey)라는 오류를 출력하며 접속이 안 되는 경우가 있다.

이 경우  OpenSSH Server 설정에 Password 입력이 비 활성화 되어 있어 그런 경우가 있다 이 경우 /etc/ssh/sshd_config(Ubuntu Linux 기준) 파일에서 PasswordAuthentication를 찾아 no를 yes 변경 하면은 Password 입력을 활성화 할 수 있다.

Leave a Comment :, , more...

APACHE Web Server HTTP Method 설정 제한 방법

by Rey on 8.22, 2011, under Web

기존에 http://tech.dakrink.pe.kr에 써놓은 글을 옮긴 것 입니다.

Apache Web Server를 사용하면서 HTTP Method 중 특정 method만 제한을 걸고 싶은 경우가 있다.
apache 버전의 경우 서버단으로 제한을 걸수는 없고 디렉토리 별로 제한을 걸 수 있다.

method 제한을 거는 경우 에는 아래 처럼 설정하면은 된다.

<Directory /home>
AllowOverride FileInfo AuthConfig Limit
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit OPTIONS PROPFIND>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>

위와 같이 설정을 하면은 GET, POST 이외의 method로 접속하는 경우에는 405 Method Not Allowed 에러를 발생을 한다.

Leave a Comment :, more...

gssftp 로그인 안 될때 설정

by Rey on 7.26, 2011, under Linux, Technical Info

기존에 http://tech.dakrink.pe.kr에 있는 글을 옮겼습니다.

최근에 출시되는 리눅스 베포판의 경우 기본 FTPD로 vsftpd를 사용하는 경우가 많다 그러나 RHEL WS나 Desktop 버전 처럼 FTPD 패키지가 없는 경우 혹은 기본 vsftpd가 이상동작하는 경우(이런 경우가 있겠냐고 말하겠지만 있다. 오늘 경험했다 –;) xinetd아래 있는 gssftp를 사용할 수 있다.

gssftp는 xinetd 하위로 동작하는 데몬이기 때문에 반드시 xinetd를 설치해야된다.

안하고 안된다고 나한테 뭐라고 그러시면은 난감하다…

서비스 활성화 방법은 레드헷 기반으로 만들어진 배포판(레드헷 엔터프라이즈  리눅스, 수세 리눅스)등은 아래의 명령으로 서비스 활성화를 할 수 있다.

  • chkconfig gssftp on

그러나 다른 리눅스 배포판(데비안 리눅스)의 경우에는 /etc/xinetd.d나 혹은 xinetd 서비스 설정 디렉토리에 gssftp를 수정해야 된다.

  • /etc/xinetd.d/gssftp(RHEL 기준) 에디터로 오픈
    disable = yes에서 disable = no 로 변경

이렇게 작업을 한 뒤 xinetd 데몬을 리스타트 해줘야 적용이 가능하다.

위와 같이 작업한 뒤 FTP를 접속해서 로그인을 하면은 로그인이 안된다.(뭐니 –;)

기본적으로 로그인이 안되도록 설정이 되어 있는데 이를 해제하는 방법은 아래와 같다.

  • /etc/xinetd.d/gssftp(RHEL 기준)
    server_args   = -l -a 부분을 server_args = -l 로 수정 저장

그럼 이만

Leave a Comment :, more...

static route 정보 설정 방법

by Rey on 5.27, 2011, under Linux

static routing 정보를 설정하기 위해 하는 방법이 대부분 아래와 같은 방법일 것이다.

route add -net “IP Address” netmask “Netmask Address” dev “장치명”

위와 같은 방법은 network 서비스를 재시작 하거나 혹은 시스템이 재부팅 하는 경우에는 정보가 사라지는 단점이 있다.

위와 같은 문제를 해결하기 위해 network 서비스 재시작 혹은 시스템 재부팅에도 정보가 안사라지도록 설정하는 방법이 있다.

/etc/sysconfig/network-scripts/route-”장치명” 이라는 파일을 만들고 다음과 같이 네트워크 정보를 입력하면은 매번 정적 라우팅 정보를 입력하는 번거로움을 피할 수 있다.

/etc/sysconfig/network-scripts/route-eth0

1
2
3
4
5
6
7
GATEWAY0=0.0.0.0
NETMASK0=240.0.0.0
ADDRESS0=224.0.0.0
 
GATEWAY1=10.10.1.254
NETMASK1=255.255.255.0
ADDRESS1=192.168.72.0

위 예시와 같이 입력을 하면은 eth0에 대해 IP가 224.0.0.0에 속하고 Netmask가 240.0.0.0인 모든 패킷을 0.0.0.0 Gateway로 보내라는 의미를 가지게 된다.

다른 하나는 192.168.72.0 IP이고 Netmask가 255.255.255.0인 C클래스 패킷을 10.10.1.254 Gateway로 보내라는 의미를 가지게 된다.

관련 URL : http://kbase.redhat.com/faq/FAQ_79_2561.shtm

위와 비슷한 방법으로 다음의 방법을 사용해도 된다.

RHEL 4에서 static route를 설정하기 위해서는 다음의 두개의 파일을 만들어주면은 됩니다.

/etc/sysconfig에 static-routes라는 파일과
/etc/sysconfig/network-scripts에 route-eth0라는 파일을 만들어주시면은 되고..

내용은 다음과 같습니다.

static-routes

eth0 net 192.168.1.0 netmask 255.255.2550 gw 211.104.100.1

설명 : eth0에 192.168.1.0 / 24 네트웍으로 가야되는 트래픽을 기본 게이트 웨이 211.104.100.1로 보내라

route-eth0

192.168.1.0/24 via 211.104.100.1

설명 : 192.168.1.0 / 24 네트웍의 트래픽은 211.104.100.1로 보내라

관련 URL : http://www.akadia.com/services/redhat_static_routes.html

Leave a Comment : more...

RHEL(Red Hat Enterprise Linux) Coredump 설정 방법

by Rey on 5.27, 2011, under Develope, Linux

리눅스에서 프로그램 개발을 하다가 보면은 세그먼트 폴트가 나는 경우 Debugging을 해야되는 상황이 있을 수 있다. 그런데 우리의 레드헷 기본적으로 Coredump를 남기지 않도록 설정이 되어 있어서 곤란한 경우가 있다.RHEL에서 Coredump를 기록하도록 설정하는 것을 설명한다.

Coredump 생성을 위한 방법으로는 두가지가 있다. 한가지는 시스템에서 무조건적으로 coredump를 생성하도록 하는 경우가 있고 다른 한가지는 init script에서 남기도록 하는 경우가 있다.

1. 시스템에서 Coredump를 남기도록 설정
/etc/profile 파일을 vi나 다른 에디터 프로그램을 열어서 다음의 라인을 찾아보자.

ulimit -S -c 0 > /dev/null 2>&1

위에 줄이 Coredump를 남기지 않도록 하는 주범이다.

그 부분을 다음과 같이 수정하라.

ulimit -c unlimited > /dev/null 2>&1

/etc/profile를 수정하면은 시스템 전체적으로 영향을 받는다. 만약에 시스템 전체적으로 영
향을 받지 않고 자주 사용하는 시스템 계정에서만 영향을 받고 싶다면은 /etc/profile를 수정
하지 말고 ~/.bash_profile나 ~/.bashrc를 수정하도록 한다.

/etc/profile 말고 커널 파라메타에도 기본적으로 Coredump를 남기지 않도록 되어 있다.
/etc/sysctl.conf에 다음의 부분을 기술한다.

kernel.suid_dumpable = 1
kernel.core_uses_pid = 1

설정을 추가 한 뒤에 sysctl -p로 커널 파라메터를 지금 현재 시스템에 반영하는 것을 잊지
말어야 한다. 안그러면은 재부팅 되고나서야 시스템에 반영이 된다.

2. Init Script로 실행하는 데몬에 Coredump 설정 방법
RHEL의 경우 init script로 실행하는 데몬에 대해 initscript package에서 coredump를 남기
지 않도록 관리하고 있다.

만약에 /etc/init.d/httpd에 대해 coredump를 남기도록 세팅하려면은 다음과 같이 수정하도
록 한다.

/etc/sysconfig/init에 다음의 라인을 추가 한다.

DAEMON_COREFILE_LIMIT=’unlimited’

이 설정을 init script로 실행하는 모든 스크립트에 영향을 미치게 된다.
각 init script에서 /etc/init.d/functions을 호출하기 전에

DAEMON_COREFILE_LIMIT=’unlimited’

를 넣어주면은 된다.

참조 : http://kbase.redhat.com/faq/FAQ_80_7935.shtm

Leave a Comment :, , more...

MySQL 전 테이블 최적화 하기

by Rey on 5.27, 2011, under MySQL

MySQL 뿐만 아니라 거의 대부분의 SQL 서버들이 레코드가 추가 되거나 혹은 지워질떄 오버해드들을 남기게 되는데 다음에 MySQL의 경우 전 테이블을 최적화 하는 쉘 스크립트 이다. rootman님 사이트에서 가지고 왔다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/sh
# 2004/03/20
# http://www.rootman.co.kr
# 제목 : mysql Database 테이블 모두 최적화하기
# 변경사항 : mysql root 변경
# --------------------------------------------------
#
DB_cnt=0;
DB_pass="루트패스워드"
Total_Table=0;
DB_str=`mysql -u root -p${DB_pass} -e"show databases"`;
for DB_for in ${DB_str}
do
  if [ ${DB_for}  != "Database" ]; then
     TABLE_cnt=0;
     Table_str=`mysql -u root -p${DB_pass} -e"show tables" ${DB_for}`;
     for TABLE_for in ${Table_str}
     do
        Op_Str=`mysql -u root -p${DB_pass} -e"optimize table $TABLE_for" ${DB_for}`;
        echo " - DB명 : ${DB_for} --> ${TABLE_for} ";
        let TABLE_cnt=TABLE_cnt+1;
     done
     echo "------------------------------------------> 테이블명 : ${TABLE_cnt} 최적화완료.";
     let Total_Table=Total_Table+${TABLE_cnt};
     sleep 1;
     let DB_cnt=DB_cnt+1;
  fi;
done
echo "====================================================================================";
echo "- 호스트명 : `hostname` 에 대한 DB ${DB_cnt}개, 토탈테이블 ${Total_Table} 최적화 완료.";
echo "====================================================================================";
Leave a Comment : more...

SSH 터널링

by Rey on 5.27, 2011, under Security

특정 사이트, 및 서비스(msn) 등 차단시 프락시 를 통한 우회

특정 정책등으로 제안이 있지만 임시로 사용가능하게 하고자 할때 다음과 같이 접속하여 우회용 프락시 포트를 연뒤에.
ssh -D 1024 우회할_ssh_서버
브라우저, 가임, msn 등에 프락시 서버를 localhost 에 1024 포트로 수정한 후 사용한다..

 

방화벽 우회 하여 외부에서 연결해 들어올수 있게 하기

내부에서 외부 ssh 로 접속을 하면서 터널닝으로 연결 고리를 열어두어 나중에 작업등을 하고 자 할때 방화벽_내부_IP 에서
ssh -R 8022:방화벽_내부_IP:22 -l 계정 우회할_ssh_서버
와 같이 연결한후에..

외부에서 우회할_ssh_서버에 접속해 로그인하후에
ssh -p 8022 localhost
위와 같이 하면 방화벽을 우회하여 방화벽_내부_IP 로 접속할수 있다.

Leave a Comment :, more...

Firefox에서 JRE 설치 방법

by Rey on 5.27, 2011, under Linux

JRE가 /usr/jre에 설치되어 있다고 하면, 그 아래 plugin이라는 디렉토리가 있습니다.

ln -s /usr/jre/plugin/i386/ns7/lib/libjavaplugin_oji.so /usr/lib/firefox/plugins 처럼 하여 그 아래 있는 .so 파일을 Firefox의 plugins 디렉토리 아래에 링크를 걸어주면 됩니다.

Leave a Comment :, , more...

SSH Brute Force Attack란?

by Rey on 5.27, 2011, under Security

ssh brute force attack이란 흔한 사용자 이름과 암호로 ssh를 계속 접속해서 해킹을 시도하는 방법으로, 여러가지 피해를 끼칩니다.

1. 정말로 약한 암호를 사용하는 사용자가 있을 경우 해당 계정이 해킹당할 수 있으며, 이 해킹당한 계정으로 로컬 커널 익스플로잇 등을 사용해서 루트를 빼앗길 수도 있습니다.

2. 그렇지 않더라도, 사용자 인증 로그(auth.log)에 짧은 시간 내에 수많은 실패 로그가 쌓여 다른 로그를 보는 데 방해가 될 수 있습니다.

3. 접속을 받는 동안 ssh 대몬이 암호학적 계산을 해야 하므로 시스템 자원을 소모합니다.

iptables 는 리눅스 커널에 기본적으로 포함되어 있는 방화벽으로, 아주 다양한 방화벽 규칙을 만들 수 있으며, iptables 모듈을 사용해서 기능을 확장할 수도 있습니다. 다음은 iptables로 ssh brute force attack을 막는 간단한 규칙입니다. 이 규칙은 iptables 기본 모듈인 state와 recent를 사용합니다.

state 모듈과 recent 모듈은 man 페이지에 자세하게 문서화되어 있습니다. state 모듈은 언제 접속이 시작되고 끝나는지 추적할 수 있게 하고, recent 모듈은 IP 주소의 목록을 만들고 최근 접속 시간을 기록할 수 있게 합니다.

규칙은 ssh 포트로 20초간 5회 이상 접속을 시도하면 10분간 접속을 차단합니다.

우선 blacklist와 ssh 체인을 만듭니다.

1
2
iptables -N blacklist
iptables -N ssh

INPUT 체인에서 state 모듈로 ssh 포트인 22번 포트에 접속이 시작되면 ssh 체인으로 보냅니다.

1
iptables -A INPUT -m state --state NEW -p tcp --dport ssh -j ssh

blacklist 체인에서는 recent 모듈로 “blacklist”라는 목록에 접속 주소를 기록하고 접속을 거부합니다.

1
2
iptables -A blacklist -m recent --set --name blacklist
iptables -A blacklist -j REJECT

규칙의 핵심인 ssh 체인은 다음과 같습니다.

1
2
3
4
iptables -A ssh -m recent --update --seconds 600 --hitcount 1 --name blacklist -j REJECT
iptables -A ssh -m recent --set --name ssh
iptables -A ssh -m recent --update --seconds 20 --hitcount 5 --name ssh -j blacklist
iptables -A ssh -j ACCEPT

첫 번째 규칙은 접속 주소가 이미 “blacklist”에 들어 있고, 지난 10분간 1회 이상 접속이 있었으면 접속을 거부합니다.

두 번째 규칙은 접속 주소를 “ssh” 목록에 기록합니다.

세 번째 규칙은 접속 주소가 이미 “ssh” 목록에 들어 있고, 지난 20초간 5회 이상 접속이 있었으면 blacklist 체인으로 보냅니다.

네 번째 규칙은 여기까지 통과한 경우 ssh 접속을 허락합니다.

따라서 전체 스크립트는 다음과 같이 됩니다.

1
2
3
4
5
6
7
8
9
iptables -N blacklist
iptables -N ssh
iptables -A INPUT -m state --state NEW -p tcp --dport ssh -j ssh
iptables -A blacklist -m recent --set --name blacklist
iptables -A blacklist -j REJECT
iptables -A ssh -m recent --update --seconds 600 --hitcount 1 --name blacklist -j REJECT
iptables -A ssh -m recent --set --name ssh
iptables -A ssh -m recent --update --seconds 20 --hitcount 5 --name ssh -j blacklist
iptables -A ssh -j ACCEPT
Leave a Comment :, more...

[ubuntu] 설치된 패키지 확인

by Rey on 5.09, 2011, under Linux

요즘 새로 옮긴 회사 내부에서 ubuntu Linux를 사용하고 있다.

내가 원래 잘 사용하던 배포본이 RedHat 기반 이라 (리눅스 관련 자격증도 RedHat 꺼라지 아마 RHCE kk) 설치 패키지 확인 하는 방법이 RedHat과는 다르기 때문에 기술해둔다.

1
dpkg -l *패키지명* | grep ii | awk '{print $2,":",$3}'

패키지명 란에 확인 하고 싶은 패키지명을 넣으면은 된다.

Leave a Comment :, , more...

Looking for something?

Use the form below to search the site:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!