1. 가상머신이란?
1) 정의 및 작동 방식
가상머신 : 물리적 컴퓨터와 동일한 기능을 제공하는 소프트웨어 컴퓨터
- 기본적으로 컴퓨터는 하드웨어 위에 운영체제가 올라가있고, 그 위에서 응용 프로그램이 작동하는 방식으로 동작. 이 때 메모리에 상주하는 운영체제의 핵심 부분을 커널이라고 한다.
- 가상머신은 하나의 물리적인 컴퓨터에서 여러개의 독립적인 가상환경을 생성하여 동작시키는 기술
- 하이퍼바이저는 가상머신의 생성, 자원 할당, 네트워킹, 저장장치 관리, 보안 등을 처리하며, 가상머신들 간의 리소스 분할과 격리를 관리하여 각각의 가상머신이 독립적으로 동작 할 수 있도록 한다.
- 도커는 컨테이너 기술을 사용하여 호스트 시스템의 운영체제를 공유하기 때문에 더 가볍고 효율적인 리소스 사용이 가능
2) 목적
- 하나의 컴퓨터로 동시에 서로 다른 2개 이상의 운영체제를 실행하고 싶을 때
- 하나의 컴퓨터의 자원을 여러 명에게 나누어주고자 하는데 각 사용자 간 상호 간섭을 없애고 싶을 때
- 컴퓨터의 다른 영역에 영향을 주지 않는 독립적인 환경을 만들고 싶을 때
- 각 가상머신은 다른 가상머신과 격리되어 있으며, 서로의 운영체제와 애플리케이션에 영향을 주지 않는다. 또한 물리적인 하드웨어와 독립적이므로 다른 호스트 컴퓨터로 이동하거나 클라우드 환경에서 실행될 수 있다.
2. 파티션과 LVM(Logical Volume Manager)
파티션 : 물리적인 디스크를 여러 논리적인 섹션으로 분할하는 것. 일반적으로 운영체제, 응용 프로그램, 데이터 등을 구별하기 위해 사용
LVM : 물리적인 디스크를 논리적인 단위로 관리하는 프레임워크. 논리적인 디스크 공간을 필요에 따라 동적으로 변경하거나 재분배 할 수 있다.
파티션이 디스크를 분할하는데 초점을 맞춘 기법이라면, LVM은 디스크를 분할하고 합치고 크기를 동적으로 조정하는 등 더욱 유연한 디스크 관리를 가능하게 한다.
리눅스 시스템에서는 하나의 하드디스크에 최대 4개의 기본 파티션을 생성할 수 있으며, 필요에 따라 더 많은 파티션을 생성하고 싶을 때 확장 파티션을 생성한다. 즉, 4개 이상의 파티션이 필요하면 하나의 파티션을 확장 파티션으로 잡고 확장 파티션 내에서 다시 논리 파티션을 구분하는 방식으로 우회하는 것이다.
위 사진은 가상머신에서 리눅스 파일 시스템 계층 구조를 간략하게 구현한 것이다.
/ | 루트 디렉토리로, 시스템이 시작되는 첫 번째 위치 |
/boot | 리눅스 시스템을 부팅하는데 필요한 파일들이 저장되어 있는 디렉토리 |
[SWAP] | 컴퓨터의 RAM이 가득 찼을 때, 리눅스 시스템이 임시로 사용하는 디스크 공간 |
/home | 일반 사용자들의 홈 디렉토리를 담고 있다. 사용자를 등록하면 일반적으로 /home/계정명으로 사용자 계정 디렉토리가 생성되고 운영된다. |
/var | 시스템이 실행되면서 내용이 자주 변경될 수 있는 데이터를 저장 (로그 - 시스템 상태, 동작 등을 기록 / 스풀 - 프린터 작업, 메일, 스케줄 작업 등) |
/srv | 시스템에서 제공하는 서비스 데이터를 저장 |
/tmp | 시스템이 재부팅 될 때 삭제되는 일시적인 파일들을 저장 |
3.Sudo
- 'super user do'의 약자로, 각종 명령어 앞에 sudo를 붙이면 최고 관리자 권한으로 실행된다.
- etc/sudoer 설정 파일에 명시된 사용자만 사용 가능하다.
- Deafult env_reset : sudo를 사용할 때 사용자가 시스템의 환경변수만 사용되게 하도록 제한. 환경변수가 예기치 않게 변경되어 의도하지 않은 동작을 유발 하지 않도록 함.
- mail_badpass : 비밀번호를 잘못 입력한 경우, 이 설정에 따라 알림 이메일이 관리자에게 전송.
- secure_path : sudo를 사용하여 실행할 수 있는 명령어의 경로를 제한. 이를 통해 sudo를 사용하는 사용자가 임의의 명령어를 실행하는 것을 방지.
- authfail_message : 비밀번호 인증에 실패한 경우에 표시되는 메시지를 지정. %d는 실패한 비밀번호 시도 횟수를 나타내는 특수한 플레이스 홀더.
- badpass_message : 잘못된 비밀번호를 입력했을 때 나타나는 오류 메시지.
- log input/log output : sudo를 사용하여 실행한 명령어의 입력과 출력을 로그 파일에 기록
- requiretty : sudo를 사용하여 실행되는 명령이 tty(터미널)가 필요로 하는지를 지정
- iolog_dir : sudo 사용 로그파일의 디렉터리 경로를 지정
- passwd_tries : 사용자가 비밀번호를 재시도 할 수 있는 최대 횟수를 지정
해당 항목은 사용자별로 sudo를 사용할 수 있는 특권을 지정하는 부분으로, 각 줄의 구조는 "사용자명 호스트 = (실행할 사용자 : 실행할 그룹) 실행할 명령"을 의미한다.
따라서 위의 경우 모든 호스트(컴퓨터)에서 모든 사용자/모든 그룹으로 어떤 명령이든 실행 할 수 있도록 권한을 부여한 것이다.
특정 사용자에게 sudo 권한을 부여하려면 '/etc/sudoers' 파일에서 권한 부여를 해주고, sudo group에 추가까지 마쳐야 한다.'
4. UFW (Uncomplicated Fire Wall)
- iptable 기반의 간단하고 사용하기 쉬운 방화벽 설정 도구
- 특정 포트, IP 주소 또는 서비스에 대한 접근을 허용하거나 거부하는 규칙을 설정할 수 있음
- 허용되거나 거부된 트래픽에 대한 로그를 기록
- 포트는 컴퓨터와 외부 네트워크간의 통신을 위한 창구로 작동하므로, 특정 포트만 허용함으로써 악의적인 사용자들이 해당 포트를 통해 시스템에 엑세스하거나 공격하는 것을 방지 할 수 있음.
- 트래픽 제어 가능 (예컨대 웹 서버를 운영하는 경우 80번 포트만 허용하여 웹 트래픽을 처리하고, 다른 포트는 차단함으로써 비웹 트래픽을 제한).
5. SSH (Secure Shell)
- 네트워크상에서 안전한 원격 접속을 제공하는 프로토콜
- ssh는 데이터 통신을 암호화해서 보호하며, 무결성을 위해 암호화화 함께 메시지 무결성 체크를 사용, 공개키 기반 인증을 사용.
- ssh 나오기 전 사용하기 전 사용하던 telnet의 경우 평문으로 통신하며 무결성 체크를 지원하지 않고, 패스워드 인증을 사용.
- ssh 포트를 22번에서 4242번으로 변경 : 많은 공격자들이 기본적으로 사용되는 22번 포트를 대상으로 공격을 시도하므로, 포트 번호를 변경함으로써 보안을 강화
- ssh를 통해 root 권한으로 직접 접속하지 못하게 제한 : root는 시스템에서 최고 관리자 권한을 가지고 있으므로 일반 사용자에 대한 공격보다 훨씬 위험하기 때문에 root로의 직접적인 ssh 접속을 차단
6. 비밀번호 정책설정
- 암호는 30일마다 만료
- 비밀번호를 수정하기 전에 허용되는 최소 일 수는 2
- 암호가 만료되기 7일 전에 경고 메시지를 전송
- 최대 시도 횟수 : 3회
- 최소 길이 : 10
- 기존 암호와 달라야 하는 문자의 개수 : 7
- 대문자 1개 이상 포함, 소문자 1개 이상 포함, 숫자 1개 이상 포함
- 비밀번호에 유저명이 포함되어서는 안 됨
- 루트 계정에도 해당 규칙 적용
- 같은 문자가 3번 이상 반복되면 안 됨
* pam_pwquality
- pam(Pluggable Authentication Modules) : Linux 시스템에서 인증과 관련된 작업을 처리하는데 사용되는 프레임워크
- libpam -pwquality : PAM을 확장하여 패스워드의 품질과 보안을 강화하는데 사용되는 모듈
pam을 사용하기 이전 리눅스 시스템에서는 각 응용 프로그램이 사용자 인증을 위해 자체적으로 로직을 구현하여 사용했기 때문에, 사용자 정보가 담긴 주요 시스템 파일인 '/etc/passwd'에 대한 접근 권한을 가지고 있어야 했다. 그러나 응용 프로그램이 사용자 정보가 담긴 주요 시스템 파일에 대한 직접적인 접근 권한을 가지고 있을 경우 보안과 관련한 위협이 있기 떄문에 pam이 등장하게 되었다. pam을 사용하면 인증이 필요한 응용 프로그램은 더 이상 passwd 파일을 열람하지 않고 pam 모듈에 사용자 인증을 요청하며, pam은 요청한 사용자의 정보를 가지고 결과를 도출하여 응용 프로그램에 전달한다.
7. CRON
Unix 및 Unix 기반 시스템에서 주기적인 작업을 예약하기 위해 사용되는 시간 기반 작업 스케줄러. 'crontab' 파일을 사용하여 작업을 정의하며, 정의된 작업은 지정된 시간 간격에 따라 실행 된다.
- crontab -e 명령어는 crontab 파일을 편집하기 위해 사용되는 명령어.
- crontab -e 는 현재 사용자의 개인적인 crontab 파일을 편집하며, /etc/crontab 파일은 시스템 전체의 cron 작업을 관리.
- 위 경우 10분마다 /home 디렉토리의 monitoring.sh 파일을 출력.
'운영체제' 카테고리의 다른 글
pipex (2) | 2023.07.08 |
---|---|
8. 가상 메모리 - 페이징 기법/세그먼테이션 기법 (0) | 2022.06.08 |
7. 메모리 관리 기법 - 절대주소와 상대주소/메모리 오버레이와 스왑/가변분할방식과 고정분할방식 (0) | 2022.06.08 |
5. 프로세스 동기화 - 프로세스 간 통신/공유자원/임계구역/피터슨&데커 알고리즘 (0) | 2022.06.07 |
4. CPU 스케줄링 - 개요/우선순위/종류 (0) | 2022.06.04 |