Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

클라우드 엔지니어 꿈나무

RHCSA V9 본문

Linux

RHCSA V9

새싹싹이 2024. 5. 12. 17:39

시험 관련 확인 사항은 하기 링크에서 확인

https://hiheey.tistory.com/207

 

시험 치기 전 준비해야 할 미리 세팅해야 하는 것들은 추후 정리할 예정

(cf. nfs서버, podman 사용자 권한, 그 외 사용자들 및 디렉토리 설정 기타 등등... )

 

sshd 부분은 시험 채점에 영향을 미치지는 않지만 복사 및 붙여넣기를 하기 위해 terminal을 사용하고자 할 시에 사용

# vi /etc/ssh/sshd_config

# Port22 부분 주석 제거
Port 22
# PermitRootLogin 부분 주석 제거 후, yes로 설정
PermitRootLogin yes

 

# systemctl restart sshd

시험에서는 이미 port 부분에 ssh 가 열려있기 때문에 firewall-cmd 로 ssh 포트 확장할 필요가 없다.


로그인

# ssh root@node1

Node 1

1. Network 설정

Configure network and set the static parameters.

configured as DHCP, nned to config it with static parameters

IP-ADDRESS = 172.24.10.11

NETWORK = 255.255.255.0

GATEWAY= 172.24.10.254

Nameserver= 172.24.10.254

DomainServer= 172.10.24.255

hostaname=primary.netX.example.com

 

풀이

시험에서는 Edit a Connection 부분에서 이더넷이 2개로 나오지만 activate 부분에서는 한 개이니 그거 표시되어 있는 이더넷만 바꿔야 한다.

# nmtui 

Edit a connection

 

Activate a connection에서 deactive와 active 한 번씩 해주기

Set Hostname에서 이름 바꾸기

 

# ip a

# hostnamectl


2.  Yum Repository 설정

Congifure YUM  repos with the given link

BaseOS http://content.example.com/rhel8.0/x86_64/dvd

AppStream http://content.example.com/rhel8.0/x86_64/dvd/AppStream   

 

 

풀이

방법 1 

# vi /etc/yum.repos.d/local.repo

 [BaseOS]
 name=BaseOS
 baseurl=http://content.example.com/rhel9.0/BaseOS
 enabled=1
 gpgcheck=0
 [AppStream]
 name=BaseOS
 baseurl=http://content.example.com/rhel9.0/AppStream
 enabled=1
 gpgcheck=0

 

# yum clean all

*주의*

yum clean all하면 계속 subscription-manager로 등록하라고 하는데 인터넷이 연결이 되지 않은 상태라 당연히 subscription-manager 등록이 불가. yum clean all 하고 subscription-manager가 나오면 무시하고 yum repolist 하기

# yum repolist -v

 

 

방법 2지만 실제 시험에서는 적용이 안될 듯 싶다.

# yum config-manager --add-repo http://content.example.com/rhel9.0/BaseOS

# cd /etc/yum.respos.d/

# ls

# mv content.example.com/rhel9.0/BaseOS local.repo

# vi local.repo

 [BaseOS]
 name=BaseOS
 baseurl=http://content.example.com/rhel9.0/BaseOS
 enabled=1
 gpgcheck=0
 [AppStream]
 name=BaseOS
 baseurl=http://content.example.com/rhel9.0/AppStream
 enabled=1
 gpgcheck=0

 

# yum clean all

# yum repolist -v

 


3. SELINUX PORT

A web server running on non standard port 82 is having issues serving content, Debug and fix the issues.

The web server on your systemc can server all the existing HTML files from /var/www/html

Web services should automatically start at boot time

Do not make any changes to these files

 

풀이

# getenforce

# setenforce 0

# systemctl status httpd

# semanage port -l | grep http

# semanage port --add -p tcp 82 -t http_port_t

# semanage port -l | grep http 

82 번 포트 추가됐는지 확인

# systemctl enable httpd

# systemctl restart httpd

# systemctl status httpd

 

((참고))

난 firewall-cmd 로 port 를 열어줬지만 시험에서는 하기 부분을 하지 않아도 # systemctl status httpd 로 확인하면 잘 실행되고 있음을 확인할 수 있다.

# firewall-cmd --add-port=82/tcp --permanent --zone=public

# firewall-cmd --reload 

 

 


4. 사용자 계정 생성 

Create User accounts with supplementary group

- create the group named "sysadms"

- create users named "natasha" and "harry", will be the supplementry group "sysadms"

- create a user named "sarah", should have non-interactive shell and it should be not the member of "sysadms"

- password for all users should be "trootent"

- "sysadms" group has access to user add in the server

- "harry" user has access to set password for users without asking sudo password

 

풀이

# groupadd sysadms

# useradd natasha -G sysadms

# useradd harry -G sysadms

# cat /etc/passwd | grep nologin | tail -3

# useradd sarah -s /sbin/nologin

# echo "trootent" | passwd --stdin "natasha"

# echo "trootent" | passwd --stdin "sarah"

# echo "trootent" | passwd --stdin "harry"

# which useradd

useradd 경로 출력 /usr/sbin/useradd

# visudo 

= # vi /etc/sudoers

harry   ALL=(ALL)       NOPASSWD: ALL

# %그룹 ALL=경로 입력
%sysadm ALL=/usr/sbin/useradd


5.  Crontab 

Configure a cron job that runs every 2 minutes and executes: logger "EX200 in progress" as the user natasha

 

풀이

# systemctl status crond

안 켜져있으면 활성화

# systemctl enable --now crond

# crontab -u natasha -e

*/2 * * * * logger "EX200 in progress"
#~마다 일때는 / 표시 오전 10시 20분일 경우 20 10 * * * * 의 표기 형식

## 참고 14시 30분 이런 식으로 문제가 나오는 경우도 있는데 그런 경우에는 밑에 주석 제거 후, 하기와 같이 입력
# 30 14 * * * logger "EX200 in progress"

 

# systemctl restart crond

# crontab -lu natasha

# tail -f /var/log/messages

= # cat /var/log/messages

출력 로그 확인 -> 시험에서 ctrl+c 키로 취소 불가하니 cat으로 확인하는 것을 추천

 


6.  협업 디렉토리 

Create a collaborative Directory

- Create the Directory "/home/manager" with the following charactericstics

- Group ownership of "/home/manager" should go to "sysadms" group

- The directory should have full permission for all members of "sysadms" group but not to the other users except "root"

- Files created in future under "/home/manager" should get the same group ownership

 

풀이

방법 1.

# mkdir /home/manager

# chgrp sysadms /home/manager

# chmod 2770 /home/sysadms

s : setgid bit (그룹 소유권이 디렉터리의 그룹 소유권을 상속)

# ls -ld /home/sysadms 

 

방법 2.

# mkdir /home/manager

# chgrp sysadms /home/manager

# chmod g+s 

그룹네 setid 설정(상속)

# setfactl -m o::--- /home/manager

# setfactl -m g:sysadms:rwx /home/manger

 


7.  NTP 구성

Configure NTP

- Synchronize the of your systemc with the server "utility.example.com"

 

풀이

# systemctl status chronyd

안 켜져 있으면 활성화

# systemctl enable --now chronyd

# vi /etc/chrony.conf

#pool 2.rhel.pool.ntp.org iburst 기존 거 주석 처리
server utility.example.com iburst

 

# systemctl restart chronyd

# chronyc sources

^? 가 아닌 ^*로 바뀐 것을 확인해보자

지금은 연습이기 때문에 time.bora.net 으로 설정한 상태

 

# timedatectl set-ntp true

# timedatectl

 


8.  Autofs

Configure Autofs

- All remoteuserX home directory is exported via NFS, which is available on utility.example.com(172.24.10.100) and your NFS-exports directory is /netdir for remoteuserX

- remoteuserX's home directory is utility.example.com/home/remoteuserX, where X is your station number

- remoteuserX's home directory should be automounted autofs service

- home directories must be writable by their users

 

# systemctl enable --now autofs

# echo "It1" | passwd --stdin remoteuserX

# vi /etc/auto.master

#/misc  /etc/auto.misc 주석처리
/netdir      /etc/auto.misc

 

# vi /etc/auto.misc

remoteuserX -fstype=rw,nfs,sync utility.example.com:/home/remoteuserX

 

# systemctl restart autofs

# su - remoteuserX

# cd /rhome

# touch hello

# ls -al 

 

 

 

 


9.  tar

Create a tar archive of "/etc/" Directory with gzip extension. Tar archive named "myetcbackup.tar" should be place in "/root/" Directory.

 

풀이

# tar -cvzf /root/myetbackup.tar /etc/ 

((참고))

xz, bzip, gzip 확인하여 실행

-J: xz 

-j: bzip

-z: gzi[

 


10.  파일 권한

Copy the file /etc/fstab to /var/tmp . Configure the permissions of /var/tmp/fstab so that:
- the file /var/tmp/fstab is owned by the root user
-  the file /var/tmp/fstab belong to the group root
-  the file /var/tmp/fstab should not be executable by anyone
-  the user "natasha" is able to read and write /var/tmp/fstab
-  the user "harry" can neither write nor read /var/tmp/fstab
-  all other users (current or future) have the ability to read /var/tmp/fstab

 

풀이

# cp -aRp /etc/fstab /var/tmp/fstab

-a(archive): 모든 파일 속성 보존 (심볼링 링크도 그대로 복사)

-R(recursive): 디렉토리 내 모든 하위 파일과 디렉토리도 함께 복사

-p(preserve): 파일 권한, 소유권, 타임스탬프 보존

 

# chmod a-x /var/tmp/fstab

# setfacl -m u:natasha:rw- /var/tmp/fstab

# serfacl -m u:harry:--- /var/tmp/fstab

# setfacl -m o::r-- /var/tmp/fstab

# getfacl /var/tmp/fstab

 

 


11.  find

Find all files and directories which is created by a user "natasha" in to this
system and copy it into a "/root/natashafiles" directory

 

풀이

# mkdir -p /root/natashafiles

# find / -user natasha -exec cp -a {} /root/natashafiles \;

# ls -al /root/natashafiles

 

((참고))

-type -f : 파일만 찾을 떄

-size +1M -size -5M : 사이즈 1M 이상 5M 이하

-perm -u+s : user에거 +s 권한이 있는 것, 아니면 -perm -권한번호 로 설정하기

 

 


12.  Grep

Find all strings "ich" from "/user/share/dict/words" file and copy that strings in a /root/lines file.

 

풀이

# grep ich /user/share/dict/words > /root/lines

 

 


13.  사용자 생성

Create a user "unilao" with UID "2334" with password as "souspolo"

 

풀이

# useradd unilao -u 2334

# echo "souspolo" | passwd --stdin "unilao"

uid 확인

 


14.  Password 유효 기간 설정

Set Password Max days as 20 days

 

풀이

# vi /etc/login.defs

PASS_MAX_DAYS   20
# 기존 값 99999 에서 수정

 

15. Login Message

Build an application rhcsa that print message when logged in as ablerate user

Set umksk 277 to user natasha

(나의 경우, 시험에서 출제되지 않음)

 

풀이

# vi /usr/local/bin/rhcsa

#!/bin/bash
echo "Welcome to user ablerate"

 

# chmod 755 /usr/local/bin/rhcsa

# vi /home/ablerate/.bashrc

fi
# 밑에 거 추가
/usr/local/bin/rhcsa

 

# vi /home/ablerate/.bash_profile

fi
# 밑에 거 추가
/usr/local/bin/rhcsa

 

# ssh ablerate@server

 

# vi /home/natasha/.bash_profile

umask 277

 

# su - natasha

$ touch hello

$ mkdir hi

$ ls -l

권한 확인

 


16  Container Build

Download containerfile from http://classroom.example.com/Containerfile
Do not make any modification.
Build image with this container file with user paradise

 

풀이

# ssh podman@node1 

((주의)) 

su - paradise 로 로그인 시, 하기 명령어 중 systemctl --user daemon-reload 가 안 먹을 수 있음

 

$ systemctl status podman

$ systemctl enable podman

$ mkdir /container

$ cd /container

$ wget http://classroom.example.com/Containerfile   

$ podman build -t myimg:v1 .

$ podman images

이미지 생성 확인

 


17.  Container - rootless, systemd 등록

Configure a container to start automatically
- Create a container named mycontainer using the image which build previously.
- Configure the service to automatically mount the directory /opt/file to container directory /opt/incoming. And user directory /opt/processed to container directory /opt/outgoing

- Configure it to run as a systemd service that should run from the existing user paradise only

- The service should be named mycontainer and should automatically start a system reboot without any manual intervention

 

풀이

위에서 이미 이미지는 다 생성한 상태

$ mkdir /opt/file

$ mkdir /opt/processed

$ chown paradise:paradise /opt/processed

$ chown paradise:paradise /opt/file

chown 권한을 주지 않으면 podman run -v 옵션에서 :Z에서 에러 발생 Error: lsetxattr /opt/processed: operation not permitted

 

((참고))

mkdir /opt/file  부터 chown paradise:paradise /opt/file 이 paradise user라서 실행이 불가하다면 root 로 접속해서 실행한 후, paradise 사용자로 재ssh할 것

 

 

 

$ podman run -d --name mycontainer -v /opt/file/:/opt/incoming:Z -v /opt/processed/:/opt/outcoming:Z localhost/myimg:v1

-d: 쉘로 실행

-v: 마운트 옵션 /opt/files 디렉토리를 /opt/incoming에 마운트

:Z: Selinux 레이블을 자동 조정하여 컨테이너에 안전한 액세스 허용

localhost/myimg:v1: 로컬 레지스트리에서 가져오겠다.

$ podman ps -a

$ podman exec mycontainer ls /opt/

 

$ podmam exec mycontainer touch /opt/incoming/t1

$ man systemd.unit

systemd 유닛 저장 위치 확인 가능

$ mkdir /home/ paradise/.config/systemd/user

systemd 유닛 저장 위치

$ podman generate systemd --name mycontainer --files

$ ls

systemd 유닛 파일 생성 확인

$ loginctl enable-linger paradise

paradise 로그아웃 해도 systemd가 계속 활성화 될 수 있게 설정 (paradise user라서 실행이 불가하다면 root 로 접속해서 실행한 후, loginctl enable-linger paradise 명령어 실행해주고 paradise 사용자로 재ssh할 것)

$ loginctl show-user paradise

$ podman stop mycontainer

$ podman ps -a 

컨테이너 중단 확인

$ systemctl --user start container-mycontainer.service

$ podman ps -a

컨테이너 활성 확인

$ systemctl --user stop container-mycontainer.service

컨테이너 중단 확인

$ systemctl --user enable --now container-mycontainer.service

((참고))

연습 때 systemctl --user가 작동이 안된다면 usermod로 adm 의 권한을 주든가 해서 권한을 부여해야함

 


Node 2

18.  RootPassword 재설정 

((참고))

RHEL 9.0에서는 rd.break 이 작동하지 않음

 

부트로더 스크린 뜨면 e 

만약 linux 열에 console=, vconsole=, key=value pairs 가 있으면 삭제하고 init=/bin/bash 를 마지막에 기입하고 ctrl+x

 

 

하기와 같이 bash-5.1# 창 출력

 

bash-5.1#  mount -o rw,remount /

bash-5.1#  passwd root

bash-5.1#  touch /.autorelabel

bash-5.1#  /usr/sbin/reboot -f

재시작


19.  YUM Repository

Congifure YUM  repos with the given link

BaseOS http://content.example.com/rhel8.0/x86_64/dvd

AppStream http://content.example.com/rhel8.0/x86_64/dvd/AppStream   


풀이

방법 1 

# vi /etc/yum.repos.d/local.repo

 [BaseOS]
 name=BaseOS
 baseurl=http://content.example.com/rhel9.0/BaseOS
 enabled=1
 gpgcheck=0
 [AppStream]
 name=BaseOS
 baseurl=http://content.example.com/rhel9.0/AppStream
 enabled=1
 gpgcheck=0

 

# yum clean all

*주의*

yum clean all하면 계속 subscription-manager로 등록하라고 하는데 인터넷이 연결이 되지 않은 상태라 당연히 subscription-manager 등록이 불가. yum clean all 하고 subscription-manager가 나오면 무시하고 yum repolist 하기

# yum repolist -v

 


20. Resize LVM

Resize your vo logical volume, it should be approx 300MB note. only size accepted from 270mb to 290mb

 

풀이

방법 1

# umount /share

# e2fsck -f /dev/mapper/wgroup-wshare

# lvresize -r -L 300M /dev/mapper/wgroup-whsare

-r : resize -> 파일 시스템 크기까지 변경 -> 까먹고 실행하지 않았을 경우,

     xfs: # xfs_growfs /dev/mapper/wgroup-wshare /   

     그 외: # resize2fs /dev/mapper/wgroup-whsare/

-L: 용량 지정 

# lvs

# mount -a

 

방법 2

resize -r 옵션이 적용되지 않아 파일시스템 리사이즈부터 하고 lvreduce --fs ignore 옵션 실행

(혼자 할 때는 resize -r이 작동하지 않았는데 시험에서는 작동을 해서 시험에서는 쓰지 않았다)

# umount /mnt/wshare

# e2fsck -f /dev/mapper/wgroup-wshare

# resize2fs /dev/mapper/wgroup-wshare 300M

# lvreduce --fs ignore -L 300M /dev/mapper/wgroup-wshare

# mount -a

 


19.  LVM

Create an LVM name wshare from wgroup volume group. Note the following:
PE size should be 8MB
LVM size should be 50 extents
Format with "ext4" file system and mount it under /mnt/wshare. And it should auto mount after next reboot

 

풀이

# lsblk

# fdisk /dev/sdb

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-41943039, default 41943039): 1G

Command (m for help): t
Selected partition 1
Hex code or alias (type L to list all): 8e
Changed type of partition 'Linux' to 'Linux LVM'.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

 

# lsblk

# pvcreate /dev/sdb3

# vgcreate -s 8M wgroup /dev/sdb3

# vgdisplay

PE 확인

 

# lvcreate -n wshare -l 50 wgroup

# lvs

 

# mkfs.ext4 /dev/mapper/wgroup-wshare

# mkdir /mnt/wshare

# vi /etc/fstab

/dev/mapper/wgroup-wshare       /mnt/wshare     ext4    defaults        0 0

 

# mount -a

# df -Th

 


21. swap

Create a swap partition of 400 MB and make it available permanent.

 

풀이

# free -m

swap 사이즈 확인

 

# fdisk /dev/sdb

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (2-4, default 2): 2
First sector (2099200-41943039, default 2099200): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2099200-41943039, default 41943039): +400M
Created a new partition 2 of type 'Linux' and of size 400 MiB.
Command (m for help): t
Partition number (1,2, default 2): 2

Hex code or alias (type L to list all): 82

 

# lsblk

# mkswap /dev/sdb2

# vi /etc/fstab

/dev/sdb2       none    swap    defaults        0 0

 

# swapon /dev/sdb2

# free -m

 

 


23. Tuned

Configure recommended tuned profile

 

풀이

# tuned-adm active

# tuned-adm recommend

 

# tuned-adm profile virtual-guest

# tuned-adm active

 

 


24. Shell Script

make shell script under /usr/local/bin/ and find all the files and directories of which natasha

 

풀이

# vi /usr/local/bin/file-search.sh

#!/bin/bash
find / -user natasha -exec cp -a {} /root/natashafiles \;

 

# chmod 755 /usr/local/bin/file-search.sh

또는 chmod +x /usr/local/bin/file-search.sh

# /usr/local/bin/file-search.sh

# ls -l /root/natashafiles

 

((참고))

-type -f : 파일만 찾을 떄

-size +1M -size -5M : 사이즈 1M 이상 5M 이하

-perm -u+s : user에거 +s 권한이 있는 것, 아니면 -perm -권한번호 로 설정하기

'Linux' 카테고리의 다른 글

RHCSA V9 시험 후기  (2) 2024.05.21
systemctl 실행 시, 권한 부족 해결  (0) 2024.05.18
Hard link & Symbolic link  (0) 2024.05.07
RHEL Podman 인증 토큰 에러 오류  (0) 2024.05.01
RHEL9 NFS 서버 - 클라이언트 서버 설정  (0) 2024.04.29