[Linux] 서버관리, Born2beroot 내용 정리

김예찬·2024년 4월 8일
0
post-thumbnail

"42Seoul" Born2beroot 과제를 수행하며 정리한 내용들을 포스팅합니다.

이번 과제는 서버관리자의 역할을 수행하며 가상머신에서 linux debian OS를 설치하고 LVM 파티션 설정, 유저, sudo, UFW, SSH, 로그 관리, Fail2ban, 또한 웹서버를 이용한 wordpress 웹사이트 배포까지 진행할 수 있었다.

가상머신이란?

가상머신: 버츄얼 박스와 같은 하이퍼 바이저(Hypervisor) 통해 호스트 컴퓨터와 독립적인 환경에서 동작한다.

  • 하이퍼 바이저: 가상화 기술을 사용하여 하나 이상의 가상 머신(가상 컴퓨터)을 호스팅하는 소프트웨어. 실제 하드웨어 리소스를 여러 개의 독립적인 가상 환경으로 분할하여 여러 운영 체제(OS)를 동시에 실행할 수 있게 해준다.

하이퍼 바이저는 호스트os상에서 동작하냐, 아니면 하드웨어 단에서 작동하냐에 따라 두 가지 유형으로 분류된다.

타입 1 하이퍼 바이저: 호스트 시스템의 하드웨어 위에 직접 설치되어 작동함. 호스트 시스템의 운영 체제는 하이퍼 바이저 위에 실행된다.
ex) VMware vSphere의 ESXi, Microsoft Hyper-V

타입 2 하이퍼 바이저: 호스트 운영 체제 위에서 실행된다. 그리고 호스트 운영 체제는 하이퍼 바이저를 통해 가상 머신을 생성하고 관리한다.
ex) Oracle VirtualBox, VMware Workstation

가상머신을 사용하는이유?
주로 SW개발 중 테스트 목적으로 독립된 환경의 다양한 os에서 프로그램을 실행해보기 위해서 사용한다. 독립된 환경에서 구동되므로 호스트 컴퓨터는 어떠한 영향도 받지 않는 상태를 유지 할 수 있다는 장점이 있다.

Debian vs Rocky

레드햇 계열: 기업 및 상용 시장을 대상으로 설계되었음. 안정성과 신뢰성을 강조. 기업들에게 설치 관리, 문제 해결등의 서비스를 보장하며 관리해주는 RHEL(레드햇 엔터프라이즈 리눅스)을 판매함. 하지만 리눅스는 GPL라이센스를 따르므로 상업화를 해도 소스코드를 공개해야함. 이러한 오픈 소스코드를 빌드해서 클론 버전으로 무료 배포한게 CentOS(사후 기술지원X). 레드햇사에서 RHEL의 무료 버전을 스스로 배포했던 건데 이후 CentOS배포를 중단하기로 결정함.

이에 따라 생긴 새로운 레드햇 클론 OS가 Rocky Linux이다

데비안 계열: 온라인 커뮤니티에서 개방형 프로젝트로 설계하여 레드햇보다 먼저 배포 후 시장 선점했음. 사용자의 자율성과 선택의 폭을 중요시함. 온라인 상에 관련 자료들이 많아 리눅스 초보자들이 접근하기 쉬움.
패키지 설치 및 업그레이드 등 패키지 관리가 매우 편리함.

aptitude, apt 차이점

둘다 패키지 관리 툴이다. 하지만 서로 다른 패키지 관리 전략을 가지며 기본적으로 aptitude가 apt의 기능을 포함하는 상위 호환 버전이라고 볼 수 있다.

aptitude: 패키지 설치, 제거시 의존성 문제가 있을 겨우 사용자에게 여러 해결책을 제시하고 선택할 수 있도록 함. 패키지 삭제시 의존성 배열에 따라 알아서 필요없는 패키지 자동 삭제.

apt: 기본적으로 사용자에게 선택권을 주는 방식 대신 안전한 방식을 사용 (최신버젼 설치, 충돌시 제거)

aptitude는 gui를 사용할 수 있어 좀더 직관적인 패키지 관리를 할 수 있다.

상태 확인

sudo ufw status
sudo service ssh status
cat /etc/os-release #os확인

Password 설정

sudo vi /etc/login.defs

추가 패스워드 정책 설정

sudo apt install libpam-pwquality

sudo vi /etc/pam.d/common-password

minlen=10 difok=7 ucredit=-1 lcredit=-1 dcredit=-1 reject_username enforce_for_root maxrepeat=3

retry=3

  • 패스워드 입력 횟수 설정
  • 최대 3회 입력 가능

minlen = 10

  • 패스워드 최소 길이
  • 최소 10글자

difok=7

  • 이전 패스워드와 달라야 하는 문자 수
  • 이전 패스워드와 비교했을 때 최소 7글자는 달라야 한다.
  • root의 경우 이전 패스워드를 저장하기 않기 때문에 root에는 적용되지 않는다.

ucredit=-1

  • 대문자 최소 1개 이상

lcredit=-1

  • 소문자 최소 1개 이상

dcredit=-1

  • 숫자 최소 1개 이상

reject_username

  • 유저 이름이 그대로 또는 뒤집혀서 패스워드에 입력될 수 없다.

enforce_for_root

  • 해당 패스워드 정책을 root에도 적용

maxrepeat=3

  • 중복 글자 제한
  • 최대 3글자까지 중복 가능

User, Group 설정

// 유저 추가

sudo adduser [username]
useradd username

// 비번 설정
passwd username

// 그룹 추가
groupadd [group name(user42)]

//그룹 삭제
groupdel [group name]

//그룹에 유저 추가
sudo adduser [username] [groupname]

// 특정 사용자, 그룹에 추가(그룹이 여러개일 경우 공백 없이 콤마로 구분)
usermod -aG [group name(user42)] [user name(yaekim)]

// primary group 설정 (사용자가 여러그룹에 속할때 기본그룹) 
usermod -g [group name(user42)] [user name(yaekim)]

// 특정 사용자 그룹에서 제거
sudo deluser [user name] [group name]

// 특정 사용자 제거
sudo userdel -r [user name]

// 상태 확인
id [username]

//그룹 확인
groups [username]

//전체 그룹 확인
cat /etc/group

hostname 바꾸기

sudo adduser new_user sudo
sudo login new_user

sudo hostnamectl set-hostname [new name]
hostnamectl status

sudo vi /etc/hostname #원하는 유저로 변경
sudo reboot

sudo 설정

sudo를 사용하는 이유?

root권한이 필요할때마다 여러 유저가 root계정을 로그인하는 것은 보안 적으로 매우 취약할 수 있다. 어떤 사람이 root계정으로 이상한 짓을 했는지 알 수 없으며 하나뿐인 root비밀번호가 많은 사람들에게 오픈되게 된다.
이를 보완하기 위해 잠시 동안 root권한을 부여하는 sudo명령어를 사용한다.
sudo를 통해 어떤 명령어를 어떤 user가 사용했는지 로그를 기록할 수 있고 패스워드도 공개하지 않아 더욱 안전하게 시스템을 관리할 수 있다.

  • root 계정 전환 su -
  • sudo 설치 apt-get install sudo
  • sudo log 저장 디렉토리 생성 mkdir /var/log/sudo
  • sudo 설정 visudo
    Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
    
    Defaults    authfail_message="Authentication attempt failed custom."
    Defaults    badpass_message="Wrong password custom."
    Defaults    log_input
    Defaults    log_output
    Defaults    requiretty
    Defaults    iolog_dir="/var/log/sudo/"
    Defaults    passwd_tries=3

"tty"의 약자는 "teletypewriter" 터미널을 의미 → sudo명령어 입력시 무조건 터미널을 통해서 입력하도록 설정(자동화 불가하도록)

UFW 설정

Uncomplicated firewall

  • ufw 설치 apt install ufw
  • ufw 상태 확인 sudo ufw status verbose
  • 부팅 시 ufw 활성화 sudo ufw enable
  • incoming deny sudo ufw default deny
  • 4242포트 허용 sudo ufw allow 4242
  • 허용된 정책 번호 확인 sudo ufw status numbered
  • 허용된 정책 확인 sudo ufw delete [규칙번호]

SSH

포트포워딩하는 이유: 가상머신은 호스트가 제공하는 가상 네트워크에 연결 되어 있음. 따라서 외부 네트워크에서 바로 접근 불가함. 외부에서 가상 머신에 접속하려면 호스트 컴퓨터를 통해야함

host ip: 호스트 컴퓨터 ip

guest ip: 가상머신 ip

// openssh 설치 확인
apt search openssh-server

// 깔려있지 않다면
apt install openssh-server

// openssh 실행 여부, 사용포트 확인
systemctl status ssh

// ssh설정 변경, Port 22 -> Port 4242 변경 후 주석 제거
sudo vim /etc/ssh/sshd_config

// 설정 적용
sudo systemctl restart ssh
  • ssh 연결 ssh [username]@192.***.***.*** -p 4242
  • 만약에 IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! 이런 문구가 나오면서 ssh 로그인이 안된다면
터미널에서
cd
cd .ssh/
rm -r known_hosts
이렇게 입력한 다음 다시 로그인하면 해결

cron

유닉스에서 특정 작업을 주기적으로 실행시킬 수 있게하는 데몬

crontab(crontable)을 이용해서 cron을 설정할 수 있다.

crontab -e : 크론 생성

# 분/시/일/월/요일
* * * * * {명령어}

# 10분마다 실행
*/10 * * * * {명령어}

crontab -l : 실행중인 크론 확인

crontab -r: 크론 삭제

Fail2ban

  • fail2ban
    비정상적인 접속을 막아주는 보안 프로그램
    에러 로그 파일을 읽어서 정해진 시간 동안 정해진 횟수를 초과한 접속 실패가 있을 경우 ip 차단
    sudo systemctl status fail2ban
    
    sudo apt install fail2ban
    
    sudo systemctl enable fail2ban
    sudo systemctl restart fail2ban
    
    sudo systemctl stop fail2ban
    sudo systemctl disable fail2ban
    설정 파일 /etc/fail2ban/jail.d/defaults-debian.conf 파일이 만들어져 있다.
    이를 삭제하고 /etc/fail2ban/jail.d/custom.local 파일을 만든 후, 다음과 같이 작성한다.
    [DEFAULT]
    # ignoreip = 127.0.0.1/8 192.168.1.0/24
    
    # findtime 초 동안 maxretry 번 이상 실패 시, bantime 초 동안 차단
    findtime = 60
    maxretry = 3  
    bantime = 10800
    
    [sshd]
    enabled = true
    #기본 포트 22
    port = 4242
    # logpath = /ssh/log/path
    
  • log 주소 /var/log/fail2ban.log
  • sudo fail2ban-client status sshd 차단된 ip 확인 가능

0개의 댓글