EnJinnier

Linux Final Lab 본문

카테고리 없음

Linux Final Lab

공학도진니 2025. 1. 24. 18:03

다음의 실습들을 직접 해보면서 리눅스를 이해하자.

 

참고 방식

1. Red Hat 공식문서(리눅스)

2. AWS 공식 문서

3. 명령어 help 보는 습관

4. 블로그(구글링) - 최신 버전 아닐 수 있음 주의 -> 블로그로 이해하고 공식문서 봐도 됨. 

 

기본 세팅

  • Region : ap-northeast-2
  • AMI ID : ami-01c2597f1a6fac880 (Linux Final Lab v2024.10.04)
  • Instance type : t2.medium
  • IGW 혹은 NAT GW 사용 환경
  • 문제에 지정된 계정 외에는 모든 작업은 root 로 수행이 됩니다.

 

1. 인스턴스 호스트이름 변경하기 - server1.linux.dom 으로 인스턴스 hostname 을 변경하시오. 

sudo hostnamectl set-hostname server1.linux.dom
sudo vi /etc/hosts
127.0.0.1 server1.linux.dom server1

#hostname 입력시 확인 가능

 

참고

더보기

 

2. /dev/xvdb 에 128M, 100M, 256M, 200M 4개의 파티션을 생성하시오.

#디스크 확인
lsblk

#gdisk 명령을 실행하여 파티션을 생성
gdisk /dev/xvdb

 

수행 결과

  • (2) 문항에서 생성한 128M, 100M, 256M 3개의 파티션을 이용하여 아래와 같이 VG를 생성하시오.
    • VG Name: testvg 
    • PE Size: 10 MB
  • VG : Volume Group(볼륨 그룹)
    • 파티션으로 PV(physical volume)를 생성한후 PV들을 묶어 VG를 생성해야 한다.

PV 생성
VG 생성 ( PE 사이즈 -s 옵션으로 설정)
상태 확인

더보기
  • testvg 에 아래와 같은 정보로 파일시스템을 구성하시오.
    • LV Name : test_lv
    • LE(Logical Extent) : 20
    • Filesystem type : ext4
    • Mount Point : /exports/test
    • 해당 파일 시스템은 재부팅 후에도 mount 가 되어야합니다.
  • LE - LV가 갖는 일정한 블록. LV의 기본 할당 단위
  • LE의 용량은 PE의 용량을 따라감. 따라서 -L 옵션 사용시 용량 지정, -l 옵션 사용시 LE의 개수 지정이 됨

lv 생성
상태 확인

- 파일 시스템 생성

: 논리 볼륨에 대해 ext4 파일 시스템을 갖도록 포맷한다.

# lvdisplay 에서 나오는 LV Path를 ext4 타입으로 파일시스템 포맷 한 후 /home 에 마운트 합니다.

 

mkfs.ext4 [/dev/vg/lv]
mkfs.ext4 /dev/testvg/test_lv

 

- 마운트 포인트 생성 

# 마운트 포인트 생성
$ sudo mkdir -p /exports/test

# 마운트
$ sudo mount /dev/testvg/test_lv /exports/test

# 마운트 확인
$ df -h

 

- 영구 마운트 설정 

 

  • 해당 파일 시스템은 재부팅 후에도 mount 가 되어야합니다. -> 영구 마운트를 설정하여 리부트하고나서도 마운트가 . 잘되는지 확인해야 함
# 디바이스 UUID 확인
$ sudo blkid /dev/testvg/test_lv

# /etc/fstab 편집
$ sudo vi /etc/fstab

# 아래 내용 추가
UUID=<UUID값> /exports/test ext4 defaults 0 0
(UUID값 대신 /dev/testvg/test_lv 를 넣어도 되긴 함. 다만 이렇게 하면 디스크 이름이 변경될 시 문제 발생)

#리부트 후 확인
reboot
lsblk


여기까지가 LVM을 구성하는 과정이었다.

 

 

5. 그룹이 sysadm 인 사용자 lab1, lab2 계정을 생성하시오.

사용자 계정 및 그룹을 생성하여 관리해보기

  • sysadm 그룹의 gid 는 3999 입니다.
  • sysadm 그룹에 속하지 않은 사용자 lab3 을 생성하시오. 단 해당 사용자는 로그인을 할 수 없습니다.
  • 모든 사용자의 비밀번호는 amazonkr 입니다.

로그인이 안되게 할건데 왜 유저를 생성하는가?

-> 로그인은 안되지만 프로세스는 돌릴 수 있기 때문에 로그인이 필요없는 유저는 로그인을 보안상 다 막아놓음

# GID 지정하여 생성
groupadd -g 3999 sysadm

#user 생성
useradd -g 3999 lab1 
useradd -g 3999 lab2
useradd lab3

#비밀번호 설정/변경
passwd lab1

#사용자 로그인 제한 
usermod -s /sbin/nologin lab3
또는 생성부터 useradd -s /usr/sbin/nologin lab3

 

추가정보) # 계정 잠금/잠금해제
usermod -L username  # 잠금
usermod -U username  # 잠금해제

 

6. http://stg.linux.dom:5000/kernel-5.10.224-212.876.amzn2.x86_64.rpm 을 이용하여 server1.linux.dom 의 커널을 업데이트하시오.
(재부팅 후, 신규 커널로 부팅이 되야되고 기존 커널은 유지가 되어야 합니다.)

 

#wget으로 파일 다운로드
wget http://stg.linux.dom:5000/kernel-5.10.224-212.876.amzn2.x86_64.rpm
yum install kernel-5.10.224-212.876.amzn2.x86_64.rpm (커널 다운로드)
또는 처음부터 
yum install http://stg.linux.dom:5000/kernel-5.10.224-212.876.amzn2.x86_64.rpm

#부팅 가능한 커널 버전 확인 
grubby --info=ALL | grep ^kernel

#기본 부팅 커널 버전 확인
grubby --default-kernel

 

 

7. lab1 계정으로 아래와 같이 cron job 생성하시오.

  • 매주 금요일 16시 33분에 job 이 실행이 됩니다.
  • 스크립트 : http://stg.linux.dom:5000/lab1_cron.sh
  • 문제에서 요구한 cron job 만 (주석도 불가능) 선언 되어야합니다.
  • 스크립트 내용 :
    • echo "[CRON_TESTD] :$(date)" >> /home/lab1/cronfile

 

크론 잡이란 리눅스 시스템에서 일정 시간 혹은 일정 순간에 뭔가를 실행할 일이 있을 때 미리 설정해두는 작업이다.

이렇게 설정해두면 그 시간에 서버에 들어가서 . 할필요 없이 crontab 시스템을 활용해 쉽게 처리 가능하다.

/#crontab 사용법 확인 
cat /etc/crontab

#wget으로 스크립트 저장 및 위치 이동
mv /root/lab1_cron.sh /home/lab1/

#실행권한 주기
chmod u+x lab1_cron.sh

#lab1으로 접속
sudo su lab1

#crontab 편집기 열기
crontab -e

#매주 금요일 16시 33분에 job 이 실행
33 16 * * 5 /home/lab1/lab1_cron.sh

#job 등록 확인
crontab -l

 

8. time.windows.com 로 시간이 동기화 되도록 설정하시오.

#파일 열고 아래 문구 추가
vi /etc/chrony.conf
server time.windows.com iburst

#재시작 
systemctl restart chronyd

#확인
chronyc -N

 

9. http://stg.linux.dom:5000/example.html 을 이용하여 nginx 웹서비스를 구성하시오.
(웹서버의 메인 페이지를 example.html 파일로 설정하고 파일 명은 수정이 가능하지만, 파일 내용은 수정을 하면 안됩니다.)

#설치
amazon-linux-extra install nginx1

#nginx 활성화
systemctl enable --now nginx

#상태확인 
systemctl status nginx

#nginx의 홈디렉토리로 이동: /usr/share/nginx/html/
cd /usr/share/nginx/html/

# index.html을 example.html로 변경
wget http://stg.linux.dom:5000/example.html
mv example.html index.html

 

10. labuser 사용자를 아래 정보를 기반으로 생성하시오.

  • UID : 1234
  • Primary group : sysadm
  • Supplemetary group : wheel
  • Password : amazonkr
#유저 생성 -g : primary group -G: 보조 그룹
useradd -u 1234 -g sysadm -G wheel labuser

#유저 상태 확인
id labuser

 

11. /dev/xvdb 에 신규 파티션을 추가해서 120M 크기의 SWAP 영역을 생성하시오. 
(생성된 SWAP 은 인스턴스가 재부팅 후에도 자동으로 활성화하도록 설정하시오.)

처음에 extend파티션을 끝까지 잡아놔야만 함.(주 파티션은 최대 4개)
fdisk /dev/xvdb

새로운 파티션을 생성할때 디스크를 사용중이라면 오류가 뜨거나 디스크가 보이지 않을 수 있음
이때 재부팅하거나 partprobe하면 디스크가 보임
partprobe

mkswap /dev/xvdb6
UUID 복사 및
vi /etc/fstab 수정
UUID swap swap defaults 1 1

#swap 활성화
swapon -a 

#swap 상태 확인
swapon -s

 

12. /root/swapfile 이름 으로 200MB swapfile 을 생성하고 SWAP 영역을 추가하시오.
(생성된 SWAP 은 인스턴스가 재부팅 후에도 자동으로 활성화하도록 설정하시오.)

#파일 생성
dd : 디스크 관련 명령어
dd if=/dev/zero of=swapfile bs=200 count=1

#확인
du -h *

#swap 생성
mkswap /root/swapfile

#권한 낮추기
chmod 600 /root/swapfile

#fstab 설정
vi /etc/fstab
/root/swapfile swap swap defaults 1 1 (구문 추가)

 

13. /root/word 안에 full 이라는 단어가 들어간 라인을 /root/word.found 에 저장하시오.

  • 소문자 "full" 이라는 단어가 포함된 라인만 추출합니다. 그 외 단어는 제외합니다.
마우스를 쓰지않고 추출해보자
grep으로 full단어를 찾아 리다이렉션으로 바로 found 파일로 넣어줄 수 있음
이때, >가 1개이면 찾은 문장만 넣고 >>가 2개이면 이어붙여서 넣음

cat word | grep " full" > word.found

 

14. /usr 하위에 `labuser` 계정의 권한을 가진 파일을 찾아 해당 목록을 /root/lab1.filelist 에 저장하시오.

  • 명령어 한줄로 해결하시오.
#find 사용
find /usr -user labuser > lab1.filelist

 

15. /usr/local 을 /root/backup.tar.gz 이름으로 아카이빙 하시오.

#백업하기 - tar는 권한도 같이 백업받을 수 있음
tar cvzf backup.tar.gz /usr/local

 

16. /data/ 파일시스템을 (2기가)로 증설 하시오.

growpart /dev/xvda 2 (2는 파티션 넘버임)

 

17. server1.linux.dom 에는 nfs 파일 시스템이 존재합니다. 아래 정보에 맞게 mount 하고 재부팅 후에도 사용 가능하게 설정하시오.

  • nfs server hoatname : nfs.linux.dom
  • nfs server side mount point : /nfs
  • client side : /exports/nfs
mkdir /exports/nfs
showmount -e nfs.linux.dom
mount nfs.linux.dom 



nfs.linux.dom:/nfs /exports/nfs nfs _netdev 1 1

 

 

어렵당........ 

리눅스 공부 열심히 해야겠다