리눅스 서버 관리자 과정 관리
제 01장. 리눅스 파일 시스템 구조
# ls /
-> /usr
-> /boot
-> /etc
-> /var
-> /dev
-> /tmp
-> /home
-> /root
# man 7 file-hierarchy
# man 7 hier
제 02장. 장치 관리
디스트 장착
* 장치 인식(systemd-udevd..service) -> /dev/sda
* 파티션 작업(fdisk /dev/sdb) -> /dev/sda1
* 파일시스템 작업(mkfs.ext4 /dev/sdb1) -> /dev/sdal(ext4)
* 마운트 작업
1. 장치 인식(Device Reconfiguration)
(선수지식)
디스크 종류
* IDE(SATA)
* SCST(SAS)
* SSD
디스크 구조
* sector -> track -> cylinder -> partition -> disk
디스크 이름 체계
* IDE: /dev/hda, /dev/hdb, dev/hdc, /dev/hdd
* SCSI: /dev/sda, /dev/sdb, /dev/sdc. ....
* Virtual Disk: /dev/vda, /dev/vdb, /dev/vdc, ....
(장치인식 작업)
# poweroff
디스크 장착
Power ON
# lsblk
[용어] 핫 스왑(Hot-swap)
2. 파티션 작업
(선수지식)
파티션 종류
* MBR 파티션 형식
primary partition(PI-P4)
extended partition
- logical partition(L5-L15)
* GPT 파티션 형식
partition(1-128)
파티션 이름 체계
/dev/vda1
(파티션 작업) // 주는 f,d p는 참고
fdisk CMD
# fdisk /dev/sdb
# fdisk -l /dev/sdb
gdisk CMD
# gdisk /dev/sdb
# gdisk -l /dev/sdb
parted CMD
# parted /dev/sdb
# parted /dev/sdb print
[참고] (GUI) gparted
3. 파일시스템 작업
(선수지식)
파일시스템? 파일을 저장하고 관리하는 구조체계
파일시스템 종류
* ext3/ext4
* xfs
파일시스템 정보 확인
# lsblk --fs
(ext4) # tune2fs -l /dev/sdb1
(xfs) # xfs_info /dev/sdb1
(파일시스템 작업)
mkfs CMD
# mkfs -t xxfs|ext4 /dev/sdb1 (# dumpe2fs /dev/sdb1)
# mkfs.xfs|ext4 /dev/sdb1
# lsblk --fs
4. 마운트 작업(mont CDM, /etc/fstab)
(1) mount 확인
# df -k
# mount
(2) mount 관련 파일들
# /etc/mtab
# /etc/fstab
(3) mount 관련 명령어들
mount CMD
# mount [-t ext4] [-o OPTIONS] /dev/sdb1 /mnt
[-t ext4]: ext4/xfs, ...
[-o OPTIONS]: defaults, ro
umount CMD
# umount /dev/sdb1
# umount /mnt
[실무예] 사용중인 파일시스템의 umount 작업
# umount /home
-> target is busy
# fuser -cu /home
# wall < /etc/MESS/work.txt
# fuser -cu /home
# fuser -ck /home
=> 작업
mount -a CMD(/etc/fstab)
umount -a CMD(/etc/matab)
(4) 기타 mount 관리
(4-1) CD/DVD 마운드
(자동 마운트)
Automount
# cd /run/media/$USER/$LABEL ; ls
# cd ; umount /run/media/$USER/$LABEL
(수동 마운트)
# mkdir -p /mnt/cdrom ; mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom
# cd /mnt/cdrom ; ls
# cd ; umount /mnt/cdrom
(4-2) ISO 이미지 마운트
# mkisofs -o linux.iso /test/*
(수동 마운트)
# mkdir -p /mnt/iso ; mount -t iso9660 -o ro,loop linux.iso/mnt/iso
# cd /mnt/iso ; ls
# cd ; umount /mnt/iso
(4-3) USB Flash Drive(USB Memory Stick)
(FAT32)
(자동마운트)
Automount
# cd /run/media/$USER/$LABEL ; ls
# cd ; umount /run/media/$USER/$LABEL
(수동마운트)
# mkdir -p /mnt/usb ; mount -t vfat /dev/sdel /mnt/usb
# cd /mnt/usb ; ls
# cd / umount /mnt/usb
(NTFS)
# yum -y install epel-release
# yum -y install ntfs-3g
(자동마운트)
Automount
# cd /run/media/$USER/$LABEL ; ls
# CD ; UMOUNT /RUN/MEDIA$USER/#LABEL
(수동마운트)
# mkdir -p /mnt/ntfs ; mount -t ntfs /dev/sdf1 /mnt/ntfs
# cd /mnt/ntfs ; ls
# cd ; umount /mnt/ntfs
(4-4) RAM DISK 마운트
# free -h
(수동마운트)
# mkdir -p /mnt/ramdisk ; mount -t tmpfs -o size=10m none /mnt/ramdisk
# cd /mnt/ramdisk ; ls
# cd ; umount /mnt/ramdisk
(4-5) NFS 마운트
(NFS 서버) share
# mkdir -p /share
# vi /etc/exports
# systemctl enable --now nfs-server
(NFS 클라이언트) mount
# mkdir -p /mnt/share ; mount -t nfs server2:/share /mnt/share // -t nfs는 안쳐도 실행됨
# cd /mnt/share ; ls
# cd ; umount /mnt/share
(4-6) CIFS 마운트
(CIFS 서버)
(CIFS 클라이언트)
# mkdir -P /MNT/CIFS ; MOUNT -T CIFS // 주소/share /mnt/cifs ???
# cd ; umount /mnt/
5. 파일시스템 점검
fsck CMD
* [주의] 마운트된 파일시스템에 대해서 수행하지 않는다.
# fsck /dev/sdb1
# fsck -y /dev/sdb1
[실무예] fsck -y /dev/sdb1
# fsck -y /dev/sdb1 2>&1 | tee -a fsck.log
6. 파일시스템 모니터링 // 중요함
df CMD, du CMD, find CMD, lsof CMD
# du -sk /var
# cd /var ; du -sk * | sort -nr | more
# find /var -type f -mtime -2 -size +1
# lsof /var/log/server.log
[참고] 웹 콘솔(Web Console)
# systemctl enable --now cockpti.socket
# firefox https://localhost:9090 &
제 03장. LVM 관리 // 사용기준 정리
Logical Volume Manager(PV -> LV)
제 04장. RAID 관리 // 기술정리 정리(개념)
제 05장. SWAP 관리
1. 스왑(SWAP) 이슈
* 스왑?
* 스왑 이슈
* 스왑 추가되는 시기는?
* 스왑 추가 크기?
* 스왑과 성능?
(1) 스왑 추가
* 파일
# dd if=/dev/zero of=/swap/swapfile bs=1M count=10240
# chmod 600 /swap/swapfile
# mkswap /swap/swapfile
# swapon /swap/swapfile
# vi /etc/fstab
# swapoff /swap/swapfile
# vi /etc/fstab
# rm -f /swap/swapfile
* 파티션
(Physical Partition)
# fdisk /dev/sdb (partition id: 82)
# mkswap /dev/sdb1
# swapon /dev/sdb1
# vi /etc/fstab
# swapoff /dev/sdb1
# vi /etc/fstab
(Logical Partition) LVM // pv -> vg -> lv
# fdisk /dev/sdb (partitionid: 8e)
# pvcreate /dev/sdb1
# vgextend cs /dev/sdb1
# lvcreate -L 10G -swap2 cs
# mkswap /dev/cs/swap2
# swapon /dev/cs/swap2
# vi /etc/fstab
# swapoff /dev/cs/swap2 // lv -> vg -> pv
# vi /etc/fstab
# lvremove /dev/cs/swap2
# vgreduce cs /dev/sdb1
# pvremove /dev/sdb1
제 06장. 소프트웨어 관리
1. RPM 패키지 관리
rpm CMD
# rpm -ivh|Fvh|Uvh [-nodeps] [--force] PKG.rpm
# rpm -Uvh http://www.example.com/pkg/PKG.rpm
# rpm -qa | grep PKG
# rpm -qi PKG (# rpm -qi -p PKG.rpm)
# rpm -ql PKG (# rpm -ql -p PKG.rpm)
# rpm -qf /usr/bin/ls
# rpm -e [--nodeps] PKG
2. YUM 패키지 관리
yum CMD
# yum install PKG
# yum update PKG
# yum localinstll PKG.prm
# yum download FKG
# yum list
# yum list 'bash*'
# yum search bash
# yum info bash (# rpm -qi PKG)
# yum provides '*/httpd.conf' (# rpm -qf /usr/bin/php)
# yum remove|erase PKG
yum history CMD
# yum history
# yum history info <#>
# yum histroy undo <#>
# yum hstiroy redo <#>
# yum history rollback <#> // 가장 많이 사용함
yum repository 관리
(Yum repository server)
* Local Repository(using CD/DVD)
* CD 마운트(/mnt/cdrom)
* Private Repository
* CD 마운트(/mnt/cdrom)
# yum -y install httpd mod_ssl
# systemctl enable --now httpd
# mkdir -p /var/www/html/centos8
# cd /var/www/html/centos8 ; cp -a /mnt/cdrom/* .
# yum -y install createrepo
# cd /var/www/html/centos8/BaseOS ; createrepo .
# cd /var/www/html/centos8/AppStream ; createrepo .
(Yum client)
* 직접 파일 설정
# vi /etc/yum.repos.d/CD.repo
[MyCDBaseOS]
name=MyBaseOS
baseurl=file:///mnt/cdrom/BaseOS
enabled=1
[MyCDAppStream]
name=MyAppStream
baseurl=file:///mnt/cdrom/Appstream
enabled=1
# vi /etc/yum.repos.d/main.repo
[MyMainBaseOS]
name=MyBaseOS
baseurl=http://192.168.10.10/centos8/BaseOS
enabled=1
[MyMainAppStream]
name=MyAppStream
baseurl=http://192.168.10.10/centos8/Appstream
enabled=1
* yum config-manager --add-repo CMD
# yum config-manager --add-repo "file:///mnt/cdrom/BaseOS"
# yum config-manager --add-repo "file:///mnt/cdrom/AppStream"
# yum config-manager --add-repo "http://192.168.10.10/centos8/BaseOS"
# yum config-manager --add-repo "http://192.168.10.10/centos8/Appstream"
yum gourp CMD
# export LANG=en_US.UTF-8
# yum group install GPKG
# yum group update GPKG
# yum group list
# yum group list hidden
# yum group list hidden | egrep -i 'development|security'
# yum group remove GPKG
# yum group remove GPKG
3. 소스 패키지 관리
filename: apache.tar.gz
# mkdir -p /tools && cd /tools
# wget httpd:httpd.apache.org/download/apache.tar.gz
# tar xvzf apache.tar.gz
# cd apache
# ./configure --prefix=/usr/local/apache2
# make
# make install
# /usr/local/apache2/bin/apachectl restart
BE26CABC9983B406D90B66DBD1F7CD610C140CAD
echo "%_gpg_name BE26CABC9983B406D90B66DBD1F7CD610C140CAD" >> ~/.rpmmacros
gpg -a -o ~/RPM-GPG-KEY-test --export BE26CABC9983B406D90B66DBD1F7CD610C140CAD
제 07장. 부팅 과정
1. F/W 단계
* F/W 종류: BIOS,UEFI
* POST(Power On Self Test) -> Device Tree
* Boot Device 선택(ex: disk)
* Boot Loader 로딩
2. Boot Loader 단계
* Boot Loader 종류: GRUB, LILO
* GRUB 주설정 파일: /boot/grub2/grub.cfg
* grub2-mkconfig CMD(/etc/default/grub, /etc/grub.d/* -> /boot/grub2/grub.cfg)
# grub2-mkconfig -o /boot/grub2/grub.cfg
* GRUB 단계 주 내용:
* kernel(/bppt/vmlinux-*)
* initramfs(/boot/initramfs*)
3. Kernel 단계
* kernel(/boot/vnlinuz-*)
* kernel 주설정 파일: /etc/sysctl.conf. /etc/sysctl.d/*
* kernel 단계 주 내용:
* kernel -> systemd
4. systemd 단계
systemctl CMD
runlevel 관리??
(부팅) systemctl set-default graphical.target
(현재) systemctl isolate graphical.target
서비스 관리
(부팅) systemctl enable httpd.service
(현재) systemctl restart httpd.service
장애처리
# systemctl --failed
# systemctl list-jobs
서비스 의존성 관계
# systemctl list-dependencies sshd
# systemctl list-dependencies sshd --reverse
서비스 msak/unmask 관리
# systemctl mask network
# systemctl mask iptables
# systemctl mask sendmail
# systemctl mask ntpd
target 관리
(부팅) systemctl set-default graphical.target
(현재) systemctl isolate graphical.target
[참고] rd.break
* OS reboot.
* GRUB menu -> kernel 선택 -> e -> 커널 라인(linux ...) -> <END> -> rd.break -> <CTRL +X>
* 장애처리
# mount -o remount,rw /sysroot
# chroot /sysroot
장애처리(# passwd root ; touch /.autorelabel)
# exit ; exit
[참고] init=/bin/bash
* OS reboot.
* GRUB menu -> kernel 선택 -> e -> 커널 라인(linux ...) -> <END> -> init/bin/bash -> <CTRL +X>
* 장애러치
# mount -o remount,rw /
장애처리(# passwd root ; touch /.autolabel)
강제 reboot
[참고] systemd.unit=emergency.target
* OS reboot.
* GRUB menu -> kernel 선택 -> e -> 커널 라인(linux ...) -> <END> -> systemd.unit=emergency.target -> <CTRL +X>
* 장애처리
# mount -o remount,rw /
장애처리
# exit
[참고] systemd.unit=rescue.target
* OS reboot.
* GRUB menu -> kernel 선택 -> e -> 커널 라인(linux ...) -> <END> -> systemd.unit=rescue.target -> <CTRL +X>
* 장애처리
장애처리
# exit
[실습] (systemd 단계) /etc/rc.local(/etc/rc.d/rc.local)
[실습] (Boot Loader 단계) GRUB 암호설정
[실습] (systemd 단계) 새로운 유닛(서비스) 등록
[실습] (Boot Loader 단계) grub2-install CMD
[실습] (systemd 단계) /etc/fstab 이상이 발생한 경우
[실습] (kernel 단계) kernel panic 발생한 경우
제 08장. 사용자 & 그룹관리
1. 사용자 관리
* 사용자 정보 파일
* /etc/passwd(NAME:x:UID:GID:COMMENT:SHELL)
* /etc/shadow(NAME:PASSWD:LAST:MIN:MAX:INACTIVE:EXPIRE:)
* 사용자 관리 명령
* useradd CMD
# useradd use01
# passwd user01
-> (정보) /etc/passwd, /etc/shadow, /etc/group
-> (자원) /home/$USER/*, /var/spool/mail/$USER
[참고] 사용자의 홈디렉토리가 미리 존재하는 경우
# useradd -M -d /oracle oracle
[참고] 로그인을 못하게 시스템 사용자 추가하는 경우
# useradd -r -s /sbin/nologin tomcat
* usermod CMD
# usermod -s /bin/zsh user01
[참고] wheel 그룹에 속하도록 하기
# useradd -G wheel user02 /* -G: secondary group */
# useradd -aG wheel user01 /* -a: add */
* userdel CMD
[참고] userdel vs userdel -r
[참고] /etc/sekl
[참고] useradd -D
[참고] 사용자 추가/삭제 스크립트
2. 그룹 관리
* 그룹 관리 정보 파일
/etc/group(NAME:x:GID:LIST)
* 그룹 관리 명령
groupadd CMD
# groupadd class1
groupmod CMD
# groupmod -g 2000 class1
groupdel CMD
# groupdel class1
3. 사용자 암호 관리
* /etc/shadow(NAME:PASSWD:LAST:MIN:MAX:INACTIVE:EXPIRE:) //필드들의 의미알고 강사님이 그리신 그림도 알기
* chage CMD
# chage -l user01
# chage -M 30 -W 7 user01
# chage -E 2023-12-31 user01
[실무예] 정기적을 암호 변경하도록 설정
(전역)
# /etc/login.defs(PASS_MAX_DAYS=30, PASS_WARN_AGE=7)
(개인)
# useradd -e 2023-12-31 user01
# usermod -e 2023-12-31 user01 (# chage -E 2023-12-31 user01)
제 09장. 잡 관리
1. 사용자를 정기적인 작업 수행
at CMD
# at 1300 (/ar/spool/at/*)
# at -l (# atq)
# at -r N (# atrm N)
crontab CMD
# crontab -e (-u user01) (/var/spool/cron/$USER)
# crontab -l (-u user01)
# crontab -r (-u user01)
[참고] crontab 파일 형식(분 시 일 월 요일 CMD)
[참고] crontab 대표적인 예제
[실무예] 목표: 매달 첫번째 일요일날 백업 스크립트 실행
-> crontab CMD + script.sh
[실무예] wasuser, oracle 사용자만 crontab 명령어 수행 가능 설정
# cd /var/spool/cron ; ls
backupuser servicedmin
# vi /etc/cron.allow
backupuser
serviceadmin
wasuser
oracle
2. 관리자를 위한 정기 작업 수행
(중요1) /etc/cron.{hourly,daily,weekly,mnthly}/* //폴더에 대한 이해
(중요2) crond(/etc/crontab, /etc/cron.d/*) -> anacron(/etc/anacrontab) // 구조에 대한 이해
제 10장. 백업과 복구
0. 선수 지식
백업의 종류
* Full Backup
* Incremental Backup
* Differential Backup
백업/복구 툴
* 디렉토리 단위: tar CMD, cpio CMD
* 파일시스템 단위: dump/restore CMD
* 디스크 단위: dd CMD
1. 로컬 백업/복구
tar CMD
[참고] 상대경로/절대경로
(상대경로)
# cd /home
# tar cvzf /backup/home.tar.gz .
# cd /home
# tar xvzf /backup/home.tar.gz
(절대경로)
# tar cvzf /backup/home.tar.gz /home
# cd /
# tar xvzf /backup/home.tar.gz
[참고] 차등백업
# cd /home
# tar -g /backup/backup.list -cvzf /backup/home_full_$(date +%m%d).tar.gz .
# tar -g /backup/backup.list -cvzf /backup/hme_$(date +%m%d).tar.gz .
# cd /home
# tar -g /backup/backup.list -xvzf /backup/home_full_$(date +%m%d).tar.gz
# tar -g /backup/backup.list -xvzf /backup/home_$(date +%m%d).tar.gz
[참고] 디렉토리 마이그레이션(/test1/* -> /tst2/*)
# cd /test1
# tar cf - | (cd /test2 ; tar xf -)
[참고] tar --exclude(backup target: /test, exclude dir: /test/a, /test/b)
# tar cvzf /backup/test.tar.gz \
--exclude=/test/a \
--exclude=/test/b \
absolute-name /test
[참고] 전체복원/일부복원
(전체복원)
# tar tcf /backup/home.tar | head
# cd /home
# tar xvf /backup/home.tar
(일부복원)
# tar tvf /backup/home.tar | head
# cd /home
# tar xvf /backup/home.tar ./user01
2. 원격 백업/복구

rsysnc CMD 사용하기
* (L->L) # rsync -a /test1/ test2
* (L->R) # rsync -a --delete -e ssh /test1/ IP:/test2/
* (R->L) # rsync -a --delete -e ssh IP:/test2/ /test1/
미러사이트 구성하기
* (server) Mirror Site
# yum -y install rsync-daemon rsync
# vi /etc/rsyncd.conf
# systemctl enable --now rsyncd.socket
* (Client)
# rsync -a --delete -e ssh IP:/backup1 /backup1
# rsync -a --delete -e ssh IP::Backup /backup1
// 차이점: 1번 사용시 상대편 서버로 들어갈 때 root(일반적으로) or 지정한 사용자로 접속한다
root암호를 알고있어야함 암호를 알려주거나 사용자
'클라우드보안 > Linux' 카테고리의 다른 글
| 03_리눅스 네트워크 보안관리자 (1) | 2023.10.05 |
|---|---|
| 01_리눅스 기초 (1) | 2023.10.02 |