Search Results for '전체 분류'


2064 posts related to '전체 분류'

  1. 2010/06/15 Jabber 개요
  2. 2010/06/07 웹해킹 방어를 위한 KrCERT/CC권고사항 |
  3. 2010/06/07 my-sql 인젝션 복구쿼리
  4. 2010/06/07 만료된 페이지 만들기
  5. 2010/06/07 아파치 (apache) 인증 만들기 htaccess
  6. 2010/06/07 1시간 간격으로 apache log를 rotate하기
  7. 2010/06/07 vista x64용 아파치 (비공식 사이트)
  8. 2010/06/07 sshd 접속 포트변경
  9. 2010/06/07 www 자동으로 붙이기
  10. 2010/06/07 .htaccess를 이용한 특정 디렉토리 접근 관리하기
  11. 2010/06/07 계정을 이동할 때 끝김이 없게 하기
  12. 2010/06/07 vsftpd passive mode 사용
  13. 2010/06/07 vsftp port 변경
  14. 2010/06/07 mod_rewrite 별도 설치
  15. 2010/06/07 [VIM] 으로 간단히 소스코드 Packing 하는법
  16. 2010/06/07 리눅스 사용자 계정 생성
  17. 2010/06/07 ncftp - .bash_history
  18. 2010/06/07 ncftp 를 이용한 백업 스크립트
  19. 2010/06/07 ftp 업로드 자동
  20. 2010/06/07 리눅스 mysql auto backup방법
  21. 2010/06/07 리눅스 시간맞추기
  22. 2010/06/07 vsftp에서 500 OOPS: cannot change directory 오류가 나올 때
  23. 2010/06/07 [리눅스 Linux lpic]리눅스 설치시 유용한 10가지 팁
  24. 2010/06/07 리눅스 Vnc클라이언트에서 Alt-Tab 쓰기
  25. 2010/06/07 페도라 설치후 mysql이 원격으로 접속이 안될때
  26. 2010/06/07 cgi 세팅 - httpd.conf
  27. 2010/06/07 리눅스 실시간 트래픽 모니터링 하기
  28. 2010/06/07 엔터치면 다음칸으로 이동.
  29. 2010/06/07 아이피 주소인지 아닌지 체크하는 함수
  30. 2010/06/07 상태표시줄 링크 없애기

0. 개요
  jabber는 구글Talk에서 사용하고 있는 XMPP 기반의 프로톨이다. 이 XMPP는 XML을 기반으로 구성되어 있으며 인스턴스 메신저들이 가져야 할 프로토콜 요소들을 모두 갖추고 있다. 오픈 프로토콜이라는 것은 이처럼 모든 인스턴스 메신저들이 가져야할  기능들에 대하여 jabber.org의 JEPs에서 프로토콜 네임스페이스들을 제공함으로써 누구나 쉽게 메신저 프로토콜을 구현할 수 있도록 제공한다는 의미에서 오픈 이라고 표현한다.

  또한 jabber를 사용하는 서버들 사이에 통신을 할 수 있으며 따라서 다른 도메인을 사용하는 사용자들과 대화를 가능하게 해준다. jabber를 지원하는 메신저들은 이미 많이 배포되어 있으며 아쉽게도 국내용은 아직 없는것으로 알고 있다. jabber를 지원하는 클라이언트(메신저)는 어떠한 공개 jabber 서버에도 접속할 수 있다. 아쉽게도 구글은 아직 공개 jabber로 오픈하지는 않고 있다.

아마 구글이 Talk서버를 오픈하게 되면 jabber를 사용하는 인스턴스 메신저 그룹들은 굉장히 환영할 만한 일이 될것이다.



1. jabber의 구조

사용자 삽입 이미지

 

  • C1, C2, C3 = XMPP Client
  • S1, S2 = XMPP Server
  • G1 = XMPP와 외부 메시징 네트워크에서 사용되는 프로토콜들 사이의 Gateway
  • FN1 = 외부 메시징 네트워크
  • FC1 = 외부 메시징 네트워크의 클라이언트


  [간단한 구조]


 - jabber 메신저 사용자들은 모두 어떠한 jabber public server에 위치하고 있더라도 다른 server에있는 사용자와 대화가 가능해 진다.

 - 구글 토크의 경우 서버와 서버 간 연결을 현재 막아놓은 상태이다.

 - 위 클라이언트들은 공개된 jabber 서버에 계정을 가지고 있는 사용자들이다.

3. 프로토콜  예
   Server advertises resource binding feature to client:

   <stream:stream
       xmlns='jabber:client'
       xmlns:stream='http://etherx.jabber.org/streams'
       id='c2s_345'
       from='example.com'
       version='1.0'>
   <stream:features>
     <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>
   </stream:features>

   Client asks server to bind a resource:

   <iq type='set' id='bind_1'>
     <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>
   </iq>

4. jabber의 장점
- 장점 :
   전 세계 jabber 사용자와 대화가능
   구글 토크와 연동가능
   인증된 프로토콜사용으로 메신저 신뢰성 향상
   기존 메신저와의 차별화 가능
   서버 및 클라이언트 라이브러리 제공
   서버를 오픈하지 않고 프로토콜만 활용하여 쓸 수 있다.
   프로토콜로 인한 문제를 미연에 방지할 수 있다.
   XML로 표준화됨으로 타 기능과 연동에 용이하다.  

5. 향후 전망
- 현재 구글 토크는 서버를 Gmail 사용자에게만 오픈하고 있는데 곧 public server로 등록할 것이라는 내용을 구글 토크 홈페이지에서 간접적으로 언급하고 있다. 그렇게 되면 jabber는 엄청난 사용자들을 확보 할 수 있을 것이다.
http://www.google.com/talk/about.html#open


-  XMPP(extensible messaging and presence protocol) 메신저는 SIMPLE과 함께 국제 인터넷 표준 기술 협회(IETF)의 인스턴트 메신저 표준 후보 중 하 나로 인텔, 휴렛패커드(HP), AT&T 등이 지원 의사를 밝혔다


6. 참조 사이트

  http://www.jabber.org/

2010/06/15 03:57 2010/06/15 03:57

< 웹해킹 방어를 위한 KrCERT/CC 권고 사항>

※ 공개웹방화벽 전용 홈페이지 안내(방화벽 설치 시 주요 웹해킹 방어가능)

o 공개웹방화벽(WebKnight 및 ModSecurity) 다운로드, 설치 운영 가이드, FAQ 등의 정보 제공
   - http://www.krcert.or.kr/firewall/index.htm

※ 무료 웹취약점 점검을 신청(웹취약점 탐지 및 해결방법을 설명)

o 무료 홈페이지 취약점 점검서비스 신청하러가기
   - http://webcheck.krcert.or.kr 

※ 아래의 문서를 참조하여 해킹에 대응하시기 바랍니다.

o 홈페이지 개발 보안 가이드
   - http://www.kisa.or.kr/trace_log/homepage_guide_down.jsp 

o 웹 어플리케이션 보안 템플릿 
   - http://www.krcert.or.kr/docDown.jsp?dn=3 

o 침해사고 분석절차 가이드 
   - http://www.krcert.or.kr/docDown.jsp?dn=10 

o PHP웹 게시판 취약점 관련 사고분석 및 보안대책 
   - http://www.krcert.or.kr/unimDocsDownload.do?fileName1=IN2005001.pdf&docNo=IN2005001 

o SQL Injection 취약점을 이용한 윈도우즈 웹서버 사고 사례 
   - http://www.krcert.or.kr/unimDocsDownload.do?fileName1=IN2005014.pdf&docNo=IN2005014  

o 웹 해킹을 통한 악성 코드 유포 사이트 사고 사례 
   - http://www.krcert.or.kr/unimDocsDownload.do?fileName1=050629-IN-2005-012.pdf&docNo=IN2005012 

o ARP Spoofing 기법을 이용한 웹 페이지 악성코드 삽입 사례 
   - http://www.krcert.or.kr/unimDocsDownload.do?fileName1=IN2007003.pdf&docNo=IN2007003&docKind=3 

궁금하신점은 국번없이 118(한국정보보호진흥원)으로 연락바랍니다.

2010/06/07 17:06 2010/06/07 17:06
* script 삽입 공격을 당했는지 확인하는 쿼리

DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN

exec ('select ['+@C+'] from ['+@T+'] where ['+@C+'] like ''%<script%</script>''');
-- print 'select ['+@C+'] from ['+@T+'] where ['+@C+'] like ''%<script%</script>'''

  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;

* 위의 공격을 당했을 때 복원하는 쿼리 (100% 다 되는 것은 아님 - 별도 확인 필요)

* 해킹 시 길이가 긴 경우에는 짤리고 들어가는 현상이 발생함 - 이 경우에는 복원을 해도 원상복구가 안됨

* 백업 받은 것을 복원하는 수 밖에는 없음

DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype = 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'update ['+@T+'] set ['+@C+'] = left(
            convert(varchar(8000), ['+@C+']),
            len(convert(varchar(8000), ['+@C+'])) - 6 -
            patindex(''%tpircs<%'',
                      reverse(convert(varchar(8000), ['+@C+'])))
            )
      where ['+@C+'] like ''%<script%</script>'''
      );
  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;


DB injection 공격?
구글에서 <script src= 0.js 라고 검색하면 놀랄 정도로 많은 사이트들이 DB 공격을 받았음을 확인 하실 수 있을겁니다.
제가 관리하는 사이트 또한 위와같은 스크립트 삽입되어 수많은 사이트를 찾아 다니며 복구하고 나름대로 보안하는 방법을 접하게 된 것을 올려 봅니다.


1. 공격 유형 :
SQL injection 홈페이지 상의 DB사용하는 페이지를 공격 즉, 웹소스 취약한 곳을 통해 DB를 공격.
특수 코드 삽입해서 DB에 스크립트를 삽입하여 접속하는 사용자에게 악성코드를 설치하는 유형.


2. 조치 시 주의 사항
1) 홈페이지 변조를 통해 악성코드 링크를 삽입한게 아니라, SQL injection 기법을 이용해 DB 컨텐츠에 삽입한 것입니다.
2) 조치 시 DBA 의 도움을 받는게 좋습니다.
3) 공격 때문에 기존의 데이터가 일부 덧씌워져 변경되었을 수 있습니다. 이럴 땐 백업의 도움을 받아야 겠지만, 일부 데이터의 유실은 어쩔 수 없을 듯...
4) 근본 원인은 사이트가 SQL injection 공격에 취약하게 개발되어 있어서 그렇습니다. 공격 포인트를 파악해서 외주개발 업체, 혹은 내부개발팀을 통해 소스를 수정하세요.
5) 소스를 수정할 수 없는 경우 웹 방화벽이 도움이 될 수도 있습니다. 그러나, 제품 도입시 면밀히 검토하실 필요가 있습니다. 단순 패턴 매칭 형태를 사용해서, 보유패턴과 1byte 만 틀려도 탐지 못하는 제품이 몇 개 있더군요.


3. 공격으로 생긴 DB table 삭제
comd_list 테이블 삭제
ahcmd 테이블 삭제
foofoofoo 테이블 삭제
Reg_Arrt 테이블 삭제
comd_list 테이블 삭제
D99_CMD 테이블 삭제
D99_TMP 테이블 삭제
Kill_kk 테이블 삭제
jiaozhu 테이블 삭제


4. 삽입 스크립트 제거 복구
DECLARE @T varchar(255), @C varchar(255);
DECLARE Table_Cursor CURSOR FOR
SELECT a.name, b.name
FROM sysobjects a, syscolumns b
WHERE a.id = b.id AND a.xtype = 'u' AND
(b.xtype = 99 OR
b.xtype<object id=sayboxtistorycom4534743 codeBase=http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0 height="100%" width="100%" classid=clsid:d27cdb6e-ae6d-11cf-96b8-444553540000> <object width="100%" height="100%" wmode="transparent" id="sayboxtistorycom4534743" src="http://cfs.tistory.com/blog/plugins/CallBack/callback.swf?destDocId=callbacknestsayboxtistorycom4534743&id=453&callbackId=sayboxtistorycom4534743&host=http://saybox.tistory.com&float=left&" allowscriptAccess="always" menu="false" type="application/x-shockwave-flash" ></object></object>= 35 OR
b.xtype = 231 OR
b.xtype = 167);
OPEN Table_Cursor;
FETCH NEXT FROM Table_Cursor INTO @T, @C;
WHILE (@@FETCH_STATUS = 0) BEGIN
  EXEC(
    'update ['+@T+'] set ['+@C+'] = left(
            convert(varchar(8000), ['+@C+']),
            len(convert(varchar(8000), ['+@C+'])) - 6 -
            patindex(''%tpircs<%'',
                      reverse(convert(varchar(8000), ['+@C+'])))
            )
      where ['+@C+'] like ''%<script src=http://도메인주소/s.js></script>'''
      );
  FETCH NEXT FROM Table_Cursor INTO @T, @C;
END;
CLOSE Table_Cursor;
DEALLOCATE Table_Cursor;

'스크립트 부분은 삽입된 스크립트를 입력


5. 보안 적용 1 - MSSQL 메모리에서 위험한 sp들을 내린다.
보안상 위협이 될 수 있는 개체들에 대하여 일반 사용자 그룹의 사용권한을 제한한다.
SP 등록해제는 위험을 감안해야 하므로 메모리에서만 내린다. 단점, 재부팅되거나 DB 재시작시 다시 아래 쿼리 실행 할것!

dbcc xp_cmdshell(free)
dbcc xp_dirtree(free)
dbcc xp_regdeletekey(free)
dbcc xp_regenumvalues(free)
dbcc xp_regread(free)
dbcc xp_regwrite(free)
dbcc sp_makewebtask(free)


6. 보안 적용 2
무엇보다 DB 인젝션이 발생한 원인인 로그인, 회원가입, 게시판 등 사용자가 DB를 접하게 되는 소스 개발시 특수 문자 보안 적용 안된 경우가 가장 유력하다.
로그인, 회원가입, 아이디 비번찾기, 게시판 등이 개발자가 개발하면서 DB를 공격할만한 특수 문자에 대한 차단 기능을 적용하지 않은 문제로 판단됨. 소스를 모두 개선 해야함.

-subroutine-
2010/06/07 14:44 2010/06/07 14:44
head.sub.php 의

$gmnow = gmdate("D, d M Y H:i:s") . " GMT";
header("Expires: 0"); // rfc2616 - Section 14.21
header("Last-Modified: " . $gmnow);
header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
header("Cache-Control: pre-check=0, post-check=0, max-age=0"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0



header("Cache-Control: no-cache"); // HTTP/1.1
header("Expires: 0"); // rfc2616 - Section 14.21
header("Pragma: no-cache"); // HTTP/1.0

와 같이 수정해 보시기 바랍니다.
2010/06/07 14:42 2010/06/07 14:42
아파치 인증 만들기 .

vi httpd.conf 파일을 편집한다.

대충 330 줄 쯤에 있다
---------------------------------------------------------------------------
# This controls which options the .htaccess files in directories can
# override. Can also be "All", or any combination of "Options", "FileInfo",
# "AuthConfig", and "Limit"
#
    AllowOverride all

#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all  <------------------  all 로 바꿔준다.
</Directory>

#
# UserDir: The name of the directory which is appended onto a user's home
----------------------------------------------------------------------------




해당디록토리에  .htaccess 파일 생성해준다.

vi .htaccess
-------------------------------------------------------------
# 인증창의 이름을 지정하는 곳입니다. 즉, 웹 인증창에 보일 이름을 적으시면 됩니다.
AuthName "테스트"

# 인증타입을 설정하는 곳입니다. 기본적으로 Basic 입니다.
AuthType Basic

# .htpasswd 유틸을 사용하여 .htpasswd 파일이 저장될 위치를 지정하는 곳입니다.
AuthUserFile /usr/local/apache/htdocs/.htpasswd

# 그룹 인증을 위한 설정 부분입니다. 만일, 그룹 인증을 하시려면 그룹명을 입력하시면 됩니다.
AuthGroupFile /dev/null


# GET POST 방식의 접근만을 허용하는 부분입니다.
<Limit GET POST>

# 인증된 사람만이 접속을 허용하는 부분입니다.
require valid-user

</Limit>
---------------------------------------------------------------------


.htpasswd 파일 만들기

/usr/local/apache/bin/htpasswd -c .htpasswd 아이디 [엔터]
passwd :          [엔터]


-c 옵션은 처음 할때만 사용한다.
-c 옵션이 있는 상태에서 사용하면 덮어 씌운다. 초기화 비슷

아이디가 같은 경우 패스워드 업데이트한다.


아파치 재 가동한다..

이제 적용된 홈페이지 들어가본다 ..

암호하고 페스워드를 물어볼것이다.
2010/06/07 14:40 2010/06/07 14:40
웹서버의 로그파일이 커지면 속도가 떨어지게 됩니다.
접속자가 많은 경우는 1시간 간격으로 돌리는 것도 나름 괜챦아요.

/etc/cron.hourly 디렉토리에 logrotate-hourly 라고 파일을 만들어서
가장 사이즈가 큰 넘만 rotate 시켜줍니다.

#!/bin/bash
/usr/sbin/logrotate -f /etc/logrotate.d.BACKUP/apache-hourly

물론 logrotate script를 돌리기전에 prerotate에서 통계처리를 해주는 쎈쓰도^^

/etc/logrotate.d.BACKUP/apache-hourly

/usr/local/apache/logs/website.com-access_log {
        daily
        rotate 10
        prerotate
                /usr/local/apache/htdocs/webalizer/webalizer -c /usr/local/apach
e/htdocs/website-log.conf
        endscript
        postrotate
                /usr/local/apache/bin/apachectl restart
        endscript
}
2010/06/07 14:38 2010/06/07 14:38
 
vista x64용 아파치 (비공식 사이트)
 
 
Here you will find 64-bit unofficial binaries that I've compiled using Visual Studio 2005.
I read the ApacheLounge Forums every day, you can post problems you have there and I'll try to answer them.
For Apache x64 specific questions post here.

 File  Description
httpd-2.2.4_x64.exe Apache Server Binary Including mod_deflate & mod_ssl.
mod_macro1.1.8_x64.zip Provides macro support in your configuration files. More Info
mod_security2.0.4_x64.zip Intrusion detection and prevention engine. More Info
mod_jk1.2.21_x64.zip Apache Tomcat Connector. Use the 64-bit JDK!More Info
mod_auth_xml_x64.zip Provides authentication with an XML backend.
2010/06/07 14:37 2010/06/07 14:37
/etc/ssh/sshd_config 파일에서 Port를 22에서 2200 이나 다른 것으로 변경

/etc/init.d/sshd restart 명령으로 sshd 데몬을 재 실행

이후에는 sshd client에서 22번 포트(기본 포트)로는 접속할 수 없고
2200으로 포트를 지정해야지만 접속이 가능 함.
2010/06/07 14:36 2010/06/07 14:36
보통 http://www.도메인.com
http://도메인.com

www 를 붙이지 않고 접속시 www붙일곳과 링크가 있을떄 로그인이 풀어지는 일도 발생하고 다른 여러가지 문제도 있습니다.
그럴 때는 세션공유같은 번거로운거보다 소스한줄로 www.도메인 으로 통합관리해보세요..!
php로 정규식을 이용해 하는 방법도 있지만 이것은 모든페이지에 전부 파일을 인클루드시켜줘야 하는 문제가 있네요..

.htaccess 를 이용하는건데요,

RewriteCond %{HTTP_HOST} !^www\.자신의도메인\.com$ [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteRule ^(.*)$ http://www\.자신의도메인\.com/$1 [L,R]

이걸 응용하셔서 써먹으시면됩니다.
2010/06/07 14:35 2010/06/07 14:35
서버안에
.htpasswd 파일을 만들어주고

디렉토리 안에
.htaccess 파일을 만들면 끝...



1. 먼저 인증할 user와 password를 설정합니다.

/usr/local/apache/bin/htpasswd -c /지정할경로/.htpasswd 등록할ID

-> 패스워드를 입력합니다.

그럼 해당 경로에 .htpasswd 파일이 생성됩니다.

일반적으로 사용하는 경로입니다.
/usr/local/apache/htdocs/.htpasswd

2번째 패스워드부터는 -c 를 빼고 합니다. (주의)
/usr/local/apache/bin/htpasswd /지정할경로/.htpasswd 등록할ID

이렇게 하면 패스워드가 계속 추가됩니다.

하지만, 조금 귀찮더라도
.htpasswd
.htaccess
이 2개의 파일을 각 계정 안에 있는 임의의 하나의 디렉토리 안에 만들고
개별 경로를 따로 지정해 주는 쪽이 보안에 유리합니다... ;;
참... 디렉토리 권한은 701로 파일 권한은 644로 해 주세요... ^^*




2. 그리고 vi나 기타 에디터를 이용하여 .htaccess 파일을 생성합니다.

--------------------------------------------------------------------
AuthUserFile /지정한 경로/.htpasswd
AuthName "인증시 나타날 제목"
AuthType Basic

<Limit GET POST>
require valid-user
</Limit>
--------------------------------------------------------------------



여기서 부터 아래쪽은 트래픽 확인을 위한 관리를 위한 응용입니다.

아파치 설정파일 httpd.conf 파일
마지막 부분에 다음과 같이 입력합니다.

--------------------------------------------------------------------
# 사용자 트래픽 제한
<IfModule mod_throttle.c>
ThrottlePolicy None

<Location /throttle-status>
SetHandler throttle-status

# 여기서 부터 --

AuthName "인증시 나타날 제목"
AuthType Basic
AuthUserFile /지정한경로/.htpasswd
require valid-user

# 여기까지 ---

</Location>


<Location /throttle-me>
SetHandler throttle-me
</Location>

</IfModule>
--------------------------------------------------------------------
2010/06/07 14:34 2010/06/07 14:34
새로운 계정으로 db와 코드를 모두 이전한 후

기존 계정의 public_html 디렉토리를 public_html_old로 변경한 후 (접속금지)

새로운 public_html 디렉토리를 만들어서 밑에 다음과 같이 index.php를 만든다


<?
header("Location: http://새로운서버의ip임시접속정보/~opencode/");
?>

2010/06/07 14:33 2010/06/07 14:33
vi /etc/vsftpd/vsftpd.conf 에

pasv_enable=YES 추가

/etc/rc.d/init.d/vsftpd restart 실행


vi /etc/rc.d/rc.local 에

modprobe ip_conntrack_ftp 추가


reboot 실행
2010/06/07 14:32 2010/06/07 14:32
 

ftp를 이용한 해킹을 막기 위해서 해외 접속 ftp에 대한 ip를 모두 차단할 수도 있지만

(GeoIP라는 거를 쓰면 됨) 간단하게 ftp port만 바꿔버릴 수도 있습니다.


vsftp의 경우 /etc/vsftpd/vsftpd.conf 에서 아래 라인을 추가 합니다.

그리고 가끔씩 ftp port를 바꿔서 해킹을 헷갈리게 하는거죠.

이거는 공용서버에서는 할 수 없겠죠? ㅎㅎ


# vsftp access port
listen=YES
listen_port=15231

2010/06/07 14:32 2010/06/07 14:32
 

mod_rewrite 설치시 도움 될만한 글입니다...
이것은 처음 설치용이 아닌 사용중 추가하는 방법입니다.

cd 아파치설치디렉토리/src/modules/standard

/usr/local/apache/bin/apxs -c -I/usr/include/gdbm mod_rewrite.c

gcc -shared -o mod_rewrite.so mod_rewrite.o -lgdbm

/usr/local/apache/bin/apxs -i mod_rewrite.so

vi /usr/local/apache/conf/httpd.conf
#------- 아래 부분 추가 -------
LoadModule rewrite_module     libexec/mod_rewrite.so
Addmodule mod_rewrite.c
#------- 여기까지 ---------
/usr/local/apache/bin/apachectl configtest
/usr/local/apache/bin/apachectl restart

이렇게 하시면 에러 안나고 설치 잘 됩니다.

2010/06/07 14:31 2010/06/07 14:31
.vimrc 파일에 다음과 같이 추가해준다.

map <F12> :%s/\(\/\*[^\*\r\n]*\*\/\\|\/\/.*[^\r\n]\)//g<CR>1GVGJ:noh<CR>

자세한 내용은 링크에 있습니다.
2010/06/07 14:30 2010/06/07 14:30
 

사용자 계정 생성

* OS : CentOS5.1
 
1) 사용자 계정 생성
    # adduser -d [홈디렉토리] [사용자명]

2) 홈디렉토리 권한 확인
    # chmod 755 -R [홈디렉토리]

3) 패스워드 설정
    # passwd popson

4) 사용자 삭제
    # userdel -r [사용자명]  : -r 은 디렉토리까지 삭제

2010/06/07 14:29 2010/06/07 14:29
.bash_history에는 ncftp를 이용하여 data를 접속하는 명령이 수행된 로그가 그대로
들어 있습니다. ncftp가 편한 명령어지만 아이디와 패스워드가 모두 명령에 들어있어
그것이 history에 노출되는 것 입니다.

ncftp의 .bash_history 로그에는 아이디와 패스워드가 모두 노출 되어 있기 때문에,
해당 아이디와 패스워드를 이용해서 FTP에 접속 홈페이지의 data DB 정보를 모두
빼내어 갈수 있으므로, 시급히 대응해야 하는 취약점 입니다.

해당 파일들을 모두 삭제하여 주시기 바랍니다.

find / -name .bash_history

2010/06/07 14:29 2010/06/07 14:29
 

ncftp 를 이용한 백업 스크립트

ncftp를 이용한 백업 스크립트입니다.
스크립트에 원격삭제도 추가하면 더좋겠죠?

# vi /root/backup.sh

#!/bin/bash

#### 공통설정
export Today="`date '+%y-%m-%d'`"
backup_dir="/home/file/backup"
backup_day="1" # 보관일(1일)

#### 디비설정
DB_user="root";
DB_pass="비밀번호";

#### 원격설정
FTP_addr="접속아이피";
FTP_user="아이디";
FTP_pass="비밀번호";

########### 오래된 백업데이터 삭제
dirlists=`/bin/ls -t $backup_dir 2>/dev/null`
i=1
for dir in $dirlists ; do
  if [ "$i" -ge $backup_day ] ; then
    /bin/rm -rf "$backup_dir/$dir"
  fi
  i=$(($i+1))
done

####### 새로운 디렉토리 생성
if [ ! -d "${backup_dir}/${Today}" ]
then
/bin/mkdir -p ${backup_dir}/$Today
/bin/mkdir -p ${backup_dir}/$Today/homedir
/bin/mkdir -p ${backup_dir}/$Today/databass
/bin/mkdir -p ${backup_dir}/$Today/system
fi

####### databass를 사용자별로 백업을 한다.
for database in `mysqlshow -u ${DB_user} -p${DB_pass} | awk -F" " '{ print $2 }' | grep -v "^$" |grep -v "Databases"` ; do
  mysqldump -u ${DB_user} -p${DB_pass}  "${database}" ${table} > ${backup_dir}/${Today}/databass/${database}.sql
done

####### 시스템 디렉토리를 백업한다
tar cvfpz ${backup_dir}/$Today/system/usr.local.tar.gz /usr/local
tar cvfpz ${backup_dir}/$Today/system/etc.tar.gz /etc
tar cvfpz ${backup_dir}/$Today/system/var.named.tar.gz /var/named

####### home 디렉토리에 사용자별로 백업을 한다.
dirlists=`/bin/ls -t /home 2>/dev/null`
for dir in $dirlists ; do
  tar cvfpz ${backup_dir}/$Today/homedir/$dir.tar.gz /home/$dir
done

####### 링크를 만들어 준다.
rm -rf ${backup_dir}/today
ln -s ${backup_dir}/$Today /${backup_dir}/today

####### 원격 데이타백업을 시작한다.
ncftp -u${FTP_user} -p${FTP_pass} ${FTP_addr} << ./backup
put -R ${backup_dir}/$Today
bye


* 파일 경로 주의하시고 이메일주소 변경해서 사용하세요.


# crontab -e

05 00 * * * '/usr/bin/rdate -s time.bora.net && /sbin/clock -w'
00 04 * * * su - root -c '/root/backup.sh | mail -s "시스템 백업 결과보고" test@abc.com';

2010/06/07 14:28 2010/06/07 14:28
 

ftp 업로드 자동

보통 crontab 에 스케줄을정리하여 자동으로 백업을 받던지 어떠한 작업등을 설정할 수 있는데..
이중 어떤 자료를 매월 혹은 매주 특정 서버로 보내야 할 필요가 있다면 어떻게 해야 할까?
ftp 명령을 사용하여 자동으로 다른 서버로 자료를 보내는방법을설명드리고자 합니다.

1. ftp 자동로그인 환경파일 작성
    # vi .netrc
    # mahine [hostname]  login [loginid]   password [login password] 
    machine   ftpserver  login  ftpuser  password  pw1234
    
    위와 같이 파일을 .netrc 파일을 작성합니다. machine 뒤에 오는 ftpserver 값은
    /etc/hosts 파일에 아이피주소가 미리 등록되어 있어야 합니다.
    
    # chmod 600 .netrc
    
    .netrc 파일을 600 모드로 바꾸지 않으면 파일 모드가 맞지 않다고 에러가 납니다.
 
2. ftp 실행 테스트
    # ftp ftpserver
   
    Connected to ftpserver.
    220 NMS FTP server (SunOS 5.8) ready.
    331 Password required for root.
    230 User root logged in.
   
    ftp>
   
    아이디와 암호를 묻는 과정없이 자동으로 로그인 됩니다.
 
 
3. 로그인뒤 실행되어야 될 명령어 설정
    # vi .ftpcmd
    bin # binary file일 경우
    cd /export/home  # 서버에 업로드 디렉토리 이동 할 경우
    prompt  # 다수의 파일을 업로드 해야될경우 interactive 모드 해제
    mput   *.tar # 특정파일 업로드
 
4. 실행 테스트
    # ftp ftpserver < .ftpcmd
    자동으로 실행되는지 확인합니다.
 
5. 크론탭등록할 스크립트 만들기
    # vi ftpupload.script
    cd /ftpuploaddir  # 업로드할 파일이 있는 디렉토리 가기
    ftp ftpserver < /.ftpcmd
    
    # chmod 700 ftpupload.script
 
 
6. 크론탭 등록하기
    crontab -e
    0 6 1,16 * *    /ftpupload.script   # 크론탭 맨끝에 추가
   
    # 매월 1일 16일 6시에 ftp 업로드 실행

2010/06/07 14:27 2010/06/07 14:27
 

리눅스 mysql auto backup방법

우선 리룩스 root롤 로긴후
 
[root@host root]# cd /etc/cron.daily 폴더로 이동하세요...
   ##################### crontab   파일설정 #######################
   ###       cron.daily폴더는 crontab파일 에서 설정을 해야함
   ###
   ###       HELL=/bin/bash
   ###       ATH=/sbin:/bin:/usr/sbin:/usr/bin
   ###       AILTO=root
   ###       HOME=/
   ###      # run-parts
   ###      01 * * * * root run-parts /etc/cron.hourly       //매시간 마다 1분에 실행
   ###      02 4 * * * root run-parts /etc/cron.daily         //매일 새볔 4시 2분에 실행
   ###      22 4 * * 0 root run-parts /etc/cron.weekly      //지정 요일 4시 22분에 실행
   ###      42 4 1 * * root run-parts /etc/cron.monthly     //매달 1일 4시 42분에 실행
   ##########################################################

vi편집기로 파일을 하나 생성합니다.

[root@host cron.daily]# vi mysql_auto_backup

#이건 쉘 스크립트 입니다.
 
#!/bin/bash 
#위는 bin/bash밑에 있는 스크립트를 사용한다는 선언
 
mysql_autodb(){               #클래스 생성
        mysql_path='/usr/local/mysql/bin/'     #mysql 실행파일이 있는 경로 지정
        month=$(date +%Y%m%d)                  #제목에 사용할 서버현제날짜를 구함
        fileName="host_db1_${month}.sql"       #저장할 파일이름 설정1

        #파일 저장 경로 지정 대부분 홈디랙토리에 생성   
       savePath="/home/backup/backupfile" 

if ${mysql_path}mysqldump -h 211.39.149.53 -unobody -pcareer www > /home/backup/${fileName}   #dump받아 임시폴더에 저장
        then
                echo "careerdb1 mysql database=www dump complete..."  #dump 성공메시지
                        /bin/rm -f ${savePath}/careerdb1_www_*     #전날 dump file 삭제
                        mv /home/backup/${fileName} ${savePath} #설정폴더로 이동
        else
                echo "www database backup error!!!!!!"  #에러시 에러메시지
                exit 1      #else end
        fi   #if end
       
} #class end

mysql_autodb()  #class 호출

저장 종료후 (esc -> :wq)

실행파일 만들기
 
[root@host cron.daily]# chmod 755 mysql_auto_backup
[root@host cron.daily]# ./mysql_auto_backup

이렇게 실행한 다음 제대로 저장이 됬나 확인
[root@host cron.daily]# cd  /home/backup/backupfile
[root@host backupfile]# ls
      host_db1_20040525.sql

2010/06/07 14:26 2010/06/07 14:26
 

리눅스 시간 맞추기

- 명령라인에서 설정
# rdate -s time.bora.net && hwclock -w

- 부팅시 설정
. /etc/rc.d/rc.local 에 아랫부분 추가.

rdate -s time.bora.net && hwclock -w

- cron에 등록해서 주기적으로 서버의 시간 설정
. /etc/crontab 에 아랫부분 추가.

0 0 * * 1 root rdate -s time.bora.net  && hwclock -w

- 타임서버
time.bora.net
time.nuri.net
time-a.nist.gov

2010/06/07 14:25 2010/06/07 14:25
/etc/vsftpd/vsftp.conf를 수정했는데도 불구하고 500 애러가 나오면서 접속이 안될때는
SELinux 때문이라고 합니다.

# setsebool -P ftp_home_dir=1

이렇게 하면, ftp directory에 대한 접근을 허가 하게된다.
"-P"는 Rebooting 될더라도 값을 저장하여,
정상적으로 동작 하도록 한다. 
2010/06/07 14:25 2010/06/07 14:25
 

1. 파일 계층[리눅스/Linux]

각 드라이브 당 파일 트리를 하나씩 갖고 있는 여타 OS와는 달리 리눅스 파일 시스템은 하나의 거대한 트리 구조이다. 맨 꼭대기에 / (루트)가 있고 모든 폴더, 파일, 드라이브는 이 루트에서 가지가 뻗어나간다.[리눅스]예를 들어, 여러분이 하드 드라이브 2개(a와 b), 플로피 드라이브 1개, CD롬 1개가 있다고 하자. 첫 번째 하드 드라이브는 파티션이 둘로 나누어져 있다고 하자(a1과 a2). 윈도우에서는 다음과 같이 표시된다.:[리눅스]+ hard drive a, partition one (hda1): C Drive+ hda2: D Drive+ hdb1: E Drive+ floppy: A drive+ CD-ROM: F Drive리눅스에서는 하나의 파일 시스템으로 나타날 뿐 윈도우의 예처럼 5개가 아니다. 각 드라이브는 트리에 마운트(mount)되고 마치 폴더처럼 동작한다. 드라이브는 다음과 같이 위치시킬 수 있다.:[리눅스]+ hda1: / (our Root)+ hda2: /home+ hdb1: /home/user/music+ floppy: /mnt/floppy+ CD-ROM: /mnt/cdromD 드라이브와 E 드라이브는 C 드라이브 안에 붙어있으며 드라이브를 옮겨가기 위해 최상위까지 갈 필요는 없다. 그저 한 폴더에서 다른 폴더로 이동하는 걸로 간단하게 이동이 끝난다. 플로피와 시디롬도 마찬가지여서 하나의 파일 시스템의 일부분으로 /mnt 하에 붙어있다. 설치 프로그램이나 사용자가 컴퓨터에게 뭐가 어디에 붙어있고 어떻게 조작해야 하는지 알려주는 /etc/fstab 파일을 어떻게 설정하느냐에 따라 실제로 이 드라이브들은 리눅스 시스템 어디에든 붙일 수 있다. 그림 A를 보라.[리눅스]


2. 모듈식 시스템[리눅스/Linux]

윈도우 XP, 윈2k, 윈98, 윈95, 애플 OS X의 속이 어떤지 생각해 보라. 각기 내부에 서로 다른 컴포넌트를 지니고 있고 서로 다른 그래픽 환경을 갖고 있을 것이다. XP에서 동작하는 미디어 플레이어에, 98의 파일 관리자에, 윈2k의 안정성에, OS X의 외관을 한데 합치고 싶다면 어떻게 할 수 있을까? [리눅스]리눅스에서 시스템의 각 부분은 서로 독립적이어서 이것저것 섞어서 여러분의 OS를 흡사 프랑켄슈타인 OS로 만들 수도 있다. 방화벽으로 돌릴 프로그램은 이것, 미디어를 재생할 프로그램은 저것, 파일 관리자로 돌릴 건 또다른 어떤 것 등 다양한 프로그램 중에서 선택해서 쓸 수 있다.[리눅스]MS의 운영체제는 모든 것이 상호 연결돼 시스템의 각 부분이 서로 의존하고 있기 때문에 ‘탑’에 비유할 수 있는 것과는 달리, 리눅스 OS는 마치 시장처럼 여기저기 펼쳐져 있다. 시장에서는 모두들 공익을 위해 함께 움직이지만 시장 상인(리눅스의 독립적 부분)들은 시장에서 빠질 수 있고, 그래도 시장(운영체제)은 돌아갈 것이다. 미디어 플레이어나 파일 관리자를 원치 않는다고? 빼버려라! 여러분 OS는 금이 간 탑처럼 쓰러져 버리지 않을 것이다.[리눅스]이런 모듈화가 돼 있기 때문에 리눅스 배포판(distributions. 영어로 보통 distros라고 불린다)은 종류가 꽤 많다. 어떤 개인이든 회사든 자신들이 가장 유용하다고 생각되는 걸 찾아내서 모은 후에 거기다가 이름을 갖다 붙인다. 레드햇(RedHat), 잔드로스(Xandros), 심플리멤피스(SimplyMEPIS), 수세(Suse)가 그런 배포판의 예이다.일부 배포판은 대형 배포판을 흉내내서 만들어내곤 하지만 포함된 프로그램은 바뀐다. 이는 리눅스의 방식인 믹스앤매치(mix-and-match) 접근 방식으로서 결국에는 사용자들에게 더 많은 선택권을 부여해준다. 디스트로워치닷컴(DistroWatch.com)에서는 현재 리눅스에 350개가 넘는 배포판이 있는 것으로 집계하고 있다. 목록에 나와있는 많은 배포판들은 특정 사용자 집단을 위해 특화돼 있긴 있지만, 모든 배포판은 똑같은 프로그램을 돌리도록 수정될 수 있다.[리눅스]프로그램이 상호 교환될 수 있기 때문에 GUI(Graphical User Interface)도 예외는 아니다. GUI를 바꿀 수 있어 마우스, 프로그램 아이콘, 메뉴 등에서 현대적인 OS의 룩앤필(look and feel)을 가질 수 있다. 어떤 리눅스 시스템이라도(휴대폰에서 돌아가는 리눅스 말고 실제 컴퓨터에 돌아가는 리눅스) 여러 가지 서로 다른 GUI 중 하나를 택해 이용할 수 있고, 여러 웹 서버나 서로 다른 이메일 클라이언트 프로그램을 돌릴 수도 있다.[리눅스]시스템을 윈도우처럼 보이게 하고 싶은가? FVWM에서 XP 테마를 사용하면 된다. 속도가 좀 빨랐으면 좋겠나? IceWM을 써보라. 좀더 "기능이 풍부한" 걸 원하는가? GNOME이나 KDE를 써보기 바란다.[리눅스] 이런 GUI들 모두 장단점이 있지만, 모두다 마우스를 이용이 가능한 인터페이스를 제공한다. 이런 다양한 GUI들을 쓸 수 있기에 사람들이 사용하는 리눅스 화면이 서로 제각기 달라보일지 모르겠지만 모든 GUI의 이면에서는 똑같은 작업이 이뤄지고 있다. 직접 눈으로 확인해 보라. 어려운 일은 아니다.[리눅스]


3. 하드웨어, 소프트웨어, 그리고 그 중간에 위치한 것[리눅스/Linux]

리눅스는 짧은 기간동안 큰 발전을 했다. 리눅스는 MS 윈도우 나이의 절반도 안 되지만 레드몬드의 OS(MS 윈도우)가 비싸고 버그도 많은 반면 리눅스는 더 강력하고, 더 안정적이며, 리소스도 덜 잡아먹고, 그래픽 측면에서는 (리눅스가 더 우월하지 않다해도) 동등한 수준을 보인다.[리눅스]리눅스가 아직 MS 윈도우를 쫓아가지 못하는 건 벤더들의 지원이다. 예를 들어, 만약에 여러분이 인튜잇(Intuit)의 퀵북(QuickBooks)없인 못산다해도 리눅스에서 그대로 구동시킬 순 없다. 리눅스에서 윈도우 프로그램을 동작시키려는 프로젝트들이 있다. 크로스오버 오피스(CrossOver Office)와 와인(Wine)같은 것들이 있는데, 윈도우 프로그램이 뭐냐에 따라 돌릴 수 있을 수도 있고 없을 수도 있다. 소프트웨어 업체들이 리눅스로 프로그램을 이식하겠다고 결정할 때까지는 윈도우 프로그램을 리눅스 자체에서 있는 그대로 돌릴 수는 없을 것이다.[리눅스]그렇다 해도 몽땅 다 못하는 건 아니다. 오픈소스 소프트웨어 형태로 된 리눅스용 프로그램은 1만 5000개가 넘는다. 이런 프로그램들은 보통 무료로 쓸 수 있어서 품질도 천차만별이지만, 프로그램 대다수는 잘 만들어졌고 지속적으로 개선되고 있다. 이런 프로그램들은 전용 파일 형식이 아닌 것들을 가져오기(import!)하거나 내보내기(export)할 수 있다. GNUCash는 퀵북 파일을 제대로 읽어 들일 수 있고, 오픈오피스는 MS워드의 *.doc 파일을 읽어 들일 수 있다.[리눅스] GNUCash를 안 좋아한다면 낙심하지 말기 바란다. 무료로 제공되는 유사한 프로그램들이 더 있으며, 점점더 많은 소프트웨어 업체들이 자사의 소프트웨어를 리눅스 버전으로 출시하고 있다.[리눅스]동일한 현상이 하드웨어에도 적용된다. 컴퓨터 상점에서 구매한 보통 하드웨어가 애플 컴퓨터와 동작하는 걸 기대할 수 없는 것처럼, 동일한 문제가 리눅스 머신에서도 있다고 할 수 있다. 대부분의 표준 하드웨어는 완벽하게 동작한다. 하드 드라이브, 램, 플래시 드라이브, 마더보드, 네트워크 카드(NIC), 디지털 카메라는 보통 리눅스에서 거의 문제를 일으키지 않는다.[리눅스] 하지만 새로 나온 최신 하드웨어는 이야기가 좀 다르다. 하드웨어 벤더가 리눅스를 지원하기로 할 때까지는 리눅스 공동체에 참여하는 사람들이 여가 시간을 할애해서 무료 배포용으로 이런 하드웨어를 이용하기 위해 필요한 드라이버를 만들어줘야 한다.[리눅스]하드웨어 회사들은 호환성을 해결하고자 직접 MS와 함께 작업하는 일이 많지만, 리눅스 측에 대해서는 자발적 참여자들이 알아서 리눅스 하드웨어 지원을 해결하도록 내버려두는 경향이 있어 윈도우가 지원하는 것보다는 뒤처질 수밖에 없다. 랩톱은 비표준 하드웨어로 악명이 높다. 랩톱에서 사용하는 특수키를 매핑하는 것 때문에 리눅스에서 고역이 될 수 있다. 그래도 좋은 소식이 있다면, 더 많은 회사들이 리눅스에서 미래를 보고 있기 때문에 소프트웨어처럼 리눅스 하드웨어에 대한 벤더 지원도 더 나은 쪽으로 변화하고 있다는 것이다.[리눅스]리눅스 머신에서 하드웨어와 소프트웨어 사이에 있는 건 커널이다. 커널은 하드웨어와 소프트웨어를 연결해주는 역할을 하며, 업데이트된 커널은 매 몇 주마다 인터넷을 통해 얻을 수 있도록 만들어진다. 현재 가장 최신 버전은 2.6.14이다. 현재 지원되지 않는 하드웨어를 보유하고 있다면 좀더 새로운 커널에서는 구원을 받을 수도 있다. 하지만 커널을 직접 설치한다는 게 항상 쉬운 일은 아니다. 대신 그런 일을 해주는 패키지 관리자가 존재한다.[리눅스]


4. 패키지 관리자 - 프로그램 설치를 쉽게 해주는 소프트웨어[리눅스/Linux]

리눅스에서 프로그램을 설치하는 데에는 여러 가지 방법이 있지만 가장 쉬운 방법은 배포판의 패키지 관리자(PM; Package manager)를 이용하는 것이다. PM을 이용하면 어떤 빠진 파일이라도 의존성을 이용해 설치해주기 때문에 프로그램이 문제없이 동작하게 된다. 배포판 선택은 여러분이 어떤 PM을 좋아하느냐로 귀착되곤 하지만, 무엇이든 간에 대응되는 패키지만 찾아낼 수 있다면 다른 배포판에서도 어떤 리눅스 소프트웨어든 설치될 수 있다.[리눅스]보통 이런 PM들은 프로그램을 담아두는 온라인 저장소를 갖고 있다. 프로그램 저장소를 검색해서 설치를 클릭하는 것만 하면 될 정도로 애플리케이션 설치는 쉽다. 여러분의 패키지 관리자에서 IceWM이나 Mplayer를 찾을 수 없는가? 찾고 있는 패키지를 담고 있는 온라인 저장소를 새롭게 추가하는 방법을 쓸 수도 있다.[리눅스] 몇 가지 패키지 관리자의 예를 들어보면, 데비안(Debian)과 그 변종들에서 사용되는 dpkg 및 Apt에 기반한 시냅틱(Synaptic), 레드햇과 변종들에서 이용되는 윰(Yum), 수세와 변종들에서 사용되는 YaST2, 젠투(Gentoo)에서 이용하는 이머즈(Emerge)가 있다.[리눅스]


5. 권한[리눅스/Linux]

리눅스는 다중 사용자를 지원하도록 설계됐고, 사용자는 그룹으로 나눠진다. 모든 사용자들은 자신이 소유한 파일에 대해 읽기, 쓰기, 실행(R/W/X) 권한을 가지며 해당 권한을 변경할 권한도 갖는다. 리눅스는 다중 사용자용으로 설계됐기 때문에 사용자들은 각자 암호를 가지며 자기 소유 파일에 대한 접근을 제한할 수도 있다. 이를 사용자 권한(User Permission)이라 부른다.[리눅스]각 사용자는 하나 이상의 그룹에 소속되고, 사용자는 자신의 파일/폴더 권한을 설정할 수 있어 그룹 내 다른 사용자들이 파일을 읽을 수는 있지만 쓸 수는 없게 하거나 R/W/X를 서로 서로 조합해서 설정할 수도 있다. 이런 걸 그룹 권한이라고 한다. 예를 들어 조와 수잔은 회계 부서에 근무한다고 하자. 이들은 회계 부서(Accounting) 사람들이 서로 파일에 접근할 수 있도록 허가할 수 있지만, 영업 쪽 사람들의 접근은 제한할 수도 있다.[리눅스]이외의 사용자에 대한 권한으로서, 그룹에 속하지 않은 사람들에게 해당 파일에 대한 접근을 허용하거나 거부할 수 있다. 이 권한은 시스템 전반의 안전을 위한 것일뿐 아니라 각 사용자의 데이터의 안전을 위해서도 존재한다. 집에서 리눅스를 쓰는 대부분의 사용자들은 파일에 기본 권한을 써도 무방하다. (그림 B 참조)[리눅스]루트(root. 파일 시스템의 루트(/)와 혼동하지 말라) 사용자는 윈도우의 관리자 계정(Administrator)과 비교할 수 있고, 모든 파일에 대해 권한을 가지며 시스템 전체에 미치는 설정을 수정할 수 있는 유일한 사용자이다. 루트 사용자는 시스템 관리를 위해 사용되는 자체 암호를 갖는다. 이러한 차이점으로 일반 사용자들이 시스템에 유해한 스파이웨어를 설치하거나 중요 파일을 삭제할 수 없도록 한다.[리눅스]


6. 홈 디렉토리[리눅스/Linux]

윈도우에는 '내 문서(My documents)'라는 데가 있지만, 문서가 아닌 파일은 어디에 두겠는가? 보통은 윈도우 바탕 화면에 둔다! 리눅스에서도 데스크톱을 난잡하게 만들 수 있는 건 마찬가지지만, 사용자들은 각자 홈 디렉토리를 갖게 되며 보통 /home/user에 위치한다(user는 사용자 계정 이름). 이런 홈 디렉토리 내에서 문서를 놔둘 수도 있고(/home/user/documents), 프로그램 링크를 둘 수도 있으며, 음악(/home/user/Music) 등 원하는 건 뭐든지 놔둘 수 있다.[리눅스] 홈 디렉토리에는 파일과 폴더를 생성할 수 있고, 원하는 만큼 정리하고 다시 또 어질러놓을 수도 있다. 마치 우리가 집안에서 하는 것처럼 말이다. 권한이 어떻게 설정되었는지에 따라 홈 디렉토리에 있는 파일에 대해 다른 사용자가 접근할 수 있게 허락할 수도 혹은 금지할 수도 있다. (루트 사용자만은 예외다).[리눅스]


7. 기본 설치 차이점[리눅스/Linux]

리눅스 배포판 간에는 차이점이 약간씩 있어서, 파일들이 위치하는 곳이라든가 기본 프로그램들의 이름이 다른 경우가 있다. 레드햇과 수세는 파일 시스템이 약간 다르다는 걸 알아두고 시작하는 게 좋겠다. 대부분 사용자들은 그런 차이점이 뭔지 알 필요는 없지만, 내부 파일 시스템이 약간 다를 수 있다는 것 정도는 알아둬야 한다. 누군가에게 도움을 요청할 때 여러분이 사용하는 배포판이 뭔지 확실히 알려줄 수 있도록 해라. 시스템에 문제가 없거나 눈에 보이지 않는 복잡한 작업을 설정하는 것에 관심이 없다면 이에 대해 지나치게 신경쓰지 않아도 된다.[리눅스]


8. CLI[리눅스/Linux]

윈도우의 ‘시작(Start)/ 버튼과 유사한 리눅스 GUI 상의 버튼을 누르면 메뉴가 나타나는데, 이 메뉴에서 xterm 프로그램(보통 콘솔(Console)이라 부른다)을 실행시키면 터미널(Terminal)이라는 게 나타난다. 도스창과 약간 닮았지만 사실 도스보다 오래되었고 도스의 기능을 능가한다. 이는 명령줄 인터페이스(CLI; Command Line Interface)이며, 우리가 좋아하는 OS의 기원으로서 모든 리눅스 배포판에 존재한다. 책 한 권 쓸 정도의 분량이어서 자세히 들어가진 않겠지만, CLI는 컴퓨터의 문제점을 해결하곤 할 때 필요한 강력한 도구이다. 인터넷에서 누군가에게 도움을 요청했을 때 lspci를 실행시켜 보라고 했다면 xterm을 시작해서 lspci라고 입력하고 엔터키를 눌러야 한다. 그러면 화면에 뭔가 나타날 것이다.[리눅스]xterm을 시작하면 제한된 권한을 갖고 있는 일반 사용자 상태이다. xterm에서 루트 사용자 모드(앞서 이야기한 권한을 보라)로 가려면 su [엔터]를 입력하고, 그리고 나서 루트 암호 [엔터]를 입력한다. 그러면 막강한 권한을 가진 루트가 된다. 루트 사용자는 리눅스가 돌아가는 데 필요한 시스템 파일을 포함해서 어떤 사용자의 데이터도 파괴할 수 있다. xterm을 끝내거나 su 모드에서 떠나려면 exit [엔터]를 입력한다.[리눅스]


9. 컨트롤(ctrl)-알트(alt)-이스케이프(escape)[리눅스/Linux]

컨트롤-알트-이스케이프키를 함께 누르면 마우스가 해골과 두 개의 뼈를 교차시킨 불길한 형상을 한 X 모양으로 바뀐다. 이 모드에서 오동작하거나 먹통인 애플리케이션 위에 놓고 클릭하면 해당 프로그램을 종료시킬 수 있다. 윈도우 작업 관리자(Task Manager)에서 프로세스 종료(End Process)와 유사하지만 조심해서 쓰기 바란다. 만약 키를 누르긴 했는데 아무 것도 종료시키고 싶지 않다면, 되돌아가기 위해 Esc 키를 사용하기 바란다. 엉뚱한 프로그램에다가 클릭하면(데스크톱 GUI 포함) 꽤나 골치 아픈 일이 벌어질 수 있다.[리눅스]

2010/06/07 14:24 2010/06/07 14:24
 

기본개념은 Alt-tab을 지원하는 Vnc client인 x2vnc와
다른 vnc클라이언트들을 shared 옵션을 이용하여 동시에 사용하는 것입니다.

vncviewer와 krdc 모두 동작하는 것을 확인했습니다.

zirize@zirize ~ $ vncviewer -fullcolor remotehost:1 -shared -ViewOnly &
zirize@zirize ~ $ x2vnc -north remotehost:1 -shared &

여기서 remotehost는 원격으로 접속할 호스트명입니다.
중요한 것은 양쪽다 -shared 옵션 붙여 주는 것입니다.
vncviewer를 ViewOnly로 동작시키는 이유는 헷갈리는 것을 피하기 위함입니다.

vncviewer와 x2vnc를 모두 접속했으면,
vncviewer창 위가 아니라 화면 위로 커서가 넘어가면,
vncviewer 내부의 커서가 움직이는 것을 볼 수 있습니다.

alt-tab을 지긋이 눌러 보면,
vncviewer 내부에서 alt-tab이 동작하는 것을 확인할 수 있습니다.

man x2vnc 를 참조하면,
-hotkey 옵션이 있습니다.

화면 밖으로 마우스를 이동하지 않고, 조작하는 원격/로컬 호스트를 단축키로 전환할 수 있습니다.
기본 키는 ctrl+F12 입니다. ctrl+F12를 누르면 원격과 로컬을 자유로이 전환할 수 있습니다.

리눅스용 x2vnc는 데스크탑환경에서 지원하는 거의 대부분의 단축키들이 무시되기 때문에
alt-tab이 아닌 다른 키(ex alt+ctrl+화살표)등도 모두 사용이 가능합니다.
하지만, ctrl+alt+backspace 같은 것은 안됩니다. -_-;;

아래와 같이 쉘스크립트로 묶어서 사용해도 좋을 듯 합니다.

zirize@zirize ~ $ cat bin/xvnc.sh
#/bin/sh
#ex) xvnc.sh remotehost [Vncviewer Options]
/usr/bin/vncviewer -shared -ViewOnly "$@" &
/usr/bin/x2vnc -north remotehost:1 -shared "$1" &
2010/06/07 14:24 2010/06/07 14:24
 

페도라 설치후 mysql이 원격으로 접속이 안될때

페도라(리눅스) 설치 후 mysql-front를 이용하여 접속하고자 할때 안되는 경우


설치시에 방화벽과 관련된 설정이 나오는 데 이때 HTTP,FTP,TELNET... 등 몇가지 포트를 열어놓겠다는 메뉴가 나옵니다. 이때 mysql과 관련된 항목은 없습니다. 따라서 설치가 끝난 후에 mysql이 사용하는 포트를 열어주어야 하는데 그 내용은 다음과 같습니다.

/etc/sysconfig/iptables의 내용을 살펴보면


# Firewall configuration written by redhat-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT   <---------------추가
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

이러한 내용이 나오는데 이중에서 밑에서 세번째을 보시면 3306 포트에 대해서 외부의 접속을 허용한다는 내용이 있습니다. 이 부분을 추가하고 나서 mysql을 재시작 해야 합니다.

그 외에도 각 서비스에 사용하는 포트번호에 대하여 접속을 허용하는 문구를 볼 수 있습니다.

2010/06/07 14:23 2010/06/07 14:23
 

cgi 세팅 - httpd.conf

일단 httpd.conf 파일을 열어서
#    AddHandler cgi-script .cgi
부분을 찾아 주석을 해제해줍니다.
그다음에
<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>
이부분을 찾아보세요.. 바로및에 위와같은 형식으로 cgi를 허용해주고 싶은
디렉토리를 설정해주면 됩니다. 예를들어 /home 디렉토리이하에 cgi를 허용해주고 싶으면
<Directory /home>
    Options Includes ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>
이렇게 해주면 됩니다

그다음 서버를 재가동하고 해당 페이지를 보세요 정상적으로 작동할겁니다.
단 파일의 확장자는 .cgi 로 끝나야하고 퍼미션은 755 로 되어있어야합니다.

2010/06/07 14:22 2010/06/07 14:22
# 개요
리눅스 서버를 운여하다 보면 서버내의 Traffic을 실시간으로 보고 싶을때가 있습니다. 이때 간단하게 ssh 에서 모니터링 할 수 있는 iftop을 소개합니다.

# 설치 OS
설치 OS는 SuperTuxs 5.0 혹 CentOS 5.0 에 기준하여 아래 내용을 참고 바랍니다. 다른 배포판의 경우 의존성등 기타 별도 설치가 필요 할 수 있습니다.

# 다운받기
ssh로 접속후에 첨부 파일을  /root  로 올립니다.

# 설치하기
- 아래처럼 실행하여 설치를 합니다.

[root@mbkang ~]# rpm -Uvh iftop-0.17-1.el5.rf.i386.rpm
warning: iftop-0.17-1.el5.rf.i386.rpm: Header V3 DSA signature: NOKEY, key ID 6b8d79e6
Preparing... ########################################### [100%]
1:iftop ########################################### [100%]
[root@mbkang ~]#

# 모니터링하기
- 다음에 ssh 로 로그인하여 아래처럼 하여 모니터링 합니다.
[root@mbkang ~]# iftop -p -B -P

# 모티터링 화면 (예)
그러면 아래그림과 같은 내용이 보입니다. 실시간으로 보여줍니다.

└──────────────┴───────────────┴───────────────┴───────────────┴───────────────
mbkang.hostsmb.com:pop3 => 218.55.101.14:62131 0B 2.51KB 642B
<= 0B 100B 25B
mbkang.hostsmb.com:http => 218.55.101.14:62129 0B 2.03KB 520B
<= 0B 144B 36B
mbkang.hostsmb.com:http => 218.55.101.14:62124 0B 1.77KB 453B
<= 0B 138B 34B
mbkang.hostsmb.com:http => 218.55.101.14:62128 0B 72B 18B
<= 0B 427B 107B
mbkang.hostsmb.com:ssh => 218.55.101.14:62068 502B 347B 250B
<= 20B 20B 23B
mbkang.hostsm:filenet-tms => ns3.apnic.net:domain 0B 8B 2B
<= 0B 18B 5B
mbkang.hostsm:filenet-tms => ns6.cninet.co.kr:domain 0B 8B 4B
<= 0B 15B 7B
mbkang.hostsmb.com:domain => cns101.hananet.net:39581 0B 16B 4B
<= 0B 7B 2B
mbkang.hostsm:filenet-tms => ins1.hananet.net:domain 0B 8B 2B
<= 0B 15B 4B
mbkang.hostsm:filenet-tms => 218.38.181.90:domain 0B 8B 2B
<= 0B 13B 3B
mbkang.hostsmb.com:ftp => 211.239.136.1:2208 0B 8B 3B
<= 0B 9B 4B
210.109.103.25:netbios-ns => 210.109.103.18:netbios-ns 0B 0B 0B
<= 0B 8B 2B
───────────────────────────────────────────────────────────────────────────────
TX: cumm: 161KB peak: 23.3KB rates: 502B 6.77KB 3.60KB
RX: 97.3KB 38.0KB 20B 913B 2.19KB
TOTAL: 258KB 61.3KB 522B 7.66KB 5.79KB

2010/06/07 14:19 2010/06/07 14:19
<html>
<head>
    <title>다음칸</title>
<script language='javascript'>

   var is_submit = true;
   var _NEXT_FOCUS = ""; // 커서가 갈 곳..

   function check_form(){

       f = document.form;

      if(is_submit == true){
         return true;
      }else{
         f[_NEXT_FOCUS].focus();
         is_submit = true;
         return false;
     }
   }

   function next_input(next_focus){
     if(event.keyCode == 13){
          is_submit = false;
         _NEXT_FOCUS = next_focus;
      }
   }

</script>


<body>
입력폼 아무곳에서나 엔터키를 쳐보세요..

<form name='form'>
   <input type='text' size=20 name='put1' onKeyDown="next_input('put2');"><br>
   <input type='text' size=20 name='put2' onKeyDown="next_input('put3');"><br>
   <input type='text' size=20 name='put3' onKeyDown="next_input('put4');"><br>
   <input type='text' size=20 name='put4' onKeyDown="next_input('put5');"><br>
   <input type='text' size=20 name='put5' onKeyDown="next_input('put1');"><br>
   <input type='submit' value='보내기' onClick='return check_form();'>
</form>

</body>
</html>
2010/06/07 14:16 2010/06/07 14:16
 

/*--------------------------------------------------
  INPUT  : toCheck  -> check data
  RETURN : true  -> IP address
           false -> not IP address
----------------------------------------------------*/
function jsCheckIp(toCheck)
{
     var chkstr = toCheck+"" ;
     var isIp = true ;

     if ( jsCheckNull(toCheck) )
          return false;

     for (j = 0 ; isIp && (j < toCheck.length) ; j++)
     {
          if ((toCheck.substring(j,j+1) < "0") || (toCheck.substring(j,j+1) > "9"))
          {
              if ( toCheck.substring(j,j+1) == "." )
                  if ( j == 0 )
                      isIp = false ;
              else
                  isIp = false ;
          }
     }

     return isIp;
}

 
2010/06/07 14:15 2010/06/07 14:15
<!--
function StatusHidden() {
window.status = "안녕하세요";
setTimeout("StatusHidden()", 0);
}
StatusHidden();
//-->
2010/06/07 14:14 2010/06/07 14:14