가상머신이란?
- 실재하는 컴퓨터 상에 소프트웨어로 논리적으로 만들어낸 컴퓨터
- 하나의 물리 자원위에 하나의 환경만 있는 것을 효율화하고자 가상화층을 만들고 그 위에 OS를 새로 설치하는 기법
데비안 / 로키
데비안(Debian) 리눅스와 로키(Rocky) 리눅스는 둘 다 인기 있는 리눅스 배포판이지만, 몇 가지 차이점이 있습니다.
- 기반: 데비안은 독립적으로 개발된 리눅스 배포판으로, 많은 배포판의 기반이 되었습니다. 로키 리눅스는 레드햇 엔터프라이즈 리눅스(RHEL)의 커뮤니티 기반 클론 배포판으로, CentOS의 개발 중단에 대한 대안으로 등장했습니다.
- 패키지 관리: 데비안은 APT(Advanced Package Tool)를 사용하여 패키지 관리를 수행합니다. APT는 강력하고 안정적인 패키지 관리 시스템으로, 사용자가 쉽게 소프트웨어를 설치, 업데이트 및 제거할 수 있도록 도와줍니다. 로키 리눅스는 YUM(Yellowdog Updater Modified) 패키지 관리 시스템을 사용합니다.
- 사용자 경험: 로키 리눅스는 사용자 경험에 중점을 둔 배포판입니다. 로키는 간결하고 직관적인 사용자 인터페이스와 매력적인 디자인을 가지고 있으며, Mac OS X에 영감을 받은 요소도 포함하고 있습니다. 반면, 데비안은 다양한 데스크톱 환경과 사용자 인터페이스를 선택할 수 있습니다.
- 소프트웨어 지원: 데비안은 높은 수준의 소프트웨어 지원을 제공합니다. 데비안은 커뮤니티에 의해 지원되며, 엄격한 소프트웨어 라이선스 정책을 따르기 때문에 안정성과 보안성이 높습니다. 로키 리눅스는 레드햇 기술과 커뮤니티의 지원을 받고 있습니다.
- 배포 주기: 데비안은 안정성을 중시하여 배포 주기가 상대적으로 길고, 보다 검증된 패키지를 제공합니다. 로키 리눅스는 업데이트와 패치를 더 자주 제공하여 최신 기능과 보안 업데이트를 더 빠르게 받을 수 있습니다.
요약하자면, 데비안은 독립적으로 개발된 범용 리눅스 배포판으로 안정성과 보안성을 강조하고, 로키 리눅스는 RHEL 기반으로 엔터프라이즈급 안정성과 사용자 경험에 중점을 둔 배포판입니다.
apt-get / apptitude
- 사용자 인터페이스: apt-get은 CLI 기반 도구이며, apt-get install과 같은 명령어를 사용하여 패키지를 설치하고 관리합니다. 반면에, aptitude은 텍스트 기반의 대화형 인터페이스(Interactive Text Interface)를 제공합니다.
- 의존성 해결: aptitude은 의존성 해결 기능이 apt-get보다 더 발전되어 있습니다. 의존성 해결은 패키지가 다른 패키지에 의존하는 관계를 처리하는 것을 의미합니다. aptitude은 패키지 설치 또는 제거 요청에 따라 자동으로 필요한 의존성을 해결하고, 관련된 패키지를 선택적으로 업그레이드 또는 다운그레이드 할 수 있습니다. apt-get은 의존성 해결을 위해 추가적인 명령어나 옵션을 사용해야 할 수도 있습니다.
- 패키지 추천: aptitude는 패키지 설치 중에 패키지 추천 및 패키지 의존성에 대한 권장 사항을 더 잘 처리합니다. 기본 설정에서 aptitude은 패키지 추천을 자동으로 설치하지만, apt-get은 이를 수동으로 설정해야 합니다.
- 사용자 인터페이스 통합: aptitude은 패키지를 설치하거나 제거하기 전에 사용자에게 어떤 영향을 미칠지에 대한 요약을 표시합니다. 또한, 다양한 패키지 작업을 표시하고, 작업을 취소하거나 변경할 수 있는 기능을 제공합니다.
- 호환성: apt-get은 거의 모든 데비안 계열 리눅스 배포판에서 사용할 수 있습니다. 반면에, aptitude은 일부 데비안 계열 배포판에서는 기본적으로 설치되어 있지 않을 수도 있습니다. 따라서 apt-get은 더 일반적으로 사용되는 패키지 관리 도구입니다.
요약하면, apt-get은 명령줄 기반의 패키지 관리 도구로 간단하고 직접적인 사용을 제공하며, aptitude은 텍스트 기반의 대화형 인터페이스와 의존성 해결 기능이 강화된 패키지 관리 도구입니다.
SELinux / AppArmor
SELinux(보안 산업용 리눅스)은 매우 강력한, 정교하게 설정 가능한 리눅스 보안 기능으로, 응용 프로그램과 시스템의 권한을 강화하고 접근 제어를 강화하는 데 사용됩니다. AppArmor은 프로세스에 대한 프로필 기반 접근 제어를 제공하여 애플리케이션의 보안을 강화하는 데 사용됩니다. SELinux와 AppArmor는 모두 보안 강화를 위해 사용되는 리눅스 보안 기능이지만, SELinux는 더 많은 기능과 세밀한 제어를 제공하는 반면, AppArmor는 사용자 친화적인 설정과 상대적으로 간편한 구성을 제공합니다.
LVM
LVM(Logical Volume Manager)은 리눅스에서 사용되는 저장장치 관리 기술로, 논리적인 볼륨을 생성하고 조작할 수 있게 해줍니다. LVM은 물리적인 하드 드라이브를 하나 이상의 논리적인 볼륨 그룹으로 구성하고, 그룹 내의 볼륨을 만들고 확장하며, 볼륨에 대해 스냅샷 및 볼륨 복제를 수행하는 기능을 제공합니다. 이를 통해 유연하고 효율적인 저장장치 관리가 가능하며, 디스크 공간 할당 및 관리 작업을 쉽게 수행할 수 있습니다.
SUDO
'Super User DO' 혹은 'Subsititude User DO'의 의미입니다. 즉, 윈도우에서의 관리자 권한으로 실행 옵션과 같습니다
sudo는 다음과 같이 설치할 수 있습니다.
apt-get update // 패키지 업데이트
apt-get install sudo // sudo 설치
설치를 했다면, visudo로 세팅을 잡아줘야합니다.
visudo
입력하여 sudo 세팅을 시작합니다.
sudo의 path를 문제에서 지정해줬으므로, 경로를 변경합니다.
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
그리고, sudo 사용중 문제에서 요구하는 세팅들을 설정해줘야하므로 다음과 같이 설정합니다.
Defaults authfail_message="Authentication fail" // 권한 획득 실패 메시지
Defaults badpass_message="Password fail" // 비밀번호 오류 메시지
Defaults iolog_dir="/var/log/sudo/" // sudo 사용 로그파일 저장 위치
Defaults log_input // sudo 입력 로그 저장
Defaults log_output // sudo 출력 로그 저장
Defaults requiretty // TTY 사용자 로그인 세션에서 sudo 활성화
Defaults passwd_tries=3 // sudo 비밀번호 입력 제한
여기서 TTY란, TeleTYpewriter로 리눅스에서 콘솔이나 터미널을 의미합니다
근데, /var/log/sudo 에 저장하기로 했는데 디렉토리가 없을 수도 있으므로 mkdir로 생성해줍니다
mkdir /var/log/sudo
그리고 사용자가 sudo 그룹에 들어가야 하므로 다음의 명령어를 실행합니다
usermod -aG sudo hyeoshin
-a : 기존의 그룹 외의 2차 그룹을 지정할 때 사용, -G와 같이 쓰입니다.
-G : 추가로 다른 그룹에 속하게 할 때 사용합니다.
https://starrykss.tistory.com/1542
GROUP / HOSTNAME
groupadd user42 // 그룹 추가
groupdel user42 // 그룹 삭제
hostnamectl set-hostname 바꿀이름
UFW
apt-get install ufw // ufw 설치
ufw status verbose // ufw 방화벽의 상태를 출력
ufw enable // ufw 방화벽을 활성화
ufw default deny // ufw 방화벽의 기본 정책 차단
ufw default allow // ufw 방화벽의 기본 정책 허용
ufw allow 4242 // 4242번 포트 허용
ufw allow 4242/tcp // 4242번 포트를 tcp만 허용
ufw allow 4242/udp // 4242번 포트를 udp만 허용
ufw delete 순서 // 순서는 ufw status numbered로 확인 가능
SSH
service sshd status // case 1
systemctl status sshd // case 2
가상머신에서 ssh 서비스의 상태를 확인하기 위해서는 두가지의 방법을 사용할 수 있습니다.
vi /etc/ssh/sshd_config
ssh의 설정을 바꾸기 위해서는 vi / vim 에디터로 다음 파일을 변경해주면 됩니다.
Port 4242
PermitRootLogin no
문제에서 요구하는 조건은 포트가 4242일것, 루트 계정으로는 ssh 로그인이 안되게 할 것 이기 때문에 다음과 같이 설정합니다.
ipconfig getifaddr en0 // case 1
ifconfig | grep "inet" // case 2
클러스터에서 사용하는 Mac의 ip주소는 다음과 같이 찾을 수 있습니다.
이를 사용하기 위해서는 사전 세팅이 필요합니다
가상머신의 네트워크를 하나 만들고, 리눅스 가상머신 자체의 세팅에 들어가서 포트포워딩을 진행해야합니다
이 때 Host IP는 사용하는 (필자의 경우는 클러스터 맥) 컴퓨터의 ip, Guest IP는 가상머신의 ip입니다.
hostname -I
해당 명령어를 가상머신에서 실행하면 가상머신의 ip를 얻을 수 있습니다
포트포워딩 작업이 끝나면, 사용하는 컴퓨터에서 터미널을 열고 다음을 입력합니다.
ssh hyeoshin@아이피주소 -p 4242 // 4242번 포트를 통해서 아이피주소로 SSH 접속
그럼 아래와 같이 접속됩니다.
강력한 비밀번호 정책
apt-get install libpam-pwquality
libpam-pwquality를 설치해줍니다.
sudo vim /etc/pam.d/common-passwd
password requisite pam_pwquality.so retry=3 minlen=10 ucredit=-1 lcredit=-1 dcredit=-1 maxrepeat=3 reject_username enforce_for_root difok=7
retry <= 가능 시도 횟수
minlen <= 최소 길이
ucredit <= 최소 UpperCase 문자 개수 (-1의 경우 최소 1개는 들어가야한다는 의미)
lcredit <= 최소 LowerCase 문자 개수
dcredit <= 최소 Digit 개수
maxrepeat <= 최대 반복 허용
reject_username <= username 포함 불가
enforce_for_root <= root에도 동일한 설정 적용
difok <= 기존 암호와 달라야하는 문자의 개수
login.defs를 열어 다음을 수정해줍니다.
sudo vim /etc/login.defs
PASS_MAX_DAYS 30 // 비밀번호 최대 사용 기간
PASS_MIN_DATS 2 // 비밀번호 최소 사용 기간
PASS_WARN_AGE 7 // 비밀번호 변경 경고 기간, 비밀번호 만료 7일 전부터 메시지 표시
기존에 만들어진 계정에 대해서는 적용되지 않으므로, 생성된 계정들은 다음과 같이 설정합니다
chage 사용자이름
Crontab / Monitoring.sh
crontab -e
*/10 * * * * /root/monitoring.sh | wall
crontab의 매 칸의 의미는 다음과 같습니다.
/ Minute Hour Day Month Week
/ 0-59 0-23 1-31 1-12 0-7(0, 7 = SUNDAY)
wall 명령어는 사용자의 터미널로 메시지를 보내기 위해서 사용합니다.
df - 마운트된 파일 시스템의 크기와 용량을 보여주는 명령어입니다.
(a - 모든 파일, BM - megabyte 단위로 출력)
free - 메모리 사용량과 여유량 그리고 캐싱으로 사용되는 메모리가 얼마나 있는지 출력합니다.
mpstat - 시스템에서 모든 논리적인 프로세서를 위해 성능 통계를 수집하고 표시합니다.
journalctl - systemd의 로그를 확인합니다.
shasum을 통하여 hash값 대조까지 완료하면 해당 과제는 클리어
Comment