bxm's IT Story
Linux #7 - Root password 복구(Grub)와 SELinux 보안 본문
## 루트 패스워드를 잊어버렸을 때 복구 ##
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]
## [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
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에 비밀번호를 설정하여, 앞의 실습에서 아무나 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
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
## 이제 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
'서버 > Linux' 카테고리의 다른 글
SAMBA (Win7->Linux // Linux->Win7) (0) | 2021.07.07 |
---|---|
서버 구축 - Apache Web Server (0) | 2021.07.02 |
Linux #6 - 리눅스 압축 도구 (0) | 2021.06.25 |
Linux 이론#6 - User와 Group 관련 명령어 / chmod (허가권,소유권) / Process(bg, fg, kill) (0) | 2021.06.24 |
Linux 이론#5 - Shell, 기타 명령어 (0) | 2021.06.23 |