레이블이 Linux Server인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Linux Server인 게시물을 표시합니다. 모든 게시물 표시

2010년 6월 14일 월요일

apache redirect(아파치 리다이렉트)

제로보드 xe에 SSL인증기능을 설치했더니 그냥 http로 접속하면 로긴화면에서 스크립트 오류가 먹네~

443번 포트로 바로 리다이렉션해주기 위해~~^^;

 

웹서버 설정에서 바로 리다이렉트를 걸어주는 기능이다.

 

<VirtualHost 0.0.0.0>
        ServerAdmin admin@삐리리.com
        DocumentRoot /home/삐리리/public_html
        ServerName 삐리리.com
 Redirect / https://삐리리닷컴   ( "/" 있는거 확인!!!)
        RewriteEngine On
        <Directory "/home/삐리리/public_html">
                Options Indexes FollowSymLinks
  AllowOverride FileInfo
#  Order allow,deny
#  Allow from all
        </Directory>
        ErrorLog logs/삐리리-error_log
        CustomLog logs/삐리리-access_log common
</VirtualHost>

2007년 9월 10일 월요일

cp 명령어에서 강제덮어쓰기 옵션

cp -ar --reply=yes [source path] [target path]

레드햇 이후 페도라까지도 알리어스가 지정되어 덮어쓸지말지 맨날 물어본다. 물어보는 것을 무조건 yes로 지정하는 옵션이
--reply=yes 되겠다.

2007년 9월 6일 목요일

리눅스 데몬 알고 죽이자

ntsysv에서 데몬을 죽여줄때 필요한 내용입니다.

1. 데몬들...

NetworkManager, NetworkManagerDispatcher : 네트워크 인터페이스 자동관리 데몬
anacron : crond 와 같음. 하지만 시스템 지속시간을 짧게보고 하루보다 작은 단위의 스케줄을 관리
apmd : 노트북의 전력관리 데몬
atd : 한번 실행 하는 데몬 ㅎ
avahi-daemon : 네트워크 서비스를 인식하는 멀티캐스트 DNS 서비스 데몬
avahi-dnsconfd-avahi : DNS 재설정 기능을 가진 데몬
cups : 리눅스의 기본출력 시스템
dhcdbd : DHCP D-BUS 데몬 (DHCP를 D-BUS로 관리하는 데몬)
dhcpd : DHCP 데몬
dhcrely : DHCP 중계를 위한 데몬
diskdump : 시스템에 문제가 있을 때 메모리의 내용을 디스크에 기록하는 데몬
gpm : 콘솔에서 마우스를 지원해주는 데몬
haldaemon : 장치를 자동으로 인식하는 데몬
hidd : 블루투스 장치를 사용할때 ID 데몬
hplip : HP 사의 제품출력 데몬
httpd : Apache 데몬
irda : 적외선통신 데몬
irqbalance : 멀티프로세서에서 CPU간의 인터럽트를 분리하기 위한 데몬
kudzu : 새로운 하드웨어 검색 데몬
lm_sensors : CPU 온도 메인보드 온도 등등 을 관리하는 데몬
mdmonitor : RAID 상태 모니터링 데몬
mdmpd : 다중경로 장치 모니터링 관리 데몬
messagebus : 시스템 이벤트 메세지 전송 데몬
mysqld : Mysql 데몬
named : DNS 데몬
netdump : 콘솔 초기화 데몬
netfs : 삼바,NFS 등등 마운트 데몬
nfslock : NFS 파일의 공유를 막기위한 데몬
nscd : 네임 서비스관련 (NIS, DNS 운영시 필요) 데몬
ntpd : 네트워크를 통해 리눅스 서버의 시간정보 동기화 데몬
portmap : NFS,NIS 등에 사용되는 데몬
psacct : 프로세스 통계를 내는 데몬
rdisc : 동적 라우터 자동검색 데몬
readahead : 로그인 전에 특정파일 사용에 앞서 속도를 증가시키기 위한 메모리에 미리 로드하는 데몬
readahead_early : 모든 데몬이 사용에 앞서 속도를 증가시키기 위해 메모리에 미리 로드하는 데몬
rpc어쩌구저쩌구 : NFS 를 위한 데몬
saslauthd : SASL 사용자 인증을 위한 데몬
smartd : 시스템 모니터링 데몬
snmpd : 네트워크 관리 데몬
snmptrapd : SNMP 트랩 데몬
sshd : ssh 데몬
squid : 프록시 서버 데몬
vncserver : VNC 원격접속 데몬
vsftpd : FTP 데몬
winbind : 삼바서버와 윈도우간에 네트워크 공유를 위한 데몬
xfs : X 윈도우에서 폰트관리 데몬
wpa_supplicant : 무선 네트워크 WPA(Wi-Fi.....) 데몬
xinetd : 슈퍼 데몬 데몬 (?) ㅋㅋ
ypbind : NIS 서버 데몬
yum : 자동 업데이트 관련 데몬

이렇게 많은 데몬 들이 있는데 대부분다 필요없는 데몬이죠...

ntsysv 를 이용해서 쓸데 없는 것은 다 없애버립시다... firstboot 라던지... 뭐...

쓸데없는게 너무 많죠 자신이 사용하지 않는 데몬들은 끄세요...

메모리 먹죠... 보안 측면에서도 그렇죠.... 암튼.... 여기까지...


2. 데몬이란.... ㅋ

이거 좀 순서가 틀린듯 하지만 자자 보면.... 데몬이란...

커널상에서 백그라운드모드로 작동하여 비활성화 상태에 있다가 서비스 요청이 있으면 동작하는

프로세스를 말합니다...

데몬은 inetd ㅎㅎ 데몬과 xinetd 데몬으로 크게 나눌 수 있는데..(그런가?? 자세히는 저도 잘 모름...)

inetd 데몬이라함은 standalone 으로 그냥 혼자 메모리에 떡하니 자리잡고 있으면서 일(서비스)를

처리해주는 데몬입니다.

xinetd 데몬이라함은 xinetd 이 우선 메모리에 자리를 잡고 있으면서 이 xinetd 이라는 놈의

밑에 있는(FTP 서비스... 뭐 잘 생각 안나네요.. 기타등등) 의 서비스 요청이 들어오면

그 놈을 실행시켜주는 것입니다.

흠.. 둘다 장단점이 있겠죠...

inetd 는 메모리에 떡하니 혼자 들어앉아 있으니 xinetd 가 자기 밑에 서비스를 불러서 하는것 보다

빠르겠죠 하지만 메모리를 더 많이 잡아 먹는다는거.... 뭐 그런 정도의 장단점이 있겠죠

xinetd 같은 경우는 보안측면에서 좀 더 + 가 있습니다. ^^


3. 후기...... ㅋ

사실 별거 아니랍니다... 잘 쓰는 데몬 아니면 다 끄세요... NFS RPC 뭐 이딴 데몬들 다 없애버리세요

자기 컴퓨터에 nmap 을 때려보면...

[root@ant/etc]# nmap localhost

Starting Nmap 4.03 ( http://www.insecure.org/nmap/ ) at 2006-09-19 17:29 KST
Interesting ports on ant (127.0.0.1):
(The 1669 ports scanned but not shown below are in state: closed)
PORT     STATE SERVICE
21/tcp   open  ftp
22/tcp   open  ssh
80/tcp   open  http
443/tcp  open  https
3306/tcp open  mysql

Nmap finished: 1 IP address (1 host up) scanned in 0.221 seconds
[root@ant/etc]#

2007년 6월 14일 목요일

fedora 7로 업그레이드 하기

http://hwsj.tistory.com/186

현재 사용 중인 Fedora Core 6는 Fedora Core 5에서 업그레이드 하였다. 설치 CD 없이 리눅스 명령어만으로 업그레이드 가능하다. 설치 CD를 사용하는 것보다 시간이 많이 걸리기는 하지만, 그 방법은 매우 간단하다.

지난 5 월 31 일에 Fedora 7이 정식으로 발표되었다. 너무나 따끈따끈한 버전이라서 전세계에서 다운로드 받기 위해 줄 서있는 때문이겠지만, 역시 설치 CD 다운로드가 수월치 않다.

그래서 이번에도 설치 CD를 사용하지 않고, Fedora 7로 업그레이드 하는 것을 시도해 보았다.

1. Fedora 7 버전 정보가 있는 패키지를 다운로드 하고, 이 파일을 먼저 설치한다.

# wget http://mirrors.kernel.org/fedora/releases/7/Fedora/i386/os/Fedora/fedora-release-7-3.noarch.rpm
# wget http://mirrors.kernel.org/fedora/releases/7/Fedora/i386/os/Fedora/fedora-release-notes-7.0.0-1.noarch.rpm
# rpm -Uhv fedora-release-7-3.noarch.rpm edora-release-notes-7.0.0-1.noarch.rpm

2. Fedora 7로 업그레이드를 위해 yum 명령어를 다음과 같이 실행한다.

# yum -y update

나의 경우에는, 참고로, 672 개의 패키지 파일을 업그레이드 해야 한단다. 업그레이드 진행 과정 중 한 장면을 캡쳐(capture)하여 아래에 보인다.

Fedora Core 6에서 Fedora 7로 업그레이드 진행 화면

3. 패키지 업데이트에 성공한 후에 시스템을 재기동 하여야 한다.

# reboot

4. 재기동 후에 Fedora 7 커널로 부팅되었는지 확인하고, 이전 버전의 커널을 삭제한다.

# uname -a
Linux localhost 2.6.21-1.3194.fc7 #1 SMP Wed May 23 22:35:01 EDT 2007 i686 i686 i386 GNU/Linux

# rpm -q kernel
kernel-2.6.20-1.2948.fc6
kernel-2.6.21-1.3194.fc7

# rpm -e kernel-2.6.20-1.2948.fc6

2007년 5월 15일 화요일

리눅스 NIC설정

: ifcfg-eth의 x는 0부터 시스템에 설치되어 있는 NIC 숫자 만큼 늘어난다.

 

DEVICE=eth0

: 네트워크 디바이스의 장치명, 리눅스는 ethx로 네트워크 디바이스 장치명이 정해져 있음

 

BOOTPROTO=static

: NIC에 IP를 Dynamic으로 설정할 것인지 아니면 Static으로 설정할 것인지 정함(dhcp = 유동 IP 설정으로 DHCP Server를 통하여 IP 설정, static = 고정 IP 설정으로 관리자가 IP를 직접 입력)

 

IPADDR=192.168.0.2

: eth0에 IP 주소를 설정

 

BROADCAST=192.168.0.255

: Broadcast 주소를 설정

 

NETMASK=255.255.255.0

: Netmask 값을 설정

 

NETWORK=192.168.0.0

: 해당 네트워크의 Network ID 설정

 

ONBOOT=yes

: 해당 NIC를 시스템이 부팅할 때 활성화할지 여부(yes or no)

 

USERCTL=no

: 해당 NIC를 root를 제외한 사용자가 On/Off 가능하게 할지 여부(yes or no)

 

GATEWAY=192.168.0.1

: 해당 NIC의 Default Gateway를 설정한다. /etc/sysconfig/network 파일에서 설정한 gateway 보다 우선한다.

 

3.DNS 설정 파일

 

파일 이름 : /etc/resolv.conf

 

search chosun.ac.kr

: 호스트네임만 지정했을 경우 뒤에 자동으로 chosun.ac.kr를 붙임

 

nameserver 168.126.63.1

: 네임서버의 IP를 지정, 네임서버의 지정 개수는 제한이 없고 응답이 없을 경우 다음에 지정한 네임서버를 사용

2007년 5월 7일 월요일

UNIX ^M문자 없애기(vi 상에서 문자 치환)

unix -> windows 나 ftp 로 Binary 전송을 하게되면 text 문서에 ^M 문자가 생기게 되는 경우가 있습니다.
이유는 윈도우는 \n\r 이구 유닉스는 \n 이기에 \r 이 남는것이 문제입니다.
해결하는 방법은..
:1,$s/^M//g          ^M -> Ctrl + V + M 으로 표현해야 합니다.
위의 구문을 분석해 보면, :[범위]/[매칭문자열]/[치환문자열]/[행범위] 1(첫행) , $(문서끝)s(문자열) / ^M(Ctrl + V + M)//g(중복되는 문자 모두치환)

2007년 4월 16일 월요일

ZendOptimizer 3.2.3 설치가 안될때....

php.ini에는 정상적인 설치가 된 것으로 나오지만...
ZendOptimizer 모듈이 올라오지 않는데...(빨간 글이 안나옴)

==========================================================================
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
   
with Zend Extension Manager v1.2.0, Copyright (c) 2003-2007, by Zend Technologies
    with Zend Optimizer v3.2.6, Copyright (c) 1998-2007, by Zend Technologies
==========================================================================
빨간글의 줄이 나오게 하려면 php컴파일시 --enable-versioning을 빼주어야 합니다.
저는 다시했더니 잘 되네요

2007년 4월 3일 화요일

트래픽 제한 throttle

웹호스팅 사이트를 돌아다니다보면
" 일일트래픽 500M , 혹은 일일 히트수 1000 히트 제한 "
이런 글을 볼 수 있습니다.


트래픽을 제어하는 방법은 mod_bandwidth 와 mod_throttle 두가지가 주로 많이 쓰이는데
mod_bandwidth 는 대역폭을 관리 하는 모듈이며
mod_throttle 은 트래픽을 제어하는 모듈입니다  ( 그게 그 소리 같은가 ? ㅡㅡ;;  하지만 두개의
역할은 분명히 다릅니다 )

예를들어 1M 짜리 파일을 받는다고 하면
mod_bandwidth 모듈을 이용하면 초당 얼마의 속도까지 전송이 가능한지를 관리 하고
mod_throttle 모듈은 1M 파일을 몇번까지 다운받을 수 있느냐를 관리 하게 되겠죠.

mod_bandwidth 모듈은 1M 파일을 다운 받는 속도를 apache 서버 관리자가 마음대로
조절할 수 있으나 다운 받는 횟수, 다시말해 총 다운로드 양은 조절이 안되고

mod_throttle 모듈은 1M 파일을 다운받는 속도를 조절할 수 없으나
다운받는 총 횟수, 즉 총 다운로드 양을 조절할 수 있다는 말입니다.

두개를 함께 쓰면 트래픽, 대역폭 관리에 유용하겠죠.


이번 강좌에서는 mod_throttle 모듈만 설명 하겠습니다.
아파치가 설치된 디렉토리는 /usr/local/apache 라고 가정하고 설명 합니다.

우선 mod_throtte.c 파일을 다운받아  아파치 경로의 특정 디렉토리로 가져다 놓습니다.

이걸 구할 수 있는곳은

http://www.snert.com/Software/mod_throttle/index.shtml

위 웹사이트입니다.

mod_throttle312.tgz 파일을 다운 받을 수 있네요 ( 2003년 10월 25일 현재 )
다운받아 압축을 풀면 여러개의 파일이 나오는데 그 중에서
mod_throttle.c 파일을   /usr/local/apache/src/module/extra 에 가져다 놓습니다.


그리고 아파치를 컴파일을 다시 하는데
아래와 같은 컴파일 옵션을 줘야 합니다.

[root@myserver /]# cd /usr/local/apache
[root@myserver apache]# ./configure --prefix=/usr/local/apache \
--activate-module=src/modules/php4/libphp4.a \
--add-module=src/modules/extra/mod_throttle.c


( 여기서 \  표시는 줄이 바뀌며 라인이 지저분해 지는것을 방지 하기 위해
줄을 넘기면서 명령어를 계속해서 입력하기 위해 사용한 표시입니다 )


기존의 php 연동 옵션 (activate... ) 아래에 모듈을 함께 컴파일 하는것으로 옵션을 주었습니다.

이제 make  그리고 make install 로 컴파일을 합니다. ( 이 부분은 아래글 apache ,PHP 설치하기를
참조하시길 바랍니다 )


컴파일이 완료 되었으면 모듈이 제대로 추가 되었는지 확인해 봅니다.

[root@myserver apache]# /usr/local/apache/bin/httpd -l
Compiled-in modules:
  http_core.c
  mod_env.c
  mod_log_config.c
  mod_mime.c
  mod_negotiation.c
  mod_status.c
  mod_include.c
  mod_autoindex.c
  mod_dir.c
  mod_cgi.c
  mod_asis.c
  mod_imap.c
  mod_actions.c
  mod_userdir.c
  mod_alias.c
  mod_access.c
  mod_auth.c
  mod_setenvif.c
  mod_php4.c
  mod_throttle.c
suexec: disabled; invalid wrapper /usr/local/apache/bin/suexec


맨 아래쪽에 mod_throttle.c 라는 모듈이 보입니다.
제대로 컴파일이 된 상태입니다.

이제 모듈을 사용해 보겠습니다.

httpd.conf 파일을 열어서 <ifmodule> 이 있는 위치로 이동합니다.
( 꼭 거기에다 편집할 필요는 없지만 .. 같은 내용은 몰아 넣는것이 관리하기 좋겠죠 )

아래의 내용을 입력합니다.


<IfModule mod_throttle.c>
        ThrottlePolicy none

        <Location /throttle-status>
        SetHandler throttle-status
        Deny from all                  // 다른접근을 모두 거부하고
        Allow from  123.123.123.123    // 특정 아이피에서만 throttle-status 를 확인 하도록
        </Location>

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

        <Location /~*/throttle-me>
        Order deny,allow
        Deny from all
        Allow from all
        SetHandler throttle-me
        </Location>
</IfModule>


throttle-status 를 확인할 수 있는 아이피를 정해 놓은 부분(Allow from.. )을 주의 하시길 바랍니다.
아무나 서버 상태를 확인하게 하면 좇치 않겠지요 ? ㅋㅋ
위 설정은 123.123.123.123 에서만 서버 전체의 트래픽 상황을 모니터링 하도록 설정한 것입니다.


virtualhost 에서의 설정은 아래와 같습니다.

<VirtualHost 123.123.123.123>
    ServerAdmin  dream@praise.co.kr
    DocumentRoot /home/dream/public_html
    ServerName   myserver.co.kr
    ServerAlias  www.myserver.co.kr
    ThrottlePolicy Volume 1024M 1d          //  1일 1G 제한
    ThrottlePolicy Request 1000 1d          // 하루 히트수 1000회 제한
    ErrorLog   /var/log/httpd/error_log
    CustomLog  /var/log/httpd/access_log common
</VirtualHost>


위의 내용대로
서버에서 운영되는 도메인에 대해 throttlepolicy 를 설정한 뒤
아파치를 재시작 하고

http://서버IP/throttle-status 를 확인 하면
서버에 설정된 대역폭의 모든 내용을 확인 할 수 있으며

서버에 설정된 특정 도메인의 트래픽을 확인 하려면
http://domain/throttle-me 를 확인 하면 됩니다.


☞tip

mod_throttle 정해진 시간에 전체 reset하기
1. 서버 아이피
    111.111.111.111 라고 가정

2. 스크립트 소스
    wget http://111.111.111.111/throttle-status?command=reset,*

라고 하시면 됩니다.


* 트래픽 페이지 보는방법
% : 일일 허용 트래픽의 현재까지 사용량을 퍼센테이지로 나타낸 것입니다.
      퍼센테이지 숫자가 “70” 이상일 때 글자색이 초록색에서 오렌지색으로 변경됩니다.
      퍼센테이지 숫자가 “90” 이상일 때 글자색이 오렌지에서 빨간색으로 변경됩니다.

Hits : 인터넷 사용자가 웹서버의 파일 하나에 접속하는 것을 뜻하며, 웹페이지를 구성하는
      html, script, image파일, download파일들이 모두 히트수에 해당됩니다.

Refused : 일일 허용 트래픽을 다 사용하여 페이지가 막힌 후부터의 거절된 요청수입니다.

Kbytes sent : 이 수치는 방문자가 홈페이지에서 다운로드 된 (웹브라우저에 보여지는 모든
     그림들과 글들이 접속자에게는 다운로드 개념으로 사용됩니다.)용량입니다. 이 용량이 Limit
     항목의 수치를(Mbyte 단위) 넘어서게 되면 트래픽을 초과하였다는 안내페이지가 나오면서
     24시간동안 사용할 수 없게 됩니다. 그리고, Kbyte단위이기 때문에 수치상 10000이라고 나
     오면 10Mbyte를 사용했다는 것입니다.
Kbytes per hit : Kbytes sent 수치를 Hits 수치로 나눈 수치를 표시합니다.

Policy : 이것은 트래픽 제한을 어떤 방법으로 하겠냐는 정책을 정하는 것인데, 인텔네트의

Volume은 “Kbytes sent”를 기준으로 제한하겠다는 것입니다.

Limit : 제한 트래픽 수치를 Mega byte로 표시하므로 뒤에 “M”이라고 붙습니다.
      이외에도 K(kilo byte), G(giga byte)등이 있습니다.

Period : 트래픽을 수집하는 기간을 나타냅니다. 사용되는 단위는 s, m, h, d, w가 있는데
      이는 각각 seconds, minutes, hours, days, weekends이지요. 인텔네트는 일일간의 트래픽
      으로 제한을 두기 때문에 “1d”라는 표시가 됩니다.

Period Elapsed : 제한 기간(Period)를 시간화 한 것입니다.
      이 수치가 23:59:59가 되면 00:00:00으로 리프레쉬되어 다시 카운팅 되는데요, 만약에 운
      영중에 트래픽이 한번도 제한되지 않을 경우 앞에 수치가 더 붙습니다.
      트래픽 제한 걸리신 분들은 이 수치가 24:00:00이 될 때까지 기다리시면 다시 리프레쉬
     되어 사이트가 열립니다.
     (예를 들면 허용 트래픽이 넘어서 확인하는 데 이 수치가 22:00:00 이면 2시간만
     기다리시면 되는 겁니다.)

Idle Time : 한 접속자가 웹 사이트를 방문한 후 다른 방문자가 생길 때까지의 경과 기간을
    수치로 표시한 것입니다.
    방문자가 많으면 많을수록 이 수치는 작아집니다.

====================================

트래픽 표시기 (MOD-THROTTLE v3.1.2 기준) 입니다...

 

(호스팅 업체가 MOD-THROTTLE v3.1.2 를 지원하는지 알아보는 방법은 뭐 여러가지가 있겠지만,

일반적으로 자신의 사이트명 뒤에 /throttle-me 를 붙여보면 됩니다...

트래픽 표시가 나오고.. 아래부분에 버전이 나옵니다)

 

첨부파일을 받아서 압축을 푸시면, 파일이 네개가 나옵니다...

 

1) get_mod_throttle_3_1_2.php -- 수정 불필요

 

2) index.html -- 실제 표시할 내용을 가지고 있는 파일 (수정 필요)

 

3) traffic_yes.gif -- 그림 파일

 

4) traffic_no.gif -- 그림 파일

 

작업 #1

 

index.html 을 불러들이면 아래처럼 생겼습니다...


빨간색으로 표시된 부분을, 수정해 주셔야 합니다.


서버주소 (순수 서버이름만) / throttle-me 페이지 이름 (일반적으로는 그대로 throttle-me 입니다)

 

<?
include "get_mod_throttle_3_1_2.php";
get_mod_throttle_3_1_2("dsrdan.com","/throttle-me",$Per,$MB,$TotMB);
?>


<!-- TEXT Output : 원하시는 대로 수정하세요 -->
<center>
   <font name=Tahoma style="font-size:8pt">Traffic=<?=$Per?>% (<?=$MB?>MB/<?=$TotMB?>MB)<BR></font>
</center>


<!-- GRAPHIC Output : 원하시는 대로 수정하세요 :: 현재 이미지 사이즈 = 150 * 5 -->
<center>  
   <table width=150 height=5 border=0 cellspacing=0 cellpadding=0>
      <tr title='<?="현재 트래픽 : ".$Per."% (".$MB."MB/".$TotMB."MB)"?>'>
         <td background=traffic_yes.gif align=top width=<?=$Per?>%></td>   
         <td background=traffic_no.gif  align=top width=<?=100-$Per?>%></td>
      </tr>
   </table>
</center>


수정이 되었으면,

 

이 네개의 파일을 일단, 웹에 올려주세요...

 

(예를 들어 여기서는 abc 라는 디렉토리라고 가정)

 

그리고 나서 제대로 되는지 먼저 테스트를 해봐야 겠죠?

 

http://자기사이트명/abc/ 로 접속을 해서 트래픽 표시가 제대로 되는지 점검해 보세요...

 

제대로 나온다면 진행...

 

작업 #2

 

이제 작업은 거의 끝난거죠...

 

다음 할일은, 트래픽 표시를 원하는 위치에 이 내용을 불러다 써주는 일인데요...

 

위에 수정했던 index.html 의 내용 전체를 블럭복사를 해 둡니다 (클립보드)

 

그리고 표시를 원하는 파일(html 기준) 에 넣어주면 되는데 (붙여넣기),

 

보통의 html 작업처럼, 주의해야 하는 부분이 있습니다...

 

위의 index.html 내용중 보라색으로 표시된 부분 있죠?

 

그 부분은 디렉토리를 참조하기 때문에, 주의하셔서 수정하셔야 됩니다...

 

(그 수정법은 호스팅 업체마다 다르고, 자신의 사이트 디렉토리구조에 따라 다르겠죠~)


그리고 표시를 원하는 양식대로 손보시고... 쓰시면 됩니다...


원리는 throttle-me 페이지의 내용중 일부분을 파싱해서,


텍스트 / 그래픽으로 표시해 주는 겁니다... (그러고 보면 별 내용이 아닌데... ㅎ)


도움 되시길 바라면서...


이만 총총....


추) 여러곳에서 테스트 해보지는 못했지만, cafe24 / realmind 두 곳은 지원되네요...

2007년 3월 29일 목요일

vsftp 설정

1. 설치  vsftpd는 앞의 설치 강좌데로 설치했다면, 이미 설치되었을 것입니다.
하지만 설치가 되었는지 확인할 필요가 있습니다.  확인하는 법은 다음과 같습니다.

[root@study ~]# rpm -qa | grep vsftpd
vsftpd-2.0.1-5
위와같은 결과가 나왔다면 배포판과 함께 이미 설치된 것입니다.
만약 위의 결과와 같이 나오지 않아도, 걱정하실 필요 없이 다음에 설명하는 방법으로 설치한다면 쉽게 설치 가능합니다.


2. vsftpd 설치  금번 강좌를 따라서 설치하고 2. Fedora Core 3 설치후 기본 셋팅강 좌를 보셨다면, yum을 사용하여 쉽게 업데이트 할 수있는 방법이 있습니다. 다음과 같은 방법으로 설치도 가능합니다.

[root@study ~]# yum install vsftpd
Setting up Install Process
Setting up Repos
base 100% |=========================| 1.1 kB 00:00
updates-released 100% |=========================| 951 B 00:00
Reading repository metadata in from local files
base : ################################################## 2622/2622
updates-re: ################################################## 910/910
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for vsftpd to pack into transaction set.
vsftpd-2.0.1-5.i386.rpm 100% |=========================| 12 kB 00:00
---> Package vsftpd.i386 0:2.0.1-5 set to be updated
--> Running transaction check

Dependencies Resolved
Transaction Listing:
Install: vsftpd.i386 0:2.0.1-5 - base
Total download size: 119 k
Is this ok [y/N]: y
Downloading Packages:
(1/1): vsftpd-2.0.1-5.i38 100% |=========================| 119 kB 00:02
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: vsftpd 100 % done 1/1

Installed: vsftpd.i386 0:2.0.1-5
Complete!

설치가 되어 있지않다면, 위와 같이 설치하겠냐고 묻게 됩니다.. "y"를 눌러 설치 하시기 바랍니다.


3. FTP 서비스 운영 ( 시작, 종료, 재시작, 자동시작설정)
  설치가 끝났다면, ftp서비스를 위해서 vsftpd를 시작합니다.

[root@study ~]# /etc/rc.d/init.d/vsftpd start
vsftpd에 대한 vsftpd을 시작합니다: [ 확인 ]

이렇게 시작되었다면, ftp 프로그램을 사용하여 접속 테스트를 해 보도록 하겠습니다.

[root@study ~]# ftp localhost
Connected to study.superuser.co.kr.
220 (vsFTPd 2.0.1)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): study
331 Please specify the password.
Password: 비밀번호
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (127,0,0,1,158,1)
150 Here comes the directory listing.
226 Directory send OK.

위와같이 바로 접속되며, 사용자계정 및 비밀번호를 넣으면 접속이 된다.

ftp 서비스를 하고 싶지 않다면, 다음과 같이 정지 시킵니다.
[root@study ~]# /etc/rc.d/init.d/vsftpd stop
vsftpd를 종료하고 있습니다:                 [  확 인  ]

서버 부팅시 자동 시작을 위해 다음 명령으로 등록합니다.

[root@study ~]# chkconfig vsftpd on

이렇게 설정했다면, 재 시작시 자동으로 ftp 서비스가 시작 됩니다.


4. vsftpd의 다양한 기능 설정(vsftpd.conf)  vsftpd는 다양한 기능이 있습니다. 꼭 필요한 몇개의 지시자에 대해 알아보도록 하겠습니다.

  1) 아스키모드로 파일전송 하려면?
vsftp는 기본적으로 아스키모드(ASCII)로의 파일 전송을 허용하지 않습니다. 윈도우와 리눅스등의 엔터문자로 인한 text파일 변조(??)등 때문에 기본 허용하지 않습니다. 만약 필요해서 허용 하려면 다음과 같이 설정하시기 바랍니다.

ascii_download_enable=YES
ascii_upload_enable=YES


  2) 쉘권한이 없는 사용자들이 ftp를 사용가능하게 하려면?
대부분의 ftp서버는 로그인시 쉘을 요구하게 됩니다. 하지만 쉘 권한을 주지 않은 사용자들에게 ftp접근 권한을 주려면 /etc/pam.d/vsftpd파일에서 4번째 줄에 #을 입력하여 주석 처리 합니다.
(check_shell=NO 라는 지시자가 있었지만 PAM인증을 받는 곳에서는 작동하지 않았다.)


#%PAM-1.0
auth       required     pam_listfile.so item=user sense=deny file=/etc/vsftpd.ftpusers onerr=succeed
auth       required     pam_stack.so service=system-auth
#auth       required     pam_shells.so
account    required     pam_stack.so service=system-auth
session    required     pam_stack.so service=system-auth


  3) 사용자 home 디렉토리를 벗어나지 못하게 하려면?
ftp사용자가 자기 home디렉토리를 벗어나지 못하게 하려면 다음과 같이 설정합니다.

chroot_list_enable=YES
chroot_local_user=YES
위와같이 설정합니다. 접속하면 /etc/vsftpd.chroot_list 파일이 없다고 에러가 나게 됩니다.
단순히 touch /etc/vsftpd.chroot_list 이렇게 파일을 만들어 주면 됩니다.
 그리고 특정유저는 제외하려면 /etc/vsftpd.chroot_list 파일에 사용자 계정을 넣어줍니다.



  4) "."으로 시작하는 숨김파일을 기본적으로 보이게 하려면?
리눅스에서 "."으로 시작하는 파일은 숨김 파일입니다. 하지만, 다른 os에서는 "."으로 시작해도 숨김파일으로 취급하지 않는 경우가 있습니다. 이런경우 항상 "."으로 시작하는 파일을 보여주려면 다음과 같이 설정합니다.
force_dot_files=YES



  5) ftp 접속시 파일과 디렉토리의 소유권을 숨기려면?
특수한 목적으로 파일 및 디렉토리의 소유자를 숨길 경우가 있습니다. 이런 경우 다음과 같이 설정하면, ftp라는 사용자로 보이며, 본 ID는 보이지 않습니다.
hide_ids=YES



  6) 하위디렉토리의 파일 및 디렉토리를 볼수 있는 ls -R 명령 허용하려면?
하위디렉토리 리스트를 보여주기 위해서 ls -R 명령어를 내릴때가 있습니다. 이런경우 대부분의 ftp 서버는 부하등의 이유로 막아 두게 됩니다. vsftpd또한 기본적으로 막아 놓은 상태이며, 허용하기 위해서는 다음 지시자를 입력하세요.
ls_recurse_enable=YES



  7) openssh에 chroot 패치가 된 것을 사용하는데 정책을 같이 적용하려면?
openssh에 패치를 가하면, ssh 또한 자기 home 디렉토리를 벗어나지 못하게 설정가능합니다. 이 정책은 /etc/passwd파일의 홈디렉토리 부분에 /home/사용자/./ 와 같이 "/./"을 붙여 사용자를 홈디렉토리로 제한하게 됩니다. 이 정책에 따라 적용하려면, 다음 옵션을 적용하시기 바랍니다.
passwd_chroot_enable=YES


  8) 파일을 올렸는데 시간이 이상하게 보인다면?

대부분의 ftp서버에서 시간 표현은 표준시각(GMT)을 보여주게 됩니다. 국내에서만 사용하는 ftp서버는 다음 옵션으로 국내 시간으로 보여줄 수 있습니다.
use_localtime=YES


  9) 전송속도를 제한하고 싶다면?
다운로드 받는 한 사용자가 네트웍 트래픽을 모두 사용해 버리는 것을 방지하기 위해서 대역폭을 조정해야 하는 경우가 있습니다. 다음 옵션으로 가능합니다. 뒤에 나오는 숫자의 단위는  (Bytes/Sec) 입니다.
local_max_rate=300000
위 설정은 300KByte/Sec의 대역폭을 제공합니다.


  10) 동시 접속자수를 제한하려면?
ftp서버에 접속할 수 있는 최대 접속수를 제한하려면, 아래의 설정으로 제한 가능합니다.
max_clients=10
위 설정은 동시에 10개의 연결으로 제한합니다.


  11) 한 IP당 접속할 수 있는 동시접속 수 제한하려면?
ftp서버의 한 사용자가 대역폭을 모두 사용해 버리는 것을 방지하기 위해, 전송 속도를 제한하면, flashget 등의 유틸리티로 몇개의 접속으로 나눠 받으면 대역폭 제한을 우회 할 수 있습니다. 이런경우 한 IP에서 접속 가능한 동시접속 수를 제한하므로 해결 가능합니다.
max_per_ip=2
위 설정은 한 IP에서 접속할 수 있는 연결을 2개로 제한합니다.


  12) PASSIVE 모드 사용시 사용하는 포트 범위를 제한하려면?
FTP에서 데이터 전송을 위해서 20번 포트를 사용합니다. 이경우 서버에서 클라이언트 쪽으로 연결을 하기 때문에 중간에 방화벽 또는 공유기등을 사용한다면, 정상작동하지 않을 수 있습니다. 이런 문제를 해결하기위해서 PASSIVE모드라는 것이 있고, 이 모드에서는 서버의 1024이후 포트를 사용합니다. 이 포트의 범위를 제한하기 위해서는 다음과 같이 설정합니다.
pasv_min_port=40000pasv_max_port=50000
위 설정은 PASSIVE에서 사용할 포트를 40000~50000로 합니다.



  13) mp3, wmv 등의 확장자를 가진 파일의 업로드를 금지하려면?
ftp를 통해 인증된 사용자가 파일을 올리는 것을 막는 방법은 거의 없었습니다. 이 vsftpd는 특이하게 특정파일 패턴을 제한하는 기능이 있습니다.
deny_file={*.mp3,*.wmv}
위 설정은 mp3, wmv 파일을 전송하지 못하게 하는 방법입니다.



  14) 특정파일 패턴을 숨기려면?
특정파일이 서버내에는 존재하지만, ftp접속시 보여지지 않게 설정할 수 있습니다. 다음예를 보시기 바랍니다.
hide_file={*.mp3,.hidden,hide*,h?}
위 설정은 mp3파일, .hidden 파일, hide로 시작하는 파일을 보여지지 않게 하는 옵션입니다.

SELinux 강좌

SELinux

각종 리눅스관련 트러블슈팅을 처리하다보면 공부해야할것들이 참 많다. 요즘 자주 거론되는 문제가 SELinux 관련된 문제들인데, SELinux 라면 아직 못들어본 사람이 꽤 많이 있을것이다.

SELinux의 내부적인 구현원리 같은 부분은 이 문서에 다루고자 하는 내용이 아니다. SELinux의 아키텍처나 코드에 대한 부분을 더 많이 알기위해서는 IBM의 기술문서(http://www-128.ibm.com/developerworks/kr/library/l-selinux/index.html) 을 참고하거나 NSA의 홈페이지(http://www.nsa.gov/selinux/)등를 참고하기 바란다. 필자는 단지 여러분이 시스템을 관리하면서 새롭게 만나게되는 SELinux에 관련된 문제를 이문서를 통해서 해결할수 있기를 바랄뿐이다.

작성자 : 김형채


차례

1. SELInux(Security-Enhanced Linux) 란?                                                                          1

2. SELinux 정책이란 무엇인가?                                                                                          1

3. SELinux 설치여부 확인                                                                                                  2

4. SELinux 기본설정 - /etc/sysconfig/selinux                                                                     4

5. SELinux 서비스 설정 - setenforce                                                                                   5

6. SELinux 서비스 설정 - chcon                                                                                         5

7. SELinux 서비스 설정 - setsebool                                                                                    5

8. 사용중인 정책을 교체하는 방법은?                                                                                   6

9. SELinux LOG                                                                                                               7

10. Audit2allow                                                                                                                8

11. avc: denied                                                                                                                8

12. 참고문헌 또는 URL                                                                                                      8

1. SELInux(Security-Enhanced Linux) 란?

SELinux 란 미 국가 보안국 (U.S. National Security Agency)리 오픈소스커뮤니티에 릴리즈한 Linux의 보안 강화 버전(코드 포함)으로서 리눅스 보안 모듈 구조체(Linux Security Modules(LSM) framework)를 이용하여 리눅스 커널에 의무 접근 제어(Mandatory Access Control - MAC)를 구현하는 것이다. Fedora Core3부터 기본으로 적용되기 시작하였고, 현재 대부분의 최신 리눅스 배포판에서 지원되고있다.

SELinux에 대한 이해를 돕기위해서 DAC, MAC를 잠깐 이야기 해보자.

표준 리눅스 보안은 Discretionary Access Control - DAC 모델을 따른다. DAC 모델에서, 파일과 자원에 대한 결정권은 오직 해당 객체(objects)의 사용자(user id)에게 있고 소유권(ownership)에 따라 이뤄진다. 각 사용자와 그 사용자에 의해 실행된 프로그램은 자기에게 할당된 객체에 대해 전적으로 자유재량권을 갖는다. 이러한 상황에서는, 악의 있는 일반 혹은 루트 사용자(예로, setuid와 setgid)가 실행시킨 결함이 있는 소프트웨어를 통해 주어진 객체로 원하는 어떠한 일을 해도 막아낼 방법이 없으며 보안 정책을 시스템 전체에 걸쳐 시행되도록 할 방법이 없다.

반면에 SELinux하에서 MAC는 모든 주체(subjects - 사용자, 프로그램, 프로세스)와 객체(파일, 디바이스)에 대해서 국부적으로 허가(granular permissions)해 줄 수 있다. 응용프로그램에서 불필요한 부분은 제외하고 오직 필요한 기능에 대해서만 사용 권한을 안전하게 부여하는것이 가능하다.

SELinux는 모든 주체 (사용자, 프로그램, 프로세스) 및 객체 (파일과 장치)에 각각 다른 권한을 부여할 수 있게 해줍니다. 따라서 사용자는 한 응용 프로그램에게 그 프로그램이 제대로 작동하는데 필요한 권한만 안전하게 부여할 수 있다.

2 . SELinux 정책이란 무엇인가?

SELinux 정책은 사용자, 프로그램, 프로세스 그리고 이들의 동작 대상인 파일과 디바이스를 포함한 시스템 전체, 즉, 모든 주체와 객체에 대한 접근 허가(access permissions)를 포함한 패키지를 이야기한다. 페도라에서 사용가능한 정책 패키지는 strict , targeted 두가지가 있다.

페도라코어에서 SELinux 정책으로 strict policy 를 적용함으로 인해서 다양한 사용자들이 많은 문제점을 일으킴으로 인해서(일반사용자들이 SELinux를 사용하기 위해서는 수준높은 전문기술이 필요하다) 현재 RHEL4 에서는 보다 완화된 정책패키지 targeted poicy 가 설치시 기본으로 제공된다.

targeted policy는 자주 문제시되는 부분들만 우선적으로 적용시키고, 나머지는 표준 리눅스 보안과 동일하게 운영되도록 적용한 정책이다.

현재, targeted policy 에서는 dhcpd, httpd(apache.te), named, nscd, ntpd, portmap, snmpd, squid 그리고 syslogd 데몬에 대해서 관리한다. 이 데몬들에 대한 정책 파일은 /etc/selinux/targeted/src/policy/domains/program에서 찾을 수 있다.

3 . SELinux 설치여부 확인

SELinux 를 사용하고 있는지를 확인하는 방법은 보안문맥을 확인하는 방법으로 알 수 있다.

파일, 사용자, 프로세스등의 문맥을 확인할 때는 -Z 라는 새 옵션을 이용해서 확인할 수 있다.


ls -lZ /etc/selinux


-rw-r--r--  root    root   system_u:object_r:selinux_config_t config

drwxr-xr-x  root    root   system_u:object_r:selinux_config_t targeted


-Z옵션을 이용해서 보안문맥을 보여주는데 이 결과를 통해서 "system_u" 사용자, "object_r" 역할,  "selinux_config_t" 타입을 확인할수 있다. 이런 문맥으로 SELinux의 정책에 비교해서 허용하거나 거부하게 되므로 문맥이 확인가능하다면 SELinux 를 사용중인 것이다..


파일 이외에 프로세스와 사용자에도 각각 아래처럼 보안문맥을 확인할수 있다


root@example# ps axZ | grep squid

user_u:system_r:squid_t          3912 ?        Ss     0:00 squid -D

user_u:system_r:squid_t          3915 ?        S      9:10 (squid) -D

user_u:system_r:squid_t          3916 ?        Ss     0:01 (unlinkd)


root@example# id

uid=0(root)

gid=0(root)groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)

context=root:system_r:unconfined_t


RedHat 의 SELinux 패키지 경우에는 sestatus -v 라는 명령을 이용해서 현재 SELinux의 사용상태를 아래와 같이 확인할수 있다.

[root@ns selinux]# sestatus -v

SELinux status:         enabled

SELinuxfs mount:        /selinux

Current mode:           enforcing

Mode from config file:  enforcing

Policy version:         18

Policy from config file:targeted


Policy booleans:

allow_ypbind            active

dhcpd_disable_trans     inactive

httpd_disable_trans     active

httpd_enable_cgi        active

httpd_enable_homedirs   active

httpd_ssi_exec          active

httpd_tty_comm          inactive

httpd_unified           active

mysqld_disable_trans    inactive

named_disable_trans     active

named_write_master_zonesactive

nscd_disable_trans      active

ntpd_disable_trans      inactive

portmap_disable_trans   inactive

postgresql_disable_transinactive

snmpd_disable_trans     inactive

squid_disable_trans     inactive

syslogd_disable_trans   inactive

winbind_disable_trans   inactive

ypbind_disable_trans    inactive


Process contexts:

Current context:        root:system_r:unconfined_t

Init context:           user_u:system_r:unconfined_t

/sbin/mingetty          user_u:system_r:unconfined_t

/usr/sbin/sshd          user_u:system_r:unconfined_t


File contexts:

Controlling term:       root:object_r:devpts_t

/etc/passwd             root:object_r:etc_t

/etc/shadow             system_u:object_r:shadow_t

/bin/bash               system_u:object_r:shell_exec_t

/bin/login              system_u:object_r:bin_t

/bin/sh                 system_u:object_r:bin_t -> system_u:object_r:shell_exec_t

/sbin/agetty            system_u:object_r:sbin_t

/sbin/init              system_u:object_r:init_exec_t

/sbin/mingetty          system_u:object_r:sbin_t

/usr/sbin/sshd          system_u:object_r:sbin_t

/lib/libc.so.6          system_u:object_r:lib_t -> system_u:object_r:shlib_t

/lib/ld-linux.so.2      system_u:object_r:lib_t -> system_u:object_r:ld_so_t

[root@ns selinux]#

4 . SELinux 기본설정 - /etc/sysconfig/selinux

배포판마다 서비스 설정방법은 차이가 있다. 필자가 테스트한 레드햇과 페도라 배포판에서는 /etc/sysconfig/selinux 파일에서 SELinux 의 사용가능한 모드를 설정한다.


/etc/sysconfig/selinux 파일의 내용


# This file controls the state of SELinux on the system.

# SELINUX= can take one of these three values:

#       enforcing - SELinux security policy is enforced.

#       permissive - SELinux prints warnings instead of enforcing.

#       disabled - SELinux is fully disabled.

SELINUX=enforcing

# SELINUXTYPE= type of policy in use. Possible values are:

#       targeted - Only targeted network daemons are protected.

#       strict - Full SELinux protection.

SELINUXTYPE=targeted

이 파일에는 두부분의 설정이 있는데 SELINUX 의 상태(enforcing, permissive, disabled)를 설정하는 부분과 활성화시킬 보안정책(strict 또는 targeted 중 하나)을 결정하는 SELINUXTYPE 이라는 부분이 있다.

disabled ? SELinux 보안 제어를 사용하지 않으려면 disalbed 옵션을 선택한다. disalbed 설정은 보안 제어 기능을 끄고 시스템이 보안 정책을 사용하지 않도록 설정한다.

permissive ? 이것을 선택하면 서비스 거부 메시지를 통보받을 수 있다. permissive 상태로 설정하면 자료와 프로그램에 이름을 할당한 후 로그를 기록하지만 보안 정책을 사용하지는 않는다. permissive 상태는 SELinux를 처음 접하는 경우 처음부터 이 기능을 완전히 활성화하지 않고 우선 이 정책을 사용해서 일반 시스템 작업시 어떠한 영향을 미치는지 알아보려는 경우 좋은 시작점이 될 수 있다. 그러나 경고 옵션을 선택시 가끔씩 보안경고 대상이 아닌 것을 경고 대상으로 탐지하는 오류(false positive)나 경고 대상인 것을 탐지하지 않는 오류(false negative)가 발생할 가능성도 있으니 주의가 필요하다.

enforcing ? SELinux를 완전히 활성화하시려면 enforcing 옵션을 선택하자. enforcing 옵션을 선택하면 추가 시스템 보안을 위해 모든 보안 정책 (예, 허가가 없는 사용자가 특정한 파일이나 프로그램에 접근하는 것을 거부하기)을 사용한다. SELinux가 완전히 실행되어도 아무런 지장을 받지않고 일반적인 시스템 작업을 수행할 수 있다고 자신하시경우 이 옵션을 선택한다.

5 . SELinux 서비스 설정 - setenforce
SELinux의 서비스 상태를 변경해야 하는 필요가 있을때는 직접 /etc/sysconfig/selinux 파일에서 SELINUX=enforcing , 또는 SELINUX=permissive 처럼 수정해서 변경하는 방법도 있지만 setenforce 라는 명령어를 이용할수 있다.

"setenforce 0" 이라고 명령을 내리는것은  SELINUX=permissive 와 동일한 결과이며, "setenforce 1" 은 enforcing 모드를 의미한다. 시스템에서 SELinux 를 완전히 사용하지 않으려면 /etc/sysconfig/selinux 파일에서 SELINUX=disabled 처럼 설정하거나 시스템 부팅시에 부트로더의 파라미터로 selinux=0 이라고 주고 부팅하면 된다. (grub 을 사용하는 경우라면 grub 화면에서 e 를 누르고 편집모드로 들어간뒤에 kernel 줄의 맨 뒤에 selinux=0 을 적어주고 ESC, 그리고 b 를 눌러서 부팅하면 된다..)


sentenforce 명령은 sysadm_r 권한을 갖고 수행해야 한다; 그러기 위해, newrole 명령을 사용하거나, 아니면, su -를 사용하여 root 로 사용자 전환을 하면, 자동으로 sysadm_r 권한을 얻을 수 있다.

6 . SELinux 서비스 설정 - chcon

SELinux 의 보안문맥을 변경해야 하는 경우에는 chcon 이라는 명령을 사용할수 있다.

아파치를 사용중에 분명히 디렉토리를 생성했는데도 에러가 난다면 아래처럼 http_user_content_t 를 해당 DocumentRoot 에 적용해줌으로 해결해 줄수있다.

chcon -R -t httpd_user_content_t /home/사용자계정/public_html

7 . SELinux 서비스 설정 - setsebool
[root@ns ~]# cat /etc/selinux/targeted/booleans

allow_ypbind=1

dhcpd_disable_trans=0

httpd_disable_trans=1

httpd_enable_cgi=1

httpd_enable_homedirs=1

httpd_ssi_exec=1

httpd_tty_comm=0

httpd_unified=1

mysqld_disable_trans=0

named_disable_trans=1

named_write_master_zones=1

nscd_disable_trans=1

ntpd_disable_trans=0

portmap_disable_trans=0

postgresql_disable_trans=0

snmpd_disable_trans=0

squid_disable_trans=0

syslogd_disable_trans=0

winbind_disable_trans=0

ypbind_disable_trans=0

 

RHEL4의 경우 전환가능한 시스템의 SELinux 설정값들을 나타내는 파일은 /etc/selinux/targeted/booleans  파일이다. 파일안의 각 항목은 system-config-securitylevel 이라는 어플리케이션이나 setsebool 이라는 명령을 이용해서 변경시킬수 있으며 setsebools 을 이용하는 경우 -P 옵션을 사용하지 않으면 설정파일은 변경되지 않고 현재의 설정만 바뀌지만 -P 옵션을 같이 사용하면 /etc/selinux/targeted/booleans 파일의 내용까지 같이 변경되어 시스템 리부팅후에도 적용된다

8 . 사용중인 정책을 교체하는 방법은?

정책 교체는 가볍게 취할 사안이 아니다.

연구 목적으로 시험 장비(test machine)에서 새 정책을 시도하는 이외, 생산 시스템(production system)에서는 다른 정책으로 교체하기 전에 현황을 심각하게 고려해야 한다.


교체 작업은 간단하다. 이는 매우 안전한 방법이지만, 우선 시험 시스템에서 일차 시도해 보는 것이 바람직하다.

한 가지 방법은 system-config-securitylevel을 사용하여 정책을 바꾸고 재명명(relabel)하도록 파일 시스템을 설정하는 것이다.

수작업 절차는 다음과 같다:

1. /etc/selinux/config을 편집하고 SELINUXTYPE=policyname으로 정책 유형을 바꾼다.

2. 재부팅하여 돌아올 수 있는 지 확인하기위해, SELINUX=permissive모드로 설정한다. 이렇게 하면, SELinux는 정확한 정책하에서 가동될 것이지만, 만일 부정확한 파일 문맥 명명(labeling)과 같은 문제가 있으면 로그인하도록 할 것이다.

3. sysadm_r 역할을 갖춘 root로 파일 시스템을 재명명한다(relabel):

id -Z

root:sysadm_r:sysadm_t

fixfiles relabel

옵션 -l /path/to/logfile을 사용하여 표준 출력으로 로그를 볼 수 있고, 옵션 -o /path/to/file을 사용하여 검토(checked)되거나 재명명(relabel ed)된 모든 파일 리스트를 저장할 수 있다.

4. 시스템을 재부팅한다. 새 정책하에서의 재시작은 모든 시스템 프로세스가 적절한 문맥에서 시작되고 정책 변경으로 인한 모든 문제가 드러나게 한다.

5. sestatus -v 명령으로 발효된 변경사항을 확인한다. Permissive 모드로 가동된 새 시스템에서, avc: denied 메시지를 /var/log/messages에서 확인한다. 이들은 새 정책하에 문제없이 시스템이 가동되도록 해결해야 할 문제들을 표시해 준다.

6. 새 정책하에서 시스템이 만족스럽게 돌아갈 때, SELINUX=enforcing 으로 바꿔 실행 권한을 부여한다. 실시간에 enforcing을 활성화 시키기 위해 재부팅하거나 setenforce 1 을 실행한다.

9 . SELinux LOG

SELinux 의 로그는 /var/log/messages 파일에 아래처럼 나타난다


kernel: audit(1114070701.193:0): avc:  denied  { read } for  pid=24216

exe=/usr/libexec/mysqld name=mysql dev=cciss/c0d0p6 ino=16408

scontext=user_u:system_r:mysqld_t tcontext=root:object_r:var_lib_t

tclass=dir


이 로그는 아래와 같이 해석할수 있다.


- 읽기 요청이 거부되었다.

- PID 24216을 가진 프로세스가 read를 시도한다

- 해당프로세스는 /usr/libexec/mysqld 이다

- /dev/cciss/c0d0p6 에서 작동되고 있다

- inode 는 16408이다.

- 프로세스의 SELinux 문맥은 user_u:system_r:mysqld_t 이다.

- tcontext=root:object_r:var_lib_t : 이파일이 읽기를 시도하는 파일은 var_lib_t 타입의 root 소유파일이다


SELinux LOG 각 항목의 의미

audit(timestamp) -- This field states that it's an audit message from SELinux and that it was logged at timestamp time (in seconds since Jan. 1st, 1970).

avc -- This message was from the SELinux access vector cache. Pretty much every message you are likely to see is from this cache.

denied | accepted -- This field indicates whether the action was denied or accepted. You may see logs of accepted messages in some cases (like reloading the policy).

{ read | write | unlink | ... } -- This field shows the type of action that was attempted, such as reading a file, writing, unlinking, loading policy, etc.

for pid= -- This is the process ID that attempted the action.


exe= -- This is the path to the executable that started the process.

name= -- This is the name of the target on which the action was attempted.

dev= -- This is the device on which the target file is located.

ino= -- This is the inode of the target of the action.

scontext= -- This is the process's security context. This contains user, role, and type.

tcontext= -- This is the security context of the target of this action, for example, the file, directory, etc.

tclass= -- This is the class of the target object, such as directory, file, device node, or something else.

10 . Audit2allow

정책 작성자에게 유용한 도구는 /usr/bin/audit2allow 인데 이것은 /var/log/messages의  avc 메시지를 SELinux에 의해 사용될 수 있는 규칙으로 번역해준다. 사용이 불가능하다면 policycoreutils 패키지에 속해있으므로 yum install policycoreutils 처럼 설치 가능하다.

audit2allow명령은 세가지 방법으로 입력을 받을 수 있다. 기본은 표준입력 (stdin)이다. -i 옵션을 사용하면 /var/log/messages 로부터 입력을 읽을 수 있고 -d옵션을 사용하면 dmesg 출력으로부터 입력을 읽을 수 있다.

11 . avc: denied

이 메시지는 현재 실행된 SELinux 정책이 그 응용프로그램의 동작을 허락하지 않기 때문이다. 이러한 일에는 여러 가지 사유가 존재한다.

첫째, 응용프로그램이 접근하려는 파일중 하나가 잘못 명명되어있을 수 있다. 만일 AVC 메시지가 특정 파일을 참조한다면, ls -alZ /path/to/file 을 수행하여 현재 참조하는 파일명(current label)을 조사해 보라. 만일 그것이 잘못되어 보이면, restorecon -v /path/to/file 을 시도해보라. 만일 파일과 관련된 매우 많 은 거부(denials) 상황이 존재하면, fixfiles relabel 을 수행하거나, 반복적으로 디렉토리 경로를 재명명하기 위해서 -R옵션과 함께 restorecon 을 수행하고 싶을 수 있다.

다른 때에는, 거부(denials) 현상은 정책에 의해 거부되도록 프로그램에 설정을 바꿔서 발생될 수 있다. 예를 들면, 만일 Apache를 8800포트로 바꾸면, 보안 정책, apache.te,도 관련하여 바꿔야 할 필요가 생긴다. 정책 작성에 관한 상세한 정보가 필요하면, 외부연결 리스트(External Link List)를 보라.

12 . 참고문헌 또는 URL

 

Home of the SELinux project -- http://www.nsa.gov/selinux/

The Un-Official SELinux FAQ -- http://www.crypt.gen.nz/selinux/faq.html

SELinux link zoo -- http://www.crypt.gen.nz/selinux/links.html

Ubuntu Linux SELinux pages -- https://www.ubuntulinux.org/wiki/SELinux

2005.8 Sys Admin Magazine -- http://www.samag.com/documents/s=9820/sam0508a/0508a.htm

NSA SELinux FAQ ? http://www.nsa.gov/selinux/info/faq.cfm

SELinux community page ? http://selinux.sourceforge.net

UnOfficial FAQ ? http://www.crypt.gen.nz/selinux/faq.html

Writing SE Linux policy HOWTO ? https://sourceforge.net/docman/display_doc.php?docid=21959&group_id=21266

Getting Started with SE Linux HOWTO: the new SE Linux (Debian) ? https://sourceforge.net/docman/display_doc.php?docid=20372&group_id=21266

출처 : Tong - 등가교환님의 Linux통

2007년 3월 21일 수요일

2007년 3월 13일 화요일

특정 ID만 su명령어 먹히게 하기

새로 설치한 나의 fedora 6 머신을 예제로 함

# vi /etc/group

wheel:x:10:root,superkjh


wheel 부분에 su 명령을 사용하게 할 계정을 추가한다. 또는

# usermod -G wheel superkjh


이라는 명령으로 superkjh이라는 계정을 wheel 그룹에 포함 시킬 수 있다.

이제 /etc/pam.d/su 파일을 편집한다.
use_uid를 debug group=wheel로 바꾸었다.

#%PAM-1.0
auth            sufficient      pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth           sufficient      pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth           required        pam_wheel.so use_uid
auth           required        pam_wheel.so debug group=wheel
auth            include         system-auth
account         sufficient      pam_succeed_if.so uid = 0 use_uid quiet
account         include         system-auth
password        include         system-auth
session         include         system-auth
session         optional        pam_xauth.so

다른 계정도 하나 추가하여 로긴여부를 테스트 해본다.

퍼미션에 대하여 보안SUID SGID STID

보안SUID SGID STID

suid나 sgid는 루트가 아닌 사용자들이 잠깐 루트의 사용권한을 써서 프로그램을 샐행해야할 필요가 있을때 주는 권한 설정이다.....

(1). SUID는 절대표기값은 4000이다 일반사용자가 소유자 권한으로 실행할수 있도록 하는 것 보안상 문제가 있기 때문에 조심해서 사용하여야 한다.

(2). SGID는 절대표기값은 2000 일반사용자가 소유그룹의 권한을 실행할수 있도록 하는 것 파일 적용이 되면 다른 그룹이 소유그룹의 권한으로 파일을 실행하는것과 같다.

(3). STICKY BIT는 모든 사용자가 쓸 수 있는 디렉토리를 적용하여 디렉토리내에 있는 파일을 임의대 로 삭제할수 없고, 오직 소유자에게만 삭제,변경 권한이 있다. 리눅스에서는 /tmp디렉토리가 대표적 인 stick bit로 설정이 되어있다.

먼저 sticky bit부터알아본다....이파일을 알아보기위해선 다음과 같이 입력해보라.
#ls -dl /tmp의 경우 소유자와 소유그룹이 root로 되어있더라도 다른 사용자가 읽고 쓰고 할 수 있다.
왜냐하면 퍼미션이 t로 되어있기 때문이다. 이temp폴더는 임시저장장소로 윈도우즈의 임시저장장소와도 같다고 볼 수 있다.


먼저 예제로 통해 퍼미션에 대해알아보자.
ex)먼저 root로 접속을 한다.
root#cd /temp 안에서 파일을 하나만든다.
temp#touch file1
#su (다른계정으로 접속을 해보라.)
#rm -rf file을 해보라 그럼 지워지지않을 것이다. 이것은 퍼미션 마지막에 t 때문이다.

4자리 퍼미션계산법을 알아보자. (- : 파일 , d : 디렉토리)

구분
소유자(user)
소유그룹(group)
타인(other)
-
d
r
w
x
r
w
x
r
w
x
.
.
읽기
쓰기
실행
읽기
쓰기
실행
읽기
쓰기
실행
..
..
4
2
1
4
2
1
4
2
1
.
.
.
s
.
.
s
.
.
s
.
4자리값
.
4
4
.
2
2
.
1
1
..
7
7
7


rws/rwx/rwx ->요렇게 될 경우 퍼미션이 4777이 된다.........소유자실행파일이 x ->가 s로바뀌었다.
이 것은 SUID가 설정됐다는 것이된다. 그리므로 퍼미션777에서 s는 r같은 4로 인식을 한다.그리고 가장앞에 붙는다...그러므로 4777이된다....만약 SGID가 설정되었다면 2가붙는다 즉 2777이된다. 그리고 타인에 T란퍼미션이 붙는다면 1이 추가되어 1777이된다.

구분
소유자(user)
소유그룹(group)
타인(other)
suid
sgid
stick
r
w
x
r
w
x
r
w
x
실행
실행
실행
읽기
쓰기
실행
읽기
쓰기
실행
읽기
쓰기
실행
4
2
1
4
2
1
4
2
1
4
2
1
.
.
.
.
s
.
.
s
.
.
s
.
.
. .
.
4
4
.
2
2
.
1
1
..
7
7
7

퍼미션이 ex) s/rwx/rwx/rwx 이것은 잘못된 예이다...퍼미션은 각실행파일에 붙는다.
즉 rws/rwx/rwx 요렇게 붙는다.s는 x가 있다는가정하에 그곳에 s가붙는다.

그럼 이제 4자리 퍼미션으로 변경하여 보자.

ex)#root /admin 방안에 파일을 만들어서 chmod를 적용하여보자.........
퍼미션계산법은 휴우......................음 한번해보세용 요렇게 만들어보세요.
ex) r-s/rwg/r-t ->/4+2+1/4+1/4+2+1/4+1/->퍼미션이 7575가된다......

참고로 추가를 할려면 다음과 같이 하면된다.

chmod u+s 파일이름 -> suid를 적용한다는 뜻이다. (u -> user)
chmod u-s 파일이름 -> suid를 적용해제 시키겠다는 뜻이다. (u -> user)
chmod g+s 파일이름 -> sgid를 적용하겠다는 뜻이다. (g -> group)
chmod g-s 파일이름 -> sgid를 적용해제 시키겠다는 뜻이다. (g -> group)
chmod o+t 파일이름 -> stick bit를 적용시키겠다는 뜻이다. (o -> other)
chmod o-t 파일이름 -> stick bit를 적용해제시키겠다는 뜻이다. (o -> other)


suid, sgid, sticky 박탈하기

요번명령을 실행하는 것은 보안상 불가피한 파일은 위의퍼미션을 해제하는 것이 좋다.
그렇기 때문에 아래와 같은 작업과정을 거쳐서 퍼미션을 박탈한다는 것이다.
모든 파일의 퍼미션을 박탈한다는 것은 아니다. 꼭 퍼미션이 적용해야만될 파일을 제외하고는
모두 박탈한다.
이번엔 퍼미션 파일찾기 명령을 실행하여보자.
각각 sgid, suid ,stickybit 가 적용된파일을 찾기위해선 다음과 같이하면 된다.

#find / -perm -04000 > setuid.txt
#find / -perm -02000 > setgid.txt
#find / -perm -01000 > sticky.txt

각각 다른창으로 실행을 하면 각각에 대한 정보가 txt로 입력이 된다.
만약을 위해서 같은 파일을 하나씩 복사해 놓는다.
각각에 파일을 모두다 적용이 되면 #vi setuid.txt를 적용시키고 연다.

setuid.txt 에서 기본적으로 위퍼미션을 적용해야 될파일은 다음과 같다.

/usr/bin/procmail
/usr/sbin/sendmail
/usr/bin/passwd
/bin/su

파일들을 찾아서 .txt안에 라인들을 일단 삭제한다.

다음은 삭제한 파일을 제외한 나머지 파일을 한꺼번에 퍼미션해제 한다.
#cat setuid.txt |xargs chmod u-s 요렇게 치면 전체가 한꺼번에 퍼미션이 해제된다.
(반대로 추가한다면 u-s , u+s로 해주면된다.

setgid.txt의 경우는 다음과 같다.

/usr/bin/procmail
/usr/sbin/sendmail

파일들을 찾아서 .txt안에 라인들을 일단 삭제한다. (그런데 파일이 있을수도 없을수도 있다)

#cat setgid.txt |xargs chmod g-s 라적용하면 된다.
(반대로 추가한다면 g-s , g+s로 해주면된다.)

stick key역시 위와 동일하다.

다음은 제대로 적용이 되었는지 한번 확인을 해본다.

#find / -perm -02000 라 입력하고 다시찾아본다.


다른계정에서 파일 받기 와 지우기........

다른곳에서 원격접속시 telnet 자기자신의 계정안에서 자신의 파일을 지우기 위해선 !rm 파일명dmf 사용한다.(!란 자기자신의 파일이란 뜻이다.)

다른계정에서 파일받기

우선파일을 받을 디렉토리에서 ftp로 접속을 한다.
ftp 211.x.x.x
아이디 : 입력(su를 사용할 수 있는 id로 입력을 한다.)
pass -> xxxx입력
접속이 되면 다운받을 디렉토리로 이동을 하여
#get 파일명을 입력하면 자기계정으로 파일이 복사된다.

ls -al /etc/passwd
ls -al /etc/shadow -> shadow파일 실행시 * 가붙은 것은 접속이 불가능한 것을 말한다.
telnet으로 *로 된 것을 접속하면 접속이 되질 않는다.

* 가 붙지 않은 것은 바로 telnet접속이 가능하다 즉암호없이 접속이 가능하다는 것이다.
* 가 붙지 않은 것은 *를 붙인다면 조금은 안전하다고 할 수 있다.

#pwunconv /etc/shadow라치면 암호화된 shadow파일들이 /etc/passwd파일안에 암호화된파일이
적혀나온다....이 암호화된 파일은 해커들이 볼 수 있다. 그러므로 가급적이면 사용하지 않는다.
다시 shadow로 되돌리려면 pwconv치면 원래 자기자리로 되돌아간다.

fedora 6 리눅스 네트워크 설치 가이드

깔끔 쌈박 설치 정리

1. cd나 dvd이미지를 마운트하여 ftp 나 홈페이지 디렉토리에 복사해 놓거나 심볼릭링크를 걸어놓는다.
2. rescue cd 를 굽는다.
3. cd부팅을 한다.
4. boot: linux askmethod를 입력한다.
5. 직관적으로 설정한다.
6. ip설정시 125.246.217.200 / 24(prefix로 서브넷을 적어준다.)
7. 직관적으로 깐다.
8. 재부팅된다.
9. 입맛에 맞게 설정한다. 특히 보안 설정 잘한다.

네트워크 경로 http://www.maehyang.hs.kr/fedora

2007년 1월 13일 토요일

터미널서비스에서 파일 복사하기

출처 : korea.internet.com
터미널 서비스를 이용하면 클라이언트와 서버 세션간에 텍스트와 이미지의 복사, 잘라내기, 붙여넣기 등을 할 수 있다.
하지만 아쉽게도 파일의 복사, 잘라내기, 붙여넣기를 지원하지 못하고 있는데 터미널 서비스 확장기능을 이용하면 가능하다.이 기사에서는 터미널 서비스의 확장판인 파일 복사기능을 이용해서 클라이언트와 서버세션간의 파일의 복사, 잘라내기, 붙여넣기를 이용하는 방법에 대해서 알 수 있다.File Copy를 사용하여 다음과 같은 작업을 수행할 수 있다. 여러 파일과 폴더를 복사, 잘라내기,
붙여넣기 Windows 32비트 또는 16비트 클라이언트 상에서 복사, 잘라내기, 붙여넣기. File Copy를 사용하려면, 서버에서는 다음의 과정을 수행한다.

http://www.microsoft.com/windows2000/techinfo/reskit/tools/hotfixes/rdpclip-o.asp에 접속한다.

오른쪽 Download 메뉴에서 dpclip_hotfix.exe 파일을 다운로드 한다.

시작 - 실행 - Regedit를 실행한다.
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerAddInsClip Redirector 로 이동한다.

Name을 더블 클릭한다. RDPCLIP을 FXRDPCLP으로 바꾼다.

HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal ServerWds dpwd 로 이동한다. Startup Programs 값을 더블 클릭한다.

RDPCLIP을 RXRDPCLP으로 바꾼다.( 만약 드라이브 공유를 설치했다면 FXRDPCLP을 DRMAPSRV로 바꾼다.) 리소스 킷 폴더에 있는 rdpclip.exe 파일의 이름을 fxrdpclp.exe로 변경한다.

다음 그 파일을 %systemroot%System32 폴더에 복사한다. 리소스 킷 폴더에 있는 fxfr.dll 파일을 %systemroot%System32 폴더로 복사한다.

컴퓨터를 재시작한다. 클라이언트에서는 다음의 과정을 수행한다. 32-bit fxfr.dll 파일을 Program FilesTerminal Services Client 폴더로 복사한다.

Program FilesTerminal Services Client 폴더에 있는 rdpdr.dll 파일이름을 rdpdr.pss로 바꾼다. 32-bit rdpdr.dll 파일을 Program FilesTerminal

Services Client 폴더로 복사한다. File Copy를 사용하려면 단지 클라이언트나 Terminal Services session에 있는 파일 또는 파일들을 선택하고 Ctrl+C를 누른다음, 다른 Terminal Services 나 Client session에서 붙여넣기를 하면 된다.