bxm's IT Story

Linux #7 - Root password 복구(Grub)와 SELinux 보안 본문

서버/Linux

Linux #7 - Root password 복구(Grub)와 SELinux 보안

bxmsta9ram 2021. 7. 1. 14:13

◈ 시스템 암호설정과 응급복구.pdf
0.07MB

## 루트 패스워드를 잊어버렸을 때 복구 ##

su

init 6 + e(딸깍 딸깍)

1) ro -> rw로 변경       ## read only를 read write로 바꾸는것(쓰기 가능)

2) rhgb quiet LANG=ko_KR.UTF 줄을 싹 날리고 init /bin/bash으로 변경

3) Cntl+x  -  [passwd(비밀번호 설정)]  -  [touch /.autorelabel]

비밀번호 재설정하는데 드럽게 까다롭다... 심플하지도 않아야하고, 8자리 이상이어야 한다. (평소비번 +1)

 

## [touch /.autorelabel]

 쉘 리눅스의 보안체계를 벗어나기 위함임!! 만약 이 명령어를 쓰지 않으면, password 변경된 것이 적용이 안된다!!

 touch => 내용이 없는 빈 파일 생성

 .autorelabel => 리눅스 접근 통제 시스템인 selinux 정책을 우회하는 파일

 

## exec /sbin/init

 이제 명령어를 다 썼으면 위 명령어로 재부팅하기!!

재부팅중.

 

## 기존의 비밀번호를 치니 틀렸다고 나옴!! 새로운 암호를 치니 root 권한으로 정상 진입 하였음.


## 누구나 Root Password를 변경할 수 없게 방지하기!! ##

 

## Grub 접근 보안 ##

 

 ## 부트 로더(boot loader) : 초기 적재 프로그램. 

 Grub 부트 로더란? : CentOS를 부팅할 때 처음 나오는 화면(아까 ro->rw 변경했던 화면!!)으로 운영체제가 시동되기 

                        이전에 미리 실행되면서, 커널이 올바르게 동작하기 위해 필요한 모든 작업을 마무리하고 최종적으로

                        운영체제를 시동시킨다. (운영체제를 시동시키기 전의 준비운동 과정)

   - 부트 정보를 사용자가 임의로 변경해 부팅할 수 있다. 즉, 부트 정보가 올바르지 않더라도 수정하여 부팅할 수 있다.

   - 다른 여러가지 운영체제와 멀티 부팅을 할 수 있다.

   - 대화형 설정을 제공하므로 커널 경로와 파일 이름만 알면 부팅이 가능하다.

 

   - Grub 파일의 위치 : /boot/grub2/grub.cfg <==> /etc/grub2.cfg == 관리자도 편집 안 할 만큼 중요한 파일이다.

                              /etc/default/grub 파일, /etc/grub.d/ 에 있는 파일을 편집하고 적용시에는 grub2-mkcocnfig 

                              명령어를 사용.

           ex) /etc/default/grub 파일을 편집 후, #grub2-mkconfig -o /boot/grub2/grub.cfg

 

 

Grub.cfg 파일이 있다.

 

less grub.cfg

 

less /etc/default/grub

내용 복사!!

 

GRUB_TIMEOUT=5

        ## -1일 경우에는 엔트리 선택시까지 대기.

        ## WINDOW 10과 리눅스로 총 2개를 깔면 "무엇으로 부팅할까요?" 물어보는데, 5면 5초동안 기다리겠다.

            10이면 10초동안 기다 리겠다. 라는 뜻임. 그런데 -1은 선택할 때까지 '무한정' 대기하겠다 라는 뜻임.

 

GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"

        ## 엔트리 앞에 붙을 배포판 이름. $ 자리에 배포판 이름이 들어감. 무엇으로 선택하시겠습니까? 할때의 이름.

        ## Windows 10 같은 이름     

 
GRUB_DEFAULT=saved

        ## saved : 기본적으로 이전에 선택한 엔트리로 부팅

        ## 0은 1번 엔트리, 1은 2번째 엔트리


GRUB_DISABLE_SUBMENU=true

        ## 서브메뉴 사용 여부

        ## true = 사용 안함

 

GRUB_TERMINAL_OUTPUT="console"

        ## Grub 화면 나올 장치 선택

        ## console = "모니터에 출력하겠다" 라는 뜻임.

 

GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet"

        ## 부팅시 콘솔에 전달할 파라미터

        ## 아까 우리가 'rhgb'부터 'UTF-8'까지 지우고 수정한 것과 'ro'를 'rw'로 바꾼 것이 파라미터 값임.

 

GRUB_DISABLE_RECOVERY="true"

        ## 메뉴 엔트리에서 복구와 관련된 사항을 표시

        ## true = 비활성화


## Grub 잠금 : 리눅스 보안 설정 ##

grub보안.txt
0.00MB

## 이번에는 Grub에 비밀번호를 설정하여, 앞의 실습에서 아무나 Grub을 편집할 수 있었던 문제점을 해결할 수 있다.

  1. vi /etc/grub.d/00_header

     - 문서 끝에 새로운 줄 추가

       ## 문서 끝이므로 GG 누르면 된다.

 

       cat << EOF

       set superuser="grubadmin"

       password grubadmin 1111

       EOF

  2. 변경사항 적용

     - grub2-mkconfig -o /boot/grub2/grub.cfg

  3. INIT 6를 통한 확인

     init 6 + e

     ## ID를 치라고 나옴.

     grubadmin

     1111

     을 쳐야지만 아까 초기의 비밀번호 변경하는 곳으로 접근이 가능함.


yum install nautilus*

## 엄청 많은 파일들이 설치가 되었다!!

 

 

nautilus

## 윈도우 탐색기랑 똑같음. 알집 풀 수도 있고, 파일도 그냥 윈도우처럼 들어갈 수 있다.


## SHLinux와 네트워크 서비스 ##

## 셀 리눅스

  - Security Enhanced Linux: 설치시에 새로운 보안 모델을 기본적으로 적용할 필요성이 대두되어 생겨난 일종의 방화벽

  - vi /etc/sysconfig/selinux

        * disabled - No SELinux policy is loaded

          SELINUX = enforcing

        * SELINUXTYPE = can take one of three two values:

 

   - 디렉토리나 파일 뒤에 '.'이 붙었으면, '셀 리눅스'에 인증 받았다는 뜻이다.

   - 셀리눅스 동작 확인 : # getsebool -a

   - 셀리눅스 활성화 및 비활성화

       setsebool [파일 및 디렉토리] on[off]  ==>  잘 동작 안함?

 

  1. SELinux에 적용한 보안 설정항목 : /etc/sysconfig/selinux

      - 강제(enforcing)

      - 허용(permissive)

      - 비활성화(disabled)

      * 일시적 허용

        # setenforce 0

        # setstatus

           Current mode :                           permissive

       

        # setenforce 1

        # setstatus

           Current mode :                            enforcing

 

  2. 네트워크 설정 파일

      /eyc/hosts                                   : IP 주소와 Host 이름을 매핑

      /etc/resolv.conf                             : DNS 서버 주소 설정

      /etc/sysconfig/network                    : 네트워크 기본 설정

      /etc/sysconfig/network-scripts/ifcfg-* : NIC 설정 파일(ifcfg-eth0)

 

 

 

## 셀리눅스 확인

 

## 셀리눅스 동작 확인

getsebool -a

이런식으로 동작하고 있다는 것을 보여준다.

 

mkdir /temp

cd /temp

ls -l

touch selinuxtest

## selinuxtest 라는 text 파일을 만들고,

 

chmod 777 selinuxtest

setsebool selinuxtest

getsebool selinuxtest

setsebool ./selinuxtest on

setsebool ./ on

setsebool ./ off

 

ls -l

 

cat > test

## 아무 내용이나 치고 cntl+z

 

cat > test

## 막 치고 cntl+d

 

ls -l

 

 

setsebool test on

 

man setsebool

 

getsebool

 

getsebool -a

 

setsebool test on

setsebool test off

chmod 777 test

setsebool test on

 

setstatus

 

setenforce 1

## set을 활성화?? 모르겠다...

 

 

vi /etc/sysconfig/selinux 에서

SELINUX=disabled 하면 SELINUX의 방화벽을 끄게 할 수 있음. 솔직히 놓쳐서 개망한 파트.


vi /etc/hosts


vi /etc/resolv.conf

## 여긴 DNS 관리하는 곳임. 여기서 아래의 문장을 추가해보자.

 

nameserver 168.126.63.1


 

vi /etc/host.conf

## multi on

## 지정한 도메인 주소가 Hosts 안에 있다는 뜻임.


vi /etc/sysconfig/network

## 들어가서 아래의 문장 추가 삽입

NETWORKING=yes

NETWORKING_IPV6=no

HOSTNAME=localhost.localdomain

## 아까 localhost.localdomain (-->호스트이름)


vi /etc/sysconfig/network-scripts/ifcfg-ens32

앞으로 위의 형광펜으로 칠해논 것 자주 쓸 것임. #을 앞에 붙여놨는데 의미는 잘 모르겠다.


정리를 하면!! 

## 3. 네트워크 설정

  - /etc/sysconfig/network-scripts/ifcfg-*

(여기서 항목별로 설명을 좀 하면)

DEVICE           // 인터페이스 장치명

BOOTPROTO    // 프로토콜 지정. static / dhcp

BROADCAST    // 브로드캐스트 IP 주소

HWADDR        // 하드웨어 주소(MAC)

IPADDR          // IPv4 주소

NETMASK       // 네트워크 마스크 주소(고정 IP 사용시)

NETWORK      // 네트워크 주소(고정 IP 사용시)

ONBOOT        // 부팅시 자동으로 NIC 활성화 여부

TYPE              // 데이터링크 계층의 타입 (주로 이더넷 사용)

GATEWAY       // 네트워크의 게이트웨이 주소를 입력한다.

 

  여기서 좀 주목할 것은 BOOTPROTO에서 STATIC 과 DHCP중 고르면 되고,

                                HWADDR에서 MAC 주소 넣어주면 되고..

 

 

네트워크를 [시작/정지]하려면 : /etc/init.d/network [start/stop]

           의 상태를 보려면      :                           [status]

                  재시작 하려면   :                           [restart]

 

ifconf 하면 현재 ip가 나오는데, 

ifconfig ens32 down  --> 이렇게 하면 down 되고,

ifconfig ens32 up      --> 이렇게 하면 다시 up 된다.

## 윈도우 랜카드 우클릭 사용 함/안함 이랑 똑같음. [up-사용함 / down-사용안함]

 

ifconfig

현재 IP

 

ifconfig ens32 192.168.100.100 netmask 255.255.255.0 broadcast 192.168.100.255

## 192.168.100.100 으로 네트워크 IP를 바꿈.

 

ifconfig


  4. 네트워크 시작과 중지 스크립트

     네트워크를 설정한 뒤 가장 중요한 작업은 네트워크를 시작하거나 중지하는 작업이 필요하다. 리눅스에서 모든

     서비스의 시작이나 중지, 확인하는 스크립트가 /etc/init.d와 /etc/rc.d/ionit.d 디렉토리에 존재한다.

     # /etc/init.d/network [start / stop / restart / status / reload ] 

 

5. ifconfig를 이용한 NIC 확인

     # ifconfig [interface] [up / down]

     # ifconfig [interface] [IP Address]

     # ifconfig [interface] [IP Address] netmask [mask] broadcast [addr]

         // NIC_IP, netmask, broadcast 모두 수동으로 지정할 경우

       ex) # ifconfig eth0 192.168.1.1 netmask 255.255.255.0 broadcast 192.168.1.0

셀리눅스와 네트워크 서비스.txt
0.00MB

 


## 이제 Route에 대해서!

  6. Route

    * 라우팅 테이블을 작성하거나 확인할 때 사용한다.

    * 라우팅 테이블은 패킷을 송신할 때 어떤 경로로 보낼지를 결정하는 방향 지시등과 같은 역할을 한다.

    # Route [Option] [Command] [Gateway]

    ex) route add -net 192.168.10.0 netmask 255.255.255.0 dev eth0

         route add default gw 192.168.10.2

      ★ 바로 위의 ifconfig를 이용한 NIC 확인해서 맨 마지막 예시와 문법이 비슷해서 헷갈릴 수 있음. 암기해야함!!

 

     * 옵션

             - v : 자세한 설명을 보여준다. (거의 사용하지 않음.)

             - net : 라우팅 테이블의 목표가 될 네트워크 영역

             - host : 호스트의 주소를 설정할 때 사용

             - add : 라우팅 테이블에 추가

             - del : 라우팅 테이블에서 삭제

             - target : 설정될 IP 주소

             - netmask NM : 특정 넷마스크를 설정할 때 사용

             - gw Gw : 네트웍/호스트가 사용하게 될 게이트웨이

             - dev if : 디바이스 이름 인터페이스를 정함

     

     * 라우팅 테이블 설명

             - Destination : 목적지 주소를 가르침

             - Gateway : 외부로 패킷을 포워딩 하기 위한 장치의 IP 주소

             - Genmask : 라우팅 항목의 넷 마스크

             - Flags

                    U : 인터페이스가 UP인 상태

                    H : 라우팅 경로를 통해 호스트로의 연결

                    G : 게이트웨이의 루트

                    D : 루트가 재지정되어 동적으로 생성

                    M : 라우팅 경로가 ICMP 리다이렉트 메시지를 통해 수정되었을 경우

## 패킷이 목적지로 가다가 특정 라우터에서 "이 길이 아닌가보다" 하면서 "경로를 다시 계산해봐" 하고 말해주는것

 

              - Metric : 다음 라우터와의 거리

              - Ref : 라우터에 대해 참조한 횟수 (몇번 참조했느냐?)

              - Use : 루트를 찾아본 횟수

              - Iface : 목적지로 패킷을 보낼 때 사용할 장치 (출구 인터페이스, 어떤 램카드를 쓸 것이냐?)

 

 

 

라우팅 테이블을 조금 만져보자! 

원래는 이렇게 하면 안된다.

route add -net 192.168.100.0 netmask 255.255.255.0 dev ens32

 

default-route 줄 때,

route add default gw 192.168.100.2 ?? 이거 놓침.

 

 

 

## 이제 다시 지우려면

route del -net 192.168.100.0 netmask 255.255.255.0 dev ens32

route del default gw 192.168.100.2

사라짐.