가상머신
: 물리적 컴퓨터와 동일한 기능을 제공하는 소프트웨어 컴퓨터
: 물리적 컴퓨터처럼 어플리케이션과 운영체제를 실행하나, 가상머신은 물리적 컴퓨터에서 실행되고 물리적 컴퓨터처럼 작동하는 컴퓨터 파일
: 호스트 컴퓨팅 환경에서 생성됨
: 하나의 호스트에 여러 가상머신이 동시에 존재할 수 있음
가상머신을 사용하는 이유
바이러스에 감염된 데이터에 액세스하고 운영체제를 테스트하는 등, 호스트 환경에서 수행하기 위험한 작업을 수행하기 위해 사용
가상머신은 *샌드박스
화 되므로, 가상머신 내의 소프트웨어는 호스트 컴퓨터를 변조할 수 없다
*샌드박스화: 외부로부터 받은 파일을 바로 실행하지 않고 보호된 영역에서 실행시켜봄으로써 외부로부터 들어오는 파일과 프로그램이 내부 시스템에 악영향을 주는 것을 미연에 방지하는 기술
장점
단점
Linux
운영체제deb 포맷
과 dpkg/APT
매니저rpm 포맷
과 YUM/DNF
매니저- 레드햇 : 레드햇에서 배포한 리눅스 : 2003년까지 오픈소스 라이선스로 운영되다 이후 상용화 : 커뮤니티가 아닌 회사에서 관리 -> 타 리눅스 배포판에 비해 패치가 빠름 : 유틸리티의 양이 많고 관리 툴의 성능이 우수 : 호환성이 좋음 : 레드햇 계열 = 페도라, CentOS -> 오늘날은 CentOS가 우세
우분투에서 패키지를 관리하는 툴로 응용프로그램 설치 및 삭제, 최신버전 유지 등에 이용됨
dpkg
와 함께 동작하지만 소프트웨어 검색, 설치, 업그레이드, 검사 등 대부분의 패키지 관리 작업은 apt
단독으로 가능high-level
패키지 매니저에서 사용될수 있음high-level
대화형 패키지 매니저debian
패키지 관리자why
, why-not
명령어로 특정 동작이 왜 되는지, 안 되는지 알 수 있음
high-level
| 종속성 해결 및 메타 데이터 검색(aptitude)
low-level
| 설치, 업그레이드, 삭제(apt)
MAC
을 제공하여 UNIX DAC
를 보완함 sudo aa-status # APPArmor가 포함되어 있는지 확인하는 명령
aa-enabled # APPArmor 활성화 여부 출력
1. MAC(Mandatory Access Control): 강제접근통제
- 미리 정해진 정책과 보안 등급에 의거하여 주체에게 허용된 접근 권한과 객체에게 부여된 허용등급을 비교하여 접근을 통제함
- 관리자만 객체의 보안레벨과 주체의 보안등급을 수정 가능
- 높은 보안을 요구하는 정보는 낮은 보안 수준의 주체가 접근할 수 없으며, 소유자라 할 지라도 정책에 어긋나면 객체에 접근할 수 없음
-> 루트로 구동한 http 서버라도 접근 가능한 파일, 포트가 제한됨(사전에 허용된 포트, 폴더에만 접근 허용)
-> 구현이 복잡하고 어려우며, 모든 주체와 객체에 대해 보안 등급과 허용 등급을 부여해야하므로 설정이 복잡하고 시스템 관리자가 접근 통제에 대해 잘 이해하고 있어야함
2. DAC(Discretionary Access Control): 임의 접근 통제
- 시스템 객체에 대한 접근을 사용자나 그룹의 신분을 기준으로 제한하는 방법
- 객체의 소유자는 다른 주체의 객체에 대한 접근 권한을 설정할 수 있음(A를 가지고 있는 경우, 다른 주체의 A에 대한 접근 가능성 여부를 설정할 수 있음)
- 임의 = 소유자는 자신의 판단에 의해 임의로 권한을 줄 수 있다
- 구현이 용이하고 사용하기 편함
- 대부분의 운영체제의 기본 접근 통제 모델
사용자의 권한을 탈취당하면 사용자가 소유하는 모든 객체의 접근 권한을 가짐. 특히 root 계정은 모든 권한을 가지기 때문에 root 권한 탈취 시 시스템 완벽 장악 가능
sudo ufw status verbose
systemctl status sshd
sudo groupadd [group] # 그룹 생성 명령어
sudo usermod -aG [group1],[group2]... [user]
# 한 번에 사용자를 여러 그룹에 추가
sudo useradd -g [group1] -G [group2],[group3]... [user]
# 사용자 그룹에 추가
-g
: 사용자의 1차 그룹 지정-G
: 사용자의 2차 그룹 지정 vi /etc/login.defs
PASS_MAX_DAYS 30 # 만료되기까지의 기간
PASS_MIN_DAYS 2 # 비밀번호 의무 사용일
PASS_MIN_LEN 10 # 최소 글자
PASS_WARN_AGE 7 # 비밀번호 만료 경고 메시지 출력 날짜
# chage 명령어 사용
chage -l [user] # 비밀번호 관련 정보 출력
sudo chage -m n [user] # 비밀번호 의무 사용일을 n일로 변경
sudo chage -M n [user] # 비밀번호 최대 사용일
sudo chage -W n [user] # 비밀번호 만료 경고 메시지 출력 날짜
sudo apt install libpam-cracklib
vi /etc/pam.d/common-password
pam_cracklib.so ~
credit
을 적용N < 0
인 경우 숫자의 최소 갯수, N >= 0
인 경우 숫자에 주어지는 credit
값. 기본값 1credit
값credit
값credit
값minlen
과 credit
: minlen=10
이면 비밀번호의 길이는 10
이 되어야 한다. 만약 dcredit
과 ucredit
이 각각 1이고 , ocredit
이 2이고 세 문자를 모두 사용했다면 총 4 credit을 얻는다. 따라서 minlen
의 10 credit에서 4 credit을 제외하여 실제적으로 6글자 이상의 패스워드도 통과되는 것이다.root
계정에도 상기 내용 강제 sudo passwd -e [user] # 재로그인 시 비밀번호 변경 강제
- user, group 관련 명령어
- 생성
sudo adduser [user]
- 그룹
sudo groupadd [group]
sudo groupdel [group]
cat /etc/group # 그룹 조회
- 그룹 설정
sudo usermod -aG [group],[group]... [user]
- a 옵션: add 옵션
- G 옵션: 명령어에 명시한 그룹들에 사용자 포함. G 옵션을 포함하지 않으면 명시되지 않은 그룹에서는 삭제되므로 a 명령어를 사용할 때 같이 사용하는 경우가 많음
->sudo usermod -G sudo user
: user는 sudo 그룹에만 속하게 됨
- 삭제
sudo userdel -r [user]
: -r 옵션을 붙여주지 않으면 홈 디렉토리 등 삭제되지 않는 정보가 있을 수 있음- 모든 사용자 확인
cat /etc/passwd
- adduser vs useradd
: adduser는 기본 계정 정보, 홈 디렉토리, 쉘 설정 등을 사용자를 생성하며 한 번에 진행
: useradd는 계정만 생성 후 다른 정보는 따로 설정
hostname
# or
hostnamectl | grep hostname
sudo hostnamectl set-hostname [hostname]
# 이후 reboot
⚠️
sudo: unable to resolve host linux [hostname]
⚠️
->/etc/hosts
파일에서 이전 호스트명을 새로운 호스트 명으로 변경하면 문제가 해결된다
lsblk
리눅스의 저장공간을 효율적이고 유연하게 관리하기 위한 커널의 한 부분
-> 5GB가 할당된 /home
파티션을 10GB로, 1GB
로 자유롭게 크기를 늘렸다 줄였다 할 수 있음
LVM vs 일반 disk partitioning
volume
단위로 저장장치를 다룸LVM의 장점
1. 유연한 용량 조절
2. 크기 조절이 가능한 Storage pool
3. 편의에 따른 장치 이름 지정 가능
4. disk striping, mirror volume 등을 제공
superuser do
에서 유래했으며, 후에 substitute user do(다른 사용자의 권한으로 실행)
의 줄임말로 해석되고 있음.su
는 로그아웃을 하지 않고 지정된 user
로 전환할 수 있음. 따라서 root
권한을 부여하는 경우 실수 혹은 권한 남용으로 리눅스 시스템 자체에 문제가 생길 수 있음.sudo
는 비밀번호 공유가 필요치 않아 su
보다 보안성이 높음 dpkg --get-selections | grep sudo
sudo usermod -aG sudo [user]
groups [user] # sudo 권한 추가 확인
/var/log/sudo/00/00 # sudo log 확인
log
: sudo
실행 시 실행한 위치와 실행한 명령어의 위치 저장stderr
: 실행한 명령어가 오류로 인해 실행되지 않았을 경우 출력되는 내용 저장stdin
: 실행한 명령어가 표준 입력을 받은 내용을 저장stdout
: 실행한 명령어가 표준 출력한 내용을 저장timing
: session
이 실행된 시간 저장ttyin
: tty
로 입력받은 내용 저장ttyout
: tty
로 출력한 결과 저장 sudo visudo # nano 편집기로 규칙 설정
Defaults passwd_tries=3 # sudo 로그인 시도 횟수
Defaults badpass_message="txt" # 비밀번호 오류 메시지
Defaults log_input # sudo 명령어 실행 시 함께 실행된 명령어를 log에 저장
Defaults log_output # sudo 명령어의 실행 결과를 log에 저장
Defaults iolog_dir="PATH" # sudo log를 저장할 경로
Defaults requiretty # sudo 명령어 실행 시 tty 강제
tty
강제: tty
는 teletypewriter
의 줄임말. 즉, sudo
명령어는 반드시 콘솔(터미널)에서 실행되도록 강제하라는 의미Ubuntu
의 기본 방화벽은 iptable
ufw
iptable
명령어를 사용해야 함 sudo ufw status verbose
# 설치
sudo apt install ufw
# 사용
sudo ufw enable # 켜기
sudo ufw disable # 끄기
# 명령
sudo ufw show raw # 기본 규칙 확인
sudo ufw default allow # 모두 허용
sudo ufw default deny # 모두 거부
sudo ufw allow [port] # 특정 포트 허용
sudo ufw deny [port] # 특정 포트 거부
sudo ufw delete [line num] # 해당 줄의 규칙 제거
# TO Action From
# -- ------ ----
# 4242 ALLOW IN Anywhere
# 4242 (v6) ALLOW IN Anywhere (v6)
#
# $ sudo ufw delete 2 -> 4242 (v6) 삭제
# $ sudo ufw delete 1 -> 4242 삭제
sudo ufw reset # UFW 재설정(방화벽 비활성화 + 모든 규칙 삭제)
SSH
와 같은 원격 프로그램이 유용하게 사용됨.암호화
해서 전송하므로 안전하게 전송할 수 있고, 혹여나 도청 당하더라도 암호화된 파일이므로 내용 파악이 불가능 sudo apt install openssh-server # 설치
systemctl status sshd # 상태 확인
sudo systemctl enable # 활성화
sudo ufw allow 4242 # 4242 포트 허용
sudo vi /etc/ssh/sshd_config
Port [port] # ssh 포트 설정(기본 포트 22)
PermitRootLogin yes/no # 루트 접속 허용 여부
sudo systemctl restart sshd # ssh 재시작
sudo netstat -anp | grep LISTEN | grep sshd
# 포트가 제대로 열렸느지 확인
ssh -p 4242 <user>@<Host ip>
# ssh -p 4242 minjinki@127.0.0.1
# ssh로 접속할 서버에 public key 복사
ssh-copy-id -p 4242 <user>@<host ip>
# ssh-copy-id -p 4242 minjinki@127.0.0.1
cron
이 언제, 무엇을 하는지 특정 파일에 저장하는 것이 crontab
. 즉, cron
이 원하는 시간에 원하는 명령 또는 프로그램을 수행하도록 명령 리스트를 만드는 것이 crontab
작업 sudo service cron start # 크론탭 시작
sudo service cron stop # 크론탭 중지
sudo service cron status # 크론탭 작동 여부 확인
crontab -e # 크론탭 시작
crontab -l # 크론탭 출력
crontab -r # 크론탭 삭제(모든 규칙 삭제)
sudo service cron restart # 서비스 재시작
* * * * * cmd # 한 줄에 하나의 명령
# - - - - -
# │ │ │ │ ⎿ 요일(0~7, 0과 7은 일요일, 1~6: 월~토)
# │ │ │ ⎿ _ 달(1~12)
# │ │ ⎿ _ _ 일(1~31)
# │ ⎿ _ _ _ 시간(0~23)
# ⎿ _ _ _ _ 분(0~59)
#
# * 1 * * * ls -l -> 1시마다 ls -l
# */1 * * * * ls -l -> 매 1분마다 ls -l 실행
# 30 */6 * * * ls -l -> 매 6시간마다 30분에(0:30, 6:30...)
shasum [name].vdi