리눅스보안 - 필수 보안 조치법

Posted 2008. 10. 24. 04:35


리눅스보안 - 필수 보안 조치법  

1. SUID 점검하기.(root 소유의 SetUID및 SetGID 파일들 점검

    find / -user root -perm -4000 -print (SetUID)
    find / -user root -perm -2000 -print (SetGID)
    find / -user root -perm -4000 -print -xdev

2. 파티션별 디스크사용량 점검
    df -h

3. 파일무결성 점검.

    http://weblog.websea.co.kr/tripwire/tripwire

4. 백도어 설치여부 점검.(/dev 체크 및 rootkit 점검)

    find /dev -type f -exec ls -l {} ;
    ./chkrootkit
   
5. 현재 열려진 포트 및 응답가능한 포트 점검.

    netstat -atp | grep LISTEN (사용 프로토콜 : TCP인가? 또는 UDP인가?
           사용중인 포트번호
           서버와 연결된 IP 및 도메인명
           생성 PID
           서비스중인 프로세스명
           현재 응답가능상태인가?
    lsof | grep LISTEN(현재 서비스 중인 프로세스명(데몬명)
               현재 생성중인 PID번호.
           현재 서비스중인 프로세스의 소유자
           프로토콜 버전 : Ipv4 또는 Ipv6
           TCP 또는 UDP의 여부
           응답가능 상태인가?

6. 실생중인 프로세스 및 데몬점검.(프로세스의 생성관계)

    pstree

7. 시스템 운용상황 점검.

   top -d2

8. 백업점검.

   /home2/backup/nexfor/
   /home2/backup/websea/

9. 스팸메일 점검.(메일큐 디렉토리 점검)

  /var/spool/mqueue    (동일한 날짜, 동일한 사이즈를 가진 다수 파일구분)

10. Core 점검.

 서버내에 긴급한 이상이 발생하였을 경우나 시스템의 정확한 분석을 위해
 서버의 메모리 상태를 순간적으로 dump 받는 경우의 파일
  find / -name core -exec ls -l {} ;
 
11. 파일용량 점검

 repquota -av -ag
 df -h

12. 최근 서버 접속자 점검.

  vi /var/log/secure
  last -n 10  최근 10번째까지의 접속기록을 확인.

13. 계정별 최후접속기록 점검.

       lastlog는 현재 /etc/passwd에 존재하는 모든 계정을 대상으로 하여 언제 마지막으로  
       서버에 접속을 했는가를 확인.

       Mail, adm, bin 등의 계정들은 모두 "** Never logged in **" 이라고 되어 있는것이 정상.
       lastlog

14. 현재 서버접속자 보기

   w (telnet)
   ftpwho(ftp)

15. root명령어 사용기록 점검.

           vi /root/.bash_history  (.set nu)
           cat /root/..bash_history | wc -l    (1000라인 이상 되어야 정상)

16. 계정별 사용명령어파일 점검.

        find / -name .bash_history -exec ls -l {} ;    (각 계정별 .bash_history 파일의 존재여부)
        find / -name .bash_history -exec cat {} ;     (파일의 내용까지 모두 확인해 볼 수 있음)

17. root소유자 점검(UID와 GID가 0인 사용자 점검)

           cat /etc/passwd | grep 0:0

18. 서버내에 중요한 디렉토리 점검

        /etc/xinetd.d/    (xinetd로 서비스되는 인터넷서비스 파일들이 존재하는 디렉토리)
        /etc/rc.d/         (부팅에 관계된 파일) (파일들을 복사 후 파일용량등을 비교하기)
                               (커널패닉의원인)
        /etc/rc.d/init.d/ (부팅시에 특정 서비스나 데몬들을 시작시키는 스키립트 파일)

19. .rhosts 파일 점검

           원격에서 패스워드등의 확인과정없이 바로 접속하기 위해서 사용되는 파일
           
           find / -name .rhosts -exec ls -l {} ;
           find / -name .rhosts -exec cat {} ;

20. 메모리사용량 점검.

           free -m
           cat /proc/meminfo   (free 와 top 는 이 파일을 참조하여 보여준다.)
           top -d2

21. 중요 관리자용명령어 점검.

           아래의 명령어들을 퍼미션을 100으로 설정한다. 변경 후 퍼미션 변경여부를 확인.
           
           chmod 100 /usr/bin/top
           chmod 100 /usr/bin/pstree
           chmod 100 /usr/bin/w
           chmod 100 /bin/ps
           chmod 100 /usr/bin/who
           chmod 100 /usr/bin/find
           chmod 100 /bin/df
           chmod 100 /bin/netstat
           chmod 100 /sbin/ifconfig
           chmod 100 /usr/sbin/lsof
           chmod 100 /usr/bin/make
           chmod 100 /usr/bin/gcc
           chmod 100 /usr/bin/g++
           chmod 100 /usr/bin/c++

22. su 명령어를 이용한 root권한 사용자 점검.

           su 명령어의 사용내역을 확인할 수 있음.

           cat /var/log/messages | grep root

23. 최근 n 일전 변경된 파일 점검. (단위는 일)

           find / -ctime -1 -print | more

24. http://weblog.websea.co.kr/

25. find 를 이용한 특정파일 점검하기.

           .exec 파일찾기
           find / -name '.exec' -exec cat {} ; -print

           .forward 파일체크
           find / -name '.forward' -exec cat {} ; -print

           write 퍼미션이 있는 파일(디렉토리)찾기
           find / -type f  ( -perm -2 -o -perm -20 ) -exec ls -lg {} ;
           find / -type d ( -perm -2 -o -perm -20 ) -exec ls -ldg {} ;

           SteUID SetGID 체크하기
           find / -type f ( -perm -004000 -o -perm -002000 ) -exec ls -
lg {} ;

           /dev 체크
           find /dev -type f -exec ls -l {} ;

           소유자없는 파일 및 디렉토리 찾기
           find / -nouser -o -nogroup -print

           원격리모트 접속허용 파일(.rhosts)찾기
           find / -name .rhosts -print

           최근 변경된 파일들 찾기.(파일or디렉토리) 단위는 일
           find / -ctime -20 -type f or d

           현재 서버에서 열려진 포트 및 접근저보 점검

           netstat -an | grep LISTEN   (포트들과 열결되어 있는 실행데몬들을 확인)
           lsof | grep LISTEN   (좀 더 자세히 확인)

26. 관리자용 명령어 퍼미션 수정하기.

           chmod 100 /usr/bin/top
           chmod 100 /usrbin/pstree
           chmod 100 /usr/bin/w
           chmod 100 /bin/ps
           chmod 100 /usr/bin/who
           chmod 100 /usr/bin/find
           chmod 100 /bin/df
           chmod 100 /bin/netstat
           chmod 100 /sbin/ifconfig
           chmod 100 /usr/sbin/lsof
           chmod 100 /usr/bin/make
           chmod 100 /usr/bin/gcc
           chmod 100 /usr/bin/g++
           chmod 100 /usr/bin/c++

27. 중요한 파일퍼미션과 소유권 제한 및 점검.

           chmod 644 /etc/service
           chmod 600 /etc/xinetd
           chmod 644 /etc/mail/aliases
           chmod 600 /etc/httpd/conf/httpd.conf
           chmod 644 /var/log/wtmp
           chmod 644 /var/run/utmp
           chmod 644 /etc/motd
           chmod 644 /etc/mtab
           chmod 600 /etc/syslog.conf
           
           /etc, /usr/etc, /bin, /usr/bin, /sbin, /usr/sbin

           chmod 1777 /tmp
           chmod 1777 /var/tmp
           
28. umask 값 확인하기.

           root의 umask 값 확인하기.
           umask
           022 -->파일은 644 디렉토리는 755로 생성됨.
           027 -->파일은 640 디렉토리는 750로 생성됨.

29. /dev 에 device 파일 이외의 것이 존재하고 있는지 확인.

           find /dev -type f -exec ls -l {} ;

30. 일반사용자의 명령어 패스

           /usr/local/bin:usr/local/mysql/bin:/home/hosting/bin/
           일반사용자가 사용가능한 명령어를 모두 이것에 둠.

31. 관리자의 명령어 패스

           :/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin

           /X11:/usr/X11R6/bin:/usr/kerberos/bin:/root/bin

32. 특정 그룹만의 su 사용권한 허용하기

           vi /etc/group  (wheel구릅에 su 사용권한을 가질 유저 추가하기)
           wheel:x:10:root,cream

           vi /etc/pam.d/su (두줄 추가하기)

           auth            sufficient            /lib/security/pam_rootok.so
           auth            required             /lib/security/pam_wheel.so allow group=wheel

           vi /var/log/message 에서 확인

33. chmod 400 /etc/shadow

34. 시스템 기본로그파일.

           /var/log/messages
           /var/log/secure
           /var/log/wtmp
           /var/run/utmp
           /var/log/lastlog

35. utmp, wtmp, lastlog 파일

           utmp파일 : 현재시스템에 접속해 있는 사용자의 정보를 가지고 있음.
           
           strings utmp | more
           
           정보 이용 명령어
           login(1), who(1), init(8), last(8), lastcomm(8)

           wtmp파일 : 처음부터 접속했던 모든 사용자의 로그인정보와 로그아웃정보를 가지고 있음.

           strings wtmp | more

           정보 이용 명령어
           login(1), who(1), init(8), last(8), lastcomm(8)

           lastlog 파일

           가장 최근에 로그인한 정보를 저장함.

           last 라는 명령어로 확인할 수 있음.

36.  패스워드 유출대처방안(웹)

           perl을 이용한 방법.


   AllowOverride FileInfo AuthConfig Limit
   Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
   Options Indexes SymLinksIfOwnerMatch IncludesNoExec ExecCGI
   Options Indexes SymLinksIfOwnerMatch IncludesNoExec
   
       Order allow,deny
       Allow from all
   
   
       Order deny,allow
       Deny from all
   


           SSI의 exec 명령어를 이용하는 방법

#    AddType text/html .shtml
#    AddHandler server-parsed .shtml

27. PortSentry를 이용한 실시간 해킹방어 구현.(잘못 사용할시 서버접속 안됨)

           tar -xvzf portsentry-1.1.tar.gz
           make linux
           make install

           /usr/local/psionic/portsentry/portsentry -tcp
           /usr/local/psionic/portsentry/portsentry -udp
           /usr/local/psionic/portsentry/portsentry -stcp
           /usr/local/psionic/portsentry/portsentry -atcp
           /usr/local/psionic/portsentry/portsentry -stdp

           vi /etc/hosts.deny 점검.

28. Chkrootkit 로 백도어 점검.

           tar -xvzf chkrootkit.tar.gz
           make sense
           ./chkrootkit     (점검명령어)

29 ping 을 이용한 DOS 공격 막는 방법.

           vi  /etc/sysctl.conf
           net.ipv4.icmp_echo_ignore_broadcasts = 1

           sysctl -w
           /etc/rc.d/init.d/network restart
           sysctl -a | grep ignore_broadcasts

30. Nmap를 이용 포트스켄 하여 해킹가능성 체크.

           nmap -sS -p80 211.42.48.110 -O -v www.armian.net
           nmap -sS -O -v 211.42.48.114

해킹 방지 서버 점검

Posted 2008. 10. 24. 04:34


프록시 혹은 웹서버를 기준으로 간단히 설명드리겟습니다.

 

우선적으로 사용자 계정에 관하여 adduser 에서 계정추가후 하위디렉토리네 명령어 list중 일부를 삭제하지 않앗다고 여겨집니다.

루트 관리자에대한 자동 로그아웃 명령어 추가 및 루트의 암호를 8자이상으로 영문+숫자등의 조합으로 하셧는지도 의문스럽고요..

그외 파일허가권에 대한 변동사항을 체크하셧는지용?

 

그외 상세한 설명 및 사용팁은 아래내용 참조..

②파일의 권한 및 소유권부여로부터 보안설정
㉮LILO부팅시 Linux Single 모드 부팅으로 root권한획득 및 암호변경방지
#vi /etc/lilo.conf
 . . .
Message=/boot/message
restricted
password=********   //이부분에 암호를 입력하면 linux single모드 부팅시 암호를 묻게 된다.
linear
 . . .


㉯암호문의 길이를 수정
#vi /etc/login.defs   //가운데 PASS_LEN 5   ß-- 이부분의 숫자를 8로 수정한다.
㉰root 권한으로 로그인후 일정시간 경과후 자동 로그아웃하기
#vi /etc/profile
HOSTNAME=’/bin/hostname’
HISTSIZE=0
HISTFILESIZE=0
TMOUT=600     //시간은 초단위이며 예시처럼 바꾸면 된다!
㉱root가 아닌 사용자의 원격 접촉제한 //사용자가 서버의 종료,재시작을 하지 못하게 한다.
#cd /etc/security/console.apps
#ls –a     //항목중 reboot,halt,powerdown 을 rm –r을 이용하여 삭제한다.
㉲Ctrl+Alt+Delete로 강제종료를 제한하도록 설정
#vi /etc/inittab
ca::ctrlaltdel: /sbin/shutdown –t3 –r now //이 항목에 대하여 맨앞에 ‘#’를 넣어서 주석문 처리를 한다.
㉳파일의 허가권 변경
#chmod –R 700 /etc/rc.d/init.d/*  //디렉토리내 모든파일에 대하여 root사용자외 접근을 거부
#chmod –R 600 /etc/password   //일반사용자의 접근 금지
#chomd –R 600 /etc/inetd.conf   //쓰기금지 지정
㉴기타 허가권변경을 요하는 파일 및 허가권 부여
시스템 파일 및 디렉토리  설명     허가권
/var/log   모든 로그파일을 담고있는 디렉토리  751
/var/log/message  시스템 메시지 로그파일    644
/etc/crontab   작업 스케줄 파일    600
/etc/syslog.conf  syslog 데몬 설정 파일    640
/var/log/wtmp   who명령으로 현재사용자를 보여주는 기록파일 660
/var/log/lastlog  last 명령에 의해 보여지는 최종사용자 표시파일 640
/etc/passwd   리눅스 서버의 사용자 계정리스트   600
/etc/shadow   암호화된 계정 패스워드를 담고있는 파일  600
/etc/hosts.allow  네트워크 서비스의 접근을 허락하는 설정파일 600
/etc/hosts.deny  네트워크 서비스의 접근을 거부하는 설정파일 600
/etc/lilo.conf   부트로더 Lilo의 설정파일    600
/etc/securetty   root로 로그인을 허락하는 컴퓨터대상을 결정하는 파일 600
/etc/shutdown.allow  Ctrl+Alt+Del 사용을 허가하는 사용자의 리스트 700
/etc/security   시스템접근 보안정책 파일이 들어있는 디렉토리 700
/etc/rc.d/init.d   시작 부트 스크립트 파일    750
/etc/sysconfig   시스템과 네트워크 설정파일   751
/etc/services   서비스이름과 포트를 나타내는 파일  600
/etc/inetd.conf  인터넷 슈퍼서버데몬 inetd의 설정파일  600
/etc/ssh   보안 쉘(ssh) 설정파일    750
③각종 로그파일의 관리
㉮log파일의 관리    // #var/log 디렉토리의 log파일중 중요한것들
boot.log  //리눅스 부팅시 나타나는 메시지를 기록
cron   //시스템의 정기적인 작업에 대한 로그를 기록
message  //커널에서 보내주는 실시간 메제지의 로그를 관리
secure  //시스템의 접속에 관한 로그파일
xferlog  //FTP로 로그인 하는 사용자에 대한 로그를 기록하는 파일(웹서버에 해당)
maillog  //센드메일을 통한 메일에 대한 로그를 기록하는 파일

이외 궁금한것은 ....

 

추가:

가장 최우선적으로 boot.log와 같은 각종로그파일을 살펴보시는게 급선무 입니다. 언제 어디서 누가 접속햇는지 어디서 어떤작업을 햇는지 로그파일에 정보가 남아 있으니 그것부터 확인하세요..

또한 파일의 날짜도 의심해보고욤..



# crontab -e   <- 편집모드

//분 시 일 월 요일  명령어 형식이구요
---------------------------------------------

30 17  *  *   *      /(경로)shutdown.sh
---------------------------------------------

// 17:30분에 shutdown.sh 실행

 

#cat > shutdown.sh  (shutdown.sh 파일 만들기)

#!/bin/sh 
shutdown -h now   (명령어 : 즉시 shutdiwn)

 

이렇게 하면 매일 17시 30분에 Linux가 Shutdown됨

 

 

cron에는 root권한이 없기 shutdown.sh가 실행이 되지 않을껍니다,

 

shutdown은 root권한으로만 실행되기 때문이죠.

 

sudo가 설치되어 있으면 아래와 같이 하시면 됩니다.

 

vi /etc/sudoers 하셔서


ALL ALL=NOPASSWD:/sbin/shutdown

 

cron을 아래와 같이 고칩니다.

 

11 20 * * * sudo /sayit/shutdown.sh

 

shutdown 명령은 데몬으로도 실행할 수 있스니까 수행될 것입니다.

리눅스 스케줄러 crontab

Posted 2008. 10. 24. 04:32


출처 : http://blog.naver.com/sulucky5?Redirect=Log&logNo=70015357757

 

 

crontab 은 윈도우의 스케줄러와 같은 역할을 하는 명령어입니다.

 

CRONtab

 

crontab -l

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

 

crontab -e

-> crontab 편집하기

 

 

------------------------------------------------------------------------------------

 

CRONtab

/etc/cron, /usr/spool/cron/crontabs/*

/etc/cron" 프로그램  주기적으로 어떤 프로그램을 수행시키는데 사용된다. 

이때  주기적으로 수행되어질 프로그램은 "/usr/spool/cron/crontabs" 디렉토리 

밑에  사용자의 사용자명과 같은 이름으로 생성된다.

 화일은 만드는 방법은 아래 명령을 사용하면 된다.

        % crontab -l root  : /var/spool/cron/crontabs/root 내용 display

        % crontab -e root  :

            명령을 root 수행했으면 /var/spool/cron/crontabs/ DIR 하위에 

           "root" 라는 이름의 화일이 생성된다)

           또는 vi  편집 

--------------------------------------------------------------------------------

)

# more /var/spool/cron/crontabs/root

# minute   hour   day   month   week

# 0~59     0~23   1~31  1~12    0~6  (0=sunday, 1=monday)

#

15,45 3 * * * find / -name .nfs* -mtime +7 -exec rm -f {} ; -o -fstype nfs -prune

5 9 * * 6 /usr/lib/newsyslog >/dev/null 2>&1

15 0,8 16 * * find /var/preserve/ -mtime +7 -a -exec rm -f {} ;

--------------------------------------------------------------------------------

  crontab 화일의  앞의 5번째 칼럼까지에는  명령이 수행되어질 일시와 요일이다.

  지정한 것들은 아래와 같은 의미를 갖는다.

         시간 날짜  요일 : 구분은 Space

        15,45 3 * * *  : 매일 3 15분관 45분에 수행 

        5 9 * * 6      : 매주 금요일 9 5분에 수행 

        15 1,18 16 * * : 매달 16 115분과 오후 6 15분에 수행 

 

1) /var/spool/cron/crontabs/root (root계정으로 가정할때..)

    파일을 편집하여 원하는 스케쥴을 설정/편집 한다.

2) ps -ef|grep cron      : 현재 cron deamon 돌고 있는지 확인 

3) kill -9 "pid of cron"   : cron deamon kill

4) rm /usr/lib/cron/FIFO  : lock파일제거(/usr/lib/cron directory /etc/cron.d 링크되어있음)

5) /usr/sbin/cron         : deamon 재실행( 편집한 명령대로 수행함)

 

   ) vi /var/spool/cron/crontabs/root

       ###############################

       #Min Hour Day Month Day Command

       ###############################

       15 4 * * * find /var/preserve/ -mtime +7 -a -exec rm -f {} ;

       0 23 * * * sh `sed -n 1p /etc/Alis`/janitor

       0 * * * * /usr/lib/acct/ckpacct

       10 12 * * 1-6 /usr/lib/acct/dodisk

       20 12 1 * * /usr/lib/acct/monacct

       30 12 * * 1-6 /usr/lib/acct/runacct 2> /var/adm/acct/nite/fd2log

 

log /var/cron/.....  생성됨

 

 

 ------------------------------------------------------------------------------------

 

1. 개요 (cron이 뭐하는 것인지 전혀 모르는 분들만)

cron(크론)은 원하는 시간에 명령(프로그램)을 시키기 위한 데몬이다.
서버는 늘 깨어있다는 것을 이용한 최대한의 활용법이 될 수 있다.

- 내가 새벽 3시에 서버에 특정 작업을 해줘야하는데 그 때 깨어있을 수 있는가?
- 또는 30분간격으로 HDD의 사용량을 운영자에게 알리도록 해야한다면?
- 매월 초에 자료를 백업 받고 싶다면?

바로 이럴 때 cron은 최고의 해결책을 제시한다.
cron은 항상 지정한 시간이 되었는지 확인을 하여 해당 명령어을 실행하는 것이다.

2. cron 설정

1) crontab 파일 위치 및 조회

작업 설정 파일을 crontab 파일이라고 부르며, 이 파일의 위치는 OS별로 차이가 있다.
리눅스는 /var/spool/cron/ID, 솔라리스는 /var/spool/corn/crontabs/ID 에 위치한다.
그럼 이 파일을 직접 수정해야 하는가? 그렇지 않다. crontab 명령을 통해 설정과 조회를 한다.

설정 내용을 조회해 보자. (-l 옵션)

 
$ crontab -l
no crontab for truefeel
 


설정한 적이 없어 아직 비어있다.

2) crontab 파일 형식


------    --------  ---------------------------------------------------
필  드    의  미    범  위
------    --------  ---------------------------------------------------
첫번째    분        0-59
두번째    시        0-23
세번째    일        0-31
네번째    월        1-12
다섯번째  요일      0-7 (0 또는 7=일요일, 1=월, 2=화,...)
여섯번째  명령어    실행할 명령을 한줄로 쓴다.
------    --------  ---------------------------------------------------


- 한 줄당 하나의 명령 (두줄로 나눠서 표시할 수 없음)
- # 으로 시작하는 줄은 실행하지 않는다.

설정을 해보자. (-e 옵션)
crontab -e 을 하면 vi 에디터가 나온다.(환경변수 EDITOR에 따라 다른 에디터를 사용할 수 있다.)
 
$ crontab -e
# /home 디렉토리를 /BACKUP/home 으로 백업해둠
#
# 30분, 새벽 4시와 낮 12시, 모든 일, 모든 월, 모든 요일
30 4,12 * * *  /usr/bin/rsync -avxH --delete /home /BACKUP/home > /dev/null 2>&1
#
# 파일/디렉토리 퍼미션 설정
# 40분, 새벽 1시, 매주 일요일
40 1    * * 0  /root/bin/perm_set.sh   > /dev/null 2>&1
 



위는 매일 4:30분과 12:30분에 rsync 명령을, 매주 일요일 1:40분에 perm_set.sh를 실행함을 의미한다.

vi 에디터를 통해 설정을 하므로 중요한 몇 가지 에디터 사용법은 익혀야 한다.

----  -----------------------------------------------------------------------------
키    의미
----  -----------------------------------------------------------------------------
i     현재 칸에 글을 넣는다.
o     다음줄에 글을 넣는다.
dd    한줄을 삭제한다.
:wq   저장하고 빠져나온다.
ESC   설정중에 명령어 모드(위의 i, o, dd 등을 사용할 수 있는 상태)로 빠져 나온다.
----  -----------------------------------------------------------------------------


3) 설정 예

시간 설정에서 몇가지 의미있는 것들을 알아보자.

- '*'표시는 해당 필드의 모든 시간을 의미한다.
- 3,5,7 와 같이 콤마(,)로 구분하여 여러 시간대를 지정할 수 있다.
- 2-10와 같이 하이픈(-)으로 시간 범위도 지정할 수 있다.
- 2-10/3와 같이 하이픈(-)으로 시간 범위를 슬래쉬(/)로 시간 간격을 지정할 수 있다.
(2~10까지 3간격으로. 즉, 3,6,9를 의미함)


             
원하는 시간 형  식
  매주 토요일 새벽 2:20   20  2     *  *  6  명령어
  매일 오후 4,5,6시   0  4-6   *  *  *  명령어
  매일 2시간간격으로 5분대에   5  */2 *  *  * 명령어
  매월 1일 새벽 1:15   15  1   1  *  *  명령어
  1,7월 1일 새벽 0:30   30  0   1  1,7  *  명령어


3. FAQ

1) cron 설정한 후에는 crond 데몬을 재실행해야 하나요?

  아닙니다. crontab -e 으로 설정 후 빠져나오면 바로 적용됩니다.

2) truefeel 사용자는 cron을 못 쓰게 하고 싶습니다.

  /etc/cron.allow : 허용할 사용자 ID 목록
  /etc/cron.deny  : 거부할 사용자 ID 목록

  cron.allow 파일이 있으면 이 파일에 들어있는 ID만 사용 가능
  cron.deny  파일이 있으면 이 파일에 들어있는 ID는 사용 불가

  따라서 cron.deny에 truefeel ID를 추가해주면 됩니다.

3) > /dev/null  2>&1 이 무슨 뜻입니까?

  지정한 명령어 처리 결과와 발생할지 모르는 에러메시지를 출력하지 않고 모두 버린다는(/dev/null)는
  뜻입니다. 만약 결과와 에러를 파일로 저장하려면 /dev/null 대신 파일명을 적어주면 됩니다.

Linux에 아파치, Tomcat, PHP 설치법

Posted 2008. 10. 24. 04:30


출처 : http://cafe.naver.com/networkn.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=215 

 

 소스코드를 받아 설치하는 방법을 설명하기로 합니.
기본적으로 소스코드을은 /usr/local/src에 두고 작업을 합니다.

먼저 APACHE 2.x버전 소스를 서버에 두고 해당디렉토리에서 다음 명령어들을 실행합니다.

$./configure --prefix=/usr/local/apache --enable-rule=SHARED_CORE --enable-modules=so --enable-so
$make
$make install

APACHE가 설치되었으면 확인해 실행시켜보죠.
$/usr/local/apache/bin/apachectl start
$/usr/local/apache/bin/apachectl stop

그럼 다음으로 PHP를 설치하기로 합니다..
PHP4.x 버전을 소스로 구하여 서버에 두고 다음과 같은 명령어를 수행합니다.

$./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with-mysql=/usr/local/mysql --enable-track-vars=yes --with-mod-charset --with-language=korean --with-charset=euc_kr --disable-debug --with-xml

$make
$make install
$cp /usr/local/src/php-4.3.0/php.ini-dist /usr/local/lib/php.ini

설치 되었으면 APACHE와 PHP를 연동시키기로 하죠..
아래와 같이 몇줄을 추가 시켜주면 된답다.

아파치 httpd.conf 아래에 840라인 정도에 추가

LoadModule php4_module modules/libphp4.so
AddType application/x-httpd-php .php4 .php3 .html .htm .phtml .ph .php
AddType application/x-httpd-php-source .phps

아래의 내용을 찾아 추가
DirectoryIndex index.html index.php index.phtml index.jsp


이제 PHP에 ZendOptimizer 설치하기로 합니다...
ZendOptimizer 해당 디렉토리에서 install.sh을 수행시키고 계속 OK 눌러 주시면 설치가 완료된답니다.
마지막에 나오는 메세지는 "php.ini는 새로 심볼릭 링크 했다. 수정하고 싶으면 /usr/local/Zend/etc 에있는 php.ini를 해라."는 것이니 신경쓰지 말고 ㅋ.

그럼 이제 톰켓을 설치 해보도록 하자...
톰캣 4.x 버전을 구해서 /usr/local/tomcat에 먼저 둔답니다.
그리고 vi /root/.bash_profile, 파일을 열어서 환경 설정을 다음과 같이 합니다,

JAVA_HOME=/usr/local/j2sdk
CATALINA_HOME=/usr/local/tomcat
PATH=$PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin
export JAVA_HOME CATALINA_HOME

/usr/local/tomcat/conf/server.xml 을 열어서 추가해줌

# 내용중 다음을 찾아서
<Server port="8005" shutdown="SHUTDOWN" debug="0">
# 밑줄에 다음을 입력한다.
<Listener className="org.apache.ajp.tomcat4.config.ApacheConfig" />

# 내용중 다음을 찾아서
<Host name="localhost" debug="0" appbase="webapps">
# 밑줄에 다음을 입력한다.
<Listener className="org.apache.ajp.tomcat4.config.ApacheConfig" append="true" />

이제 톰캣과 아파치의 연동되는 부분을 만들기로 하죠..

mod_jk.so 생성하기로 합니다..

# cd /usr/local/src
# tar xzvf jakarta-tomcat-connectors-4.1.12-src.tar.gz
# cd /tmp/jakarta-tomcat-connectors-4.1.12-src/jk/native
# ./buildconf.sh
# ./configure --with-apxs=/usr/local/apache/bin/apxs
# make
# make install
# ll /usr/local/apache/modules

톰캣을 기동 시키면 $catalina.sh start

/usr/local/tomcat/conf 밑에 jk와 auto 디렉토리가 자동으로 생기죠..

그 디렉토리 안에 프로퍼티 화일을 만들고 다음과 같이 설정한답니다.
$cd /usr/local/tomcat/conf/jk
$ vi workers.properties

# Start setup file (화일 내용 시작)
#
workers.tomcat_home=/usr/local/tomcat
workers.java_home=/usr/local/java
ps=/
worker.list=ajp12, ajp13

# Definition for Ajp13 worker
#
worker.ajp13.port=8009
worker.ajp13.host=localhost
worker.ajp13.type=ajp13
#
# End setup file (화일 내용 끝)


마지막으로 httpd.conf 화일의 마지막에 아래의 내용을 추가합니다..
#
#Load mod_jk
#
LoadModule jk_module modules/mod_jk.so
#
#Configure mod_jk
#
JkWorkersFile /usr/local/tomcat/conf/jk/workers.properties
JkLogFile /usr/local/tomcat/logs/mod_jk.log
JkLogLevel emerg
#
# Root context
JkMount /*.jsp ajp13
JkMount /servlet/* ajp13
Include /usr/local/tomcat/conf/auto/mod_jk.conf

이제 아파치와 톰캣을 구동시키면 잘 연동 되는것을 알수 있을것입니다.
서버는 톰캣을 먼저 띄운후에 아파치를 기동 시켜야 된답니다.
이점을 명심해야 해요....

버전에 따라 약간의 차이가 있지만 대체적으로 위의 로직을 따라서 설치하면
제대로 설치가 될것입니다...

 

리눅스의 기본 명령어

Posted 2008. 10. 24. 04:28


1. 기본 명령어

*date: 현재의 날짜와 시간을 단말기 화면에 표시
*who : 유닉스 시스템에 로그인 되어 있는 사용자들에 대한 정보를 화면에 표시
*date;who;cat > sample.c : 한 줄에 두 개 이상의 명령어를 동시에 입력하고자 할 경우 명령어와 명령어 사이를 ; 으로 구분한다
*cal 9 1995 : unix 시스템에 내장되어있는 달력을 화면에 출력
*cat address.list : 파일의 내용을 화면에 출력한다
*man date : 예약어나 명령어에 대한 온라인 매뉴얼
*ls: 현재 위치한 디렉토리 아래에 있는 파일 및 서브디렉토리의 정보를 나열
- 옵션: -l: 파일의 모든 정보 출력
-c: 최근 변경한 시간 순서데로 출력
-d: 디렉토리 명만 출력
-F: 파일의 특성을 출력( /디렉토리 *실행화일)
-a: dot(.)으로 시작하는 파일의 이름을 포함한 모든 내용을 출력
*alias dir ls -alF : 자주 쓰이는 명령어 ls를 다른 형태의 명령어 dir로 바꿀 때..
*pwd : 현제 작업 디렉토리 출력 명령어
*cd : 디렉토리 변경 명령어

2. 디렉토리 관리 및 파일 관리 명령어

*mkdir : 디렉토리 생성 명령어 (%mkdir [option] [directory name]
*rmdir : 디렉토리 삭제 명령어
- 옵션: rm -r test ; test의 하위디렉토리와 파일을 전부 삭제
- 옵션: rm -i test ; 삭제 여부를 사용자에게 물어 본다

*cat : 파일을 작성하거나 파일의 내용을 간단하게 출력
# cat test1.c
# cat > test1.c

*touch : 내용이 없는 빈 파일을 생성, 이미 생성된 파일의 수정 시간 갱신
# touch [option] [시간] [파일명]

*more [file name] : 한 번에 한 화면씩 파일의 내용을 표준 출력
-내용을 보지 않고 종료시 q 나 Q 키를 누른다
*page [option] [file name] : 한 번에 한 화면씩 파일의 내용을 표준출력(=== %pg)
*nl [file name] : 지정한 파일의 내용을 츨력할 때 맨 앞에 행 번호를 이어서 출력
*file test.c : test.c라는 파일의 형태를 출력

*cp :시스템내에 있는 특정 파일을 복사
# mkdir temp --temp라는 디렉토리 생성
# cp sample test temp --temp라는 디렉토리 밑에 sample 과 test 라는 파일을 복사
# mkdir example
# cp -r temp example --temp라는 디렉토리 아래에있는 모든 내용을 example디렉토리에 복사

*mv [file name1] [file name2] --file name1을 file name2로 이름 변경
*mv [file1] [file2] [directory1] --file1, file2를 directory1으로 이동
*mv [directory1] [directory2] --directory1의 모든 내용을 directory2로 이동
**명령어 cp, mv, rm에서 option -i는 사용자에게 여부를 묻는 옵션입니다

*rm test1 test2 test3 --- test1,test2,test3 파일을 삭제
*rm -r quit --- quit 디렉토리 및 모든 내용을 삭제

*ln test1 test2 --- test1과 test2라는 2개의 파일을 연결 (unlink ; 연결 해제)

*find: 사용자가 지정한 특정 범위에 해당하는 모든 파일을 검색
# find / -name test1.c -print ; 최상위 루트 디렉토리부터 검색하여 검색된 파일을 한 행에 하나씩 표준 출력
# find . -name test1.c -print ; 현제의 작업 디렉토리에서 검색
# find / -size +1000 -print ; 최상위 루트에서 크기가 1000블록 이상인 파일 검색
# find . -size -1000 -print ; 현 디렉토리에서 크기가 1000블록 이하인 파일 검색
# find . -mtime +10 -print ; 10일 이전에 수정된 파일 검색
# find . -mtime -10 exec rm {} \: ; 10일 이내에 수정한 파일을 검색하여 모두 지운다

*chmod --- 파일 및 디렉토리에 이미 정해진 접근 허가 모드를 변경
- 사용 형식: %chmod [ugoa] [+-=] [rwx] [file name]
u: 파일 소유자, g: 그룹, o: 기타 사용자, a: 모든 사용자
+: 사용허가부여, -: 사용허가박탈, =: 허가 취소
r: 읽기 허가, w:쓰기 허가, x: 실행 허가
특정 사용자를 지정하지 않으면 모든 사용자를 의미한다
chmod go+r test.c ; 소유자 그룹과 기타 사용자에게 읽기 허가
chmod ugo-w test.c ; 소유자,그룹,기타 사용자에게 읽기 허가 박탈
chmod +x test.c
chmod o -rwx test.c
r = 4, w = 2, x =1
chmod 744 test.c
-rwxr--r-- 1 edul user 235 Oct 15 13:23 test.c
chmod 724 test.c
-rwx-w-r-- 1 edul user 235 Oct 15 13:23 test.c
* : dot(.)을 제외한 모든 문자와 대응하며 모든 파일명을 대표하는 메타 문자 %ls *a* , %ls t* ? : " " " 임의의 한 문자만을 대신

3. 입력과 출력에 관한 명령어

* < ---입력
* > ---출력
* >> ---출력, 첨가
* date > date.out : 이전 내용이 지워지고 새로운 내용이 저장
* date >> date.out : 이전 내용과 함께 새로운 내용 첨가
* file < test > test.out : test 파일을 입력으로 받아서 file 명령을 실행하고 test.out에 출력
* cat test.out
* test: Ascll text
* 2>>, 2> 오류 출력 제지정

* tty : 현재 사용하고 있는 단말 장치의 이름을 경로와 함께 표준 출력

* lpstate : 프린터의 현제 상태 (활성화: enable, 비활성화: disable)
* lp -c temp.c ; 내용이 변경되어도 문제가 지속되지 않도록미리 출력될 파일을 복사
* lp -n7 /etc/lp/temp ; 7장 프린트
* lp -m temp.c ; 출력이 끝난후 사용자에게 전자우편을 보냄
* lp -t"chon bing hee" test.out ; chon bong hee라는 표제를 달아 줌
* cancel [print name] ; 프린터 취소
* disable -c [print name] ; 지정한 프린터에서 현제 출력중인 작업 취소
* disable -w laser-3 ; 모두 인쇄한 다음 프린터를 disable 상태로 만든다
* disable -c -r "out of paper" laser-1 ; 주석을 달아 놓는다

* grep [option] 형태 [화일명] -- 정규식을 이용 패턴 지정
# grep -i tom sample.c -- sample.c 라는 파일에서 tom 이라는 문자열을 대소문자 구분 없이 검색
# grep -n tom sample -- 행 번호와 함께 출력
# grep -i "tom is" sample -- 공백은 " "로 표기
# grep -v tom sample --tom이라는 형태를 포함하지 않는 행을 출력

# cat sample
computer science
computer graphics

# cut -c10-17 sample -- sample 파일에서 칼럼 단위10-17을 절단 --> science/graphics

# cmp test1 test2 -- 서로 다른 두 파일을 비교
# dircmp test test -- 서로 다른 두 디렉토리 비교


4. 백업 및 복사에 관한 명령어
(rfd:디스켓, rct:카트리지테이프, rmt: 테이프)
하드 ----> 디스켓

# tar -cvf /dev/rfd0c test1
(c: 저장되는 파일들이 디스크의 처음부터 기록, v:기록되는 화일명 화면 출력)

# tar -tvf /dev/rfd0c --- 디스켓의 파일 목록 확인

디스켓 ----> 하드
# tar -xvf /dev/rfd0c test1 --- 지정한 파일 복원

동일한 하드 ---> %tar -cvf test1.tar test1

# compress test.c (파일 압축) --->uncompress test.c.Z (압축 풀기)
: test.c.Z (파일 생성) --- >zcat test.c.Z (파일 보기)

# pack test.c (파일 압축) ---> unpack test.c.z
: test.c.z (파일 생성) ---> pcat test.c.z (파일 보기)
* Non-preemptive(비선점) ; 커널 모드
* kernel; 생성되는 프로세스마다 PCB 부여하고 관리

5. 멀티 태스킹에 관련된 명령어

* Multitask
foreground : 하나의 명령이 실행되어 결과를 출력할때까지 다른 명령을 수행 할 수 없다
background : 하나의 명령을 수행시킨후 그 수행의 종료 이전에 다른 명령을 수행 하는 것
---> 명령어 끝에 &로 표시 (cc -o test1 test1.c &)

ps -l --프로세스에 관한 모든 상태 정보 출력
ps -e --현제 실행중인 모든 프로세스에 관한 정보 출력
ps ps -t 00 --지정된 터미널에서 실행중인 프로세스에 관한 정보 출력
nice [-정수값:1~39 , 20으로 설정] 명령어 -->우선 순위 변경 명령어
정수값이 높을수록 우선 순위가 낮다 (nice -10 cc -o test test1.c)
at --수행 시간 지정 명령어 -->at 11:30 pm
cc test.c

-옵션 -r: 이전에 지정된 작업 취소, -l : 지정된 작업 번호 출력
(sleep 20; cc -o sample sample.c)& -->백그라운드 실행, 20초 뒤 프로그램 컴파일
(sleep 10; ps -el) --> 10초후 모든 프로세서 상태 출력
time cc -o test test.c --수행 시간 출력 명령어

* 백그라운드 작업 상태: Running : 현제 백그라운드 수행중인 상태
Stopped : fg로 수행되다가 ^D로 잠시 중단된 상태
Terminated : Kill 명령을 사용해 강제로 종료된 상태
Done : 백그라운드 프로세서의 수행이 완전히 종료된 상태
Exit : 백그라운드 프로세서가 수행도중 오류 때문에 빠져 나온 상태
jobs : 백그라운드로 수행중인 모든 프로세서의 상태 출력
fg %1(작업 번호) : 백그라운드로 수행중인 작업을 포그라운드로 전환
bg %1( " ) : 포그라운드로 " " 백그라운드로 전환
wait [작업번호] --백그라운드 실행 종료
kill [번호] -- 프러세서 강제 종료 명령어
* 강제 종료가 안될 경우 -9옵션을 사용 %kill -9 1239
nohup cc -o sample1 sample1.c & 1132[PID번호]
---> 백그라운드로 실행, 로그 아웃이나 중지 신호후에도 프로세서의 수행 계속 

 

« PREV : 1 : 2 : 3 : 4 : 5 : NEXT »