티스토리 뷰

운영체제

Linux 기초

warpmemory 2020. 3. 4. 08:05

cat

파일을 만드거나 파일의 내용을 출력
cat test_file(보고 싶은 파일 이름)

cd

디렉터리 이동
cd / : 최 상위 디렉터리로 이동
cd .. : 현재 위치에서 상위 디렉터리로 이동

chgrp

파일/디렉토리 그룹 변경
groupadd를 사용하여 그룹을 먼저 추가하여야 함

 

root@test]#chgrp grop test_file
root@test]#ll
drwxr-xr-x 2 root root 1024 feb 28 10:10 ./
drwxr-xr-x 2 root root 1024 feb 28 10:20 ../
---xr-x 2 root group 1024 feb 28 11:10 test_file

chown

파일/디렉토리 소유자 및 그룹 변경
- 소유자 변경
root@test]#chown user test_file
root@test]#ll
drwxr-xr-x 2 root root 1024 feb 28 10:10 ./
drwxr-xr-x 2 root root 1024 feb 28 10:20 ../
---xr-x 2 user root 1024 feb 28 11:10 test_file

- 소유자 및 그룹 변경
root@test]#chown user:group test_file
root@test]#ll
drwxr-xr-x 2 root root 1024 feb 28 10:10 ./
drwxr-xr-x 2 root root 1024 feb 28 10:20 ../
---xr-x 2 user group 1024 feb 28 11:10 test_file
현재 경로의 모든 파일이나 디렉토리의 사용자/그룹을 변경하고자 할 때
chown user:group *

chmod

파일의 권한 바꾸기
속성 / 소유자 / 그룹 / 사용자 순으로 구성

r w x
↑ ↑ ↑
쓰기 읽기 실행
4 2 1

ex) drwxr-x-wx
d r w x r - x - w x
↑ ↑ ↑ ↑
구성: 디렉토리 소유자 그룹 사용자
권한: 읽기/쓰기/실행 읽기/실행 쓰기/실행 
권한 설정: 7 5 3
(4+2+1) (4+1) (2+1)

root@test]#chmod 753 test_file
root@test]#ll
drwxr-xr-x 2 root root 1024 feb 28 10:10 ./
drwxr-xr-x 2 root root 1024 feb 28 10:20 ../
-rwxr-x-wx 2 root root 1024 feb 28 11:10 test_file

cp

파일을 복사하여 지정경로에 붙이기
root@test]#touch test_file : 파일 생성
root@test]#cp test_file test : 현 위치에 test_file을
test로 복사 
root@test]#cp test_file /usr/local : /usr/local 위치에
test_file 복사

dd

지정한 블록만큼 파일을 복사
디스켓의 이미지 파일을 만들거나 이미지 파일을 가지고 디스켓을 만들 때 사용
root@test]#mkfs -t ext2 /dev/fd0 /mnt/floppy
-파일 시스템 만듬
root@test]#fdformat /dev/fd0 -플로피 포맷
root@test]#dd if=/boot/vmlinuz of=/dev/fd0 bs=2148
-커널 이미지를 따서 디스켓에

df

디스크에 남은 공간을 보여줌
df [option]

option -a 디폴트로 생략된 0블록 크기의 파일 시스템 보기
-i 파일 크기를 블록 대신 inode로 디스크 정보 보기
-k 파일 크기를 KB로 보기
-T 파일 시스템 종류와 디스크 정보 보기
-t fstype 값을 가진 파일 시스템에 대한 디스크 정보 보기

dmesg

부팅시 나오는 메시지 출력

du

디스크 사용량 확인
du [option]

option -a 해당 경로에 대한 사용한 디스크 용량 보기
-k 용량 포시 단위를 KB로 표시
-h 쉬운 용량 표시 단위로 표기
-m 용량 표시를 MB로 표시

echo

주어진 문자열들을 스페이스로 구분하여 출력,

마지막에서는 개행 문자 출력
echo [option]
option -n 마지막 개행 문자 출력 안 함
-e 다음 문자를 번역
\a 경고음
\b 백스페이스
\c 마지막 개행 문자 사용 안 함 등..

ex) [root@test]#echo test
test
[root@test]#echo -n test
test

- 파일의 내용 저장/출력
[root@test]#echo test입니다... > echo_test
- echo_test 파일에 test입니다... 저장
[root@test]#cat echo_test
test입니다...

find

파일/디렉토리 찾기
find 경로 -name 찾고자 하는 파일/디렉터리 명 -print

[root@test/usr/local]#find / -name 파일/디렉토리명
(-print 생략 가능)
-최상위에서부터 하위까지 찾음
[root@test/usr/local]#find ./ -name 파일/디렉토리명
-현 디렉토리에서부터 하위까지 찾음

grep

파일 내부에서 특정 문자열 찾기
데몬 실행 여부 알기

ex1) [root@test]#grep test *
- 현 디렉토리에서 test로 시작하는 문자열을 찾음
[root@test]#find -name test | grep bin
-| 이것은 test의 출력 리스트를 bin을 포함한 라인만 출력

 

ex2) [root@test /bint]#ps -ax | grep net
- 데몬의 실행 여부를 알 수 있다
596 pts/2 07:25 .net
653 pts/2 07:20 .net
654 pts/2 10:50 grep net
[root@test bin]#

gtar

GNU tar로 많은 파일들을 하나의 테이프나 디스크에 저장한 파일을 복구할 때

gzip/gunzip

압축 / 해제
gzip/gunzip [option] 파일명

gzip -c test test1.... test_to
- test.test1...을 test_to로 압축
gzip -cd test_to.gz | gzip new.gz
-기존 압축된 파일에 추

kill

데몬 죽이기

[root@test /bint]#ps -ax | grep net
- 데몬의 실행 여부를 알수 있다..
596 pts/2 07:25 .net
653 pts/2 07:20 .net
654 pts/2 10:50 grep net
[root@test]#kill -9 596 -현재 실행 중인 데몬을 죽인다.
[root@test]#ps -ax | grep net - 데몬이 살았나 죽었나 확인
653 pts/2 07:20 .net
654 pts/2 10:50 grep net
[root@test]#killall net -실행 중 net 데몬 모두 죽이기
[root@test]#ps -ax | grep net - 데몬이 살았나 죽었나 확인
654 pts/2 10:50 grep net
[root@test]#

login

시스템 접속할 때
login [이름]
login -p
login -h 호스트 이름
login -f 이름

ls

파일/디렉토리 정보 보기
ls -al
- 권한,사용자, 그룹 생성된 날짜 등의 정보를 볼 수 있다.

mkdir/rmdir

디렉토리 생성/삭제

more/less

화면 출력시 내용들을 한 화면씩 잘라서 보기/자유로
이 이동하면서 보기
ls -al | more
ls -al | less

mv

파일/디렉토리 이동, 이름 변경하기

ex1) mv 파일명/디렉토리명 경로 - 이동하기
mv test /usr/local

ex2) mv 파일/디렉토리명 바꿀 이름 - 변경
mv test total - test 이름을 total로 변경

mount/umount

파일 시스템 접하기/해제 하기
mount는 /etc/fstab의 설정을 기초로 작동
(cat /etc/fstab에서 확인..)

ex1) 플로피 디스크에 마운트 하기/해제
mount /dev/fd0 /mnt/floppy
umount /mnt/floppy
ex2) cd-rom에 마운트 하기/해제
1. fstab에 설정되어 있을 경우
mount /dev/cdrom /mnt/cdrom
umount /mnt/cdrom
2. 설정이 안 되어 있을 경우
mount -t iso9660 /dev/cdrom /mnt/cdrom
umount /mnt/cdrom

ping

패킷의 흐름을 알수 있다.
호스트가 제대로 접속이 되는지 여부를 확인

ping IP 주소
ping URL 경로

ps

현재 프로세스의 상태를 볼 수 있는 명령어


ex1)[root@test /bin]#ps

-현재 사용자의 프로세스 보기
596 pts/3 09:25 bash
653 pts/3 09:40 ps
ex2)[root@test /bin]#ps -a | grep net
-현재 사용자의 모든 프로세스중 특정한 프로세스 보기
1028 pts/2 08:25 .net
1247 pts/2 09:30 .net
ex3) [root@test /bin]#ps -aux | grep net
- 전체 프로세스중 특정 프로세스 보기
root 2457 0.0 0.8 4688 2040 ? S 07:25 0:02 .net
root 2459 0.0 0.8 4780 2140 ? S 07:55 0:01 .net
root 3587 0.0 0.7 4988 2440 ? S 09:17 0:02 .net
root 3590 0.0 0.4 4998 2480 ? S 09:23 0:00 grep net

pwd

현재 위치 경로 보기

 

-rm : 파일/디렉토리 삭제
rm 파일명 -파일 삭제
rm -rf 파일/디렉토리명
-파일/디렉터리 삭제(f는 질문하지 않고 그냥 삭제)

rpm

패키지 관리자로 패키지란 설치할 파일들과 이름.

버전 설명 등을 포함하는 패키지 정보를 지닌 저장 파일입니다.

설치 :  rpm -ivh 패키지 이름.rpm
업그레이드 : rpm -Uvh 패키지 이름.rpm
삭제 : rpm -e 패키지 이름

su

사용자와 그룹 ID를 교체하여 쉘을 실행
(root 일 땐 # 일반 사용자는 $으로 표시됩니다.)
[root@test]#su - user
[user@test /user]$

touch

파일 생성 및 액세스 시간 변경
touch 파일명

vi

리눅스에서 가장 많이 사용되는 에디터

 

사용자 관련

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/

 

아파치 실행

vi /usr/local/apache/conf/httpd.conf : 아파치 웹서버 설정 파일
/usr/local/apache/bin/apachectl restart : 아파치 재실행
/usr/local/apache/bin/httpd -t : 아파치 설정파일 문법 오류 확인

아파치 설치

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/)

'운영체제' 카테고리의 다른 글

Linux 숫자 합 구하기  (0) 2020.03.05
Linux 라인 치환하기  (0) 2020.03.05
Linux umask란?  (0) 2020.03.02
IIS 사이트 ipSecurity 아이피 추가/삭제 명령어  (0) 2020.02.26
Linux vi로 파일 hex edit 모드로 보기  (0) 2020.02.22
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
페이지
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함