클라우드보안/Linux

02_리눅스 서버 관리자

카데트블루 2023. 10. 3. 23:18

리눅스 서버 관리자 과정 관리

제 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