이 포스트는 리눅스 시스템을 대상으로 엔지니어링을 진행했을 때, 자주 사용하거나 잘 몰랐던 해결 방법을 작성하였다.
# iscsiadm -m discovery -t st -p <target ip>
위 명령어로 등록된 target 서버의 정보는 아래 디렉터리에 저장된다.
# ll /var/lib/iscsi/
drwxr-xr-x 2 root root 6 Jul 3 2020 ifaces
drwxr-xr-x 2 root root 6 Jul 3 2020 isns
drwxr-xr-x 3 root root 43 Jul 11 10:03 nodes
drwxr-xr-x 3 root root 31 Jul 11 10:03 send_targets
drwxr-xr-x 2 root root 6 Jul 3 2020 slp
drwxr-xr-x 2 root root 6 Jul 3 2020 static
nodes, send_targets 디렉터리를 삭제하여 target 정보를 reset 한다.
# rm -rf /var/lib/iscsi/nodes /var/lib/iscsi/send_targets
# vi /etc/ssh/sshd_config
...
PasswordAuthentication NO -> Yes 로 변경
...
# systemctl restart sshd
sshd 를 재시작할 경우 ssh로 연결된 세션은 모두 끊기게 되므로
서버에 다른 작업이 진행되고 있을 경우 주의해야 한다.
리눅스에서 설정값을 변경할 때, 변경되는 점을 실시간으로 확인하기 위해
아래와 같은 명령어를 사용하여 확인이 가능하다.
Ctrl+C 단축키로 모니터링을 종료한다.
# watch -d -n 1 "cat /proc/net/bonding/bond0"
-d: 변경되는 항목을 하이라이트함
-n: 새로고침 주기를 초 단위로 설정 (최소 0.1초까지 설정 가능)
# tail -f /var/log/messages
-f: 파일의 변화를 실시간으로 출력함
Ventoy / Rufus 는 Baremetal 서버에 운영체제를 설치하기 위해 부팅 가능한 USB 드라이브를 생성하는 도구로, 차이점은 다음과 같다.
Vim 은 Linux 에서 사용되는 텍스트 편집기로 명령을 입력하여 텍스트를 편집하는 도구이다.
Vim 에서 주로 사용되는 단축키는 다음과 같다.
gg - 본문의 맨 위로 이동
G - 본문의 맨 아래로 이동
/<문자> - 문자 찾기
n - 동일한 다음 문자 찾기
N - 동일한 이전 문자 찾기
V - Visual 모드(Drag 모드)
dd - 잘라내기
3yy - 현재 라인에서 아래 3라인까지 복사
p - 잘라내거나 복사한 라인을 붙여넣기
:norm i# - 각 라인의 맨 앞에 주석 넣기(#)
:norm 1x - 각 라인의 맨 앞 글자 지우기
u - undo 기능(Window 의 Ctrl+Z 와 동일)
ctrl + r - redo 기능
:.! - 쉘에 해당 명령어를 입력할 때 출력되는 결과를 파일에 입력
ex) :.!lsblk
Linux 에서 메모리 정보를 확인하는 방법은 다음과 같다.
# free -h
# cat /proc/meminfo
아래 명령어를 사용하여 meminfo 결과값을 MB 단위로 출력한다.
# awk '$3=="kB"{$2=$2/1024;$3="MB"} 1' /proc/meminfo | column -t
Yum / Dnf 명령어는 리눅스 배포판에서 패키지 관리를 위해 사용되는 도구이다.
RedHat, CentOS, Fedora 계열에서 사용되며 8버전 이후 Dnf 를 사용한다.
Dnf 는 간단하게 Yum 명령어의 업데이트된 명령어라고 생각하면 된다.
vim 패키지 설치
# yum install vim
vim 패키지 삭제
# yum remove vim
vim 패키지 버전 업데이트(최신 버전의 rpm 파일이나 Repository 구성이 필요)
# yum update vim
현재 Repository 에서 vim 패키지 검색
# yum search vim
Repository 구성 확인
# yum repoinfo ; yum repolist
iscsiadm 명령어의 패키지 명 확인
# yum provides iscsiadm
Linux 시스템을 운영하다 보면 root 유저의 비밀번호를 분실하는 경우가 있다.
비밀번호를 재설정하는 방법은 다음과 같다.
시스템 Reboot 후 Menuentry 화면에서 GRUB edit mode 로 진입
(e 키)
linux 행 끝에 rd.break 매개변수 추가
linux16 /vmlinux-3.10... rd.break
파일 시스템을 쓰기 가능으로 Remount
# mount -o remount,rw /sysroot
파일 시스템 root 변경
# chroot /sysroot
passwd 명령어로 비밀번호 변경
# echo 'p@ssw0rd' | passwd root --stdin
파일 레이블 재지정(SELinux 활성화 상태에서 진행 - 비활성화일 경우 필요하지 않음)
# touch /.autorelabel
파일 시스템일 읽기 전용으로 Remount
# mount -o remount,ro /
exit 하여 시스템 재부팅
# exit
- 아래 가이드는 SELinux 레이블 재지정하는 시간을 생략하는 방법이다.
- SELinux 레이블 재지정 시간 생략
9-1. enforcing=0 매개변수 추가
linux16 /vmlinux-3.10... rd.break enforcing=0
9-2. SELinux 보안 컨텍스트 복원
# restorecon /etc/shadow
9-3. SELinux 정책을 켜고 확인
# setenforce 1
# getenforce
Enforcing
// enforcing=0 옵션을 추가할 경우 # touch /.autorelabel 단계를 생략할 수 있다.
date 명령어를 사용하여 시간을 설정한 후 시스템이 재시작될 경우 시간 설정이 초기화된다.
하드웨어 시간을 같이 설정할 경우 초기화되지 않는다.
# date -s "2023-07-27 13:50:00"
# hwclock --localtime --systohc
# hwclock -r
iscsi 를 사용하여 두 개의 노드에서 하나의 디스크를 공유하는 방식으로 시스템이 구축될 경우
한쪽 노드에서 설정한 값이 반대쪽 노드에서 확인이 안되는 경우가 있다.
아래 가이드에 따라 반대쪽 노드에서 변경된 값 확인이 가능하다.
pv 재감지
# pvscan --cache
파티션 정보 새로 불러오기
# partprobe
lvmetad 재시작
# systemctl restart lvm2-lvmetad
- 또한 iscsi 디스크를 증설했을 경우, 디스크 정보를 rescan 하는 방법은 다음과 같다.
- Initiator 노드에서 rescan
# iscsiadm -m session --rescan
- multipath 로 구성될 경우 multipath resize 진행
# multipathd resize map mpatha
좀비 프로세스는 프로세스가 종료된 이후에도 부모 프로세스가 해당 프로세스의 상태를 확인하고 있는 상태를 말한다.
좀비 프로세스가 적으면 큰 문제는 없겠지만, 많아질 경우 제한된 PID 개수를 좀비 프로세스가 차지하여 새로운 프로세스 생성이 불가능한 경우가 발생할 수 있다.
좀비 프로세스 확인
# ps -ef | grep defunct | grep -v "grep"
좀비 프로세스 제거
서비스중인 서버에서 진행할 경우 서비스에 영향이 없는지 확인 후 진행해야 한다.
# kill -9 <Zombie PID>
모든 좀비 프로세스 제거
# ps -ef | grep defunct | awk '{print $3}' | xargs kill -9
- 시스템 PID 최대값 확인
#sysctl -a | grep pid_max
tar 명령어는 와일드 마스크를 사용할 수 없다.
따라서 exec 명령어를 사용하여 모든 tar 파일을 압축해제 할 수 있다.
# find . -name "*.tar*" -exec tar xvf {} \;
Linux 를 GUI 환경으로 설치할 경우 가상화 환경 구성에 필요한 virbr0 및 virbr0-nic 장치가 기본적으로 생성되는 것을 확인할 수 있다.
libvirt 패키지를 설치할 경우 생성되는 가상 인터페이스로, 불필요한 경우 수동으로 제거하거나 패키지를 삭제한다.
# systemctl disable --now libvirtd
# ip link set virbr0 down
# brctl delbr virbr0
# ip link del virbr0-nic
RHEL 8버전 이후부터 /etc/pam.d/ 디렉터리 내 파일을 직접 수정하는 방법은 권장되지 않는다.
따라서 faillock 을 이용하여 계정 잠금 임계값을 설정할 수 있다.
sssd 정책을 선택
# authselect select sssd
현재 정책에 faillock 적용
# authselect enable-feature with-faillock
faillock 설정
# vi /etc/security/faillock.conf
dir=/var/run/faillock
audit
silent
deny=3
unlock_time=600
변경사항 적용
# authselect apply-changes
현재 선택된 정책 확인
# authselect current
Linux 를 사용할 때 외부에 있는 Repository 를 사용하지만 보통은 폐쇄망에서 서비스가 운영된다.
이 경우 Local Repository 를 구성하여 패키지를 설치하지만 여러 운영 체제에서 같은 Repository 를 바라보도록 구성해야 한다면 내부 Web Repository 를 구축하는 방법이 있다.
내부 Web Repository 를 구성할 경우 80/tcp 포트가 Open 상태이거나, 방화벽을 비활성화 해야한다.
Repository Master 서버 구축
http 패키지 설치
# yum install httpd
마운트 디렉터리 생성
# mkdir /rhel79
ISO 파일 마운트
# mount /dev/sr0 /rhel79
심볼릭 링크 생성
# ln -s /rhel79 /var/www/html/rhel79
# ls -al /var/www/html/rhel79
Client 서버에서 확인
# vi /etc/yum.repos.d/web-local.repo
[web-local]
name=web-local
baseurl=http://Master-IP/rhel79
gpgcheck=0
enabled=1
# yum clean all ; yum repoinfo
Swap 메모리는 컴퓨터의 물리적인 RAM 용량을 보완하기 위해 사용되는 가상 메모리이다.
시스템의 RAM이 부족할 때 Swap 메모리를 사용하여 추가 메모리 공간을 확보한다.
추가 메모리 공간을 확보함으로써 다중 프로세스를 동시에 처리하고 대규모 프로그램을 실행한다.
Swap 파일로 생성할 디렉터리 생성
# mkdir /root/ex_swap
특정 크기의 파일 생성
# dd if=/dev/zero of=/root/ex_swap/<swapfile_name> bs=1M count=<MB>
파일 권한 변경 및 Swap 파일 변환
# chmod 600 /root/ex_swap/ex_swap
# mkswap /root/ex_swap/ex_swap
Swap 활성화
# swapon /root/ex_swap/ex_swap
Swap 용량 확인
# free -h
# swapon -v
fstab 등록(Reboot 이후에도 유지해야 할 경우)
# vi /etc/fstab
/root/ex_swap/ex_swap swap swap defaults 0 0
# swapoff /root/ex_swap/ex_swap
# rm /root/ex_swap/ex_swap
시스템 운영 중 응용 프로그램이 비정상적으로 종료되거나 크래시가 발생했을 때,
해당 응용 프로그램의 상태와 메모리 덤프를 생성할 수 있다.
core dump 는 개발자와 시스템 관리자가 크래시 원인을 분석하고 디버깅하는데
큰 도움을 준다.
# vi App\coredump.sh
#! /bin/bash
sed -i 's/#DefaultLimitCORE=/DefaultLimitCORE=infinity/g'/etc/systemd/system.conf
systemctl daemon-reexec
cat << EOF >> /etc/sysctl.conf
kernel.core_pattern=/var/crash/core_%e_%p_%h_%t
kernel.core_uses_pid=1
fs.suid_dumpable=1
EOF
sysctl -p
cat <<EOF>> /etc/security/limits.d/00-default-limits.conf
* soft core unlimited
* hard core unlimited
EOF
쉘 스크립트 실행 및 시스템 재시작
# sh Appcoredump.sh
# shutdown -r now
core dump 생성 테스트
# sleep 600 &
// 테스트용 프로세스 생성
# ps aux | grep sleep
// 프로세스 확인
# kill -SIGABRT <sleep PID>
// 프로세스에 비정상적인 종료 시그널을 보냄
# ls -al /var/crash
// core dump 파일 확인
유익한 글이었습니다.