본문 바로가기

IT 관련정보/리눅스

리눅스 기본 이론(1)

리눅스 정리 1일차




* 리눅스 시스템 부팅과정


1)Power On


2)ROM BIOS에서 지정된 부트 드라이브로 부팅 시작(F2/DEL)

1st USB

2nd CD-ROM

3rd HDD


3)부트섹터 프로그램인 부트로더 작동(/LILOGRUB)


4) 커널 이미지 적재(/boot/vmlinuz)


5)루트 파일시스템 마운트


 => 커널 에러 발생시 시스템을 보호하고자

        루트파일시스템은 읽기전용으로 마운트된다.


 ==> mount -o remount,rw /     복구모드 작동시



6) 시스템 초기화 프로그램 작동(init 프로세스)


7) Login: 프롬프트가 나타난다.

    (X-Window일 경우 윈도우 로그인화면)


------------------------------------------------------------------------------------------

* inittab 파일 확인

루트 파일시스템이 마운트된 후 프로세스 1번(init)에 의해서

리눅스 시스템의 초기화가 이루어진다.

init 프로세스는 로그인 프롬프트가 나타나기전에

- 파일시스템 점검

-서비스 프로세스 관리

-가상 콘솔 접속 관리

-실행레벨관리 등

사용자의 리눅스 사용 환경을 위한 초기화 작업들을 실행한다.


init가 실행되면 제일 먼저 읽어들이는 파일이 /etc/inittab 파일이다.


vi /etc/inittab

#

# inittab       This file describes how the INIT process should set up

#               the system in a certain run-level.

#

# Author:       Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>

#               Modified for RHS Linux by Marc Ewing and Donnie Barnes

#


# Default runlevel. The runlevels used by RHS are:

#   0 - halt (Do NOT set initdefault to this)

#   1 - Single user mode

#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

#   3 - Full multiuser mode

#   4 - unused

#   5 - X11

#   6 - reboot (Do NOT set initdefault to this)

#

id:5:initdefault:


# System initialization.

si::sysinit:/etc/rc.d/rc.sysinit


l0:0:wait:/etc/rc.d/rc 0

l1:1:wait:/etc/rc.d/rc 1

l2:2:wait:/etc/rc.d/rc 2

l3:3:wait:/etc/rc.d/rc 3

l4:4:wait:/etc/rc.d/rc 4

l5:5:wait:/etc/rc.d/rc 5

l6:6:wait:/etc/rc.d/rc 6


# Trap CTRL-ALT-DELETE

ca::ctrlaltdel:/sbin/shutdown -t3 -r now


# When our UPS tells us power has failed, assume we have a few minutes

# of power left.  Schedule a shutdown for 2 minutes from now.

# This does, of course, assume you have powerd installed and your

# UPS connected and working correctly.

pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"


# If power was restored before the shutdown kicked in, cancel it.

pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"



# Run gettys in standard runlevels

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

3:2345:respawn:/sbin/mingetty tty3

4:2345:respawn:/sbin/mingetty tty4

5:2345:respawn:/sbin/mingetty tty5

6:2345:respawn:/sbin/mingetty tty6


# Run xdm in runlevel 5

x:5:respawn:/etc/X11/prefdm -nodaemon


-----------------------------------------------------------------------------------------

부트로더 설치 (grub)


yum install -y grub


cp /usr/share/grub/i386-redhat/*   /boot/grub/



vi /boot/grub/grub.conf

default=0

부트로더에서 기본적으로 부팅되도록 하는 부트엔트리값이다.

0은 첫번째를 의미한다.


timeout=5

키보드 입력을 받을 대기시간으로 기본단위는 초이다.


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

GRUB의 배경이미지


hiddenmenu

GRUB 메뉴를 숨긴다.


title CentOS (2.6.18-164.el5) ===> 부트 엔트리 설명문

        root (hd0,0)  (하드디스크디바이스명, 부트파티션명)

        kernel /vmlinuz-2.6.18-164.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet

        initrd /initrd-2.6.18-164.el5.img


GRUB 패스워드 변경하기


grub> md5crypt


password: 설정할 패스워드 입력


md5 $12jkld93r~~~Faerkefjdfe


위의 암호화값을 vi /boot/grub/grub.conf 파일의default=0 아래부분에 붙여넣기 한다.


default=0

password  --md5 암호화값을붙여넣기한다.


-------------------------------------------------------------------------------------------


사용자 계정관리


grep root /etc/passwd


1번필드:2번필드:3번필드:4번필드:5번필드:6번필드:7번필드

User             X         UID       GID       설명   홈디렉토리  로그인쉘


useradd  -c 설명

               -d 디렉토리

               -e 만료일자

               -f 남은일수

               -u UID

               -s 로그인쉘

               -n 사용자 계정 추가모드를 사용하지 않는다.

               -G 기본그룹이외의 다른 그룹을 지정할 때(2차그룹지정)

               -b 사용자의 기본 홈 디렉토리를 변경

               -m -k skel 디렉토리를 변경하고자 할 때

               -M 사용자 계정 경로없이 계정생성



useradd 명령 실행 시 동작과정


1) useradd 명령어 실행


2) /etc/default/useradd, /etc/login.defs 파일 설정 참고

                                            <상세기록>

3) /etc/passwd, /etc/greoup 파일에 각 계정 추가


4) /home 디렉토리에 사용자 계정 생성


5) /etc/skel 디렉토리에 잇는 파일을 사용자 계정 디렉토리로 복사


6) /var/mail 디렉토리에 사용자 계정 파일 생성



*계정정보를 변경하고자 할 때

usermod  -c 설명

               -d 디렉토리

               -e 만료일자

               -f 남은일수

               -u UID

               -s 로그인쉘

               -n 사용자 계정 추가모드를 사용하지 않는다.

               -G 기본그룹이외의 다른 그룹을 지정할 때(2차그룹지정)

               -b 사용자의 기본 홈 디렉토리를 변경

               -m -k skel 디렉토리를 변경하고자 할 때

               -M 사용자 계정 경로없이 계정생성


Q> 소유자가 없는 파일이 존재할 수 있다?


useradd hahaha

su hahaha

cd /tmp

whoami   ---> hahaha 확인

touch 123.txt

ll 123.txt

-rw-r--r-- 1 hahaha hahaha 0 

exit

useradd hohoho

pwd

/tmp

userdel -r hahaha

ll 123.txt

-rw-r--r-- 1 501 501 0   <------ 이 파일이 소유자가 없는 파일이다.

chown hohoho.hohoho 123.txt

cat > 123.txt

test

저장

ll 123.txt

-rw-r--r-- 1 hohoho hohoho 0



Q>사용자 홈디렉토리 없이 /etc/passwd파일에 계정만 생성하기

계정명: uhaha


==> useradd -M uhaha


계정생성시 확인사항

1./etc/passwd

2./etc/shadow

3./home

4./var/mail

5./etc/group


Q> hahaha 계정의 로그인사용을 잠시 중지하려면?


1) usermod -L hahaha or  passwd -l hahaha

2) usermod -e 어제날짜 hahaha

3) /etc/passwd 파일의 두번째필드를 *기호로 수정한다.

    (로그인 기능만 중지시킨다)

    ==>* 기호 제거후 패스워드 재설정



Q> wow 계정을 생성하되 로그인은 불가능하도록 설정하려면?


1) useradd -s /sbin/nologin wow

2) useradd -s /sbin/false wow




Q> hohoho 계정의 패스워드를 변경할 수 있는 방법을 서술하시오

passwd 계정명

1)자기 자신이 패스워드를 변경할 때

2)관리자가 변경할 때



Q>passwd는 관리자 전용명령이다. 유저가 어떻게 passwd 명령으로

     자신의 패스워드를 변경할 수 있는지 서술하시오.


which passwd


ll passwd




*패스워드 변경시 유의사항

1. 패스워드는 숫자로만 지정해서는 안된다.

2. 패스워드는 사전적인 단어로 지정해서는 안된다.

3. 패스워드는 6자이상으로, /etc/login.defs파일에 명시되어 있다.

4. 패스워드는 이전에 사용하던 문구와 동일해서는 안된다.

5. 패스워드는 복잡성을 만족하여 8자이상으로 설정한다.



*/etc/shadow 파일 사용 안하기.


pwunconv(/etc/shadow파일을 사용하지 않는다)


==>/etc/shadow

==>/etc/passwd


passwd hahaha



pwconv (/etc/shadow파일을 사용한다)



Q> 새도우패스워드가 풀려있을 경우 해결책은?


pwunconv 인 경우에 해당된다.


==> 관리자가 임의로 해제하지 않았다면 크래킹에 의한 공격이므로 시스템을 재설치해주어야한다.




*/etc/shadow 파일 구조


1필드:2필드:3필드:4필드:5필드:6필드:7필드:8필드:9필드



1필드 계정명

2필드 암호화된 패스워드

3필드 최종 패스워드 변경일

4필드 패스워드 변경 최소일수

5필드 패스워드 변경 유예기간

6필드 패스워드 변경 경고일수

7필드 계정 사용 불가 날짜

8필드 계정 만료일

9필드 예약



*/etc/shadow 파일 변경 명령어 --> chage


chage -l 설정 확인

          -m   패스워드 변경할 수 있는 최소일수로,

                   이 값이 0이면 아무때나 변경이 가능하다.

          -M 유효한 패스워드 최대 일 수

          -W 사용자가 패스워드를 바꿀때까지 경고할 일 수

          -I 패스워드유효기간이 경과된 후 사용자계정이

                   비활성화될 일 수

          -E 사용자가 계정을 사용할 수 있는 유효기간(연/월/일)

          -d 사용자가 패스워드를 변경한 마지막 일자



Q> hahaha 계정의 패스워드를 변경할 수 있는 일수를 15일로 제한하고, 만료 7일전 부터 패스워드 변경을 요구하고 2016년 4월 20일자로 제한하도록 설정하시오.


chage -M 15 -E 2016/04/20 hahaha


chage -l hahaha

마지막으로 열쇠글을 바꾼 날            : 4월 18, 2016

열쇠글 만료                                           : 5월 03, 2016

열쇠글이 비활성화 기간                      :안함

계정 만료                                               : 4월 20, 2016

열쇠글을 바꿀 수 있는 최소 날 수     : 0

열쇠글을 바꿔야 하는 최대 날 수      : 15

열쇠글 만료 예고를 하는 날 수          : 7


계정이 로그인할 경우 만료예고 날짜에 해당이 되면 로그인시 만료일을 보여준다.


--------------------------------------------------------------------------------------------


사용자 프로파일(/etc/profile, /etc/bashrc, ~/.bashrc, ~/.bash_profile)


1. /etc/profile

시스템 사용자 전체에 환경변수를 적용할 설정을 담고 있다.

이파일에는

-경로 환경변수 PATH

-사용자 USER

-로그인 사용자 LOGNAME

-사용자 메일박스 MAIL

-호스트네임 HOSTNAME

-히스토리파일크기 HISTSIZE

-INPUTRC등의 환경변수를 정의한다.




1)경로 환경변수 PATH


실행파일이 있는 경로를 지정한다.

경로변수는 사용자 마다 PAHT=$1:$PATH 형태로 

사용자의 각 프로파일인 ~/.bash_profile에서 지정한다.



2)사용자 USER

사용자가 로그인 하게 되면 id -un 명령으로 확인한다.




3)사용자 메일박스 MAIL

사용자가 사용할 메일박스(저장소)를 지정한다.

/var/mail/계정명으로 기본설정된다.




4)히스토리파일크기 HISTSIZE

콘솔이나 터미날창에서 작업한 모든 명령들이 ~/.bash_history 파일에 저장된다. 기본값으로 1000개의 명령이 저장된다.



5)호스트네임 HOSTNAME

/etc/sysconfig/network 파일에서 호스트네임으로 지정된 이름을 

/bin/hostname으로 정의한다.

호스트네임 변수는 사용자가 로그인하였을 경우 쉘프롬프트의 구조에서 적용된다




6) 단축키 변수 INPUTRC

터미널 창이나 emacs에서 사용할 단축키에 대해 /etc/inputrc에 정의되어 있다.

터미널창에서 사용할 단축키를 시스템 전체 사용자에게 지정하려면 이파일에 해당 단축키 변수를 지정해주면 된다.



7) export

지정한 환경 변수들이 적용되도록 설정하는 명령어이다.


ex)/usr/123 디렉토리를 추가 경로설정할 때


export PATH=$PATH:/usr/123



2. /etc/bashrc

사용자가 로그인하였을 경우 사용자의 계정에 있는 .bashrc 파일에 의해서 실행된다. 사용자에게 적용할 앨리어스와 쉘 환경값을 설정하고 있다.

로그인한 사용자가 파일을 생성할 때 기본 umask 값을 설정한다.

사용자가 로그인하였을 경우 갖는 프롬프트의 형태를 설정한다.




3. 사용자 프로파일 ~/.bash_profile

사용자의 ~/.bashrc 파일을 읽어 들여 실행되도록 하며 실행 경로 환경변수를 적용해준다.

새로운 경로를 추가할 경우

PATH=$PATH:추가할 경로1:추가할 경로2




4. 사용자 설정파일   ~/.bashrc

~/.bash_profile에 의해서 실행되며, ~/.bashrc에 의해서 /etc/bashrc 파일이 실행된다.



사용자 설정파일 상관관계


/etc/profile  --> ~/.bash_profile  --> ~/.bashrc  --> /etc/bashrc


------------------------------------------------------------------------------------------


로그인관리


PAM (Pluggable Authentication Modules)

장착식 인증 모듈 패키지를 이용하여 사용자의 로그인을 제어한다.


http://www.kernel.org



Q> 특정 계정 로그인 허용 및 불허 정책

*로그인허용할 때

vi /etc/pam.d/login

auth  required  pam_listfile.so  item=user  sense=allow  file=/etc/loginuser  onerr=succeed



vi /etc/loginuser

root

hahaha

hohoho

wow



*로그인 불허할 때

vi /etc/pam.d/login

auth  required  pam_listfile.so  item=user  sense=deny  file=/etc/nologinuser  onerr=succeed



mv /etc/loginuser /etc/loginuser.bak

vi /etc/nologinuser

hahaha

hohoho

wow


**주의**

/etc/loginuser파일과 /etc/nologinuser 파일이 공존할 경우

/etc/loginuser파일이 먼저 작동하여 로그인 불허정책이 동작하지 않을 수 있음에 주의한다.




Q> su 명령과 su - 명령의 차이



Q> su - 명령의 사용자 제한하기


vi /etc/pam.d/su

auth   required   pam_wheel.so  use_uid         주석제거.



vi /etc/group

wheel:x:10:root,hahaha,hohoho


위 파일에 지정한 계정을 제외한 나머지 기타 계정들은 su 명령을 사용할 수 없다.


vi /etc/pam.d/su

auth   required   pam_wheel.so  debug   use_uid


debug 명령을 추가하여 로그 기록을 남긴다.

저장위치 /var/log/secure 파일에 로그가 저장된다.


tail -20 /var/log/secure