[Born2beroot] 정리
가상머신이란?

- 실재하는 컴퓨터 상에 소프트웨어로 논리적으로 만들어낸 컴퓨터

- 하나의 물리 자원위에 하나의 환경만 있는 것을 효율화하고자 가상화층을 만들고 그 위에 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

 

[리눅스 명령어] usermod

usermod I. 개념 사용자 계정 관리 : usermod 사용자와 관련하여 대부분의 정보를 변경할 수 있음. 셀 홈 디렉터리 그룹 UID GID 사용법 # usermod [option] 사용자 계정 -d 사용자의 홈 디렉터리 변경 변경할

starrykss.tistory.com

 

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값 대조까지 완료하면 해당 과제는 클리어