클라우드 엔지니어 꿈나무
RHCSA V9 본문
시험 관련 확인 사항은 하기 링크에서 확인
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 |