'팁&테크/Linux'에 해당되는 글 69건
- 2015.07.10 Apache 링크를 포함한 Redirect
- 2013.12.24 리눅스 백신 ClamAV 설치 및 사용법
- 2013.10.22 리눅스 파티션 관련
- 2013.04.04 리눅스 보안체크 명령
- 2013.03.05 로그 크기 0으로 만들기
- 2013.02.26 ls 정렬이 잘 안되는 경우
- 2012.12.24 lsof , fuser, pgrep 명령어 정리
- 2012.11.21 EPEL 레포지터리 설치
- 2012.11.21 APM 설치옵션(메모)
- 2012.08.24 nfs 간단 설정
Apache 링크를 포함한 Redirect
IIS 쪽에서는 설정만 하면 바로 가능한데 Apache에서는 Rewrite 모듈을 써야 가능
<VirtualHost *:80>
ServerName 도메인.com
ServerAlias *.도메인.com
RewriteEngine On
RedirectMatch permanent ^/?(.*) http://www.이동할도메인.com/$1
</VirtualHost>
리눅스 백신 ClamAV 설치 및 사용법
1. 개요
[root@localhost ~] # wget http://sourceforge.net/projects/clamav/files/clamav/0.97.5/clamav-0.97.5.tar.gz [root@localhost ~] # tar xvfz clamav-0.97.5.tar.gz [root@localhost ~] # adduser clamav [root@localhost ~] # cd ./clamav-0.97.5 [root@~ clamav-0.97.5] # ./configure –enable-static –prefix=/usr/local/clamav [root@~ clamav-0.97.5] # make [root@~ clamav-0.97.5] # make install |
나. 디렉토리 생성 및 권한부여
[root@localhost ~] # mkdir /usr/local/clamav/db [root@localhost ~] # mkdir /usr/local/clamav/log [root@localhost ~] # chmod 757 /usr/local/clamav/db [root@localhost ~] # chmod 757 /usr/local/clamav/log [root@localhost ~] # mkdir /var/run/clamav |
다. 파일설정 (/usr/local/clamav/etc/clamd.conf, /usr/local/clamav/etc/freshclam.conf)
LocalSocket /var/run/clamav/clamd.socket FixStaleSocket yes TCPSocket 3310 TCPAddr 127.0.0.1 MaxThreads 20 User clamav LogFile /usr/local/clamav/log/clamd.log LogTime yes PidFile /usr/local/clamav/log/clamd.pid DatabaseDirectory /usr/local/clamav/db DetectBrokenExecutables yes |
2) freshclam.conf
DatabaseMirror database.clamav.net DatabaseDirectory /usr/local/clamav/db/ UpdateLogFile /usr/local/clamav/log/freshclam.log DatabaseOwner clamav NotifyClamd /usr/local/clamav/etc/clamd.conf |
라. 백신 DB 업데이트 및 스캔
[root@localhost ~] # /usr/local/clamav/bin/freshclam 업데이트 [root@localhost ~] # /usr/local/clamav/bin/clamscan 현재디렉토리 검사 [root@localhost ~] # /usr/local/clamav/bin/clamscan -r /home 현재디렉토리 하위검사 |
마. clamd 데몬실행
[root@localhost ~] # /usr/local/clamav/sbin/clamd –config-file=/usr |
출처 : http://dumbung.com/main/bbs/board.php?bo_table=LINUX_TIP&wr_id=55
리눅스 파티션 관련
특별히 다른 이유가 있지 않는 한 반드시 x86, AMD64, Intel 64 시스템의 경우 다음과 같은 파티션을 생성하는 것이 좋습니다:
swap
파티션/boot
파티션/
파티션home
파티션
시스템의 RAM 용량 |
권장 스왑 공간 용량 |
4GB 이하 RAM |
최소 2GB의 스왑 공간 |
4GB에서 16GB RAM |
최소 4GB 스왑 공간 |
16GB에서 64GB 램 |
최소 8GB 스왑 공간 |
64GB에서 256GB 램 |
최소 16GB 스왑 공간 |
256GB에서 512GB 램 |
최소 32GB 스왑 공간 |
/boot/
파티션 (250 MB)
/boot/
에 마운트된 파티션에는 부트스트랩을 실행하는 동안 사용되는 파일과 함께 시스템을 Red Hat Enterprise Linux에 부팅하게 하는 운영 시스템 커널이 있습니다. 대부분의 사용자는 250 MB 부트 파티션이면 충분합니다.
- Red Hat Enterprise Linux 6의 GRUB 부트로더는 ext2, ext3, ext4(권장)만을 지원합니다. /boot에 대해 Btrfs, XFS, VFAT과 같은 다른 파일시스템을 사용할 수 없습니다.
- 만일 하드 드라이브가 1024 실린더 이상이라면 (또는 2년 보다 더 전에 제조된 컴퓨터를 사용하신다면), / (루트) 파티션이 하드 드라이브 상에 남아있는 모든 공간을 사용하기 위해서는, /boot 파티션을 만드셔야만 합니다.
- RAID 카드를 가지고 계신 경우, 일부 BIOS는 RAID 카드 부팅을 지원하지 않는다는 점을 기억해 주십시오. 이러한 경우, RAID 배열 외부에 위치한 파티션, 예를 들면 별개의 하드 드라이브에 /boot/ 파티션을 만드셔야 합니다.
디렉토리 |
최소 크기 |
|
/ |
250 MB |
|
/usr |
250 MB, 하지만 별도 파티션에 이 디렉토리를 놓지는 마십시오 |
|
/tmp |
50 MB |
|
/var |
384 MB |
|
/home |
100 MB |
|
/boot |
250 MB |
리눅스 보안체크 명령
1. rpm 파일 변조 확인(설치당시 파일과 달라진 파일 표시)
rpm -Va
출력
S.5....T c /etc/aliases
각출력 영문자의 뜻
5 MD5 sum
S File size
L Symlink
T Mtime
D Device
U User
G Group
M Mode (퍼미션&file type)
2. 파일 변경하지 못하도록 막은 파일 확인 및 변경
lsattr
chattr
3. 실행파일이 사용하고 있는 참조파일 찾기
strace -e trace=open netstat -nlp
ls 정렬이 잘 안되는 경우
콘솔로 접속했을때 utf-8 환경일 경우 ls 목록 정렬이 이상하게 되는 경우가 있다.
_bdiretory
adirecotry
이렇게 특수문자 순위가 먼저 나와야 되는데
adirectory
_bdirectory
위와 같이 특수문자를 무시하고 문자만으로 정렬되는 경우가 있는데
이 경우 아래와 같은 방법으로 해결 가능하다.
1. 아래 내용을 /etc/sysconfig/i18n 나 .bashrc 등에 추가해줌
LC_COLLATE="C"
또는
export LC_COLLATE="C" (접속할때 마다 해줘야함)
2. LC_COLLATE="C" 로 할 경우 이름순으로 나와 디렉토리와 파일이 뒤섞이므로 ls 에 디렉토리 우선출력으로 alias 해줌
/etc/profile.d/colorls.sh 에 ls alias 부분에 -X 옵션을 추가함
다만 -X 옵션이 확장자순 정렬이라 완벽하지는 않음
다른 방법을 찾아보고 있지만 gnu ls 에는 directory first 옵션이 없어 현재로서는 없는 것 같음
lsof , fuser, pgrep 명령어 정리
1. lsof 란?
일반적으로 시스템에서 동작하고 있는 모든 프로세스에 의해서 열리어진 파일들에
관한 정보를 보여주는 시스템 관리 명령어
2.1. lsof 파일명
지정한 파일을 엑세스 하고 있는 프로세스의 정보를 보여준다.
# lsof /usr/sbin/proftpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
proftpd 647 nobody txt REG 8,2 433516 209221 /usr/sbin/proftpd
2.2. lsof /tmp
지정한 디렉토리를 엑세스 하고 있는 프로세스의 정보를 보여준다.
# lsof /tmp
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
libhttpd. 27187 root 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27318 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27319 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27320 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
libhttpd. 27321 nobody 3u REG 7,0 0 13 /tmp/ZCUD5mDv1l (deleted)
2.3. lsof -i
모든 네트워크 연결되어 있는 프로세스와 파일을 정보를 보여준다.
# lsof -i
sshd 586 root 3u IPv4 1877 TCP *:ssh (LISTEN)
xinetd 600 root 5u IPv4 1943 TCP *:pop3 (LISTEN)
sendmail 619 root 4u IPv4 1962 TCP *:smtp (LISTEN)
proftpd 647 nobody 0u IPv4 315947 TCP *:ftp (LISTEN)
mysqld 708 mysql 3u IPv4 2652 TCP *:mysql (LISTEN)
ex)lsof -iTCP ; lsof -iUDP
tcp 나 혹은 UDP를 걸러서 볼때 사용한다.
2.4. lsof -c 데몬명
지정한 데몬과 연결되어 있는 프로세스와 파일을 정보를 보여준다.
# lsof -c proftpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
proftpd 647 nobody cwd DIR 8,3 4096 2 /
proftpd 647 nobody rtd DIR 8,3 4096 2 /
proftpd 647 nobody txt REG 8,2 433516 209221 /usr/sbin/proftpd
proftpd 647 nobody mem REG 8,3 106424 15973 /lib/ld-2.3.2.so
proftpd 647 nobody mem REG 8,3 23404 15994 /lib/libcrypt-2.3.2.so
proftpd 647 nobody mem REG 8,3 30488 17917 /lib/libpam.so.0.75
proftpd 647 nobody mem REG 8,3 1571340 95813 /lib/tls/libc-2.3.2.so
proftpd 647 nobody mem REG 8,3 14888 15996 /lib/libdl-2.3.2.so
proftpd 647 nobody mem REG 8,3 8612 17914 /lib/liblaus.so.1.0.0
proftpd 647 nobody mem REG 8,3 51908 16016 /lib/libnss_files-2.3.2.so
proftpd 647 nobody 0u IPv4 315947 TCP *:ftp (LISTEN)
proftpd 647 nobody 4r REG 8,3 3509 82811 /etc/passwd
proftpd 647 nobody 5r REG 8,3 1241 83170 /etc/group
2.5. lsof -p 프로세스ID
지정한 프로세스와 관련된 프로세스와 파일의 정보를 보여준다.
# lsof -p 1
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,3 4096 2 /
init 1 root rtd DIR 8,3 4096 2 /
init 1 root txt REG 8,3 27036 16204 /sbin/init
init 1 root mem REG 8,3 1571340 95813 /lib/tls/libc-2.3.2.so
init 1 root mem REG 8,3 106424 15973 /lib/ld-2.3.2.so
init 1 root 10u FIFO 8,3 71415 /dev/initctl
3. 해킹 추적
3.1. 시나리오
#lsof -i -> 기본 포트연것을 확인한다.
#lsof -p -> 프로세스를 분석한다.
#lsof /home/홈페이지 디렉토리 -> 특정디렉토리에 있는 프로세스 검사
#lsof /tmp -> 임시파일 관련 프로세스 분석
#lsof /dev -> 정규 해킹 디렉토리 분석
fuser 정리
#fuser 21/tcp ----> 포트/tcp,udp : 열린포트 pid 찾기
21/tcp: 931
# fuser -cu /var
하면 현재 /var라는 디렉토리를 사용하고 있는 유저나 데몬의 process가 열거된다...
그 열거된 pid를 보고 어떤 데몬이 사용하고 있고 어떤 유저가 사용하고 있는지 알 수 있다.
# fuser -ck /var
하면 /var라는 디렉토리를 사용하고 있는 유저나 데몬의 process id 를 모두 'kill -9' 와 같은 행동을 하게 된다.
이 명령어는 주의해서 사용하길 잘못 명령어 먹였다가 서버 리셋 해야된다.ㅋㅋ
fuser : 특정 파일이나 파일시스템, 포트등에서 사용중인 프로세스를 확인할 때 사용.
옵션정리
-a : 사용되지 있지않은 파일까지도 표시
-k : 지정된 파일과 관련된 모든 프로세스들을 KILL
-i : 프로세스를 KILL시키기 전에 사용자에게 확인
-l : 사용가능한 signal을 출력
-m : 지정한 파일이나 디렉토리가 마운트된 파일시스템에서 실행되고 있는 프로세스의 PID 출력
-n space : 지정된 공간(file, udp or tcp)내에서 검색
-s : 결과를 간략히 출력
-signal : 지정된 프로세스에 기본 signal인 SIGKILL 외에 지정된 signal을 보냄
-u : 프로세스 ID(PID)의 소유자를 보여준다.
-v : 자세한 출력모드 (프로세스의 User, PID, ACCESS, COMMAND를 보여줌)
1. 특정 파일을 사용하고 있는 프로세스(pid)확인
fuser /var/log/messages
2. 특정 파일을 사용하고 있는 프로세스(pid) 및 user 확인
fuser -u /var/log/messages
3. 특정 프로토콜, 포트를 사용중인 프로세스 확인
fuser -vn tcp ftp
fuser -vn tcp 1111
4. -k옵션을 사용하여 프로세스 kill
fuser -vn tcp ssh
fuser -kn tcp ssh
fuser -vn tcp ssh
pgrep 정리
[ pgrep으로 실행중인 프로세스 찾기 ]
♧ pgrep을 사용하여 가장 기본적인 형태로, 이름을(또는 일부) 검색.
▶ 기본적인 사용 예제:
# pgrep init
1
2689
프로세스 ID를 보여줌
# pgrep -l init
1 init
2689 xinit
-l 옵션 : 프로세스 이름을 보여줌
# pgrep -lu apache
2551 sshd
2552 bash
2803 vim
-u 옵션 : 유저와 관련된 프로세스 찾기
▶ ps 와 pgrep 결합 사용 예:
/* sshd 및 실행에 대한 검색의 ps(간단하게) */
# ps -p `pgrep sshd`
PID TTY STAT TIME COMMAND
626 ? Ss 0:00 /usr/sbin/sshd -D
4000 ? Ss 0:00 sshd: devanix [priv]
4110 ? S 0:01 sshd: devanix@pts/1
/* sshd 및 실행에 대한 검색의 ps(전체) */
# ps -fp $(pgrep sshd)
UID PID PPID C STIME TTY STAT TIME CMD
root 626 1 0 Aug12 ? Ss 0:00 /usr/sbin/sshd -D
root 4000 626 0 01:59 ? Ss 0:00 sshd: devanix [priv]
devanix 4110 4000 0 01:59 ? S 0:01 sshd: devanix@pts/1
/* firefox 검색, 우선순위 향상 */
# sudo renice -5 $(pgrep firefox)
20522: old priority 0, new priority -5
20527: old priority 0, new priority -5
☞ 이러한 방법으로 입력한 프로세스 ID와 pgrep을 결합할 수 있다.
[출처] lsof , fuser, pgrep 명령어 정리|작성자 삽질맨
[출처] lsof , fuser, pgrep 명령어 정리|작성자 삽질맨
EPEL 레포지터리 설치
Contos 버젼이 최신 버젼이거나 일반적이지 않은 패키지의 경우 yum으로 설치하지 못하는 경우가 있다.
이런 경우에 좀 더 많은 패키지 설치를 가능하게 하는 EPEL repo를 추가하면 많고 다양한 패키지를 yum으로 설치할 수 있게 된다.
우선 EPEL repo 를 추가 할 수 있는 rpm 패키지를 먼저 설치한다.
다운로드 경로는 http://dl.fedoraproject.org/pub/epel/ 이며 여기에 자신의 Centos 에 맞는 rpm을 찾아 설치 하도록 한다.
Centos 6.3 64비트 버젼의 경우 rpm 패키지들은 아래 경로에서 확인 가능하다.
http://dl.fedoraproject.org/pub/epel/6/x86_64/
바로 설치를 하려면 아래 명령을 사용하자.
rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm -> 버젼은 달라 질 수 있으니 주의
그 후에 yum repolist 명령으로 repo 정보를 재 설정한 후에 확인 해보면 원하는 패키지를 설치할 수 있을 것이다.
APM 설치옵션(메모)
modsecurity -------------------------------------------
http://www.modsecurity.org/download/ 다운 후 압축해제.
make && make install
--with-libdir=lib64 \
--enable-gd-native-ttf \
--with-png-dir \
--enable-mbregex \
--with-ttf \
--with-libxml-dir \
--enable-xml \
--enable-bcmath \
--enable-ftp \
--with-kerberos \
--with-openssl \
--enable-wddx \
--enable-exif \
주의
mysql을 소스 설치한 후에 --with-pdo-mysql 를 할경우 mysql_config 를 찾을수 없다는 오류가 나올 수 있는데 이것은 mysql 버그로 mysql_config를 설치경로에서 찾지 않고 /usr/bin에서 찾기 때문에 발생한다
임시적으로 ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config 링크를 만들어주면 된다.
https://bugs.php.net/bug.php?id=46975
php확장 모듈들은 처음에는 configure가 없음
phpize를 실행하면 php에 맞는 configure 파일이 생성됨
make && make install
geoip -------------------------------------------
http://pecl.php.net/package/geoip 에서 파일 다운로드
phpize 실행 ->configure 생성
./configure --with-php-config=/usr/local/bin/php-config --with-geoip=/usr/local/GeoIP
make && make install
suhosin -------------------------------------------
http://www.hardened-php.net/suhosin/ 에서 다운로드
phpize 실행 ->configure 생성
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
수호신 설정(나머지는 document 참고)
[Suhosin]
extension=suhosin.so
suhosin.executor.disable_eval = ON
nfs 간단 설정
1. 데몬 설치 확인 (nfs-util, portmap), 없으면 yum으로 설치
2. 공유목록 관리
vi /etc/exports
/home/경로 192.168.0.*(rw)
3. 공유목록 확인
exportfs -v
4. 포트맵 및 nfs 데몬 관련 rpc 포트를 고정
vi /etc/rc.d/init.d/nfslock
daemon rpc.statd "$STATDARG" 를
daemon rpc.statd -p 4000 으로 변경
5. 사용할 포트 지정
vi /etc/sysconfig/nfs
LOCKD_TCPPORT=4001
LOCKD_UDPPORT=4001
MOUNTD_PORT=4002
6. 포트 명칭 변경(궂이 안해줘도..)
vi /etc/service
4000 ~ 4003 번까지 이름을 변경해줌
7. 포트 적용 확인
rpcinfo -p
8. 방화벽에서 포트 열어 주기
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -s 192.168.0.0/24 -m tcp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -s 192.168.0.0/24 -m udp --dport 111 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -s 192.168.0.0/24 -m tcp --dport 2049 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -s 192.168.0.0/24 -m udp --dport 2049 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state --state NEW -s 192.168.0.0/24 -m tcp --dport 4000:4004 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m state --state NEW -s 192.168.0.0/24 -m udp --dport 4000:4004 -j ACCEPT
9. 클라이언트에서 연결
mount -t nfs 서버아이피:/home/경로 /클라이언트경로
10. 클라이언트 fstab 에 설정
아이피:/home/경로 /클라이언트경로 nfs defaults 1 2