'팁&테크/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>
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
콘솔로 접속했을때 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 옵션이 없어 현재로서는 없는 것 같음
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 명령어 정리|작성자 삽질맨
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 정보를 재 설정한 후에 확인 해보면 원하는 패키지를 설치할 수 있을 것이다.
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
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