42Seoul [born2beroot]
born2beroot
이 과제는 시스템 관리 관련 연습입니다.
이번 과제는 기계체점이 존재하기 않고 평가자와 피평가자의 동료평가로 이루어 진다.
디펜스 하는 동안 os에 대해 질문을 받는다. 예를들면 aptitude 와 apt의 차이 , SELinux 또는 AppArmor가 무엇인지..
직접 사용자를 생성하고 그룹을 할당하며 비밀번호 규칙이나 port개방등을 할 수 있어야 한다.
개인적으로 마지막 쉘스크립트 작성을 공부하기에 좋은 과제인것 같다…ㅠ
시작하기 전 필요한 정보들
제가 공부한 기록으로 스스로 까먹지 않도록 기록합니다.
리눅스 설치 이후의 기본 구조, 모니터링sh를 위한 쉘스크립트, 배경지식, 명령어 및 매크로 사용 방법 등 다양하게 필요한 정보를 정리했다.
각 정보가 다른 정보에 연결이 많이 되어 있어서 필요에 따라 목차로 원하는 곳으로 이동하길 추천
가상머신이란?
가상머신(VM)이란 컴퓨팅환경을 소프트웨어로 구현한 소프트웨어 컴퓨터로 컴퓨터안에 다른 컴퓨터를 생각하면 된다. 하이퍼바이저 기술로 동작하며 여러 다양한 물리 리소스들을 os에서 동일한 방식으로 사용할 수 있게 한다.
물리적 컴퓨터처럼 어플리케이션과 운영체제를 실행한다. 그렇다고 해서 물리적 컴퓨터인것은 아니다. 물리적 컴퓨터에서 실행되며 물리적 컴퓨터처럼 동작하는 컴퓨터 파일이다.
여러 가상환경을 사용할 수 있기 때문에 비용, 속도측면에서 큰 이점을 가져다 준다.
여러가지 운영체제에 대해서 테스트를 하거나 위험한 작업을 해볼 수 있으며 이러한 작업의 가치가 굉장히 크다.
단점으로는 하나의 물리적 시스템에서 여러 가상머신을 실행하게 되면 그에 따라 성능이 불안정해질 수 있다.
기본적으로 호스트
와 게스트
개념을 이해해야 한다.
가상머신(게스트)은 호스트라고 하는 컴퓨팅환경에서 생성되게 되고 하나의 호스트에서 여러 가상머신이 동시에 존재할 수 있다.
즉 호스트는 하이퍼바이저를 실행시키는 물리적인 컴퓨터를 말하고 호스트는 그런 하이퍼바이저로 부터 가상의 리소스를 받아 쓰는 컴퓨터이다.
하이퍼바이저(Hypervisor)
하드웨어위에서 동작하며 VM은 하이퍼바이저 위에서 동작한다.
가상머신 모니터라고도 하며 VM을 생성하고 실행하는 프로세스다. 단일 호스트 컴퓨터의 리소스를 가상으로 공유하여 호스트 컴퓨터가 여러 게스트 가상머신을 지원할 수 있다.
간단하게 말해서 호스트의 자원을 가상으로 공유하여 게스트가 사용할 수 있는 것.
2가지 유형이 있으며 하드웨어위에 설치되는 형태와 호스트운영체제 위에 설치되는 형태가 있다.
하드웨어위에 설치되는 하이버바이저는 베어메탈
이라고 하며, 호스트의 하드웨어에서 직접 실행이 된다.
호스트운영체제위에 설치되는 하이퍼바이저는 호스팅
이라고 하며 다른 프로그램 운영체제에서 소프트웨어 계층으로 실행된다.
이러한 프로세스를 사용하는 이유는 게스트 가상머신이 호스트 하드웨어와 독립되어 시스템의 가용 리소스를 더 많이 활용하고 가상머신을 여러 서버간에 쉽게 이동할 수 있다.
virtualbox는 후자에 속한다.
debian vs centOS
debian: 리눅스 배포판으로 리눅스 커널이 포함되어 있다. 커널에 대한 설명은 이전에 포스팅하였다.
데비안은 온라인에서 개발중이며 개인 사용자가 사용하기 간편하다.
상대적으로 centOs에 비해 시장이 작지만 개인이 사용하기 좋음
패키지 매니저에서 차이점이 존재함.
centOS는 Linux 배포판으로 무료이며 오픈소스이다.(현재는 유료 2021년 이후)
두 os모두 웹, 이메일, FTP등과 같은 웹서버로 자주 사용된다.
debian의 경우 최신 패키지가 많고 업그레이도 간편하기 하다.
APT(Advanced Packaging Tool)
데비안의 패키지 매니저는 apt, aptitude등이 존재하며 aptitude는 gui,cli를 지원하며 apt-get보다 휠씬 다양한 기능을 제공한다.
간단하게 high vs low의 레벨을 가진 패키지 매니저이다.
둘다 설치, 제거, 검색의 기능을 포함한 패키지 매니저로 apt는 gui가 아닌 cli로 커맨드라인으로 존재하지만 좀 더 high레벨의 aptitude는 인터페이스를 추가하여 대화식으로 패캐지를 검색하고 설치할 수 있다. 기능적인 부분도 물론 좀 더 좋음
apt와 apt-get의 차이점?
리눅스 패키지를 설치하다보면 어디서는 apt install
이고 apt-get install
인 경우가 있다.
사실 크게 차이는 없지만(내부동작의 차이도 크게 없음) apt는 사용자가 사용하기에 자주 사용하는 옵션들을 추출하여 보기 좋게 만들었다.
아래에 설치바가 보인다든지 cli환경에서.. 좀 더 보기 좋게 만들었다.
apt는 apt-get과 apt-chache를 합친것이라고 한다..
간단하게 설치할 때는 apt를 사용하여 설치하는게 좋다고 하지만 스크립트에서는 apt-get을 사용하는게 좋다고 한다.
aptitude사용법
apt install aptitude
마찬가지로 패키지이기 때문에 설치한다.
atitude의 장점은 패키지 설치와 제거가 정말 간편하다는 것..!
atitude install package1 package2- package3_
package1은 설치 package2는 제거 package3은 패키지 및 환경파일 제거다.
위의 3가지일을 한번에 하는 것
why명령어를 사용하면 해당 설치해야하는 이유, 설치할 수 없는 이유등 알 수 있다.
atitude만 단일로 사용하게 되면 위에서 말한 gui환경에 진입해서 패키지를 관리할 수 있다.
APPArmor(Application Armor)
리눅스 커널의 보안 모듈로 오픈소스이다.
쉽게 말해서 권한을 통제하여 프로그램을 보호한다.
크게 네트워크 엑세스 권한, raw소켓 엑세스 권한, 파일의 읽기/쓰기/실행권한을 통제한다.
aa-status cat /sys/module/apparmor/parameters/ # enabled에서 상태를 확인할 수 있다.
위의 명령어로 상태를 확인할 수 있다.
3가지 모드가 있다.
- enforce mode: 허용되지 않은 동작을 제한하고 로그를 남긴다.
- complain mode: 동작은 제한하지 않고 로그만 남긴다.
- unconfined mode: 제한하지 않고 로그도 남기지 않는다.
/var/log/syslog에 저장된다.
프로필을 설정하여 해당 명령어의 접근을 막을 수 있다.
UFW(Uncomplicated Firewall)
리눅스에 기본적으로 존재하는 방화벽인 iptables
가 있는데 절차가 복잡하여 이러한 작업을 간소화 해주는 소프트웨어가 UFW 즉, 복잡하지 않은 방화벽이다.
방화벽소프트웨어인만큼 외부 접근을 막는다.
사용법은 아래에서
SSH
원격으로 호스트에 접속하기 위해 사용되는 보안 프로토콜로 모든 데이터가 암호화 보장되기 때문에 안전하다.
한쌍의 key를 이용하여 데이터를 암호화, 복호화를 진행하며 통신한다.
private key는 클라이언트, public key는 호스트
etc/ssh/sshd_config가 server에서 설정하는 port번호이다.
리눅스 디렉 기본 구조
리눅스 설치 후 ls -al
명령어를 통해 디렉토리를 보면 아래와 같이 이루어져 있다.
왜 존재하는지에 대한 생각하며 한번 정리가 필요하다.
구조가 다를 수 있음
/: 최상위 디렉토리로 root 디렉토리로 불린다.
/bin: binary의 약자로 실행파일의 모음이다. 일반적으로 사용하는 명령어들의 모음이 들어 있으며 cat과 같은 명령어 파일들이 있다.(하위 디렉토리가 존재할 수 없음)
/boot: 부팅에 필요한 파일들이 있다.
/dev: device의 약자로 물리적 장치가 파일화되엉 있음
/etc: 각종 환경 설정 파일들이 모여있음
/home: 개인사용자들 디렉토리
/lib: 각종 라이브러리 저장 디렉토리
/mnt: CD-ROM, 네트워크 파일 시스템등을 마운트 할때 사용되는 디렉토리..?
/proc: 현재 실행되고 있는 프로세스들이 파일화 되어서 저장되는 디렉토리
/root: root계정의 home디렉토리
/sbin: System-binary의 약어, 시스템 관리자가 쓰는 시스템관련 명령어 프로그램이 들어있다.
/temp: 임시저장 디렉토리, 모든 사용자에게 열림
/usr: 주로 새로 설치되는 프로그램들이 저장된다.
/var: 시스템 로그, 스풀링 파일들이 저장된다. 메일 또한.
과제에서 요구하는 lsblk
로 파티션 정보를 찍었을 때(리눅스 디바이스의 정보를 출력)
NAME: 가장 먼저 이름은 sda로 뒤의 TYPE을 보면 disk로 표시되는 것을 알 수 있다. 하나의 하드디스크(물리적)로 sd뒤에 순서대로 알파벳이 붙는다. 따라서 sd + a
인 것
두개의 물리적 디스크를 사용한다면 sda, sdc로 출력될것
sda아래 sda1은 각 드라이브 상의 파티션으로 디스크 이름 뒤에 숫자를 붙인 이름을 갖게 된다.
TYPE은 part로 파티션을 의미하고 1,2,5의 파티션으로 분활되어 있다.
보는것 처럼 sda1, sda2..
실제로 여기까지는 리눅스 기본폴더인 /dev
에서 확인할 수 있다.
아래VG, lVM에 관련한 정보나 파티션에 대한 자세한 정보는 아래나 위의 목차 필요한 정보에서 확인할 수 있다.
monitoring.sh 해석
비공개
- /proc/cpuinfo 경로에 cup관련 정보
- /proc/net/sockstat 경로에 tcp소켓 정보
- uname -a: 시스템의 정보를 출력해준다. 주로 시스템과 리눅스커널에 관련된 정보를 확인할 수 있다. -a는 모든 시스템정보
- free -h: 메모리 관련 정보를 보기 쉽게 표시해준다.
- hostname -I: ip주소..
쉘 스크립트에 대한 내용은 리눅스 쉘스크립트
명령어에 대한 자세한 내용은 리눅스 명령어 모음
cron
쉽게말해서 스케줄러의 일종인데, 특정 작업이나 프로세스를 특정시간,이벤트 발생 시 자동으로 실행하는 것이다.
독자적인 프로세스기 때문에 백그라운드 프로세스와 다르고 독자적인 성격을 지닌다.
이러한 적업 특성상 시간마다 실행해야 하는 작업을 등록하여 사용한다.
*
*
*
*
*
*
순서대로 분 시 일 월 요일을 가리키며 뒤에는 실행 작업을 적으면 해당 시간에 맞게 실행된다.
ex) */10 * * * * /monitroing.cs
명령어 사용법
- adduser, deluser, addgroup, delgroup
- adduser로 사용자 추가
- adduser fkdl 사용자 추가, adduser fkdl sudo/ sudo 그룹에 추가
- deluser fkdl 사용자 삭제, deluser fkdl sudo/ sudo 그룹에서 삭제
- addgroup으로 그룹 추가
- /etc/group에서 직접 삭제나 추가 가능
- getent group에서 그룹 확인
- groups로 자신 그룹확인
- ssh 설치 및 포트 변경
- apt-get install openssh-server로 설치
- sudo service ssh restart로 현재 초기화 및 sudo systemctl status ssh 로 현재port확인
- sudo nano /etc/ssh/sshd_config에서 port변경 sudo grep Port /etc/ssh/sshd_config로 확인
- PermitRootLogin no 로 변경으로 root 로그인 막기
- 변경 후에는 무조건 restart하기
- ufw방화벽 설정
- apt-get install ufw 다운로드
- sudo ufw enable 방화벽 활성화
- sudo ufw disable 방화벽 비활성화
- sudo ufw status verbose 현재 상태
- 특정 포트 활성화 sudo ufw allow [포트번호]
- 특정 포트 비활성화 sudo ufw deny [포트번호]
- 해당 규칙 삭제 ufw delete deny [포트번호]
- cat /etc/ufw/user.rules 해당 룰 확인
- 패스워드 정책 설정
- vi /etc/login.defs 파일에서 변경
- PASS_MAX_DAYS 30 유효 날짜
- PASS_MIN_DATS 2 변경 후 2일 뒤까지 변경 불가능
- PASS_WARN_AGE 7 만료 전 7일 경고
- 좀 더 추가적인 작업을 하기위해 라이브러리 다운 apt-get -y install libpam-pwquality
- vi /etc/pam.d/common-password
- minlen=10 ucredit=-1 lcredit=-1 dcredit=-1 maxrepeat=3 reject_username enforce_for_root difok=7
- 순서대로 최소길이 10, 대문자 소문자 숫자를 필요로 함, 연속된 문자3가지 금지, 이름에 포함된 비밀번호 금지, 루트 적용, 이전비밀번호 7글자 금지
- 그룹 설정
- cat /etc/passwd로 현재 사용자 확인
- cat /etc/group로 현재 그룹 확인
- adduser를 통한 사용자 추가시 그룹도 같이 추가됨
- addgroup를 통해 그룹 추가 가능
- 호스트명 변경
- hostnamectl -> 호스트네임 및 정보 확인
- hostnamectl set-hostname “변경 이름”
- 파티션 설정
- lsblk명령어로 파티션 보기
- sudo 정책, 로그
- visudo로 접근하여 설정
- monitoring
- 운영 체제의 아키텍처 및 커널 버전
- 물리적 프로세서의 수
- 가상 프로세서 수
- 서버의 현재 사용 가능한 RAM과 활용률(백분율)
- 서버의 현재 가용 메모리와 활용률(백분율)
- 프로세서의 현재 활용률(백분율)
- 마지막으로 재부팅한 날짜 및 시간
- LVM의 활성 여부
- 활성 연결 수
- 서버를 사용하는 사용자 수
- 서버의 IPv4 주소와 MAC(Media Access Control) 주소.
- sudo 프로그램으로 실행된 명령어의 수
필요한 정보
파티션: 제한된 공간을 효율적으로 용도와 목적에 맞게 분리하여 사용할 수 있다.
리눅스에서 파티션의 개념은 3가지로 구분되는데 주영역 파티션(Primary Partition), 확장 영역 파티션(Extend Partition), 논리 영역 파티션(Logical Partition)이다.
이러한 파티션을 나누는 작업을 파티셔닝이라고 하며 Primary파티션 영역은 최대 4개의 공간으로 나눌 수 있으며, 일반적으로 Extend영역을 많이 확장하여 사용한다.
12개를 넘어가면 성능이 저하된다고 한다.
필요에 따라 lvm을 사용하여 논리적으로 쪼개거나 합쳐서 사용할 수 있다.
lvm: Logical Volume Manager
의 약어로 논리 볼륨 생성, 관리를 도와주는 파티셔닝도구이다. 리눅스 파티션에서 중요한 개념인 이유는 시스템상 주 영역을 4개까지 밖에 분할하지 못하기 때문에 lvm을 사용하여 논리적으로 구성할 수 있다.
lvm또한 3가지 영역으로 구분된다.
Physical Volume(PV): 물리 파티션 공간으로 lvm에 귀속하여 해당 영역을 확보한다. 해당 영역의 공간이 충분하더라도 물리적으로 파티셔닝이 불가능
Volume Group(VG): PV에 등록된 파티션을 하나의 그룹으로 묶을 수 있다. 이렇게 묶인 그룹을 VG
라고 부르며 해당 그룹(영역)의 용량은 통합된다.
Logical Volume(LG): VG는 자신이 관리중인 PV에서 논리적으로 공간을 분활할 수 있다. 이렇게 분리된 파티션을 LV
라고한다.
쉽게 정리하면 lvm은 사용자가 논리적으로 디스크공간을 합치고 나눠서 쉽게 관리할 수 있다.
하나의 LV는 특정 디렉에 마운트될 수 있다.
마운트: 파티셔닝된 물리, 논리공간을 특정 디렉토리에 연결되어 보이는 것을 마운트되었다고 말한다. df
명령어를 통해 마운트된 디렉토리를 확인할 수 있다.
TTY: teletypewriter의 약어로 리눅스 디바이스 드라이브중 콘솔 또는 터미널을 의미
vdi: virtualBox에서 전용으로 사용하는 가상머신 이미지 파일(snapShot에 사용)
iso: 광학 디스크의 압축파일로 많은 파일이나 폴더를 하나의 파일안에 넣어둔 것을 말한다.
snapshot: snapshot기능을 사용하면 특정한 시점의 상태를 저장가능하다. 평가때는 snapshot을 찍고 해시값을 저장하여 제출..! cmd+t
마치며
확실하게 한다는 마인드로 하니까 리눅스나 운영체제에 대한 시야가 넓어진것 같다 쉘스크립트는 덤…
댓글남기기