<Setuid?>

파일 실행 시 파일 소유자의 권한을 잠시 바꿔준다.뭐로? 루트의 권한으로한마디로 소유자의 권한 루트권한으로 잠시 빌려 실행하는 것이다.

4000 -> 소유자 권한 x(실행)자리에 s를 사용

2000 -> 그룹의 x(실행)자리에 s를 사용

1000 -> 그외의 그룹에 x자리에 t를 사용

 

-rwx------ 이 파일은 700의 권한을 가진 파일이다. 만약 나는 일반사용자인데, 잠시동안 이파일을 root권한으로 사용하고 싶다. 그럴땐 root가 잠깐 사용할 수 있도록 파일권한을 주는것인데 그것을 setuid라고 한다.

여기에 사용자에게 권한을 주면 rws------가 되어 4700의 권한을 가진다.

 

<실습>

useraddroot사용자만 사용할 수 있도록 설정되어 있다.

이것을 setuid를 사용해 잠시 일반사용자가 사용할 수 있게 변경하고, 일반사용자로 로그인해서 usradd명령어를 실행해보자.

 



 

fedorauseradd를 사용해 계정 생성을 하려고했지만 거부됨.

root로 로그인하여 setuid를 변경해보자.



 

변경 후, 다시 fedora로 로그인해서 test1를 생성하였더니 아무이상없이 잘 만들어졌다.

마지막으로 cat /etc/passwd를 사용해서 잘 만들어졌는데 확인 할 수있도록 한다.

원리는 fedora라는 사용자가 useradd를 사용했을 당시 권한이 root로 옮겨지는 것이다. 마치 자기 자신이 root로 둔갑되는 것과 같은것이다. root권한을 얻어 useradd를 사용하고, 명령어 사용이 끝났으면 root권한을 되돌려줘서 다시 자기자신은

fedora라는 유저로 생활하게 되는것이다.

 


<Setgid?>

따로 설명안하겠다. Setuid랑 똑같은 성질인데, 단지 그룹의 권한을 바꿔주는 것이라고 생각하면 된다.

LIST

'OS > Linux' 카테고리의 다른 글

리눅스 - FTP서버  (0) 2016.02.18
리눅스 - 환경변수  (0) 2016.02.17
리눅스 - /etc/fstab  (0) 2016.02.16
리눅스 - Quota(쿼터) (사용자별로 공간 할당하기)  (0) 2016.02.15
리눅스 - RAID (Redundant Array of Inexpensive Disks)  (0) 2016.02.15

</etc/fstab이란?>

파일시스템 정보를 저장하고 있으며, 리눅스 부팅시 마운트정보를 저장하고 있다.

이 파일안에 있는 구성값들로 인해 부팅시에 자동으로 적용될 수 있도록 한다.

만약 이 파일의 구성이 잘못되어 버린다면? 부탕과정에서 파일시스템 마운트 과정에서 부팅이 멈추어 버릴것이다...

그렇다면... /etc/fstab안에 있는 내용들을 보도록 하자.



 

 

구성)

[파일시스템 장치] [마운트 포인트] [파일시스템 종류] [옵션] [덤프] [파일체크옵션]

 

1. [파일시스템 장치]

말 그대로 파일시스템의 장치명을 설정하는 부분이다. 우리가 하드디스크를 하나 추가하고, fdisk명령어도 파티션을 나누고, 파일시스템을 적용시켰을때 마운트 가능한 마치, /dev/sda2와 같은 장치 이름을 적는 곳이다.

혹은 레이블으로 표시할 수도 있다. (레이블로 표시할땐 레이블 명시를 해줘야 함)

 

2. [마운트 포인트]

파일시스템 장치를 마운트 시킬 위치를 설정하는 부분이다.

우리는 "특정 장치(파일 시스템)를 어떤 디렉토리에 마운트 시킨다"라고 할때, 어떤 디렉토리가 바로 마운트 포인트이다.

위에 맨마지막 줄을 예를 들어보자.

/dev/sdb1이라는 하드디스크의 파티션부분이 있는데, 이 장치를 /userhome이라는 디렉토리에 마운트 시키자라는 의미이다.

 

3. [파일 시스템 종류]

파일 시스템 종류는 마운트 하기전에 파일시스템을 결정하게 되는데, window에서 하드디스크 D를 포맷할때 파일시스템을 NTFS로 하는 것과 동일하다.

종류는 다음과 같다.

ext, ext2, ext3, ext4, iso9660, nfs, swap, ufs, vfat, msdos, hpfs, ntfs 등이 있다.

 

4. [옵션]

파일 시스템을 용도에 맞게 사용하기 위해 파일시스템 속성을 설정하는 옵션이다.

default : rw, suid, dev, exec, auto, nouser, async 옵션을 모두 선택한 것과 같다.

auto : 부팅시 자동으로 마운트 된다.

exec : 실행파일이 실행되는 것을 허용하는 파일 시스템이다.

suid : SetUIDSetGID의 사용을 허용하는 파일 시스템이다.

ro : 읽기 전용 파일시스템이다.(Read Only)

rw : 읽고 쓰기(Read Write) 파일시스템으로 사용된다.

user : 일반 계정사용자들도 마운트를 할 수 있는 파일시스템이다.

nouser : root만 마운트할 수 있는 파일시스템이다.

noauto : 부팅시 자동으로 마운트 되지 않게하는 파일시스템이다

noexec : 실행파일을 실행되지 못하게 하는 파일시스템이다.

nosuid : SetUIDSetGID의 사용을 허용하지 않은 파일시스템이다.

usrquota : 개별 계정사용자의 Quota설정이 가능한 파일시스템이다.(쿼터:사용자별로 디스크 할당을 조정(제한))

grp : 그룹별 Quota설정이 가능한 파일 시스템

 

[덤프]

dump명령으로 01로 나뉜다.

0 : 백업을 하지 않는다.

1 : 백업 가능한 파일 시스템.

 

[파일체크옵션]

파일 체크 옵션으로 루트파일 시스템을 점검할 때 사용한다. 0, 1, 2로 나뉜다.

0 : 부팅시에 파일시스템을 점검하지 않는다.

1 : 루트 파일시스템으로서 부팅시에 파일시스템 점검을 한다. (/부분을 체크 후, 부팅)

2 : 루트 파일시스템 이외의 파일시스템으로서 부팅시에 파일시스템 점검을 한다. (/를 제외한 나머지 파티션 체크 후 부팅)

LIST

<쿼터란?> 

파일시스템마다 사용자나 그룹이 생성할 수 있는 파일의 용량 및 개수를 제한하는 것이다.

, 쿼터를 사용해 각 사용자들에게 사용할 수 있는 디스크의 크기 및 파일의 용량을 정해주는 것이다.

실습을 통해 쿼터를 사용해보자.

 

<실습>

사용자 두명을 생성하고, 그 사용자들에게 각각 사용할 수 있는 공간을 할당해서 제한해보자.

 

1. 하드디스크를 하나 장착하고, 파티션을 나눈 후, 파일시스템을 ext3으로 포맷하고, 마운트까지해보자!

 

 

먼저, 파티션을 나누자.



 

 

그 다음 ext3으로 포맷을 하자 



 

마운트를 시켜보자. 



 

 

, 이번에는 부팅되면 그때마다 자동으로 인식되도록 /etc/fatab의 내용을 바꿔보자.



 

 

2. 쿼터를 사용할 하드디스크를 만들었으니 이번에는 사용자를 만들어보자.

사용자의 IDjohn, bann으로하였으며, 비밀번호는 각각 아이디를 사용하였다.


 

3. 그 후에, /etc/fstab을 다시 편집한다.



defaults부분을 defaults,usrquota로 변경하였다. usrquota로 사용하겠다는 의미이다.

 

 

4. 재부팅을 한다.

 

 

5. 쿼터를 사용하기 전에 쿼터 DB를 만들어 줘야한다.

쿼터 DB를 만들어보자.



빈 파일 생성후, 보안을 위해 aquota.user의 권한을 바꾼다.

quotacheck -a -u -m은 사용자에 대해서 쿼터를 실행하는 명령이다.

 

 

6. 모든 준비가 끝났다. 이제 사용자별로 공간을 할당해주면 끝이다.


Filesystem : 사용자별 쿼터를 할당하는 파일시스템을 의미한다.

blocks : 현재 사용자가 사용하는 크기를 말한다.

soft : soft에 명시되어 있는 크기보다 더 사용할 경우 경고함

hard : hard에 명시되어 있는 크기보다 더 사용할 경우 쓰기 금지시킴... soft는 경고! hard는 금지! , soft보다 hard가 더 커야댐... 이론적으로는?ㅎㅎ

32KB만큼 john이사용하고 있다는 의미이다.

소프트의 한도를 7MB, 하드의 한도를 10MB로 제한하였다.

inodes, soft, hard : inode의 개수를 의미한다.(파일개수)

 

7. 이로써 사용자 john에게 공간 할당이 끝났다.



LIST

<RAID?>

여러 개의 하드디스크를 하나의 디스크처럼 사용하도록 하는 것인데, 비용을 절감하면서 더욱 신뢰성을 높이며 성능까지 향상시키기 위한 저장 장치를 의미한다.

 



<RAID 레벨>

RAIDRAID 0, RAID 1, RAID 5, RAID 6, RAID10까지 5개로 분류되고 각각 레벨마다 특징적인 저장방법을 의미한다.

 

1. RAID 0

모든 디스크를 동시에 사용하는 방법으로 하드A와 하드BRAID 0으로 만들었다고 가정해보자. 그럼 이 RAID 0은 저장할 때 하드 A와 하드 B에 동시에 골고루 저장한다. (마치 하나의 하드디스크 처럼 사용한다는 맥락 속에서 말이다.)

"안녕하세요? IT깝구"에요 라고 문장을 저장한다면... A에는 "안녕하세요? IT"까지 저장하고, B에는 "깝구에요"를 저장한다. 쉽게 예를 들기위해 이렇게 설명한것으로 실제로 이렇게 딱딱 떨어지게 저장되지는 않지만, 취지는 골고루 저장된다는 것!

RAID 0LVM의 차이점은 무엇일까? 이 두가지를 볼 경우 별 차이가 없지만, 저장하는 방식에 차이가 있다.

LVM으로 구성한 시스템에 저장하게 되면, 똑같이 예를 들기 위해 하드A와 하드BLVM을 만들었다고 가정해보자.

"안녕하세요? IT깝구"라고 저장한다면 하드 A에 모두 다 "안녕하세요? IT깝구"를 저장하고, 하드A가 모두 차면 B로 넘어간다.

RAID 0과 같이 모든 하드디스크에 동시에 골고루 저장하는 방법을 스트라이핑

(Stripping) 방식이라고 부른다. 그러므로 하드A가 맛이 간다면 RAID 0으로 구성한 전체 데이터 복구가 힘들것이다. RAID0 빠른 성능을 요구하면서, 전부 잃어버려도 큰 문제가 되지 않는 자료를 저장하는데 적절한 방식이다.

 

2. RAID 1

이 방식은 미러링(Mirroring)방식으로 불리우는데, 똑같은 데이터를 한 번 더 저장하도록 하는 방법이다하드A와 하드 B를 묶어서 RAID 1방식으로 구성했다고 가정하자. 그렇다면 하드A "안녕하세요? IT깝구"를 저장한다면, 하드 B에는 똑같은 데이터인 "안녕하세요? IT깝구"를 한 번더 저장하는 셈이다. 장점은 두 개의 디스크 중 하나가 고장나더라도 데이터는 손상되지 않는 장점이 있지만, 데이터를 저장하는 효율이 1/2로 줄어든다. 한마디로 공간효율이 떨어지지만 안전하다는 의미이다.

 

3. RAID 5

RAID1처럼 데이터의 안전성도 어느 정도 고려하고, RAID0처럼 공간 효율성도 고려한 방법이다. RAID5를 구성할 때는 최소 3개 이상의 하드디스크가 있어야만 구성이 가능하며, 하드디스크에 오류가 발생할 경우 패리티를 이용하여 복구한다.

하드디스크 4개를 이용하여 RAID5를 구성했다고 가정하자. 여기에 000 111 010 011(12bit)의 데이터를 저장하였다.



맨 처음 행의 줄을 보자. 0+0+0+parity = 짝수여야한다. 그렇기 때문에 parity0이 된다.

두번째 줄을 보자. 1+1+1+parity = 짝수여야한다. 그렇기 때문에 패리티는 1이 된다.

세번째 줄을 보자. 0+1+0+parity = 짝수여야한다. 그렇기 때문에 패리티는 0이 된다.

마지막 줄을 보자. 0+0+1+parity = 짝수여야한다. 그렇기 때문에 패리티는 1이 된다.

각각 네모칸이 패리티 비트 값을 나타낸다. 각 하드디스크 장치에 골고루 패리티 비트값을 넣어놓은 것이다.

예를 들어 sdb의 하드가 손상되어 사용할 수 없다고 가정해보자.



 

아까 우리가 보았던 패리티비트값을 이용해 찾아낼 수있다.

처음 0+알수없음+0+0 = 짝수여야한다. 알수없음은 당연히 0이된다.

1+알수없음+1+1 = 짝수여야한다. 알수없음은 1이된다.

이렇게 하나씩 하나씩 모두 복구가 가능하게 된다.

대신 두개이상의 하드디스크가 손상되면 찾을수 없지만 어느정도의 결함은 해결해 줄 수 있는 방법이 RAID 5이다.

 

4. RAID 6

RAID 5방식을 이용하면 디스크 1개가 고장나도 데이터에는 이상이 없는 것을 확인했다. 극단적인 예로 20개의 디스크로 RAID 5를 구성했다고 가정할 때 하드디스크가 2개 손상된다면 아쉽게도 모두 복구를 못하고 말 것이다.

RAID 6RAID 5의 방식을 개선시킨 방법이다.

공간효율은 RAID 5보다는 약간 떨어지지만 신뢰도는 좀 더 높인 방법이 RAID 6 방법이다.

 

5. RAID 10

RAID1에서 한 미러링 방법을 이용해 데이터를 다시 내부적으로 RAID 0방식의 스트라이핑하는 방법이다. 신뢰성과 성능이 동시에 뛰어난 방법이다.

 

<실습>

RAID0, 1, 5를 실습해보자.

실습에 앞서 하드디스크 준비가 필요하다.

8개의 하드디스크를 만들어야 하며, RAID 0(/dev/sdb, /dev/sdc)로 실습하고, RAID 1(/dev/sdd, /dev/sde), RAID 5(/dev/sdf, /dev/sdg, /dev/sdh)를 실습할 것이다.



다음과 같이 8개의 하드디스크를 만들도록 하자.

/dev/sdb, /dev/sdc... ~ /dev/sdi까지 모두 fdisk를 사용하여 파티션을 만들고 파일시스템 유형은 fd로하자. fdLinux raid autodetect유형으로 raid를 사용하고자 할 때 사용하는 파일시스템 유형이다.




간단하게 맨앞의 /dev/sdb와 맨끝의 /dev/sdi만 출력했다. 모두 다 만들면 준비가 끝난것이다.

 

다음과 같이 이렇게 뜨면 정상이다.




 

<실습 1 - RAID 0구축>



/dev/md0가 있는지 없는지 확인하고 없으면 만들어준다.

여기서 잠깐! md0는 왜만들어줄까? 우리는 지금 /dev/sdb1/dev/sdc1을 합쳐서 하나로 만들어야 한다. 그렇다면 그 하나로 합친 장치의 이름은 뭐로할것이냐... 바로 합친 장치를 만들어주고 정의하기 위해 md0를 만든것이다!

mknodbBlock device를 의미, 9md장치의 주 번호가, 00번째 장치라는 의미이다.

 

이제, mdadm 명령을 이용해 실제 RAID를 구성해보자.



mdadm 명령어의 옵션들을 해석해보자.

--create /dev/md0 : 우리가 만든 md0장치에 RAID를 생성하겠다는 의미이다.

--level=0 : RAID 0으로 하겠다.

--raid-devices=2 /dev/sdb1 /dev/sdc1 : 2개 하드디스크를 사용하며, 그 두개의 장치 이름은 /dev/sdb1/dev/sdc1이다.

그 후, scan옵션으로 잘 생성되었는지 확인하였다.

 

이번에는 파티션 장치를 포맷해보자.

mkfs 명령어로 포맷하였다. -> 파일시스템을 생성함 뭐로? ext4



 

 

마지막으로 마운트해보자!



마운트 후에 df명령어로 잘 생성되었는지 확인하였다.

이렇게 RAID 0의 구성이 끝이났다!

 

<실습2 - RAID 1 구축>

md0를 만든것 처럼 RAID 1을 구축할 때도 md1을 만들것이다.



 

 

자 이번에는 포맷을 해보자.



 

 

마지막! 마운트하면 끝이다.



 

 

<실습2 - RAID 5 구축>

이것은 직접 하지 않고, 말로 설명하겠다. mdadm에서 level5로 바꿔주고, 장치를 4개정도 생성해서 실습하면 된다. --raid-devices=4 뒤에 장치 이름 4개를 모두 써주고, 포맷후, 마운트를 해주면 끝이다.



LIST

<LVM이란?>

말 그대로 논리적 디스크 관리자이다. LVM은 여러 개의 하드디스크를 합쳐서 한 개의 파일시스템으로 사용하는 것을 말한다. LVM은 여러 개의 디스크를 합쳐줄뿐 아니라 합쳐진 것을 다시 사용자 맘대로 여러개로 나눌수 있다.

 

용어)

1. Physical Volume : /dev/sda1, /dev/sdb1...

2. Volume Group : Physical Volume을 합쳐 1개의 물리적 그룹을 만듬

3. Logical Volume : Volume Group을 나눠서 논리적 그룹으로 나눈다.(1개이상으로)

 

<실습>

이번에는 3개의 하드디스크를 장착한 후, LVM으로 마치 1개처럼 묶어보는 실습을 해보자.

준비과정은 /dev/sdc, /dev/sdd, /dev/sde 각각 100MB, 100MB, 200MB 하드를 만들어 묶어보자.

하드만드는 과정은 생략하겠다. , fdisk를 사용하여 파일시스템을 적용할 때 LVM으로 해야하기 때문에 그 부분부터 보자!

 

하드디스크가 5개가 장착되어있다. 원래 기존에2+ 방금 실습을 위해 장착한 3



fdisk를 사용하여 파티션을 만들어준다. 



 

명령어 t는 파일시스템 유형을 선택할 때 사용한다.

8e Linux LVM을 사용할 때 사용하는 파일시스템이다.

w는 설정 값들을 저장하는 명령어이다. 






위에는 /dev/sdc1만 만들었지만 /dev/sdd/dev/sde도 똑같이 만들어준다.

 



<LVM을 이용해보자>

1. pvcreate명령으로 물리적인 볼륨을 생성해보자.


각각 파티션에 물리볼륨을 만들었다.

 

2. 만들어진 물리 볼륨을 그룹을 만들어 하나로 합쳐보자.

명령어는 vgcreage [그룹몇] [각 장치들...]



 

3. 물리봄륨 그룹이 잘 만들어져있는지 확인해보자.



 

4. 볼륨 그룹의 파티션을 만들어보자.

하드디스크를 생성하고 파티션을 만들때는 fdisk를 사용했다. 하지만 지금 만들어놓은 볼륨 그룹에 대한 파티션을 생성할 때는 lvcreate명령어를 사용해야한다.

lvcreate -L 400MB -n myGroup1 myGroup

이 명령어의 해석은 우리가 만든 논리 그룹myGroupmyGroup1이라는 논리 볼륨을 생성하되, 크기는 400MB로 하라는 의미이다. , 이 의미를 하드디스크 fdisk를 사용했을 때와 비교하면 파티션 1개만 만든 것과 같은 의미이다.



 

5. 만들어진 파티션에 파일시스템을 생성하자.

우리가 만들 파일시스템은 /dev/myGroup/myGroup1이다.



 

6. 마지막으로 마운트만 해주면 끝이다!




LIST

리눅스에서 하드디스크의 용량이 모잘라 추가하고 싶을 때는 어떻게 해야할까??

컴퓨터에 하드디스크를 추가한 후 사용하려면 특정 절차를 수행해야 한다.

 

먼저, 하드디스크를 장착한다.

둘째, fdisk명령어로 파티션을 생성한다.

셋째, 파티션을 나눈 후파일 시스템을 생성한다. ) mkfs.ext4

넷째, mount를 사용하여 특정 디렉토리와 마운트한다.

 

1. 하드 디스크 장착하기

가상 프로그램이 아닌 리눅스를 실제 컴퓨터에 사용하시는 분들이면 그냥 하드디스크를 꽂아서 사용하면 된다.

하지만 나같은 경우 VM ware를 사용하기 때문에 소프트웨어적인 설정이 필요하다.

SCSI 0:1장치(/dev/sdb)에 하드 0.2GB짜리 하나를 장착해보자.

SCSI장치가 왜 /dev/sdb인 이유는 /dev 디렉토리안에 /sdb형태로 존재하기 때문인데, 읽는 순서는 sda, sdb, sdc, sdd,...이렇게 진행하고 나뉘어진 파티션이있다면 sda1,sda2,sdb1,sdc1 이런식으로... sda하드에는 파티션이 두개가 sdb하드에는 파티션이 한개가 나뉘어져 있는 것이다.

 

<실습>

순서대로 따라하기만 하면 된다!

 








이름은 알기쉽게! 나중에 이름을 봤을때 어떤 하드인지 알기 쉽게! 작성하자


이렇게 되면 vm ware에서의 하드디스크 장착은 끝이났다.

 

2. fdisk를 이용해 파티션을 나누기

이번에는 하드디스크 장착을 했으니 파티션을 나눠보자.

<실습>

파티션은 한 개만 만들어보자.



먼저, 맨 처음에 n은 하드디스크 sdb의 새로운 파티션을 분할하겠다 라는 의미이다. 두번째 pprimary partition을 선택한것이고, 세번째 1은 파티션 번호를 1번으로 하겠다라는 의미이다.

First 실린더는 시작 실린더 번호를 입력하는곳인데 그냥 엔터를 치면되고, 마지막 실린더 번호를 입력하라는 곳에서도 엔터를 치면 된다.

 



p는 지금까지 만든 파티션의 내용을 볼 수 있다. 밑에보면 sdb1이라고 방금 만든 파티션을 볼 수 있다.

 

3. mkfs명령어로 파일시스템을 생성하기

방금 파티션을 나눴다. 이제 포맷을 해야한다. , 파일시스템을 생성하는 것인데, 방금 나눈 파티션에 저장을 어떤 파일시스템으로 할지를 결정하는 것이다.



 

done 세개가 뜨면 잘 만들어진 것이다.

파일 시스템에는 종료가 여러개가 있다과거에는 ext2, ext3를 사용하였지만 최근 개발로 향상된 ext4를 사용하였다.

 

4. 마운트 시키자!

, 이제 하드장착, 파티션 분할, 파일시스템 생성 모두 끝났다.

장착된 하드를 디렉토리에 마운트하여 사용하는 일만 남았다.



 

이제부터는 /data 디렉토리에 파일을 복사하거나 옮기면 /dev/sdb1 에 저장되는 것이다.



LIST

<RPM이란?>

Redhat Package ManagerWindow "setup.exe"와 비슷하다. , 프로그램을 설치한 후에 바로 실행할 수 있는 설치 파일을 제작하게 되었다. 이러한 설치파일의 확장명은 *.rpm이며, 이를 패키지라고 부른다.

RPM의 단점은 무엇일까?

RPM이 나오면서 리눅스에서의 설치는 편리해 졌지만 RPM의 가장 큰 문제점은 '의존성'이다.

예로 페도라의 기본 웹 브라우저인 FirefoxX윈도우에서 가동된다. X윈도우가 설치되지 않은 상태에서 firefox를 설치한다면? 의존성 때문에 설치가 되지 않을 것이다.

 


<RPM 파일 형식>

rpm 파일 형식을 예로 알아보자.

gedit-2.6.1-1.fc11.i586.rpm

패키지 이름-버전-릴리즈번호.페도라버전.아키텍처.rpm

 

1. 패키지 이름 : gedit

2. 버전 : 2.6.1

주버전, 부버전, 패치버전이며 높을 수록 최신임.

3. 릴리즈번호 : 1

문제점을 개선할 때 마다 붙여지는 번호

4. 페도라버전 : fc11

페도라에서 배포할 경우 붙여진다. fc11은 페도라 11용을 의미.

5. 아키텍처 : i586

CPU를 의미하는데, 이 파일이 설치 가능한 CPU를 의미한다.

 


<RPM 명령어>

rpm [옵션] [패키지파일]

 

U : 기존에 패키지가 설치되어 있지 않다면, 설치를 하고 기존에 패키지가 설치되어 있다면 업그레이드를 한다.

v : 설치과정을 출력

h : 설치진행과정을 특수문자"#"으로 표시한다.

e : 설치된 rpm삭제

qa : 시스템에 패키지가 설치되어 있는지 확인

qf : 이미 설치된 파일이 어느 패키지에 포함된 것인지 확인

ql : 특정 패키지에 어떤 파일들이 포함되었는지 확인

qi : 패키지 상세정보 출력

 


<YUM이란?>

리눅스에서 RPM은 유용하다. 하지만 의존성 문제때문에 불편한 점이 있다. 이런 의존성 문제를 완전히 해결한 것이 yum이다. Yellowdog Updater Modified라고 단순히 RPM을 설치할 때 편리하게 해주는 툴이라고 생각하자.

rpm같은 경우는 사용자가 직접 설치하고자 하는 파일을 인터넷에서 *.rpm을 다운받아 의존성을 따져가며 차례대로 설치하여야 했다. 하지만 yum은 어떤 특정 rpm파일을 다운받고자 할 때, 의존성을 가지는 다른 *.rpm파일들도 알아서 인터넷을 통해 Fedorarpm 파일이 저장된 저장소(Repository)에서 설치하고자 하는 rpm파일을 다운로드 한 다음에 설치까지 자동으로 해준다. (물론 자동으로 인터넷을 통해 다운로드 하기 때문에 네트워크가 꼭 연결된 상태에서만 yum을 사용해야 한다.)

그렇다면 저장소의 URL은 어떻게 알아 차리고 자동으로 다운로드를 하는것일까?

그것에 대한 정보는 /etc/yum.repos.d/ 디렉토리에 저장되어 있다.

 


<YUM 명령어>

yum install [패키지 이름]

-> 패키지 설치 (기본 설치 명령어)

yum -y install [패키지 이름]

-> 무조건 yes로 모두 설치할 때 사용한다. 편리함

yum check-update

-> 현재 시스템에 설치된 패키지 중에서 업데이트가 가능한 패키지의 목록을 출력한다.

yum update [패키지 이름]

-> 업데이트 해준다.

yum remove [패지키 이름]

-> 삭제하는 명령어

 


<yum 설정파일>

yum/etc/yum.conf/etc/yum.repos.d/ 디렉토리가 있다.

/etc/yum.conf는 사용자들이 특별히 설정할 것이 없다.

/etc/yum.repos.d/ 디렉토리는 아까 말했다 시피 yum명령을 입력했을 때 검색하게 되는 네트워크 주소가 들어있다.

 

<실습>

이번 실습은 /etc/yum.repos.d/ 디렉토리에 있는 파일을 backup파일에 모두 옮겨놓고(네트워크 URL파일들을 임시로 지우는 것이다.)

fedora-local.repo라는 빈 파일을 생성해서 yum명령을 실행하며 자동으로 이 파일만 확인하게끔 할 것이다.

우선 /etc/yum.repos.d/에 있는 파일들을 backup 디렉토리를 만들어 옮겨놓자.

그 후에, fedora-local.repo에 있는 내용은 mount시켜놓은 cdrom에서만 rpm파일을 찾을 수 있게 해보자. (원래 네트워크로만 정의되어 있는 경로를 cdrom으로 축소시켜서 범위를 제한하는것이다.)



 

우선 네트워크가 안되는 상황을 연출하기 위해 ifdown eth0를 입력해 네트워크를 다운시키자.



 

이제부터 yum install명령어를 사용하여 패키지를 설치하면 cdrom에서만 찾아서 설치할 것이다.



LIST

<프로세스란?>

프로세스란 하드디스크에 저장된 프로그램이 메모리에 로딩되어 활성화 된것이다.

예로리눅스 웹 브라우저인 Firefox를 실행해서 화면에 나타난 상태를 프로세스라고 한다. (프로그램이 꼭 화면에 나타나지 않고 백그라운드로 실행되고 있는 것을 백그라운드 프로세스라 한다.)

 

 

<프로세스 용어정리>

1. 프그라운드 프로세스

Firefox등과 같이 실행하면 화면에 나타나 동작하는 프로세스를 말한다. , 화면에서 실행되는 것이 보이는 프로세스라고 생각하자.

2. 백그라운드 프로세스

실행은 되었지만, 화면에는 나타나지 않고 뒤에서 실행되는 프로세스를 말한다. 예로 바이러스 백신 같이 눈에는 보이지 않지만 실행되고 있는 것이다.

3. 프로세스 번호

프로세스가 실행될 때 번호가 부여되며, 그 고유번호가 곧 프로세스를 말한다. 프로세스 번호가 필요한 이유는 활성화된 프로세스를 메모리에서 강제로 퇴장시키기 위해서 프로세스 번호를 사용하기 때문이다.

4. 작업 번호

작동 중인 백그라운드 프로세스의 번호를 의미한다.

5. 부모 프로세스와 자식 프로세스

모든 프로세스는 부모 프로세스의 하위에 종속되어 실행된다.

예를 들어 firefox프로세스(자식 프로세스) X윈도우 프로세스(부모 프로세스) 아래에서 구동되어야 하는 것과 같다그렇다면 만약에 부모 프로세스가 죽게 되면 자식 프로세스는 어떻게 될까? 당연히 종료가 될 것이다.

X원도우 프로세스가 죽으면 firefox 프로세스는 죽게된다.

 

 

<데몬이란?>

데몬이란 서버 프로세스를 말한다. 방금 전에 프로세스에 대해서 설명했다. 프로세스에는 종류가 무지 많지만, 그중 서버 관련 프로세스 즉, 서비스해주는 프로세스를 말한다. 예를 들어 웹 서버 프로세스, 네임 서버 프로세스, DB 서버 프로세스 등을 데몬 이라고 부른다.데몬은 뒤에서 백그라운드로 작동한다.

데몬에는 Standalone 타입과 xinetd 타입의 데몬으로 나뉜다.

1. Standalone 타입

독자적으로 프로세스가 구동되어 서비스하는 데몬을 말한다. 웹 서버, DB서버, 센드메일 서버 등이있다. Standalone의 실행 파일은 /etc/init.d/ 디렉토리에 저장되어 있다.



/etc/init.d에 있는 파일들 모두에 데몬은 아니다. (거의 대부분!)

/etc/init.d/디렉토리에 있는 데몬들은 부팅 시에 자동 실행 여부를 지정할 수 있는데, system-config-services명령으로 확인하면 /etc/init.d/ 디렉토리에 있는 데몬들이 올라가 있는 것을 확인할 수 있다.

메모리상에 항상 작동되어 있어야 한다. 이렇게 자주 호출되는 데몬들은 Standalone타입의 데몬으로 처리하면 용이하지만 자주 사용되지 않은 데몬들까지 Standalone으로 처리하여 사용하면 시스템 자원의 낭비를 가져올 수 있다.


데몬 실행 및 종료 명령어)

service [데몬이름] start - 데몬 시작

service [데몬이름] stop - 데몬 중지

service [데몬이름] restart - 데몬 재시작 (종료했다가 다시 킴)

 

2. xinetd 타입

이 데몬은 수퍼데몬이라고 한다. 평소에 메모리에 상주해있지 않고, 자기가 standalone으로 동작하는 데몬들을 제외한 데몬들에 대해 최고의 지휘권을 갖고있으면서, Standalone이외의 데몬들(xinetd타입의 데몬)을 실행시키기 위해선 이 수퍼데몬을 거쳐서 실행되어야 한다. 이런 데몬들을 관리하며, 서비스하도록 연결시켜주는 것이다. xinetd타입의 데몬으로 사용하기 적당한 데몬은 빈도수가 대체로 적은 데몬들이다. 만약 이런 데몬들을 항상 메모리에 구동시켜 놓으면 잘 사용하지도 않은데다가 메모리 낭비가 이어지기 때문이다.

, xinetd타입의 데몬은 평상시에 구동되지 않다가, 서비스를 요청할 때만 xinetd데몬이 알아서 구동 시켜주는 방식이므로 별도로 서비스를 가동시켜 줄 수는 없다.

xinetd의 설정파일은 /etc/inetd.conf에 있으며, xinetd타입의 데몬들은

/etc/xinetd.d/ 디렉토리에 있다.

xinetd타입의 데몬은 재시작 할 필요가 없으므로, 그 상위(xinetd타입의 데몬들을 관리하는 xinetd 데몬)xinetd데몬을 재시작 하는 것이다. 왜냐? 어짜피 xinetd가 관리하고 실행 시켜줄 것이기 때문에!

LIST

Inode?

 


사용자는 커널을 통하여 디스크의 파일을 접근하는데, 이를 위해 커널 내에는 현재 사용중인 파일에 대한 자료 구조를 갖고있다.


커널 내에서 파일 시스템과 관련하여 중요한 자료구조 중 하나가 바로 Inode이다.

Inode는 해당 파일에 대한 부분의 정보를 갖고 있다.

Inode에는 파일의 소유권 및 권한 여부에 대한 정보, 파일 내용이 들어있는 디스크 내의 물리적 주소, 파일의 링크 수형태, 크기, 만들어진 시간 등을 저장하고 있다.

파일을 생성할 때  inodei-list안에 만들어지며, inodeinumber와 파일이름이 디렉토리에 등록된다.

파일을 삭제할 때는 그 파일에 대한 inodw의 파일 링크수가 하나 감소되고 디렉토리 entry상에는 해당 파일의 inumber0으로 변한다.

inode의 파일 링크수가 0이 되면 파일의 디스크 블록은 free가 되며 inodedellocate상태가 된다.

 

쉽게 말해, 하드디스크에는 수많은 파일이 저장되어 있다. 그런데 사용자가 컴퓨터에게 "! a라는 파일 좀 열어봐"라고 명령을 했을때, a라는 파일을 찾는 일은 파일 시스템이 맡아서 한다. 윈도우에서는 FAT, NTFS등을 사용하고 리눅스에서는 ext2, ext3, reiser... 을 사용한다파일시스템은 시스템에 존재하는 모든 inode를 가진다. 그리고 inode는 파일 하나하나에 대한 정보를 가지고 있다. 그래서 이 inode 를 따라가면 파일이 있게 된다.



 


하드링크란?

디렉토리에 그 파일에 대한 새로운 이름이 등록되고 inumber는 본래 있던 파일의 inumber가 복사(동일한 inode를 사용) 된다.

이때 복사되는 파일의 inode에서 파일의 링크수가 하나 증가된다.

 

심볼릭 링크란?

디렉토리에 그 파일에 대한 새로운 이름이 등록되고 새로운 inode를 생성하며 inode원본 파일을 연결한다. 심볼릭 링크의 경우 원본 파일의 주소가 저장되어 있으므로 원본 파일의 위치가 변경되면 심볼릭 링크는 사용할 수 없게 된다.(오류 발생)



<실습>

basefile이라는 파일을 만들고 하드링크와 심볼릭 링크 파일을 만들겠다.

inode가 다른 것을 확인한 후, 파일을 옮겼을때 어떻게 동작하는지 알아보겠다.



 

위 그림을 보면 하드링크의 inode 심볼릭 링크의 inode 원본 파일과 차이가 나는 것을 알 수 있다.


 

test파일을 상위 디렉토리로 옮긴 후, softlink의 내용을 보려고 했지만 오류가 난다.



LIST

GRUB부트 로더는 부팅에 관련된 정보를 담당한다

원래 리눅스의 부트로더는 LILO가 사용되었지만페도라에서는 GRUB 부트로더를 제공한다.

LILO GRUB의 차이점 (GRUB가 더 좋다는 의미)

1. 부트 정보를 사용자가 임의로 변경 가능

2. 다른 운영체제와 멀티 부팅이 가능

3. 대화형 설정을 제공

4. 커널의 경로 및 파일 이름만 알고 있으면 부팅 가능

 

GRUB의 설정파일은 /boot/grub/grub.conf파일에 있다. 링크파일은 /etc/grub.conf이다.

그렇다면 grub.conf파일에 대해서 알아보자.



 

1. default=0

부트 순차번호이다. 멀티부팅인경우 기본으로 부팅할 OS의 레이블 번호를 선택한다 (기본 0)

2. timeout=0

여기서 지정한 시간이 경과하면 default항목에 설정된 OS로 부팅이 된다. 다른 OS로 부팅하고 싶다면 gap을 줘서 grub창이 뜰 때, 아무키나 누른 후 부팅하고 싶은 OS로 부팅하면 된다

3. splashimage=(hd0,0)/grub/splash.xpm.gz

부팅 이미지 파일을 지정한 부분이다. hd0은 첫번째 하드디스크에 첫번째 파티션에 있다는 것이다.

4. hiddenmenu

grub부트 로더를 보여주지 않는 설정인데 지우면 부트 로더 화면이 처음에 보인다.

5. title Fedora(2.6.29.4-167.fc11.i386.PAE)

title은 부팅되는 부트 엔트리를 의미한다.

root(hd0,0)

 /boot 파티션이 저장된 장치(/dev/sda1)을 의미한다.

kernel ~ quiet에서 kernel 다음에 나오는 것은 부팅될 커널 파일이다. /vmlinuz~PAE까지...

roRead Only로 루트 파티션을 마운트 하라는 의미이다.

quiet는 부팅 시 메시지를 화면에 출력하지 않도록 설정하는 것이다. 그렇기 때문에 부팅 시 화면 아래에 막대만 보인것임.

initrd /initrd-2.6.29.4-167.fc11~

initrd이미지가 있는 파일 이름을 나타낸다. /boot디렉토리에 있음

 

<실습>

GRUB 부트 로더에 암호를 설정해서 아무나 부트 로더에 손을 대지 못하도록 암호를 설정해보자.





먼저, /boot/grub/grub.conf 파일을 열어서 timeouthiddenmenu를 바꿔보자.

그 후 암호를 설정해보자. 어디서? grub에서!





이렇게 암호를 md5 암호체계로 만들었다

저 암호화된 것을 복사하여 grub.conf파일에 붙여넣기 한다.



 

이렇게 되면 아무나 비밀번호를 알지 않는 이상 부트로더를 변경할 수는 없을것이다.



LIST

+ Recent posts