RHCSA9 연습/기출문제

Posted by Geuni's Blog on September 19, 2024

[Node1]

1、네트웍 설정

node1의 네트웍구성을 아래와 같이 변경하세요.

  • Host Name: node1.domain250.example.com
  • IPv4 address: 172.25.250.100
  • Subnet mask: 255.255.255.0
  • Gateway: 172.25.250.254
  • DNS: 172.25.250.254
1
2
3
4
5
6
7
8
9
10
11
12
13
# hostname변경 
hostnamectl set-hostname node1.domain250.example.com 

# connection정보 조회
nmcli con show
# 기존설정 조회를 통하여 옵션명 확인가능
nmcli con show 'Wired connection 1' |grep -E 'ipv4|autoconn'
# ipv4설정
nmcli con modify 'Wired connection 1' autoconnect yes ipv4.method manual ipv4.addresses 172.25.250.100/24 ipv4.gateway 172.25.250.254 ipv4.dns 172.25.250.254
# connection active (이미 up된 상태에서는 재구동 역할을 하게됨)
nmcli con up 'Wired connection 1'
# 변경여부 확인 
ip a

2、Yum 저장소 설정

YUM 기본 저장소를 아래와 같이 변경하세요.

아래와 같은 YUM 저장소가 사용가능합니다.

  • http://content/rhel9.0/x86_64/dvd/BaseOS
  • http://content/rhel9.0/x86_64/dvd/Appstream

YUM 기본저장소를 위에 제공되는 저장소를 사용하도록 시스템을 구성하세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vim /etc/yum.repos.d/rhel.repo

[BaseOS]
name = BaseOS
baseurl = http://content/rhel9.0/x86_64/dvd/BaseOS
enabled = 1
gpgcheck = 0

[Appstream]
name = Appstream
baseurl = http://content/rhel9.0/x86_64/dvd/Appstream
enabled = 1
gpgcheck = 0

# 변경여부 확인 
dnf repolist -v


혹은 dnf config-manager 사용가능, config-manager사용시 생성된 repo파일에 gpgcheck = 0 수동으로 추가해주도록.

1
2
dnf config-manager --add-repo 'http://content/rhel9.0/x86_64/dvd/BaseOS'
dnf config-manager --add-repo 'http://content/rhel9.0/x86_64/dvd/Appstream'

3. Debug SELinux

비표준 포트 82에서 실행 중인 웹 서버가 서비스 제공 시 문제를 겪고 있다. 다음 조건을 충족하도록 트러블슈팅을 하라 :

  • 시스템의 웹 서버가 /var/www/html에 있는 모든 기존 HTML 파일을 제공할 수 있어야 한다. (참고: 기존 파일의 내용을 삭제하거나 수정하지 말것)
  • 웹 서버가 포트 82로 서비스가 되도록 하라
  • 웹 서버가 시스템이 시작될 때 자동으로 시작되어야 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# httpd서비스 상태 확인
systemctl status httpd
# file context확인
ll -Z /var/www/html/

semanage fcontext -m -t httpd_sys_content_t /var/www/html/file1
restorecon -Rv /var/www/html

semanage port -a -t http_port_t -p tcp 82

firewall-cmd --permanent --add-port=82/tcp
firewall-cmd --permanent --add-service=http
firewall-cmd --reload

# 서비스 구동 및 enable처리
systemctl enable --now httpd

4. 사용자 계정 관리

아래와 같이 사용자/그룹 생성을 하라.

  • sysmgrs라는 그룹을 생성하세요.
  • natasha 사용자를 생성하고, 보조 그룹으로 sysmgrs에 속하게 하세요.
  • harry 사용자를 생성하고, 보조 그룹으로 sysmgrs에 속하게 하세요.
  • sarah 사용자는 시스템에서 상호작용 shell에 접근할 수 없으며, sysmgrs 그룹의 구성원이 아닙니다.
  • natasha, harry, sarah의 비밀번호는 모두 flectrag로 설정하세요.
1
2
3
4
5
6
7
groupadd sysmgrs
useradd -G sysmgrs natasha
useradd -G sysmgrs harry
useradd -s /usr/sbin/nologin sarah
echo flectrag | passwd natasha --stdin
echo flectrag | passwd harry --stdin
echo flectrag | passwd sarah의 --stdin

5. cron job설정

harry 사용자로 매일 14:23에 /usr/bin/echo hello를 실행하는 cron 작업을 설정하라

1
2
3
4
5
6
systemctl status crond
systemctl enable --now crond
crontab -u harry -e
23 14 * * * /usr/bin/echo hello
# job list확인
crontab -u harry -l

6. 협력 디렉토리 생성

다음 특징을 가진 협업 디렉토리 /home/managers를 생성하세요:

  • /home/managers의 그룹 소유자는 sysmgrs여야 합니다.
  • 디렉토리는 sysmgrs 그룹의 구성원만 읽기, 쓰기 및 접근할 수 있으며, 다른 사용자는 이러한 권한을 가지지 않습니다. (물론, root 사용자는 시스템의 모든 파일과 디렉토리에 접근할 수 있습니다.)
  • /home/managers에 생성된 파일은 자동으로 그룹 소유권이 sysmgrs 그룹으로 설정되어야 합니다.

Setting Special Permissions

  • Symbolic : setuid = u+s; setgid = g+s; sticky = o+t
  • Octal : In the added fourth preceding digit; setuid = 4; setgid = 2; sticky = 1
1
2
3
4
5
6
7
mkdir /home/managers
chown :sysmgrs /home/managers/

chmod 2770 /home/managers/
# 혹은 
chmod 770 /home/managers/
chmod g+s /home/managers/

7. NTP설정

시스템을 materials.example.com의 NTP 클라이언트로 구성하세요.

1
2
3
4
5
6
7
8
9
10
systemctl status chronyd
systemctl enable --now chronyd
vim /etc/chrony.conf
# 추가
server materials.example.com iburst
# 서비스 재구동
systemctl restart chronyd
# 체크
chronyc sources

8. autofs설정

autofs를 설정하여 원격 사용자의 홈 디렉토리를 아래 요구대로 자동으로 마운트되독록 하세요.

  • materials.example.com (172.25.254.254)에는 NFS 공유 드렉토리 /rhome 있습니다. 이 파일 시스템에는 사용자 remoteuser1 대해 사전 구성된 홈 디렉토리가 포함됩니다.
  • remoteuser1의 홈 디렉토리는 materials.example.com:/rhome/remoteuser1입니다.
  • remoteuser1의 홈 디렉토리는 로컬의 /rhome 디렉토리 하위의 /rhome/remoteuser1로 자동으로 마운트되어야 합니다.
  • 홈 디렉토리는 사용자가 쓰기 가능해야 합니다.

remoteuser1의 비밀번호는 flectrag입니다.

1
2
3
4
5
6
7
8
9
10
dnf -y install autofs
systemctl enable --now autofs

vim /etc/auto.master
/rhome /etc/auto.rhome

vim /etc/auto.rhome
/remoteuser1 -rw materials.example.com:/rhome/remoteuser1

systemctl restart autofs

9. 계정 생성

사용자 ID가 3533인 사용자 manalo를 생성하라. 비밀번호는 flectrag.

1
2
useradd -u 3533 manalo
echo flectrag | passwd manalo --stdin

10. 파일 찾기 (find)

jacques가 소유한 모든 파일을 찾아 그 복사본을 /root/findfiles 디렉토리에 넣으세요.

1
2
mkdir /root/findfiles
find / -user jacques -exec cp -a {} /root/findfiles \;

11. 문자열 찾기 (grep)

파일 /usr/share/xml/iso-codes/iso_639_3.xml에서 문자열 ng가 포함된 모든 행을 찾아 이 모든 행을 원래 순서대로 /root/list 파일에 복사하세요. /root/list에는 빈 행이 없어야 하며, 모든 행은 /usr/share/xml/iso-codes/iso_639_3.xml 파일의 원래 행과 정확히 일치해야 합니다.

1
grep ng /usr/share/xml/iso-codes/iso_639_3.xml > /root/list

12. 아카이브 생성

/usr/local의 내용을 포함하는 tar 아카이브를 생성하고, 이를 bzip2로 압축하여 /root/backup.tar.bz2로 저장하세요.

1
2
3
4
5
tar -cvjf /root/backup.tart.bz2 /usr/local

# 압축내역 확인
tar -tf /root/backup.tar.bz2

13. podman - build

wallah 사용자로 http://classroom/Containerfile 을(를) 다운로드하세요. 이 파일의 내용을 수정하지 말고, 이미지 이름을 pdf로 하여 빌드하세요.

1
2
3
4
5
dnf -y install container-tools
ssh wallah@node1
wget http://classroom/Containerfile
podman login -u admin -p redhat321 registry.lab.example.com
podman build -t pdf .

14. podman - container를 systemd로 관리

wallah 사용자로 systemd 서비스를 구성하세요.

컨테이너 이름은 ascii2pdf이고, 방금 생성한 pdf 이미지를 사용합니다.

서비스 이름은 container-ascii2pdf로 하고, 시스템이 재부팅될 때 자동으로 개입 없이 시작되도록 설정하세요.

서비스는 시작 시 /opt/file을 컨테이너 내의 /dir1에 마운트하고, /opt/progress를 컨테이너 내의 /dir2에 마운트하도록 구성하세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 디렉토리 생성 및 소유자 변경
sudo mkdir /opt/{file,progress}
sudo chown wallah:wallah /opt/{file,progress}
podman run -d --name ascii2pdf -v /opt/file:/dir1:Z -v /opt/progress:/dir2:Z pdf

# systemd unit파일생성 및 지정위치로 이동
podman generate systemd -n ascii2pdf -f --new
mkdir -p .config/systemd/user
mv ~/container-ascii2pdf.service ~/.config/systemd/user/

# 서비스 구동 및 활성화
systemctl --user daemon-reload
systemctl enable --now --user container-ascii2pdf

loginctl enable-linger
loginctl show-user wallah

# check 
exit
reboot
ssh wallah@node1
podman ps

15. sudo설정

sysmgrs 그룹 구성원이 sudo를 사용할 때 비밀번호를 입력하지 않도록 허용하세요.

1
2
3
4
5
6
7
8
9
echo '%sysmgrs ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/sysmgrs-group
# 혹은 
visudo
# append해주도록
%sysmgrs ALL=(ALL) NOPASSWD: ALL

# check
su - natasha
sudo cat /etc/shadow

[Node2]

16. root비번 설정 (rd.break,init=/bin/bash)

node2의 root 비밀번호를 flectrag로 설정하세요. 이를 수행하려면 시스템 접근 권한이 필요합니다.

rd.break, init=/bin/bash 두가지 풀이법이 있다.
참고로 rd.break가 안먹힌다고 하는 소문이 있으나, RH134 교재내용에서는 rd.break방식에 대한 언급밖에 없다. 안될 이유가?
일단 rd.break, init=/bin/bash 두가지 풀이법 모두 익숙하도록

원본 교재내용 참고:

To access that root shell, follow these steps:

  1. Reboot the system.
  2. Interrupt the boot-loader countdown by pressing any key, except Enter.
  3. Move the cursor to the rescue kernel entry to boot (the one with the word rescue in its name).
  4. Press e to edit the selected entry.
  5. Move the cursor to the kernel command line (the line that starts with linux).
  6. Append rd.break. With that option, the system breaks just before the system hands control from the initramfs to the actual system.
  7. Press Ctrl+x to boot with the changes.
  8. Press Enter to perform maintenance when prompted.

rd.break 방식 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# grub menu -> rescue kernel 선택 -> e클릭, rescue kernel이 안보일때 일반적으로 기본kernel이 같은 기능을 해줄수 있음.
# linux로 시작하는 행끝에 rd.break 추가 
rd.break
# ctrl + x

#  rw 모드로 다시 mount
mount -o remount,rw /sysroot
# 파일 시스템의 루트 변경
chroot /sysroot
# 비밀번호 설정
echo flectrag |passwd root --stdin
# relabel
touch /.autorelabel
# exit chroot
exit
# exit initramfs
exit

init=/bin/bash 방식 :

1
2
3
4
5
6
7
8
9
10
11
12
13
# grub메뉴에서 e클릭
# linux로 시작하는 행끝에 init=/bin.bash 추가 
init=/bin.bash
# ctrl + x

#  rw 모드로 다시 mount
mount -o remount,rw /
# 비밀번호 설정
echo flectrag |passwd root --stdin
# relabel
touch /.autorelabel
# 시스템 구동
exec /sbin/init 

17. Yum 저장소 설정

YUM 기본 저장소를 아래와 같이 변경하세요.

아래와 같은 YUM 저장소가 사용가능합니다.

  • http://content/rhel9.0/x86_64/dvd/BaseOS
  • http://content/rhel9.0/x86_64/dvd/Appstream

YUM 기본저장소를 위에 제공되는 저장소를 사용하도록 시스템을 구성하세요.

Node1 2번 문제 참고, Node1에서 생성된 repo파일 scp 명령으로 가져와두 됨

18. LVM - lvextend

논리 볼륨 vo의 파일 시스템 크기를 230MiB로 조정하세요. 파일 시스템의 내용은 그대로 유지되어야 합니다. 참고로, 파티션 크기가 요청된 크기와 정확히 일치하지 않는 경우가 많으므로, 213MiB에서 243MiB 범위의 크기는 허용됩니다.

1
2
3
4
# List all logical volumes in all volume groups
lvscan
lvextend -L 230M /dev/myvol/vo
resize2fs /dev/myvol/vo

19. Swap partition

시스템에 512MiB의 추가 스왑 파티션을 추가하세요. 스왑 파티션은 시스템이 부팅될 때 자동으로 마운트되어야 합니다. 시스템에 있는 기존 스왑 파티션은 삭제하거나 변경하지 마세요.

1
2
3
4
5
6
7
8
9
10
11
# fdisk나 parted 편한 명령어를 사용하면 되나
# RH134 교재를 보더라도 Redhat에서는 parted툴을 밀고 있으니 parted 명령어에 익숙해지자.
parted /dev/vdb unit mib print
parted /dev/vdb mkpart my-swap linux-swap 722MiB 1234MiB
parted /dev/vdb print
mkswap /dev/vdb3
vim /etc/fstab
/dev/vdb3 swap swap defaults 0 0
systemctl daemon-reload
swapon -a 
swapon --show

20. LVM - lvcreate

qa라는 이름의 논리 볼륨을 qagroup 볼륨 그룹에 생성하고, 크기는 60개의 익스텐트 블록으로 설정하세요. qagroup 볼륨 그룹 내 논리 볼륨의 익스텐트 블록 size는 16MiB여야 합니다. 새 논리 볼륨을 vfat 파일 시스템으로 포맷하고, 시스템 부팅 시 /mnt/qa에 자동으로 마운트되도록 설정하세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 60PEs x 16MiB = 960MiB , pv 크기는 960M보다 커야 된다. (넉넉히 잡아주도록)

# start position확인
parted /dev/vdb unit mib print
# 퍼티션 생성
parted /dev/vdb mkpart primary 1235mib 2500mib
# pv생성
pvcreate /dev/vdb4
# vg생성 및 블록size를 16M로 지정
vgcreate qagroup -s 16M /dev/vdb4
# lv생성 및 블록size 지정
lvcreate -n qa -l 60 qagroup
# 파일시스템  생성
mkfs.vfat /dev/qagroup/qa
mkdir /mnt/qa

vim /etc/fstab
/dev/qagroup/qa /mnt/qa vfat defaults 0 0 

systemctl daemon-reload
mount /mnt/qa

# check
mount |grep /mnt/qa

21. tuned

시스템에 권장되는 tuned 프로파일을 선택하고 기본 설정으로 설정하세요.

1
2
3
4
5
6
7
8
9
10
11
12
# 설치 및 구동
dnf install -y tuned
systemctl enable --now tuned
# active profile확인
tuned-adm active
# 권장 profile확인
tuned-adm recommend
# 권장 profile 지정
tuned-adm profile virtual-guest
# 체크, active profile 다시 확인
tuned-adm active