1) 개념
- 1개의 물리적인 컴퓨터에서 여러 개의 운영체제를 구동하는 환경을 제공
- virtual machine은
hypervisor
위에서 동작
- hypervisor : 하드웨어에서 리소스를 사용하여 VM을 생성 및 관리
- VM의 관점 : 단일 컴퓨터 환경과 같은 경험을 제공, 접근하는 하드웨어 디바이스가 가상이라는 것을 알지 못하고, 표준 디바이스 다루는 것처럼 인식
2) 장점
- 비용 절감 (여러 가상 환경을 하나의 하드웨어에서 설치하여 물리적 인프라 설치 공간 줄임)
- downtime 최소화 (VM은 호스트가 예기치 않게 중단될 경우 다른 물리적 서버의 Hypervisor로 이전 가능)
![](https://velog.velcdn.com/images/24tngus/post/7d2361a4-3b5e-4481-9a62-bc22d5d1767a/image.png)
3) Hypervisor
하드웨어 바로 위에 Hypervisor
설치 (KVM)
VM 리소스는 하이퍼바이저가 하드웨어에 직접 예약함
하드웨어 위에 Host OS
위에 Hypervisor
설치 (Virtual Box)
VM 리소스는 호스트 운영 체제에 따라 예약된 후 하드웨어에 대해 실행됨
4) 가상화
여러 곳에 분산되어 있는 데이터를 단일 소스로 통합함
중앙 관리자 또는 자동화된 관리 툴을 통해 여러 물리 머신에 동시 배포되도록 지원 (관리자가 모든 가상 데스크탑에서 구성, 업데이트, 보안 점검을 대규모로 수행)
운영 체제의 중앙 태스크 관리자인 커널에서 이루어짐 (Linux와 Windows 환경을 함께 실행 가능)
서버는 특정 태스크를 효과적으로 처리하는데 가상화하면 특정 기능을 많이 수행할 수 있고 서버 파티셔닝을 통해 구성 요소로 여러 기능 지원 가능
디렉터리 서비스, 파일 공유, IP 설정과 같은 네트워크 기능을 분리하여 환경에 배포함
📕 Rocky & Debian
리눅스 커널 + 자유소프트웨어로 구성된 리눅스 배포판 (패키지 관리 툴 및 포맷 차이)
1) Redhat
- 배포판 종류
- Rocky :
레드햇
에서 만든 RHEL의 오픈소스를 이용하여 RHEL과 1:1 대응되는 배포판OS (무상OS)
- RHEL : 제품 구매 및 서브스크립션 구매가 필요함 (정식 유상 제품)
- CentOS : RHEL에 적용 및 패치되기 전의 커널 및 새로운 기능 탑재된 상태 (RHEL Test)
- enterprise용 서버에서 사용
- 패키지 포맷으로
.rpm
확장자 사용 및 YUM를 패키지 관리툴로 사용
- 설치과정에서 GUI를 제공하여 설치가 쉬움
- 사용자가 rpm 파일을 일일히 조사하여 의존성 있는 패키지를 알아보고 설치해줘야함
2) Debian
- 배포판 종류
- Debian :
데비안
프로젝트에서 제작한 오픈소스
- Ubuntu : Debian기반 OS
- 개인 사용자들이 많이 사용
- 패키지 포맷으로
.deb
확장자 사용 및 dpkg/APT를 패키지 관리툴로 사용
- 패키지 설치 및 업데이트등 패키기 관리가 용이함
- 패키지 업데이트 속도가 느림
📒 운영체제
1) 임베디드
자체 제작한 운영체제(펌웨어) 많이 사용했지만, 최근 임베디드 장비에서는 리눅스 계열 커널 사용
2) 서버
유닉스 계열
3) 모바일
리눅스 계열 안드로이드
- 리눅스 : 데비안/레드햇/안드로이드 계열로 분류
4) 데스크탑
윈도우즈
![](https://velog.velcdn.com/images/24tngus/post/71f40f2f-5291-451e-9ca9-3e9d065593c1/image.png)
📒 Linux 사용 이유
- 높은 보안성 (바이러스, 멀웨어 피하는 방법)
- 안정된 구조 (가용성 높고, 충돌 잘 발생하지 않음)
- 유지보수의 용이성 (업데이트 후 재부팅 필요 없음)
- 하드웨어 이식성이 높음
- 무료
- 오픈소스 (보안성 높음)
1) SELinux (Security-Enhanced Linux)
- 접근 제어 보안 정책을 제공하는 리눅스 커널 보안 모듈
- 시스템 전체에 보안 설정
- 필수 액세스 제어(MAC) 보안 제공
- 레드햇 계열 (RHEL, Fedora, CentOS)
➡ 파일에 라벨을 적용하는 것에 기반 (경로 대신 아이노드 번호로 파일 시스템 객체를 구별)
2) AppArmor (Application Armor)
-
root보다 상위 권한으로 행동 제어하는 리눅스 커널의 보안 모듈
-
응용 프로그램단위로 보안 설정 (profile 파일을 통해 권한을 통제하여 개별 프로그램 보호)
- 네트워크 액세스 권한
- raw 소켓 액세스 권한
- 파일의 읽기, 쓰기, 실행 권한
-
필수 액세스 제어(MAC) 보안 제공
-
SUSE 계열, 데비안 계열
-
로그 메시지 확인 : 유해한 작업 수행하려는 어플리케이션 거부할 때마다 로그 찍음 (syslog, auditd, kerner log, journald logs)
➡ dpkg -l apparmor : apparmor 설치 여부 확인
![](https://velog.velcdn.com/images/24tngus/post/576c4fa9-a349-495f-b144-d6ed85bec3ed/image.png)
➡ aa-status : 리눅스 배포판에 AppArmor 정책 정보 확인
![](https://velog.velcdn.com/images/24tngus/post/e12baab2-fc67-429e-b9cd-e9ef3419bbd1/image.png)
➡ aa-enable : AppArmor 활성화 여부 확인 ![](https://velog.velcdn.com/images/24tngus/post/91cbe9b2-168a-4c02-9e2b-dc96084f6d1b/image.png)
3) 차이점
- SELinux : 각 파일에 대한 문자열로 작업
- AppArmor : 파일 시스템의 파일 경로로 작업 (읽기, 쓰기, 잠금 및 기타 팡리 작업 설정이 쉬움)
(ex. 하드링크 생성시 아이노드에 참조되는 데이터가 같기 때문에, SELinux는 새로 생성된 하드링크에 대한 접근을 거부하지만 AppArmor는 접근 가능)
1) DAC (임의 접근 제어, Discretionary Access Control)
- 시스템 객체에 대한 접근을 사용자나 그룹의 신분을 기준으로 제한
- 사용자나 그룹이 객체의 소유자면 다른 주체에 대해 이 객체에 대한 접근 권한 설정 가능
- 장점 : 구현 용이 및 사용 간편
- 단점 : root계정이 모든 권한 가지고 있어 권한 탈취시 시스템 취약함
2) MAC (강제 접근 제어, Mandatory Access Control)
- 미리 정해진 정책과 보안 등급에 따라 주체에게 허용된 접근 권한과 객체에게 부여된 허용 등급을 비교하여 접근 통제
- 높은 보안을 요구하는 정보는 낮은 보안 수준의 주체가 접근할 수 없고, 소유자여도 정책에 어긋나면 객체에 접근할 수 없는 강력한 보안 제공
- 장점 : 루트로 구동한 http서버라도 접근 가능한 파일과 포트가 제한됨 (취약점 이용해서 권한 획득해도 사전에 허용된 포트만 접근 허용됨)
- 단점 : 구현 및 설정이 복잡함
📕 apt & aptitude
- Debian계열 (Ubuntuu, Mint 등) 패키지 관리하는 툴 (Advanced Packaging Tool)
- 소프트웨어 설치 및 제거를 정상적으로 처리하는 무료 오픈소스 소프트웨어
1) apt
- CLI만 제공
- apt-get의 기능 간소화 (자주 사용하는 옵션만 추출)
- 사용자가 보기 편한 UI를 제공하여 사용하기 편리함
- 패키지 관리 작업시 사용
패키지 설치/삭제 중 충돌
될 경우 : 종료
사용되지 않는 패키지
: -auto-remove, apt-get autoremove 명시 필요
- 소프트웨어 검색/다운로드/설치/업그레이드, 종속성 검사
2) aptitude
- CLI 및 GUI 제공
- apt-get의 command-line argument 제공 (apt-get 완전 대체 가능)
- high-level package manager (apt-get, apt-mark, apt-cahce 기능 통합)
패키지 설치/삭제 중 충돌
될 경우 : 해결방법 제안 가능
사용되지 않는 패키지
: 자동 제거
- 설치된 패키지 목록/패키지를 자동/수동 설치, 업그레이드에 사용할 수 없는 패키지 보관
3) apt-get
- CLI만 제공
- apt보다 확장된 버전으로 의존성 관리가 되는 패키지 관리자 (저장소 URL - /etc/apt/sources.list)
- 스크립트 작성시 사용
apt-get
: 패키지 설치, 업데이트 및 제거
apt-cache
: 패키지 검색
dpkg
: 시스템에 설치된 패키지 검색
4) dpkg (Debian Package)
- Debian 패키지 관리 시스템의 기초 소프트웨어
- apt 보다 낮은 수준에서 작업 수행
- apt는 우분투 소프트웨어를 관리하기 위해 내부적으로 dpkg를 이용함
- 시스템에 있는 특정 파일이 어떤 패키지에 포함되는지 등 확인 작업을 수행하기 위해 필요함
- deb 패키지 설치/삭제시 사용
- .deb 파일 (데비안의 패키지 포맷 확장자)
- 외부 네트워크 접속이 안되는 환경에서 직접 다운받은 패키지 설치시 사용
![](https://velog.velcdn.com/images/24tngus/post/9bbd2914-f339-48ec-9aac-864dd5e3cbec/image.png)
📒 패키지
- 시스템에서 소프트웨어를 실행하는데 필요한 코드(실행 파일, 설정 파일, 라이브러리 등)가 담긴 설치 파일들
- 코드 배포를 위해 사용 (라이브러리 : 코드 작성을 위해 사용)
📕 LVM (Logical Volume Manager)
1) 개념
- 파티션을 볼륨(논리적인 개념)으로 나눠서 유동적으로 디스크 용량을 관리함
- 하드 디스크를 여러 파티션으로 분할해서 파일 시스템을 이용해 특정 디렉터리와 연결시켜 사용함
- 리눅스에서 디스크를 사용하는 기본적인 방법 : 디스크를 파티션으로 나누어 각각의 디렉터리에 파일 시스템으로 마운트한 뒤 지정된 위치에 데이터를 저장해서 사용함
(디스크 ➡ 파티션 ➡ 볼륨그룹 ➡ 파일시스템(/home))
![](https://velog.velcdn.com/images/24tngus/post/6948a731-6acb-4ebf-8380-ecfdb77f06f1/image.png)
➡ fdisk -l : 가상 서버에 Attach한 볼륨 확인
📒 LVM sda5부터 설정되는 이유
- 기존의 파티션, 볼륨 관리에서는 총 4개의 파티션을 만들 수 있었음
- LVM을 도입하면서 4개보다 많은 파티션을 생성할 수 있고, 카운팅 할 때 5부터 시작됨
2) Disk Partitioning과 차이
- 하드 디스크를 파티셔닝 한 후 OS 영역에 마운트하여 read/write 수행
- 저장 공간의 크기가 고정되어 증설/축소가 어렵고, 변경시 데이터 이전해야 함
3) Disk 확인
➡ lsblk (lisk block device): 블록 장치에서 디스크 정보 확인
![](https://velog.velcdn.com/images/24tngus/post/acad5b91-9a7e-437c-a22e-e46feb8d48de/image.png)
➡ lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT (FSTYPE : 파일 시스템)
![](https://velog.velcdn.com/images/24tngus/post/ca90031a-554d-4fa2-b086-0eb424647fc5/image.png)
➡ fdisk -l : 디스크 정보 확인
![](https://velog.velcdn.com/images/24tngus/post/2791ac6b-6fd9-42c9-af0b-f115ca9df3b7/image.png)
➡ fdisk -l /deb/sda : 파티션 정보 확인
![](https://velog.velcdn.com/images/24tngus/post/3bde76d8-dd65-4117-b9e3-81f664bdc14d/image.png)
📒 하드 디스크 관리
- /dev/hd* : IDE 방식의 하드 디스크 (ex. /dev/hda, /dev/hdb)
- /dev/sd* : SCSI, SATA 방식의 하드 디스크(SSD포함) (ex. /dev/sda, /dev/sdb)
- /dev/nvme* : NVM Express(NVMe) pci SSD (ex. /dev/nvme0n1, /dev/nvme1n1)
📒 파티션
- 디스크의 논리적인 크기 (분할/통합하여 사용)
- 하나의 디스크를 여러개로 분할 및 여러 개의 디스크를 하나의 파티션으로 통합
- 파티션은 고정적이고 물리적인 개념이 강하고, 한 번 크기를 설정하면 변경하거나 추가하기 힘듦
- OS는 각 파티션을 별도의 디스크처럼 인식함
📒 볼륨
- 파일 시스템으로 포맷된 디스크 상의 저장 영역
- 볼륨은 디스크의 단일 파티션에 상주하게 되며 파티션보다 논리적이고 유동적
- 하나의 디스크를 여러개의 파티션으로 나눠서 사용하는데, 볼륨은 파티션마다 하나씩 존재하거나 여러 파티션에 하나만 존재할 수 있음
📒 마운트
- LV를 실제로 사용할 수 있도록 파일 시스템과 디렉터리 영역을 연결
3) 특징
- 크기 조절이 가능한 storage pool
- 자유롭게 장치 이름 지정
- disk striping, mirror volume 제공
4) 구성
PE
(LE) ➡ PV
(LV) ➡ VG
PV (Physical Volume)
- 실제 디스크 장치를 분할한 파티션된 상태
- 물리적 볼륨으로 디스크를 LVM에서 사용할 수 있게 변환하는 작업
- 디스크의 파티션을 PV로 초기화시켜 일정한 크기의 PE로 구성
- PV 명령어
- pvcreate /dev/vdb(vdc): LVM에 사용될 파티션을 생성하기 위해 물리 디스크 초기화
- pvdisplay : 생성한 PV 확인
PE (Physical Extent)
- PV를 구성하는 일정한 크기의 블록 (보통 1PE의 크기 = 4MB)
- VG가 새롭게 나누는 논리적인 LV의 LE와 1:1 대응
VG (Volume Group)
- PV가 모여 만들어진 그룹
- 물리적인 일정한 크기의 PE로 구성된 PV들이 모여 VG가 만들어짐
- VG는 다시 LV로 할당할 수 있는 공간을 말함
- VG 명령어
- vgcreate vg1 /dev/vdb : VG 생성하기
- vgremove vg1 : VG 삭제하기
- vgextent vg1 /dev/vdc : VG 확장하기 (/dev/vdc 영역 추가)
- vgdisplay : VG 확인
LV (Logical Volume)
- VG에서 사용자가 필요한 만큼 할당되어 만들어지는 공간
- VG에서 필요한 크길 할당받아 LV를 생성함
- LV 명령어
- lvcreate -n wglv_1 -L 15G vg1 : LV 만들기
- lvdisplay : LV 확인
- mkfs.ext4 /dev/vg1/wglv_1 : file system 만들기
- mkdir -p /data/wglv_1 : LV를 마운트할 디렉터리 생성 (-p : 중간 디렉터리 자동 생성)
- mount /dev/vg1/wglv_1 /data/wglv_1 : 재부팅 시에도 마운트 상태 유지 (fstab에 정보 등록)
LE (Logical Extent)
- LV가 나누어진 일정한 크기의 블록으로 물리적 크기인 PE와 1:1 대응
![](https://velog.velcdn.com/images/24tngus/post/5487d81d-c910-476c-9015-87fa0c7877d2/image.png)
![](https://velog.velcdn.com/images/24tngus/post/87a1e17d-80f4-409f-a39f-296cefe12f3a/image.png)
📕 SSH (Secure SHell)
1) 개념
- 네트워크 상 다른 컴퓨터에 접속하기 위해 사용되는 보안 인터넷 프로토콜
- FTP나 Telnet은 민감한 정보(로그인 정보)를 주고 받기에는 정보를 직접 네트워크를 통해 넘겨 해당 정보를 열어볼 수 있어 보안에 취약함
- SSH는 보안적으로 안전한 채널을 구성한 뒤 정보를 교환하기 때문에 보안에 유용함
- 사용 예시
- 데이터 전송 (소스 코드를 원격 저장소인 GitHub에 Push할 때)
- 원격 제어 (AWS와 같은 클라우드 서비스에 접속하여 해당 머신에 명령을 내릴 때)
2) 작동원리
- 클라이언트-서버 모델로 동작하며 대칭키/비대칭키 방식/해시 알고리즘을 사용하여 인증 및 암호화 수행
- 대칭키 방식 : 클라이언트-서버 간 전체 연결 암호화에 사용
- 비대칭키 방식 : 키 교환, 클라이언트 인증, 서버 인증에 사용
- 해시 알고리즘 : 패킷의 무결성을 확인하기 위해 사용
- (1) 클라이언트는 서버에 원격 접속하기 위해 SSH 접속 요청 (기본 TCP 22번)
- (2) 서버는 자신의 공개키를 클라이언트에게 전송
- 클라이언트는 홈 디렉터리의 .ssh 경로 내의 known_hosts 파일에 저장
- (3) 클라이언트-서버는 여러 parameter를 주고 받으며 보안 채널 확립
- 클라이언트 : SSH 원격 접속하려는 서버가 올바른 서버인지 공개키 방식으로 확인
- 서버 : 클라이언트가 자신에게 접근 권한이 있는지 패스워드 인증으로 확인
- 암호화 통신을 위한 세션키 생성 (대칭키, 디피-헬만 키 교환 알고리즘 사용)
- (4) 클라이언트가 서버에 원격 접속함
3) 인증 방식
- Password 인증 방식
- ssh 클라이언트에서 서버로 원격 제어 요청시
ssh username@IPAddress
명령어로 SSH 연결 후 password 입력
- ssh 클라이언트 프로그램인 putty 사용해서 서버에 원격 접속시 id/password 요구
- 공개키 인증 방식
📒 useradd (사용자 계정 추가)
- 사용자 ID를 생성하는 명령어
(계정 : 시스템에 아이디와 패스워드를 생성하여 사용권을 부여하는 것)
- 리눅스 설치시 root(관리자, 슈퍼 유저)가 시스템에 접속할 수 있는 사용자들을 생성하고 관리하는 권한을 가짐
- root권한자가 root 이외의 사용자를 생성할 때 사용하는 명령어
- 옵션
![](https://velog.velcdn.com/images/24tngus/post/9767a400-a9f3-434f-99a7-7e5224f58266/image.png)
➡ useradd [option] 사용자계정이름 : 사용자 계정 추가
➡ passwd 사용자 계정 이름 : 사용자 비밀번호 설정 (초기 비밀번호 설정 없이는 사용자 접속 불가)
➡ apt search openssh-server : 설치 확인
![](https://velog.velcdn.com/images/24tngus/post/b9c177e3-1621-406b-82c7-7df99536ef8b/image.png)
➡ ls -al /etc/ssh : key 확인하기 위해 sshd_config
확인
![](https://velog.velcdn.com/images/24tngus/post/433c06ce-7861-4852-a176-04cf98e6d4ea/image.png)
➡ vi /etc/ssh/sshd_config : 포트 관련 정보 수정 (포트 4242추가, root로그인 연결 금지)
![](https://velog.velcdn.com/images/24tngus/post/88c51c52-1b3a-458f-b5a8-47acae8a2116/image.png)
➡ sudo systemctl status ssh : ssh 서버가 현재 작동되는지 확인
![](https://velog.velcdn.com/images/24tngus/post/ce458195-fe34-4b9b-92c6-c495fbe249db/image.png)
➡ ss -tunpl : 실행 포트 정보 확인
![](https://velog.velcdn.com/images/24tngus/post/a50cb59e-385c-446f-8686-f6162a6adc9c/image.png)
➡ systemctl restart ssh : 재시작
![](https://velog.velcdn.com/images/24tngus/post/93733441-b79f-461a-9bee-64fbba3fb043/image.png)
➡ ssh user
@호스트 서버 IP
: SSH 통해 접속 가능 (-p : 포트번호 지정)
![](https://velog.velcdn.com/images/24tngus/post/0cd11b80-e85b-4e46-8afb-4d539d44d9ae/image.png)
➡ ssh-keygen -t rsa : key 생성 (macOS는 유닉스 계열 운영체제로 OpenSSH 기본으로 포함)
![](https://velog.velcdn.com/images/24tngus/post/191fb16b-b96a-427a-ab42-3842251e0a31/image.png)
➡ ls ~/.ssh/id_* : SSH 키 쌍 생성되었는지 확인
![](https://velog.velcdn.com/images/24tngus/post/a8f14fbc-5cf0-489a-8c30-c37eae52490d/image.png)
➡ cat /home/soohykim/id_rsa.pub >> /home/soohykim/.ssh/authorized_keys : id_rsa.pub를 authorized_keys 파일에 등록 (.ssh폴더 없다면 생성, chmod 700)
![](https://velog.velcdn.com/images/24tngus/post/522c5067-d509-4af9-a50e-ec876e6efd32/image.png)
📒 shell
- 명령어와 프로그램 사용할 때 쓰는 인터페이스
- 사용자로부터 명령을 받아 해석하고 실행하는 역할
📒 DHCP
- DHCP는 내부 네트워크 IP대역을 동적으로 유무선 네트워크 기기에 할당
- 자동으로 IP가 할당되어 사용자는 유연하게 무선 네트워크 사용 가능하지만, 연결이 재설정되면 다른 IP에 기기할당됨
iface eth0 net dhcp
주석처리 : 할당되는 IP를 고정으로 할당하기 위해
- 특정한 포트로 들어오는 데이터 패킷을 다른 포트로 바꿔서 다시 전송
- 패킷이 방화벽이나 라우터 같은 네트워크 게이트를 지날 때 IP주소와 포트 번호 결합의 통신 요청을 다른 곳으로 넘겨주는 네트워크 주소 변환
📕 UFW (방화벽)
1) 개념
iptables
방화벽 규칙을 쉽게 관리하는 프로그램 (내부에서 iptables 이용하는 Fronted tool)
- 외부에서 내부로 접속 시도시 서버간, 서버와 단말간 내부 시스템 보호 목적으로 허용/차단
- 고유 서비스 이름을 사용해서 포트 관리 (HTTP(80), HTTP(80), HTTPS(443), FTP(21), SSH(22))
- UFW 기본 Rule
- 들어오는 패킷에 대해서는 전부 거부 (deny)
- 나가는 패킷에 대해서는 전부 허가 (allow)
📒 iptables
- kernel level의 tool
- 포트 기반으로 차단/허용하는 방식의 방화벽
➡ systemctl status ufw : UFW 서비스 활성화 확인 (기본 비활성화)
![](https://velog.velcdn.com/images/24tngus/post/5509a999-1516-4fc5-bc91-a0679d16513d/image.png)
➡ systemctl is-enabled ufw : UFW 실행 상태 확인
![](https://velog.velcdn.com/images/24tngus/post/283bf272-aa8a-4b9c-b22e-a6cd9361e906/image.png)
➡ ufw status verbose : UFW 설정 상태 확인
![](https://velog.velcdn.com/images/24tngus/post/8762fe14-61ad-4464-8de3-67853c37d937/image.png)
➡ ufw enable : UFW 활성화(disable)
![](https://velog.velcdn.com/images/24tngus/post/e0ed62c1-d193-44dd-95a8-de7ea0d7c653/image.png)
- (disable 할 경우)
![](https://velog.velcdn.com/images/24tngus/post/c063863a-bc85-4cd8-a6a1-3f4de5c9c291/image.png)
➡ defualt value 변경 (allow/deny)
![](https://velog.velcdn.com/images/24tngus/post/d1dd6e48-0600-4349-90aa-aa96e76872ed/image.png)
➡ ufw show raw : ufw 방화벽 규칙 표시
![](https://velog.velcdn.com/images/24tngus/post/3a2a8606-abb9-48af-a653-9594e403f2f9/image.png)
3) hostname 수정
➡ hostname : hostname 확인 (42로 끝나야함)
![](https://velog.velcdn.com/images/24tngus/post/af2ced7b-7caf-4fbb-af2b-5d64a5c633e9/image.png)
➡ hostnamectl : hostname 현재 정보 확인 ![](https://velog.velcdn.com/images/24tngus/post/8593f288-5fe2-4f66-bf2d-f4198956e66f/image.png)
➡ hostnamectl set-hostname 바꿀이름 : hostname 수정
➡ reboot : 재시작
📕 PASSWORD
1) password 파일 구조
- 사용자의 목록을 저장하고 있는 정보 파일 : /etc/passwd
- passwd 파일을 수정하려면 root(관리자)로 변경해야함
![](https://velog.velcdn.com/images/24tngus/post/a011059b-01d1-4d6b-b9ea-f66d77c82afc/image.png)
(1) username : 사용자명
(2) password : 사용자의 비밀번호 (/etc/shadow 저장)
(3) User ID (UID) : 사용자ID (0 : root, 1-99 : 이미 정의된 계정, 100-999 : 시스템 관리자나 시스템 계정을 위한 번호, 1000~ : 사용자지정)
(4) Group ID (GID) : 사용자가 소속된 그룹ID
(5) UID info : 사용자에 대한 추가적인 정보
(6) Home directory : 사용자의 홈 디렉터리
(7) Command/shell : 로그인시 사용되는 셀
2) password 정책
암호 정책으로 보안 강화되어 비밀번호 유추 어려움
➡ chage -l 유저이름 : 유저에 대한 비밀번호 정책 확인
![](https://velog.velcdn.com/images/24tngus/post/f1d3d2ec-4428-4580-86ab-14559f13ee29/image.png)
➡ vi /etc/login.defs : 기본 비밀번호 정책 관련 파일 확인
![](https://velog.velcdn.com/images/24tngus/post/2e769321-961a-4080-b3e5-6edc6d89be71/image.png)
➡ vi /etc/pam.d/common-password : 패스워드 정책 설정 (libpam-pwquality)
![](https://velog.velcdn.com/images/24tngus/post/7296f4bc-98b3-43ad-99e1-d8a6ece0283b/image.png)
- retry=
N
: 암호입력을 N회로 설정
- minlen=
N
: 암호의 최소 길이는 N
- ucredit=
-N
: 대문자 N개 이상 (N양수 - 대문자로 얻을 수 있는 최대 개수, N음수 - 대문자 최소 개수)
- lcredit=
-N
: 소문자 N개 이상
- decredit=
-N
: 숫자 N개 이상
- maxrepeat=
N
: 같은 문자가 N번 이상 연속해서 나오는지 검사
- reject_username : 사용자 이름이 그대로 혹은 뒤집혀 패스워드에 있는지 검사
- enforce_for_root : root 계정도 위의 정책들 적용
(root에게 이전 패스워드를 묻지 않으므로 이전 패스워드와 새 패스워드 비교 검사 안함)
- difok=
N
: 기존 패스워드와 달라야하는 문자 수 N (root 제외)
1) 개념
- sudo : 관리자 권한으로 실행할 수 있게 하는 명령어 (superuser do)
- sudo [명령어] : root권한으로 명령어 실행
- su : 현재 계정을 로그아웃 하지 않고 다른 계정으로 전환하는 명령어 (switch user)
- su : root 사용자로 변경 (root 암호 입력 필요)
- su - : root 사용자로 변경하면서 환경 변수까지 적용
- su [사용자명] : 다른 사용자로 변경
- su -[사용자명] : 다른 사용자로 변경하면서 환경 변수까지 적용
➡ dpkg -l sudo : sudo 설치 확인
![](https://velog.velcdn.com/images/24tngus/post/5f15182e-1af4-4f85-b61f-382703bdedc4/image.png)
- /etc/sudoers 파일을 관리하기 위한 어플리케이션
- sudoers 파일 : sudo 명령어 사용하는 계정 관리 (sudo 권한 부여된 사용자, 그룹, 권한 수준 명시)
- 쓰기 권한 없는 파일 작성 가능
- 해당 파일 기본 커미션 : 440 (쓰기 권한 없음)
- 저장시에 설정의 정합성과 잘못된 문법 체크
![](https://velog.velcdn.com/images/24tngus/post/fd271bb6-b661-47f6-b1e2-5dc310e60faa/image.png)
- USER/GROUP : sudo를 사용하는 사용자 또는 그룹
- HOST(NETWORK) : 사용자가 현재 접속하는 호스트(네트워크)
- RUNAS : 해당 명령어 실행시 얻는 사용자 권한
- (ALL:ALL)의 경우 (사용자 권한:그룹 권한)
- CMD : sudo 권한을 적용시킬 명령어
➡ visudo
📒 TTY (TeleTYpewriter)
1) TTY 개념
- 표준 입력에 연결된 터미널의 이름을 출력하는 유닉스 계열 명령어 (리눅스 환경은 TTY 위에 그려져 있음)
- 터미널이 연결되기 전에 sudo 명령어를 막아서 웹서버 플러그인 등 다른 분리된 프로세스에서 사용되는 것 방지함
- 데스크탑 GUI(xwindows)환경은 실질적으로 콘솔 위에 올려져 있는 형태 (=xwindow 데스크탑 환경에서 작동하는 콘솔은 pts/1에 올려져 있음)
➡ tty : 현재 커널과 연결된 가상 터미널 장치 이름 확인
➡ w : 로그인한 유저의 모든 TTY 정보 확인
![](https://velog.velcdn.com/images/24tngus/post/c51b5cff-4f39-437b-981b-0066fd885c26/image.png)
2) 콘솔 개념
- 컴퓨터 조작시 사용하는 입출력 장치, 명령 조작에 사용되는 애플리케이션
- CLI 혹은 CUI라고 불리며 컴퓨터를 운용하기 위한 목적으로 텍스트를 사용자와 컴퓨터가 주고 받는 인터페이스
- 종류
- 터미널 : UI로 사용하는 GUI 프로그램 (키보드와 디스플레이로 구성)
- TTY : 컴퓨터에서 표준 입력에 연결된 터미널 이름 출력하는 명령어 (OS에서 제공하는 가상콘솔, 실제 물리적인 장치가 연결된 것은 아니라서 커널에서 터미널을 emulation)
![](https://velog.velcdn.com/images/24tngus/post/35dbe01e-8452-47ea-b3ed-20cad200c9cf/image.png)
3) 콘솔 구성
- /dev(device)
- TTY (일반 CLI 콘솔)
- TTYs (시리얼 TTY)
- PTS (기본 xwindows를 위한 가상 콘솔)
- PTY (외부의 원격 접속을 위한 가상 콘솔)(=pseudo-terminal, 가상 터미널)
- 콘솔모드 : 모니터, 키보드로 직접 본체에 연결된 모드
- 2번째 콘솔부터가 가상 콘솔
Ctrl + Alt + F2
를 누르면 2번째 가상콘솔로 이동
- (사용 가능한 콘솔은 6번까지, 7번부터는 ttyN이 아닌 xwindows(pts/N)환경으로 돌아옴
- 터미널모드는 본체의 LAN으로 연결된 모드를 말함 (원격 접속)
~user
: 대화형 방식으로 사용자 환경 지정
user~
: 옵션으로 사용자 환경 지정
➡ adduser 사용자명 : 새 유저 생성
![](https://velog.velcdn.com/images/24tngus/post/4adc1b49-e2d2-43ba-991b-ac4899617518/image.png)
➡ passwd 사용자명 : 비밀번호 설정
➡ vi /etc/passwd : user 목록 확인
![](https://velog.velcdn.com/images/24tngus/post/265e1d82-7d8e-457e-a0e8-9b6b1f2b8285/image.png)
➡ addgroup 그룹이름 : 그룹 생성
➡ usermod -aG sudo,user42 사용자명 : sudo,user42 그룹에 추가하는 정보 수정
![](https://velog.velcdn.com/images/24tngus/post/2aad18b5-1c96-48cc-9078-b29ce48ccb84/image.png)
➡ id 사용자명 : 사용자 속한 UID, GID,그룹명 등 확인
![](https://velog.velcdn.com/images/24tngus/post/423c3453-a276-4877-aa37-e9b947965928/image.png)
➡ groups 사용자명 : 사용자 속한 그룹명 확인
![](https://velog.velcdn.com/images/24tngus/post/e1178f0b-a247-4411-8cdf-e19423f02cda/image.png)
📕 Script
1) cron 설치
-
cron 설치 여부 확인 : `ps -ef | grep cron' ![](https://velog.velcdn.com/images/24tngus/post/ef6f59f1-ae9b-4731-98f6-895d07b1c738/image.png)
-
cron 시작 : sudo systemctl start cron
![](https://velog.velcdn.com/images/24tngus/post/1c322fb3-6409-4eb8-a4b4-43e70c0145a5/image.png)
-
sysstat 설치 : sudo apt-get install sysstat
![](https://velog.velcdn.com/images/24tngus/post/0ffb46e9-1666-401b-a3f8-900e52c6ca49/image.png)
2) monitoring.sh
- #Architecture (운영체제와 커널의 버전에 대한 구조)
uname -a
(-a : 모든 정보)
- #CPU physical (물리 프로세서들의 수) :
cat /proc/cpuinfo | grep 'cpu cores' | awk '{print $4}
- nproc : 현재 사용가능한 프로세스 unit의 개수
- #vCPU (가상 프로세서들의 수) :
lscpu | grep '^CPU(s)' | awk '{print $2}'
- lscpu : 현재 시스템의 CPU 정보를 보여주는 명령어
- #Memory Usage (현재 서버에서 사용 가능한 RAM과 백분율로 표현된 사용률) :
free --mega | grep Mem | awk '{printf "%d/%dMB (%.2f%%)\n", $3, $2, $3/$2 * 100}'
- $2 : memory total
- $3 : memory used
- #Disk Usage (현재 서버에서 사용 가능한 memory와 백분율로 표현된 사용률)
df -a -BM | grep /dev/mapper | awk '{sum+=$3}END{printf sum}
printf "/"
df -a -BM | grep /dev/mapper | awk '{sum+=$2}END{printf sum}
printf "MB ("
- `df -a -BM | grep /dev/mapper | awk '{sum1+=$3 ; sum2+=$2}END{printf "%d%%)\n", sum1 / sum2 * 100}'
- #CPU load (백분율로 표현된 프로세서들의 현재 사용률) :
mpstat | grep all | awk '{printf "%.2f%%\n", 100-$13}
- #Last boot (마지막으로 재시작된 날짜와 시간) :
who -b | awk '{print $3, $4}
- #LVM use (LVM 활성화 여부) :
if [ "$(lsblk | grep lvm | wc -l) " -eq 0 ] ; then printf "no\n" ; else printf "yes\n" ; fi
- #Connections TCP (활성화된 연결들의 개수)
ss -tunpl | grep tcp | wc -l | tr -d '\n'
- `printf "ESTABLISHED\n"
- #User log (서버를 사용하고 있는 유저의 수) :
who | wc -l
- #Network (서버의 IPv4 주소와 MAC 주소) IP
hostname -I | tr -d '\n'
- `printf "("
- `ip address | grep ether | awk '{printf $2}'
printf ")\n"
- #Sudo (sudo 프로그램으로 실행된 명령의 수)
- journalctl _COMM=sudo | grep COMMAND | wc -l | tr -d '\n'
- printf "cmd\n"
![](https://velog.velcdn.com/images/24tngus/post/465b21aa-9c78-48be-9681-2524773322f1/image.png)
- = CPU의 코어 개수
- 코어 : 물리적인 CPU 프로세서 (프로그램 실행시 실제로 일하는 역할)
nproc --all
또는cat /proc/cpuinfo | grep 'cpu cores' | awk 'printf $4}'
확인 가능 (Number of installed Processors on your system)
- = CPU의 쓰레드 개수
- 가상CPU : 가상 머신에 할당되는 CPU (기본적으로 1개 할당)
- (thread X core) X physical CPU = vCPU 개수
- 코어당 제공하는 처리 스레드 수에 점유된 소켓 수 곱함
lscpu | grep '^CPU(s)' | awk '{print $2}'
![](https://velog.velcdn.com/images/24tngus/post/aaf800db-1ddd-4f36-999d-61cc20e6d882/image.png)
- /proc/meminfo 에서 시스템 메모리 사용량 확인
- 정보
- total : 설치된 총 메모리 크기, 설정된 스왑 총 크기
- used : total에서 free, buff/cache를 뺀 사용중인 메모리
- free : total에서 used, buff/chace를 뺀 실제 사용 가능한 메모리 용량
- shared : tmpfs(메모리 파일 시스템), ramfs 등 사용되는 공유 메모리
- buffer/cache : 커널 버퍼로 사용중인 메모리 + 페이지 캐시와 slab으로 사용중인 메모리
- available : swapping 없이 새로운 프로세스 할당 가능한 메모리 예상 크기
- 옵션
- h : 사람이 읽기 쉬운 단위로 출력
- b, k, m, g : 바이트, 키비바이트, 메비바이트, 기비바이트
- kilo, mega, giga, tera, peta : 킬로바이트, 메가바이트, 기가바이트, 테라바이트, 페타바이트
![](https://velog.velcdn.com/images/24tngus/post/839c6cad-e3e2-4f48-bb51-021e7bbdc9c1/image.png)
📒 Disk Usage
- df : 남은 용량 확인
- a : 모든 파일 시스템 출력
- k : 킬로 바이트 단위로 남은 용량 확인
- m : 메가 바이트 단위로 남은 용량 확인
- du : 현재 directory의 사용량 확인 (서브 디렉토리 포함)
- a : 현재 디렉토리의 사용량 파일 단위로 출력
- s : 총 사용량
- h : 읽기 쉽게 출력
- sh* : 한단계 서브 디렉토리 기준으로 보여줌
![](https://velog.velcdn.com/images/24tngus/post/0d507b2e-da29-4f9f-9ed4-abbb9adad4c2/image.png)
- 텍스트 파일을 조회/필터링/가공 출력하는 프로그램
- 필드 추출 : $1
- BEGIN, END 명령어
- CPU와 core별로 사용율을 모니터링할 때 사용되는 명령어
- 정보
- 04:43:36 PM : mpstat이 수행된 시간
-CPU : all (모든 cpu)
- %usr : 사용자 레벨(애플리케이션)이 사용한 CPU 사용율
- %nice : nice 우선순위와 함께 사용자 레벨에서 수행된 CPU 사용율
- %sys : 시스템 레벨(커널)에서 사용한 CPU 사용율
- %iowait : I/O 처리 때문에 기다리는 CPU 시간 백분율
- %irq : H/W 인터럽트를 서비스하기 위해 사용되는 CPU 사용율
- %soft : S/W 인터럽트를 서비스하기 위해 사용되는 CPU 사용율
- %steal : 하이퍼바이저가 다른 가상프로세서에 의해 서비스될 때 기다리는 CPU 시간 백분율
- %guest : 가상 프로세서가 실행하기 위해 사용되는 CPU 사용율
- %idle : 유휴시간의 CPU 사용률 (CPU가 미사용 상태였던 시간 비율)
![](https://velog.velcdn.com/images/24tngus/post/da04f4c4-2f69-47c0-a7f5-aa3e8d09f671/image.png)
- 리눅스 서버가 재부팅되거나 shutdown된 시간 조회
last reboot
: 마지막으로 시스템을 재부팅한 시간이 언제인지 최신순으로 정렬해서 출력
who -b
: 마지막 시스템 부팅 시간 표시
![](https://velog.velcdn.com/images/24tngus/post/bdc83ade-eed5-423b-9670-78752f65482b/image.png)
📒 journalctl
📒 cron
- 반복적으로 어떤 작업을 자동 수행해주는 명령어
- 시간 기반 job scheduler형 daemon 프로세스 (시스템 크론/사용자 크론)
- crontab : cron 작업 설정 파일 (/etc/crontab 파일 정보)
- daemon : 사용자가 직접 제어하지 않아도 백그라운드에서 여러 작업 해주는 프로그램
m
분 h
시 dom
일 mon
월 dow
요일 user
사용자 command
실행명령
📒 wall
- 시스템에 로그인한 모든 사용자에게 메시지를 broadcast 역할 (관리자 권한 필요)
- 컴퓨터 파일과 표준입력을 로그인 된 모든 사용자에게 보여줌
📌 Hard Disk File Type
- VDI (Virtualbox Disk Umage)
- virtualbox에서만 사용하는 포맷
- 다른 컴퓨터에서 해당 가상환경을 사용할 때 virtualbox 설치되어 있어야 함
- VHD (Virtual Hard Disk)
- Oracle-virtualbox, ms-hyper-x, citrix-xen에서 사용 가능한 포맷
- 다른 컴퓨터에서 사용하려면 셋 중 하나의 가상화 소프트웨어가 설치되어 있어야 함
- VMDK (Virtual Machine Disk)
- Oracle-virtualbox, VMware, VMware player에서 사용 가능한 포맷
- 다른 컴퓨터에서 사용하려면 둘 중 하나의 가상화 소프트웨어가 설치되어 있어야 함
📌 Linux File system
- / : root, 모든 파일의 최상단
- bin : binary, 명령어 들어있는 디렉토리
- boot : 부팅에 필요한 이미지 파일/부팅 정보 가진 디렉토리
- dev : 연결된 장치들의 정보 저장
- etc : 시스템 환경설정
- home : 사용자 디렉토리 저장
- root : 시스템 관리자의 홈 디렉토리 (일반 사용자 접근 불가능)
- sbin : bin과 비슷하나 root 유저만 사용할 수 있는 명령어 들어있음
- sys : 리눅스 커널 관련 정보
- tmp : 임시 데이터가 들어있는 디렉터리, 부팅시 초기화
- usr : 기본 실행파일, 라이브러리, 헤더 파일 저장됨 (대부분 응용 프로그램 및 파일)
- var : 시스템 운영 중에 만들어진 로그 저장
- srv : 서버를 위한 디렉토리 (시스템에게 제공되는 파일 저장)
- proc : 실행 중인 프로세서 (cpu, ram 등 시스템 정보 저장)
- swap : ram이 가득 차 공간 부족시 예비 공간 역할
참고 / 참고
sanglee 참고
본투비루트 / 참고