"42Seoul" Born2beroot 과제를 수행하며 정리한 내용들을 포스팅합니다.
이번 과제는 서버관리자의 역할을 수행하며 가상머신에서 linux debian OS를 설치하고 LVM 파티션 설정, 유저, sudo, UFW, SSH, 로그 관리, Fail2ban, 또한 웹서버를 이용한 wordpress 웹사이트 배포까지 진행할 수 있었다.
가상머신: 버츄얼 박스와 같은 하이퍼 바이저(Hypervisor) 통해 호스트 컴퓨터와 독립적인 환경에서 동작한다.
하이퍼 바이저는 호스트os상에서 동작하냐, 아니면 하드웨어 단에서 작동하냐에 따라 두 가지 유형으로 분류된다.
타입 1 하이퍼 바이저: 호스트 시스템의 하드웨어 위에 직접 설치되어 작동함. 호스트 시스템의 운영 체제는 하이퍼 바이저 위에 실행된다.
ex) VMware vSphere의 ESXi, Microsoft Hyper-V
타입 2 하이퍼 바이저: 호스트 운영 체제 위에서 실행된다. 그리고 호스트 운영 체제는 하이퍼 바이저를 통해 가상 머신을 생성하고 관리한다.
ex) Oracle VirtualBox, VMware Workstation
가상머신을 사용하는이유?
주로 SW개발 중 테스트 목적으로 독립된 환경의 다양한 os에서 프로그램을 실행해보기 위해서 사용한다. 독립된 환경에서 구동되므로 호스트 컴퓨터는 어떠한 영향도 받지 않는 상태를 유지 할 수 있다는 장점이 있다.
레드햇 계열: 기업 및 상용 시장을 대상으로 설계되었음. 안정성과 신뢰성을 강조. 기업들에게 설치 관리, 문제 해결등의 서비스를 보장하며 관리해주는 RHEL(레드햇 엔터프라이즈 리눅스)을 판매함. 하지만 리눅스는 GPL라이센스를 따르므로 상업화를 해도 소스코드를 공개해야함. 이러한 오픈 소스코드를 빌드해서 클론 버전으로 무료 배포한게 CentOS(사후 기술지원X). 레드햇사에서 RHEL의 무료 버전을 스스로 배포했던 건데 이후 CentOS배포를 중단하기로 결정함.
이에 따라 생긴 새로운 레드햇 클론 OS가 Rocky Linux이다
데비안 계열: 온라인 커뮤니티에서 개방형 프로젝트로 설계하여 레드햇보다 먼저 배포 후 시장 선점했음. 사용자의 자율성과 선택의 폭을 중요시함. 온라인 상에 관련 자료들이 많아 리눅스 초보자들이 접근하기 쉬움.
패키지 설치 및 업그레이드 등 패키지 관리가 매우 편리함.
둘다 패키지 관리 툴이다. 하지만 서로 다른 패키지 관리 전략을 가지며 기본적으로 aptitude가 apt의 기능을 포함하는 상위 호환 버전이라고 볼 수 있다.
aptitude: 패키지 설치, 제거시 의존성 문제가 있을 겨우 사용자에게 여러 해결책을 제시하고 선택할 수 있도록 함. 패키지 삭제시 의존성 배열에 따라 알아서 필요없는 패키지 자동 삭제.
apt: 기본적으로 사용자에게 선택권을 주는 방식 대신 안전한 방식을 사용 (최신버젼 설치, 충돌시 제거)
aptitude는 gui를 사용할 수 있어 좀더 직관적인 패키지 관리를 할 수 있다.
상태 확인
sudo ufw status
sudo service ssh status
cat /etc/os-release #os확인
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
minlen = 10
difok=7
root
의 경우 이전 패스워드를 저장하기 않기 때문에 root
에는 적용되지 않는다.ucredit=-1
lcredit=-1
dcredit=-1
reject_username
enforce_for_root
root
에도 적용maxrepeat=3
// 유저 추가
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
sudo adduser new_user sudo
sudo login new_user
sudo hostnamectl set-hostname [new name]
hostnamectl status
sudo vi /etc/hostname #원하는 유저로 변경
sudo reboot
root권한이 필요할때마다 여러 유저가 root계정을 로그인하는 것은 보안 적으로 매우 취약할 수 있다. 어떤 사람이 root계정으로 이상한 짓을 했는지 알 수 없으며 하나뿐인 root비밀번호가 많은 사람들에게 오픈되게 된다.
이를 보완하기 위해 잠시 동안 root권한을 부여하는 sudo명령어를 사용한다.
sudo를 통해 어떤 명령어를 어떤 user가 사용했는지 로그를 기록할 수 있고 패스워드도 공개하지 않아 더욱 안전하게 시스템을 관리할 수 있다.
su -
apt-get install sudo
mkdir /var/log/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명령어 입력시 무조건 터미널을 통해서 입력하도록 설정(자동화 불가하도록)
Uncomplicated firewall
apt install ufw
sudo ufw status verbose
sudo ufw enable
sudo ufw default deny
sudo ufw allow 4242
sudo ufw status numbered
sudo ufw delete [규칙번호]
포트포워딩하는 이유: 가상머신은 호스트가 제공하는 가상 네트워크에 연결 되어 있음. 따라서 외부 네트워크에서 바로 접근 불가함. 외부에서 가상 머신에 접속하려면 호스트 컴퓨터를 통해야함
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 [username]@192.***.***.*** -p 4242
터미널에서
cd
cd .ssh/
rm -r known_hosts
이렇게 입력한 다음 다시 로그인하면 해결
유닉스에서 특정 작업을 주기적으로 실행시킬 수 있게하는 데몬
crontab(crontable)을 이용해서 cron을 설정할 수 있다.
crontab -e : 크론 생성
# 분/시/일/월/요일
* * * * * {명령어}
# 10분마다 실행
*/10 * * * * {명령어}
crontab -l : 실행중인 크론 확인
crontab -r: 크론 삭제
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