Posted
Filed under Linux
#!/bin/sh
cd /backup/home/weekly
tar cvfzp home.tar.gz --exclude=/home/no_backup /home
2011/10/26 08:49 2011/10/26 08:49
Posted
Filed under Linux

[원문] - http://www.21-japan.com/?document_srl=26832

아파치외부링크금지 

오늘은 무단링크를 방지하는 스크립트를 설치했다.

무단링크라... 무단링크는 이런 것이다. 퍼스널디비에서 계정을 받았다. 거기에 파일을 올리고는 그 파일을 다른 게시판에서 다음과 같이 올린다.
<a href="http://fileserver1.personaldb.net/****">파일링크</a>

이렇게 하면 다른 사람들이 이 파일을 가져갈 수 있게 된다.

하지만 이러면 퍼스널디비는 단지 자신의 서버와 네트워크를 빌려줄 뿐 아무런 이득을 얻지 못한다. 심지어 그 파일을 받아가는 사람도 이 파일이 어디에서 왔는지 알지 못한다. 그래서 시스템관리자는 무단 링크를 방지하기 위하여 여러가지 방법을 사용하게 된다.

제일 좋은 방법은 이런식의 파일접근을 원천적으로 막는 것이다. http://~~ 이런 방식으로 아예 파일에 접근할 수 없도록 웹서버에 파일을 올려놓지 않으면 된다. 필요하면 내부에서 파일을 읽어서 다시 외부로 뿌려주는 방식을 취하는 것이다. 많은 수의 다운로드 자료실들이 이러한 형태를 취한다. 제일 좋다.

하지만 홈페이지 서비스를 하는 경우에는 이것이 좀 어렵다. 기술적으로도 좀 어렵지만 가장 큰 문제는 사용자가 엄청 불편해지고, 시스템이 많은 자원을 소비한다.

그래서 차선책이 바로 Referer를 사용한 무단링크 방지책이다.

가장 많이 사용되는 아파치 웹서버의 경우 Referer를 사용한 무단링크방지법을 제공한다.
간단하게 다음과 같은 내용을 httpd.conf 파일에 추가하면 된다.

<Directory "/home/dduma">
AllowOverride None
SetEnvIf Referer abc.com in HTTP_REFER
Deny from all
Allow from env=HTTP_REFER
Order deny,allow
</Directory>

설명은 다음과 같다.
<Directory "/home/dduma"> : 여기 쓰인 디렉토리에 대해서는
AllowOverride None : htacess.conf 파일을 사용하지 않는다.
SetEnvIf Referer abc.com in HTTP_REFER : HTTP_REFER 라는 변수에 넣는다.
Order deny,allow : 먼저 거부조건을 나중에 허용조건을 설정한다.
Deny from all : 모두 거부한다.
Allow from env=HTTP_REFER : HTTP_REFER 변수에 있는 것만 허용한다.

이러면 abc.com 만 빼고는 다 무단링크는 허용되지 않는다.

하지만 이렇게 하면 문제가 생긴다.
먼저 abc.com에서 링크된 것은
<img src=http://abc.com/test.gif>와 같이 그림을 링크하면 나타나지만
<a href=http://abc.com/test.exe>다운받아라</a> 와 같이 다운받을 수 있게 하면 모두 허용이 거부된다.

이것을 방지하기 위하여 다음을 넣자.
SetEnvIf Referer ^$ in HTTP_REFER
그러면 다운도 되고 다 잘 된다.

그럼 끝인가?
아니다. 이러면 아직 두가지 문제점이 남는다.

첫번째 문제는 다운받을 수 있도록 무단링크를 걸었을 때 마우스 왼쪽버튼으로 클릭하면 허용거부라는 메세지가 나오지만 마우스 오른쪽 버튼을 클릭하여 다운받기를 누르면 다운이 허용된다.
이것은 열심히 궁리한 결과 절대 막을 수 없다는 결론이 나왔다. 이것을 막으면 위에 언급한 것처럼 정상적으로 링크하고 다운받는 것도 금지되기 때문이다.

두번째 문제는 만일 검색엔진 같은 곳에 링크가 되어 있으면 역시 허용이 거부된다. (왜? 무단링크니까...)
하지만 우리는 검색엔진에 링크거는 것은 허용하고 싶다. (이걸 허용하지 않는 바보가 어딨냐?)
그래서 위의 것들을 다음과 같이 고쳤다.

<Directory "/home/dduma">
AllowOverride None
SetEnvIf Referer abc.com in HTTP_REFER
SetEnvIf Referer ^$ in HTTP_REFER
<FilesMatch ".(avi|mge?g|exe|jpe?g|mp3|gif|png|zip|asx|asf|wmv|wma|bmp)$">
Deny from all
Allow from env=HTTP_REFER
Order deny,allow
</FilesMatch>
</Directory>

즉 중간에 FilesMatch 어쩌고 하는 지시자가 들어갔다.
이것은 쓰여진 확장자만을 무단링크 방지 파일대상으로 삼는다. 그러니까 .htm 파일같은 것은 무단으로 링크가 걸려도 좋다는 뜻이다.
이렇게 하면 검색엔진에 등록되어도 허용이 거부되지 않는다.

이상 무단링크 방지하기 방법을 알아보았다. 하지만 역시 완전하지는 않네... 몇가지 허점이 눈에 띈다. 이것을 알면 사람들이 악용할 소지가 전혀 없는 것은 아니다. 하지만 이 정도로도 무단링크의 90%정도는 없어진다.

시스템 관리자들은 모두 한번씩 해보시기를...

2011/05/26 14:50 2011/05/26 14:50
Posted
Filed under Linux

cp -rf --reply=yes  ~~~~~~~~~
cp -rf -replay=no  ~~~~~~~

덮어 씌위기 할 때 Y  누를 필요 없음.

2011/02/23 03:44 2011/02/23 03:44
Posted
Filed under Linux
linux에서 특정 문자열을 치환하는방법에는 여러가지가 있는데 

나는 다음과 같은 명령어로 해보았다.

(치환 결과를 다른 파일에 저장해야 할 때)

$ cat {SOURCE_FILE_NAME} | sed 's/{ORIGINAL}/{CHANGE}/g' > {NEW_FILE_NAME}

(치환 결과를 원본에 저장할때)

$ sed -i 's/{ORIGINAL}/{CHANGE}/g' {FILE_NAME}


{ORIGINAL} : 원본 문자열
{CHANGE}  : 바뀔 문자열


p.s {} 는 보기 편하라고 넣은거지 진짜로 저 괄호로 감싸서 넣지 마라.
2010/11/19 05:14 2010/11/19 05:14
Posted
Filed under Linux

[원문 ] - http://towons.kr/blog/2

경우에 따라, 404에러에 대해 아파치가 기본적으로 보여주는 에러페이지가 아닌, 개별적인 커스터마이징을
하고자 하는 경우가 생기게 마련인데..
이때는 /etc/httpd/conf/httpd.conf 를 열어서 아래와 같이 바꿔주시기 바랍니다.

httpd.conf

<VirtualHost *>
    DocumentRoot /home/domain
    ServerName domain.co.kr
    ServerAlias www.domain.co.kr
    ErrorDocument 404 /home/domain/error404.php
</VirtualHost>

버추어호스트에 물려놓은 도메인마다 개별 설정하는게 좋습니다. 서버에 물려 있는 모든 도메인에 동일한 404를
보여주려는 목적이라면 그냥 기본 404에러페이지를 쓰는 것도 나쁘지 않으니깐요.

남은 일은 error404.php 라는 파일을 만들어서 서버에 올려두는 일뿐입니다.

error404.php
<html>
<body>
잘못 찾아오셨습니다.<br>You got 404 Error!!!! orz
</body>
</html>

404에러가 났을때 만약 에러페이지로 보내지 않고, index.html 과 같은 메인페이지로 보내고 싶다면
ErrorDocument 404 /home/domain/error404.php 를
2010/11/06 19:53 2010/11/06 19:53
Posted
Filed under Linux
#!/bin/sh

# 초기화
iptables -F

# 포트 스캔 방지
iptables -A INPUT -d 0.0.0.0/0 -p icmp -j DROP

# DoS 공격 방지
iptables -N syn-flood
iptables -A syn-flood -m limit --limit 12/second --limit-burst 24 -j RETURN
iptables -A syn-flood -j DROP

# ssh 정책(root, webpage 계정만 접속 가능)
# ssh 포트 : 22, root 번호: 0, webpage 번호:500
iptables -A INPUT -p tcp --dport 22 -m owner --uid-owner 0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m owner --gid-owner 0 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner 0 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m owner --gid-owner 0 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m owner --uid-owner 500 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m owner --gid-owner 500 -j ACCEPT
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner 500 -j DROP
iptables -A OUTPUT -p tcp --dport 22 -m owner --gid-owner 500 -j DROP

# 1초에 15번 이상의 HTTP 접근을 할 경우 차단
iptables -A INPUT -p tcp --dport 80 -m recent --update --seconds 1 --hitcount 15 --name HTTP -j DROP

#--------------------------------------------------------------------
# 커널 컴파일 및 iptables 패치 후, connlimit 사용이 가능한 경우
# 1초에 15번 이상의 HTTP 접근을 할 경우 차단
#iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 -connlimit-mask 24 -j DROP

#메일서버의 경우 동시에 5개이상 SMTP 접근일 경우 5분동안 접근 제한
#iptables -A INPUT -m recent --name spammer --rcheck --seconds 300 -j DROP
#iptables -A INPUT -p tcp --syn --dport 25 -m connlimit --connlimit-above 5 -m recent --name spammer --set -j DROP
#---------------------------------------------------------------------

#----------------------------------------------------------------------
# STRING 필터기능
# MSN 문자열이 들어간 패킷 차단
#iptables -A FORWARD -m string --string "messenger.msn.com" -j DROP

# 싸이월드 접속차단
#iptables -A FORWARD -p tcp --dport 80 -m string --string "Host: cyworld.nate.com" -j DROP
#----------------------------------------------------------------------

# 서버가 해킹당했을 때 DoS공격지로 사용될 경우에 적용.
# DNS 쿼리 이외 UDP 패킷 전송 방지
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p udp ! --dport 53 -m state --state NEW -j DROP


스크립트 실행 후

# service iptables save

# service iptables restart


당연한 이야기지만, 이 스크립트는 root 권한으로 실행시켜야 한다.
시스템이 부팅될 때 이를 실행하고자 한다면, /etc/rc.local 에 등록해두자.

이를 해제하기 위해서는

iptables -F
iptables -F syn-flood
iptables -X syn-flood


[원문] - http://adminplay.com/board/?mid=Lsecurity&page=1&document_srl=12226
2010/10/12 11:29 2010/10/12 11:29
Posted
Filed under Linux


- 시간설정


# date [MMDDhhmm[[CC]YY][.ss]

맞추려는 시간이 2004년 07월 15일 오후 4시 15분 50초라면

# date 071516152004.50

타임서버

time.bora.net
time.kriss.re.kr -- 주로 refuse .


타임서버 시간 보기
# rdate -p time.bora.net


타임서버 시간을 로컬 시간으로
# rdate -s time.bora.net


확인
# date

2010/10/02 13:41 2010/10/02 13:41
Posted
Filed under Linux

[원문] - http://cafe.naver.com/webdori.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=1028

* 개요
이 문서는 80포트만이 열린 네트워크 환경에서 아파치(80포트)와 톰캣(8080포트)을 동시에 서비스 하기 위한


방법을 설명하고 있습니다.


* 시스템사항
Operating System: Centos5
Webserver: Apache 2.2.2
JDK: JDK 6.0
Servlet Container: Tomcat 6.0.18
Tomcat Connector: Jakarta Tomcat Connector mod_jk (not mod_jk2)

* 기본폴더
apache2 : /usr/local/apache
tomcat_home : /usr/local/tomcat
java_home : /usr/local/java
mod_jk : /usr/lib/apache/modules/mod_jk.so

* 설정 순서

1. mod_jk 설치
2. workers.properties 파일 만들기
3. 톰캣의 server.xml 수정
4. httpd.conf 수정
5. 가상호스팅
6. classpath 설정

* 설정설명
1. mod_jk 설치 및 tomcat_native 설치

1.1 mod_jk 설치

http://www.apache.org/dist/tomcat/tomcat-connectors/jk/source/jk-1.2.28/tomcat-connectors-1.2.28-src.tar.gz  을 다운 받아

압축을 푼다.

# cd tomcat-connectors-1.2.28-src
# ./configure --with-apxs=/usr/local/apache/bin/apxs
# make
# make install

1.2 tomcat_native 설치

fedora에서 apr관련 라이브러리 설치(apr-devel)

yum install apr*

tomcat-native.tar.gz 파일을 tomcat 디렉토리에서 찾아 압축을 푼다.

./configure --with-apr=/usr/bin/apr-1-config --with-java-home=/usr/local/java --with-ssl=yes --prefix=/usr/local/tomcat
make
make install

2. workeers.properties 파일 만들기

# vi /usr/local/apache/conf/workers.properties

#아래의 두 설정의 경로는 자신에 맞게 수정합니다.
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/java

ps=/

#아래 반복되는 worker1 대신 다른 이름도 상관없습니다.
worker.list=worker1

worker.worker1.port=8009
worker.worker1.host=localhost
worker.worker1.type=ajp13
worker.worker1.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=worker1

worker.inprocess.type=jni

3. 톰캣의 server.xml 수정
톰캣/conf/server.xml 에 아래의 코드를 추가합니다.

# vi /usr/local/tomcat/conf/server.xml


Server 태그 바로 아래쪽에 Listener 태그가 적힌곳에 추가하면 됩니다.
modjk와 workersConfig의 경로에 주의해서 자신에 맞게 수정합니다.

<Listener className="org.apache.jk.config.ApacheConfig" modJk="/usr/local/apache/modules/mod_jk.so" workersConfig="/usr/local/apache/conf/workers.properties" />

톰캣을 재시작 합니다.

# /etc/init.d/tomcat restart


에러없이 재시작 되면 아래와 같은 파일이 생성됩니다.
/usr/local/tomcat/conf/auto/mod_jk.conf

4. httpd.conf 수정
/usr/local/apache/httpd.conf 설정 파일에 아래의 코드를 추가합니다. 항상 경로에 신중하세요.


# vi /usr/local/apache/httpd.conf

# Load mod_jk module
# Update this path to match your modules location
#LoadModule jk_module /usr/local/apache/modules/mod_jk.so

# Where to find workers.properties
# update this path to match your conf directory location
JkWorkersFile /usr/local/apache/conf/workers.properties

# Where to put jkshared Memory
JkShmFile /usr/local/apache/logs/mod_jk.shm

# where to put jk logs
JkLogFile /usr/local/apache/logs/mod_jk.log

# Set the jk log level [debug/error/info]
JkLogLevel info

JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkRequestLogFormat "%w %V %T"

파일을 저장하고 아파치를 재시작 합니다.
브라우저에서 http://127.0.0.1로 접속했을때 톰캣 페이지가 보이면 연동된 것입니다.

5. 가상호스팅
아파치, 톰캣 각각의 가상호스팅 설정에 대해서 자세히 다루지는 않겠습니다.
아파치, 톰캣 두개의 가상호스팅 설정이 일치해야 연동에 문제가 없습니다.

아파치의 가상호스팅

<VirtualHost *:80>
   DocumentRoot /home/test/public_html
   ServerName test.co.kr
   ServerAlias www.test.co.kr
   JkMount  /*.jsp worker1
   JkMount  /*.do worker1

   JkMount  /servlet/* worker1
</VirtualHost>

톰캣의 가상호스팅(server.xml)

# vi /usr/local/tomcat/conf/server.xml

아래 구문을 추가한다.

<Host name="www.test.co.kr" appBase="/home/test/public_html"
            unpackWARs="true" autoDeploy="true"
            xmlValidation="false" xmlNamespaceAware="false">
</Host>

# cd /usr/local/tomcat/conf/Catalina

# mkdir www.test.co.kr

# cd www.test.co.kr

가상호스트 설정파일을 만든다.
# vi ROOT.xml

아래 내용을 ROOT.xml에 작성한다.
<?xml version='1.0' encoding='utf-8'?>
<Context path="/" docBase="" crossContext="false" reloadable="true" debug="0" />

tomcat 재시작
apache 재시작

6. classpath 설정

가상호스트의 WEB-INF를 인식하지 못하는 경우 /usr/local/tomcat/bin/setclasspath.sh 파일을 아래와 같이 수정

CLASSPATH= 구문 대신 아래 코드를 추가 입력한다.

CLASSPATH="$CLASSPATH:$CATALINA_HOME/lib/el-api.jar:$CATALINA_HOME/lib/servlet-api.jar:$CATALINA_HOME/lib/jsp-api.jar"

home_root='/home'
cd $home_root

for home_name in $(ls)
    do
        if [ -d "$home_root/$home_name/public_html/WEB-INF/classes" ] ; then
           CLASSPATH="$CLASSPATH:$home_root/$home_name/public_html/WEB-INF/classes"
        fi
        if [ -d "$home_root/$home_name/public_html/WEB-INF/lib" ] ; then
           CLASSPATH="$CLASSPATH:$home_root/$home_name/public_html/WEB-INF/lib"
        fi
done

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$CATALINA_HOME/lib
export LD_LIBRARY_PATH

class.jsp 파일을 다음과 같이 작성하여 classpath 확인

<%@page contentType="text/html; charset=euc-kr"%>
<%=System.getProperty("java.class.path")%>

2010/07/12 18:27 2010/07/12 18:27
Posted
Filed under Linux
  • [원문] - http://choris.springnote.com/pages/1097288

    리눅스 톰켓설치시 8080포트 열기

    방화벽에서 8080 포트를 열어준다. (방화벽 설정 > 사용자 설정 > 그 외의 포트 > 맨끝에 8080:tcp 추가 > 확인 > 확인 > 종료)

    ]# setup
  • 웹 브라우져로 확인한다.

    http://(설치한 IP주소 또는 도메인):8080/
  • 2010/07/12 17:32 2010/07/12 17:32
    Posted
    Filed under Linux
    [원문] http://cspark.net/1976490 



    분산시스템에서 업로드 파일폴더는 하나를 공용으로 사용하기 위해서 심볼릭 링크를 사용했다.
    명령어는 간단하다.

    사용법: ln [-f|n] [-s] 소스 [목표]
    또는 ln [-f|n] [-s] 소스1 ... 소스N 디렉토리

    /home/upload폴더를 /data/common/upload 폴더에 링크를 걸고 싶다면 아래와 같이 하면된다.
    ex) ln -s /data/common/upload /home/upload

    삭제 할 경우
    rm (링크명<-- 디렉토리 명) 실제 파일은 삭제 되지 않으며 링크만 제거 된다.

    2010/07/06 22:10 2010/07/06 22:10