자주쓰는 리눅스명령어 요약
<사용자 관련>
adduser [계정이름] : 계정생성
passwd [계정이름] : 해당계정의 비번변경
userdel -r [계정이름] : 계정삭제 및 계정의 파일폴더 모두 삭제(-r)
w : 현재 사용중인 사용자
last : 최근 이용한 접속자
<파일/디렉토리>
ll : 전체폴더구조 보기
ls : 폴더구조 간단히 보기
ls -al : 숨긴파일 까지 다 보기
ls [디렉토리명] : 해당 디렉토리보기
ls [파일명 또는 일부] : 해당되는 파일만 보여주기
cd : 디렉토리 이동
chmod 755 [디렉토리] : 파일권한변경 (내꺼, 같은그룹, 전체)
mkdir [디렉토리] : 디렉토리생성
mkdir -p a/b : a디렉토리 생성후 하위에 b디렉토리 생성
rm [파일명] : 파일삭제
rmdir [디렉토리명] : 디렉토리삭제 (파일존재시 삭제 불가)
rm -rf [디렉토리명] : 하위 디렉토리 및 파일 까지 모두 삭제
touch [파일명] : 해당파일의 수정일을 현재시각으로 변경(파일없을시 빈파일 생성)
cp [파일1] [파일2] : 파일1을 파일2로 복사
cp -r [디렉토리1] [디렉토리2] : 디렉토리1을 디렉토리2로 하위폴더와 파일까지 복사
cp -a [파일1] [파일2] : 소유권을 유지하면서 복사
move [파일/디렉토리] [디렉토리] : 파일 및 디렉토리 이동
cat [파일명] : 파일내용 출력
cat /dev/cdrom > linux.iso : CD롬에 있는 내용을 CD 이미지 파일로 만듦
cat a.txt >> b.txt : b.txt 파일 하단에 a.txt 파일의 내용 추가
more [파일명] : 파일내용을 페이지단위로 출력 (space:다음페이지, b:이전페이지)
ln [해당디렉토리 또는 파일] [링크이름] : 하드링크
ls -s [해당디렉토리 또는 파일] [링크이름] : 심볼릭링크
| : 파이프로 두개의 명령을 연결시켜줌
(예: ls -l /usr/bin | more : ls에서 검색된 파일 폴더를 페이지별로 보여줌)
파일권한 (자신/그룹/나머지: 4:읽기, 2:쓰기, 1:실행)
chown -R ohhappy.wheel /home/ohhappy/* : /home/ohhappy하위의 모든 파일 디렉토리의 소유자를 ohhappy로 그룹을 wheel로 변경
mount -t iso9660 /dev/cdrom /mnt/cdrom : cdrom 마운트
mount -t vfat /dev/fd0 /mnt/floppy : floppy 마운트
umount /dev/cdrom 또는 umount /mnt/cdrom
하드디스크 추가시
fdisk /dev/hdb (프라이머리 슬레이브 하드의 파티션 결정
mkfs.ex2 /dev/hdb1 (hdb1 파티션 포맷)
fsck.ext2 /dev/hdb1 (파일시스템 점검)
mount -t ext2 /dev/hdb1 /data (/data 디렉토리에 마운트)
vi /dev/fstab (에 마운트 기록, 부팅시 인식)
<검색>
find [경로] -name [파일명] : 하위경로의 파일찾기
/[찾을 문서명] : 문서나 메뉴얼안에서 문자찾기
which [명령어] : 명령어의 절대경로를 알려줌
whereis [명령어] : 명령어의 바이너리, 소스, 맨페이지위치 알려줌
<시스템/프로세스 관련>
top : 시스템 프로세스 및 메모리 및 CPU 사용량
uname -a : 운영체제,호스트명,커널버전,시스템부팅시간,아키텍쳐 보여줌
uname -m : cpu 보여줌
free -m : 메모리 보여줌(-m 메가단위, -k kb단위)
df -h : 마운트되어있는 디스크 사용량
du --max-depth=1 -h /home : 각 계정별로 이용량 확인
lsdev : 현재 사용중인 장치정보
w : 현재 사용중인 사용자
last : 최근 이용한 접속자
date : 현재 설정된 시간
clock : Cmos에 설정된 시간
rdate -s soback.kornet.nm.kr : soback.kornet.nm.kr에서 시간을 전송받아 시간 수정
clock -w : cmos 시간으로 수정
netstat -tu : 시스템에 연결된 소켓정보
ifconfig : 네트웍 장치설정 정보
ps -[옵션]: 현재 시스템에서 구동중인 프로세스 상태확인
(-a:전체사용자, -l:자세히보기, -x:제어터미널이 없는 프로세스, -f:pstree명령어와 같은 프리구조로 출력)
(상태값: D:구동일시중지중, R:구동중, S:쉬는중, T:구동정지중, Z:좀비프로세스, W:메모리를 안쓰는 스와핑상태)
ps auxfw -width=300 : 프로세스의 사용자 확인 (주로 | more 필요)
pstree : 구동중인 프로세스를 투리구조로 보여줌
kill -9 [프로세스번호] : 프로세스 강제종료
killall -9 [프로세스이름] : 프로세스 강제종료
<시스템 종료>
shutdown -h now : 시스템 종료 (-k : 메시지만전달, -r : 재부팅, -h : 셧다운후 종료 -c:셧다운중지)
halt : 시스템 종료
shutdown -r now : 시스템 재부팅
reboot : 시스템 재부팅
shutdown -k '지금시스템을 종료합니다.' : 시스템 종료 메시지 송부
<압축>
tar cvf [생성될 파일명:예 httpd.tar] [묶을 디렉토리] : 설정한 디렉토리를 포함한 하위 디렉토리 및 파일을 묶음
tar xvf [묶인파일:예 httpd.tar] : tar파일을 현재 디렉토리에 품
tar tvf [묶인파일:예 httpd.tar] : tar파일을 풀지 않고, 파일리스트만 출력
tar cvfz [압축파일명 :예 httpd.tar.gz] [압축할 디렉토리] : 파일을 묶어서 압축함
tar xvfz httpd.tar.gz : tar.gz 압축해제
tar xvfj httpd.tar.bz2 : tar.bz2 압축해제
<보안암호파일 생성>
htpasswd -c [생성될 파일명] [계정이름] : 암호화된 계정생성명령
<RPM>
rpm -ivh [패키지 파일명] : rpm 패키지 설치
rpm -Uvh [패키지 파일명] : rpm 패키지 업그레이드
rpm -e [패키지명] : rpm 패키지 삭제
rpm -qa : 현재 설치되어있는 패키지 리스트
rpm -qa | grep [패키지명] : 패키지명 단어가 포함된 패키지 출력
rpm -ql [패키지명] : 패키지가 설치한 파일 리스트
rpm -qlp [패키지파일명] : 패키지 설치전 설치될 파일목록
rpm -qf [파일명(절대경로)] : 어느패키지가 설치한 파일인지 표시
rpm -qi [패키지명] : 패키지 정보 출력
rpm -qip [패키지파일명] : 설치할 패키지 정보 출력
rpm -Va : 패키지 검증
<ncftp>
ncftp -u [아이디] [접속주소] : ncftp 로그인
quit : ftp 종료
get : 다운로드 명령
mget : 현재폴더내 모든 파일 다운로드
mget -R * : 현재폴더 및 하위 폴더 파일 다운로드
<DB 자동백업>
1단계. (vi /etc/crontab) 다음줄 추가
30 4 * * * root run-parts /etc/cron.mysqldump
(분 시 일 월 주 사용자권한 실행부분 실행디렉토리, 매일 4시 30분실행)
(22 4 * * 0 매주 일요일(0) 4시 22분 실행)
(42 4 1 * * 매월 1일 4시 42분 실행)
2단계. 해당 디렉토리생성
mkdir /etc/cron.mysqldump
3단계. 해당 디렉토리에 실행할 내용이 들어있는 파일 생성
vi mysqldump.0709.sh*
내용입력
#!/bin/bash
. /etc/profile
TimeOfDay=`date +"%Y%m%d.%H%M"`
mkdir -p /etc/cron.mysqldump/DATA/${TimeOfDay}
UUSER="root"
PPASS=""
/usr/local/mysql/bin/mysqldump -u${UUSER} devbank > /etc/cron.mysqldump/DATA/${TimeOfDay}/devbank.sql
/usr/local/mysql/bin/mysqldump -u${UUSER} designter > /etc/cron.mysqldump/DATA/${Time0fDay}/designter.sql
<디렉토리별 구분>
/bin : 기본 명령어가 위치
/boot : 커널이미지가 존재
/dev : 장치를 사용할때 필요한 특수파일이 위치
(hda,hdb,hdc,hdd:하드,CDROM fd0:플로피 ttyS0,ttyS1..:com포트 sda,sdb..:스카시장치 lp0:프린터)
/etc : 애플리케이션 및 서버 프로그램의 환경설정에 필요한 설정파일 저장
/usr : 리눅스 바이너리 프로그램을 설치하는 곳, 패키지 설치시 대부분 이곳에 저장
/home : 각 계정의 이용자가 사용하는 공간
/lib : 부팅과 시스템 운영에 필요한 공유라이브러리 및 커널 모듈저장
/lost+found : 파일시스템이 이상일 있을때 구동되는 fsck 명령에 의해 사용됨 (평소에 빈폴더임)
/mnt : CDROM,플로피등의 장치의 마운트 포인트를 제공함
/opt : 덩치가 너무 큰 몇몇 리눅스 패키지를 설치할때 사용함
/proc : 가상파일 시스템으로 프로세스와 시스템 정보를 제공. 파일명으로 존재하는 디렉토리는 커널정보를 숫자로 존재하는 디렉토리는 현재 실행되고 있는 프로세스의 정보를 담고 있음.
/root : root의 홈디렉토리. 가능한 많은 데이터를 저장하지 않는 것이 좋음
/sbin : 시스템 운영에 사용되는 명령어가 들어있음
/chroot : 프로그램을 감옥환경에서 돌릴때 루트공간
/chache : 플락시 서버 돌릴때 필요한 공간
/var : 시스템의 로그파일이 저장되는 곳, 가변자료들이 저장, 로그, 스풀, mysql db등
/tmp : 템프파일,시스템재구동시 모두 삭제됨, 프로세스 진행중 필요에 의해 임시로 저장
<명령어 도움말>
man [명령어] : 명령어에 해당하는 도움말
(man 페이지 안에서 /[검색어]는 해당단어검색, n은 다음 검색단어, q는 man 종료)
/usr/share/man : man 파일 저장위치
man1 : 사용자프로그램
man2 : 시스템 호출명령어
man3 : 라이브러리 함수 및 서브루틴
man4 : /dev 디렉토리에 포함된 특수파일
man5 : 파일 포맷
man6 : 게임
man7 : 분류에 포함되지 않는 기타 프로그램
man8 : 시스템 관리 명령어
man9 : 커널관련 명령어
mann : Tcl/Tk 내장 명령어
<네임서버 실행>
vi /etc/named.conf : 네임서버 설정파일
vi /var/named/[각파일] : 네임서버 설정파일
/etc/rc.d/init.d/named restart : 네임서버 재실행
<네임서버설정>
1. /etc/named.conf 파일을 설정한다.
case 1.
<!--
// generated by named-bootconf.pl
options {
directory "/var/named"; (지정한파일이 어느 디렉토리에 위치하는 지를 보여줌)
check-names master warn;
dump-file "/var/tmp/named_dump.db";
statistics-file "/var/tmp/named.stats";
forwarders {
168.126.63.1;
164.124.101.2;
};
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
(최상위 도메인 . 에 대한 정보를 제공함, named.ca는 최상위 도메인 목록제공)
zone "." {
type hint;
file "named.ca";
};
(루프백 장치설정을 제공하는 영역)
zone "0.0.127.in-addr.arpa" {
type master;
file "named.local";
};
(호스트 명을 저장할 파일명을 설정)
zone "eoholdings.co.kr" {
type master; (1차네임서버인경우 master, 2차인경우 slave로 설정)
file "eoh.zone"; (파일 이름 설정)
};
-->
case 2.
<!--
// generated by named-bootconf.pl
options {
directory "/var/named";(지정한파일이 어느 디렉토리에 위치하는 지를 보여줌)
/*
* If there is a firewall between you and nameservers you want
* to talk to, you might need to uncomment the query-source
* directive below. Previous versions of BIND always asked
* questions using port 53, but BIND 8.1 uses an unprivileged
* port by default.
*/
// query-source address * port 53;
};
(최상위 도메인 . 에 대한 정보를 제공함, named.ca는 최상위 도메인 목록제공)
zone "." IN {
type hint;
file "named.ca";
};
(루프백 장치설정을 제공하는 영역)
zone "0.0.127.in-addr.arpa" IN {
type master;
file "named.local";
allow-update { none; };
};
(호스트 명을 저장할 파일명을 설정)
zone "hanter21.co.kr" IN {
type master;
file "hanter21.co.kr";
allow-update { none; };
};
zone "13.233.211.in-addr.arpa" IN {
type master;
file "hanter21.rev";
allow-update { none; };
};
key "key" {
algorithm hmac-md5;
secret "dHlNPdoeCpUMAONBoWbYPPJzYAcXOeIUBjnTLKlFHMTgXDTvMQZvzwqdx0MB";
};
-->
2. /var/named에 각 도메인별 네임서버 설정파일을 만든다
case 1.
<!--
@ IN SOA ns.devbank.co.kr. master.devbank.co.kr. (
1997022701 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
0 ) ; Minimum
IN NS devbank.co.kr.
IN A 211.233.13.196
IN NS ns.devbank.co.kr.
IN MX 10 mail.devbank.co.kr.
@ IN A 211.233.13.196
ns IN A 211.233.13.196
mail IN A 61.82.82.118
ftp IN A 211.233.13.196
www IN A 211.233.13.196
-->
case 2.
<!--
(생존시간)
$TTL 0
$ORIGIN hanter21.co.kr.
(@는 named.conf에서 정의한 도메인명을 대신)
(SOA는 권한의 시작)
(NS는 네임서버 역할)
(MX는 메일호스트)
(A는 호스트)
@ IN SOA ns.ns.hanter21.co.kr. root.hanter21.co.kr.(
1997022701 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
0 ) ; Minimum
IN NS ns.hanter21.co.kr.
IN MX 10 mail.hanter21.co.kr.
@ IN A 211.233.13.196
www IN A 211.233.13.196
ns IN A 211.233.13.196
mail IN A 211.233.13.196
vod IN A 211.233.13.194
-->
3. 네임서버 상세 문서.. (http://www.kr.freebsd.org/doc/PoweredByDNS/ 또는 네임서버.hwp)
<아파치실행>
vi /usr/local/apache/conf/httpd.conf : 아파치 웹서버 설정파일
/usr/local/apache/bin/apachectl restart : 아파치 재실행
/usr/local/apache/bin/httpd -t : 아파치 설정파일 문법 오류 확인
chk
<아파치 설치>
1. tar xvfz apache_XXXX.tar.gz : 적당한 디렉토리에 압축해제
2. cd apache_XXXX : 압축이 풀린 디렉토리로 이동
3. configure
configure --help : 옵션 도움말 보기
--prefix=/home/httpd : 설치될 디렉토리
--logfiledir=/var/log/httpd : 로그파일이 저장될 디렉토리
--sysconfdir=/etc/httpd/conf : httpd.conf가 저장될 디렉토리
--libexecdir=/etc/httpd/modules : 기능모듈파일이 저장될 디렉토리
--sbindir=/usr/sbin : httpd 데몬과 바이너리가 저장될 디렉토리
--bindir=/usr/bin : htpasswd 같은 바이너리 저장 디렉토리
--mandir=/usr/share/man : 메뉴얼 페이지 저장 디렉토리
--enable-module=all : 아파치가 사용할 모듈 전체 선택
--enable-shared=max : 모듈처리가 가능한 모든 부분을 모듈처리
--with-perl=/usr/bin/perl : 펄을 사용할때 펄의 디렉토리
--verbose : configure 과정 출력
--enable-suexec : cgi 구동시 지정 사용자로 변경하여 구동됨
--suexec-caller=nobody : 위의 사용자 변경시 사용자
--suexec-docroot=/home/htdocs : 다큐먼트 루트 디렉토리
--suexec-logfile=/var/log/httpd/suexec_log : 로그 디렉토리 및 파일
--suexec-userdir=public_html : 일반사용자의 홈디렉토리
--suexec-uidmin=99 : caller에서 설정한 사용자의 UID
--suxexc-gidmin=99 : caller에서 설정한 사용자의 GID
--suxexc-umask=022 : caller가 사용할 PATH
--runtimedir=/var/run : 웹서버 구동시 생성될 프로세스 PID 저장 디렉토리
4. make : 바이너리와 설정파일 생성
5. make install : 바이너리와 설정파일을 지정한 디렉토리로 복사
<mysql>
mysql -u [계정이름] -p [비밀번호] : mysql 접속
/usr/local/mysql/bin/mysqldump -u root [디비명] > [파일명] : DB 백업
mysql -u root [디비명] < [파일명] : DB 복원
<mysql 설치>
1. tar xvfz mysql-XXXX.tar.gz : 압축풀기
2. cd mysql-XXX : 해당디렉토리로 이동
3. configure
./configure --help : 도움말 및 옵션보기
--prefix=/home/mysql : 설치 디렉토리
--libexecdir=/usr/sbin : 바이너리 설치 디렉토리
--localstatedir=/home/mysql/var : DB가 저장될 디렉토리
--bindir=/usr/bin : 일반 바이너리가 설치될 디렉토리
--sysconfdir=/etc : 설정파일(my.cnf) 가 저장될 디렉토리
--with-mysqld-user=mysql : mysqld를 일반 계정 mysql로 구동
--with-charset=euc_kr : 한국어 정렬지원
4. make : 바이너리와 설정파일 생성
5. make install : 바이너리와 설정파일을 지정한 디렉토리로 복사
6. echo "/home/mysql/lib/mysql" >> /etc/ld.so.conf : 라이브러리가 설치된 디렉토리 설정 추가
7. ldconfig : 시스템이 참조하는 cache 파일 갱신
8. chmod 755 /home/mysql/share/mysql/mysql.server : 실행가능 허용
9. cp /home/mysql/share/mysql/mysql.server /etc/init.d/mysqld
10. cp /home/mysql/share/mysql/my-example.cnf /etc/my.cnf : configure 시 설정파일 위치로 변경
11. mysql_install_db : 초기화 DB 생성
12. groupadd -r mysql
13. useradd -M -c MySQL server -d /home/mysql -g mysql -s /bin/false -r mysql
: mysql 계정으로 사용하도록 configure 하였으므로 계정생성
14. chown -R mysql.mysql /home/mysql/var : 소유권 변경
15. chkconfig mysqld on : 부팅시 자동실행
16. /etc/init.d/myslqd start : 실행
<PHP 설치>
1. tar xvfz php-XXXX.tar.gz : 압축풀기
2. cd v-XXX : 해당디렉토리로 이동
3. configure
./configure --help : 도움말 및 옵션보기
--with-mysql=/home/mysql : db를 mysql로 사용하고, 디렉토리 정의
--enalbe-versioning : php 3,4 버전 호환
--enable-trans-sid : php4의 세션관리기능 사용
--with-apxs=/usr/sbin/apxs : php를 DSO방식으로 컴파일 하기 위해 apxs 위치 설정
--with-config-file-path=/etc : 설정파일 위치 지정
--disable-debug : zend 옵티마이저를 사용할수 있게 설정
4. make : 바이너리와 설정파일 생성
5. make install : 바이너리와 설정파일을 지정한 디렉토리로 복사
6. cp ./php.ini-optimized /etc/php.ini : --with-config-file-path로 지정한 디렉토리에 설정파일 카피
7. www.zend.com/store/products/zend-optimizer.php 다운로드
8. /etc/httpd/modules 로 ZendOptimizer.so 를 카피
9. vi /etc/php.ini 에 다음줄 2줄 추가
zend_optimizer.optimization_level=15
zend_extension=/etc/httpd/modules/ZendOptimizer.so
10. vi httpd.conf에서 Addtype에 php3, phtml, inc, ph, html등 추가
11. /etc/init.d/httpd restart : php 재실행
<httpd.conf 설정>
ServerType standalone : 구동형태를 standalone을 기본값으로 함
PidFile /var/run/httpd.pid : 구동되는 프로세서의 PID가 기록되는 파일 설정
Timeout 300 : 클라이언트와 서버간 연결지연 시간 오류 설정 : 초단위
KeepAlive On : 서버연결에 한번이상 요청을 허용
MaxKeepAliveRequest 100 : keepalive가 on인경우 서버에 요청할수 있는 프로세서의 갯수
KeepAliveTimeout 5 : 클라이언트가 5초이내에 다음요청이 없을때 접속 끊음
MinSpareServers 5 : 순간적인 시스템 부하를 줄이기 위해 여분의 데몬을 생성하고, nobody로 구성되는 httpd 생성
MaxSpareServers 10 : 여분의 데몬 제한
StartServers 5 : 여분의 httpd 구동
MaxClients 256 : 동시접속자수 제한
MaxResuestPerChild 100 : 하나의 프로세스가 서비스를 몇번하고 소멸될 것인가
LoadModule php4_module libexec/libphp4.so : 아파치 모듈
AddModule mod_php4.c :LoadModule과 동시 설정
Port 80 : 80 포트 사용
User nobody : 데몬의 소유권
Group nobody : 데몬의 그룹권한
ServerAdmin root@devank.co.kr : 웹서버에 문제가 발생시 관리자메일 주소를 보여줌
DocumentRoot "/home/httpd/htdocs" : 사이트 루트디렉토리
UserDir public_html : 일반사용자의 ~를 통해 사용할 경우 디렉토리..
DirectoryIndex index.html index.php, index.cgi : 웹사이트 초기파일
AccessFileName .htacess : 특정디렉토리 사용자 인증 설정 파일
DefaultType text/plain : 알수없는 확장자를 만났을때.. text로처리
HostnameLookups off : access_log에 IP대신 host명으로 기록
ErrorLog /home/httpd/logs/error_log : 로그파일기록
CustomLog /home/httpd/logs/access_log common : 클라이언트 접속 로그
ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/ : cgi 실행 설정
AddType application/x-httpd-php .php .php3 : 웹서버가 인식할 확장자
/etc/init.d/httpd configtest : 문법적 에러 점점
NameVirtualHost 211.233.58.196
<VirtualHost 211.233.58.196>
ServerAdmin root@devbank.co.kr
DocumentRoot /home/ohhappy/docs
ServerName devbank.co.kr
ErrorLog logs/error_log
CustomLog logs/access_log common
</VirtualHost>
Options Indexes FollowSymLinks MultiViews 에서 indexes란 단어를 빼면 디렉토리인덱스 서비스 제외
<ftp 시작>
/etc/init.d/proftd-standalone start
<Sendmail>
1. Sendmail 패키지
- sendmail-8.11.2.-14.i386.rpm
- sendmail-cf-8.11.2-14.i386.rpm
2. vi /etc/mail/aliases
webmaster : root #webmaster로 오는 메일을 root가 수신
sales : neo,nvng,bermine,nvng@devbank.co.kr #sales@devbank.co.kr로 오는메일을 neo, nvng, bermine 계정이 동시에 수신
3. vi /etc/mail/access
211.233.13.195 RELAY : 릴레이 허용
devbank.co.kr RELAY : 릴레이 허용
yahoo.com REJECT : yahoo.com 메일 발송 거부
4. vi /etc/mail/local-host-names
: 복수의 메일 호스트를 사용할경우 반드시 설정
devbank.co.kr
designter.com
ns.devbank.co.kr
5. vi /etc/mail/virtusertable
stock@eoholdings.co.kr lucky
lucky@eoholdings.co.kr lucky
: 한계정이 여러개의 메일을 일괄수신하게 하는 것
6. smtp 사용자 인증
cyrus-sasl-1.5.24-17 : 설치
cyrus-sasl-devel-1.5.24-17 : 설치
vi /usr/lib/sasl/Sendmail.conf
pwcheck_method:pam 을 pwcheck_method:sasldb 로 변경
saslpasswd -u [호스트명] [사용자명] : sasldb 생성, 계정생성
sasldblistusers : 사용자 리스트 출력
vi /etc/mail/sendmail.mc
DEMON_OPTIONS('Port=smtp, Addr=127.0.0.1, Name=MTA')dnl : 수정
m4 /etc/mail/sendmail.mc > sendmail.cf :sendmail.cf 생성
sendmail.cf를 /etc로 복사
/etc/init.d/sendmail restart : 샌드메일 재구동
7. 메일계정만 사용하는 계정생성
useradd -M -s /bin/false 사용자명
<기본보안설정>
1) 패스워드 길이 강제 지정 (vi /etc/login.defs)
PASS_MIN_LEN 5
to read;
PASS_MIN_LEN 8
2) 루트계정의 자동타임아웃지정 (vi /etc/profile)
TMOUT=7200 (초단위시간, HISTSIZE 아래 설정)
3) 사용하지 않는 콘솔 프로그램 비활성화
rm -f /etc/security/console.apps/halt
rm -f /etc/security/console.apps/poweroff
rm -f /etc/security/console.apps/reboot
rm -f /etc/security/console.apps/shutdown
rm -f /etc/security/console.apps/xserver (X 서버 설치시만)
4) 파일의 권한 설정
chattr +i /etc/services (서비스네임과 포트넘버가 기록된 파일)
chattr +i /etc/passwd
chattr +i /etc/shadow
chattr +i /etc/group
chattr +i /etc/gshadow
(권한을 풀때는 -i 로 옵션을 변경해 주면된다.)
chattr -R +A /var/spool (for a news and mail)
chattr -R +A /chache (for a proxy caches)
chattr -R +A /home/httpd/ona (form a web page)
(해당 디렉토리에 atime 속성을 적용한다.)
5) 루트가 열수있는 콘솔을 하나로 제한 (vi /etc/securetty)
tty1 만남겨두고 모두 주석처리한다.
6) 사용하지 않는 유저 및 그룹삭제
userdel adm
userdel lp
userdel sync
userdel shutdown
userdel halt
userdel news
userdel uucp
userdel operator
userdel games
userdel gopher
userdel ftp
groupdel adm
groupdel lp
groupdel news
groupdel uucp
groupdel games
groupdel dip
groupdel pppusers
groupdel popusers
groupdel slipusers
7) 누구나 루트가 되는 것 방지하기
1단계.
(vi /etc/pam.d/su) 다음 내용추가
auth sufficient /lib/security/pam_rootok.so debug
auth required /lib/security/pam_wheel.so group=wheel
2단계.
usermod -G10 [사용할 계정이름]
(G는 그룹리스트 추가를 10은 wheel 그룹을 의미함)
(루트가 될수 있는 계정을 등록한다.)
8) 사용자의 시스템 자원제한
1단계.
(vi /etc/security/limits.conf)
hard core 0 (코어파일 생성의 저지)
hard rss 5000 (계정별 사용자 메모리를 5메가로 제한)
hard nproc 20 (프로세스 숫자를 20개로 제한)
2단계.
(vi /etc/pam.d/login)
session required /lib/security/pam_limits.so
9) 특정 파티션, 폴더의 권한 설정하기
fstab 파일의 옵션
default 모든 것이 가능함
noquota 사용자의 하드용량을 제한함
nosuid suid/sgid 엑세스를 못하게 함
nodev 특별한장치나 문자 디바이스를 엑서스 하지 못하게 한다.
noexec 실행파일을 실행할수 없도록 함
quota 사용자의 용량을 제한하지 않음
ro 읽기만 허용
rw 읽기 쓰기 허용
suid SUID/SGID를 허용
(vi /etc/fstab)
/dev/sda11 /tmp ext2 defaults 1 2
/dev/sda6 /home ext2 defaults 1 2
to read;
/dev/sda11 /tmp ext2 defaults,rw,nosuid,nodev,noexec 1,2
/dev/sda11 /home ext2 defaults,rw,nosuid,nodev,nodev 1,2
재부팅해야 적용됨
10) rpm 파일들을 안전한 장소에 옮긴후 퍼미션을 변경해 준다.
chmod 700 /bin/rpm
11) 명령어 히스토리 파일 갯수 제한 (vi /etc/profile)
HISTFILESIZE=20
HISTSIZE=20
(사용자의 홈디렉토리의 .bash_histroy 파일에 20개까지만 저장)
12) Lilo 부트 로더 설정
1단계. (vi /etc/lilo.conf)
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
prompt
timeout=00 (부팅이미지 지연시간, 멀티부팅시는 00불가)
Default=linux
restricted (싱글모드에 패스워드를 걸기위한 옵션)
password=<password> (싱글유저접속시 패스워드)
image=/boot/wmlinuz-2.2.12-20
lable=linux
initrd=/dev/sda6
read-only
2단계. 파일이 암호화가 안되어 있으므로 슈퍼유저권한설정
chmod 600 /etc/lilo.conf
3단계. 효과적용단계
/sbin/lilo -v
4단계. 속성변경
chattr +i /etc/lilo.conf
13) ctrl+alt+del 비활성
1단계.
(vi /etc/inittab)
ca::ctrlaltdel:/sbin/shutdown -t3 -r now
to read;
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now
2단계. 적용실행
/sbin/init q
14) init.d 디렉토리 파일들의 파일 권한 변경 (프로세스들과 부팅시 필요한 파일들임
chmod -R 700 /etc/rc.d/init.d/*
15) rc.local 파일 설정 (로그인시 컴터의 정보가 못나오게 함)
1단계. (vi /etc/rc.d/rc.local) 다음을 주석처리한다.
#echo "" > /etc/issue
#echo "$R" >> /etc/issue
#echo "Kernel $(uname -r) on $a $(uname -m)" >> /etc/issue
#
#cp -f /etc/issue /etc/issue.net
#echo >> /etc/issue
2단계. 다음 파일을 지운다.
rm -f /etc/issue
rm -f /etc/issue.net
16) setuid 걸린 프로그램의 퍼미션제거
1단계. 찾는 법
find / -type f \( -perm -04000 -o -perm -02000 \) \-exec ls -lg {} \;
(04000은 setuid 이며, 02000은 setgid임.. 이런파일은 누구나 사용할수 있다.)
2단계. 권한ㅇ르 지워야할 파일들
chmod a-s /usr/bin/chage
chmod a-s /usr/bin/gpasswd
chmod a-s /usr/bin/wall
chmod a-s /usr/bin/chfn
chmod a-s /usr/bin/chsh
chmod a-s /usr/bin/newgrp
chmod a-s /usr/bin/write
chmod a-s /usr/bin/usernetctl
chmod a-s /usr/bin/traceroute
chmod a-s /bin/mount
chmod a-s /bin/umount
chmod a-s /bin/ping
chmod a-s /bin/netreport
17) /etc/sysctl.conf 파일 설정
(vi /etc/sysctl.conf)
net.ip4.icmp_echo_ignore_all = 1 (핑요청으로부터 보호)
net.ipv4.icmp_echo_ignore_brodacasts = 1 (브로드캐스트로부터의 보호)
net.ipv4.conf.all.accept_source_route = 0 (라우팅 요청으로의 보호)
net.ipv4.tcp_syncookies = 1 (tcp syn cookie로부터 보호/예전 야후공격방법)
net.ipv4.conf.all.accept_redirects = 0 (ICMP 재접속 요청으로 부터 보호)
net.ipv4.ip_always_defrag = 1 (패킷분할요청으로 부터 보호)
net.ipv4.icmp_ignore_bogus_error_responses = 1 (가짜 에러메시지 호출 방지)
net.ipv4.conf.all.rp_filter = 1 (IP Spoofing 공격으로 부터 보호)
net.ipv4.conf.all.log_martians = 1 (Log Spoofed Packets, Source Routed Packets, Redirect Packets 보호)
vm.bdflush=100 1200 128 512 15 5000 500 1884 2 (bdflush 파라미터)
wm.buffermem=80 10 60 (bdffermem 파라미터)
net.ipv4.ip_local_port_range=32768 61000 (ip_local_port_range 파라미터)
fs.file-max=8192 (file-max 파라미터)
fs.inode-max=32768 (inode-max 파라미터)
net.ipv4.tcp_fin_timeout=30 (TCP/IP 접속시간 조절)
net.ipv4.tcp_keepalive_time=1800
net.ipv4.tcp_window_scaling=0
net.ipv4.tcp_sack=0
net.ipv4.tcp_timestamps=0
18) /root/.bashrc 파일수정
(vi /root/.baxhrc)
ulimit -u unlimited (max user processes 제한)
ulimit -n 9000 (시스템에서 열수 있는 파일수 증가)
(ulimit -a 로 결과확인)
<로그분석 : webalizer>
1) 파일다운로드 (http://www.webalizer.com)
2) cd /usr/local 에 파일 카피 후
3) 압축 풀기 : tar xvfz webalizer-2.01-10-src.tar (webalizer 디렉토리 에 풀림)
4) 웹얼라이저 디렉토리로 이동후 configure 를 실행
./configure -with-language=korea (한국어 지원옵션 선택)
5) make (컴파일한다.)
6) make install (인스톨한다.)
7) 상세사용법 (http://www.webalizer.co.kr/)
출처 : http://www.widusnet.co.kr