born2beroot

junpkim·2022년 5월 17일
0

배경지식

VM (Virtual Machine)

컴퓨팅 환경을 소프트웨어로 구현한 것.

하이퍼바이저: 가상머신을 생성하고 구동하는 소프트웨어. 하드웨어에서 가상머신의 리소스를 분리하고 적절히 할당하여 VM에서 사용할 수 있도록 함.

Centos vs. Debian

단순히 둘이 비교 하라면 애매함.

centos 는 redhat에서 상표를 떼어내고 무료 배포한 프로젝트.

debian 은 redhat 보다 먼저 배포되어 시장을 선점 함. 하지만 사후 지원이 늦어짐.

centos가 포함되어 있는 redhat 계열과 debian 계열에 속하는 ubuntu를 비교하자면, redhat은 커뮤니티가 아닌 회사에서 관리하기 때문에 업데이트가 빠르고 사후 관리를 해주기 때문에 기업체에서 많이 사용함. ubuntu는 개인용 서버로 많이 사용됨.

aptitude와 apt 차이

apt는 lower level package manager, aptitude는 high level package manager

apt는 소프트웨어의 설치와 제거를 처리하는 패키지 관리 툴. 설치할 패키지 명을 입력하면 해당 패키지 + 종속성 목록을 찾아 자동으로 설치. 때문에 종속성 문제를 걱정하지 않아도 됨.

aptitude가 더 방대함(기능이 많음). gui를 제공하며 대화형 인터페이스 제공.

AppArmor

시스템 관리자가 프로그램 프로필 별로 프로그램의 권한을 제한할 수 있게 해주는 보안모듈.

security framework. 정책 파일을 통해 어떤 어플리케이션이 어떤 파일/경로에 접근 가능한지 허용 해줌.

MAC (강제접근제어, Mandatory Access Control) 적용.

LVM

Logical Volume Manager. 리눅스의 저장 공간을 효율적이고 유연하게 관리하기 위한 커널의 한 부분.

LVM은 파티션 대신에 volume 이라는 단위로 저장 장치를 다룸.

PV(Physical Volume)를 모아 VG(Volume Group)을 만들고, 다시 LV(Logical Volume)로 나누어 사용자가 사용하게 됨.

sudo

substitute user do의 줄임말로 다른 사용자의 권한으로 명령을 이행하라는 뜻.

관리자가 특정 사용자에게 특정 명령을 root 계정으로 실행할 수 있는 권한 부여.

sudo 다음에 사용하고자 하는 명령어를 입력하면 /etc/sudoers 파일 내에 현재 호스트에서 해당 명령어를 사용하는 것이 허가 되어있는지 확인한 뒤, 허가 되어 있으면 패스워드를 입력하여 사용하도록 함.

su - # root 계정으로 이동.
dpkg -l sudo # sudo가 설치 되어있는지 확인.
apt install sudo # 설치되어 있지 않다면 설치
visudo # sudoer 파일 접근. vim과 다르게 문법체크를 해줌.

sudoer 파일 수정

특정 사용자에 su 권한 부여

vi /etc/pam.d/su 에서 auth required pam_wheel.so 주석 해제

add group —system wheel # wheel 그룹 생성
adduser <사용자명> wheel # wheel 그룹에 추가해서 su 권한 부여
groups <사용자명> # 사용자가 속한 그룹 확인
Defaults  secure_path=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin”
# sudo로 실행할 명령을 찾을 환경변수.
Defaults	authfail_message="auth fail" # sudo 인증 실패
Defaults	badpass_message="wrong password" # 틀린 비밀번호
Defaults	log_input # sudo 명령어 실행 시 입력된 명령어 log로 저장
Defaults	log_output # sudo명령어 실행 시 출력 결과를 log로 저장
Defaults	requiretty # sudo명령어 실행 시 tty강제
Defaults	iolog_dir="/var/log/sudo/" # sudo log 저장 디렉토리 설정
Defaults	passwd_tries=3 # sudo 인증 시 암호 입력 가능 횟수 (기본이 3)

그룹 설정

groupadd user42 # user42 그룹 추가
usermod -aG sudo,user42 <사용자이름> # 콤마로 구분 된 그룹에 사용자 추가.
usermod -g user42 <사용자이름> # user42를 사용자의 primary 그룹으로 설정.

primary 그룹: 1개만 존재해야 됨. 사용자가 로그인 할 때, 파일 또는 디렉터리를 생성할 때 부여되는 기본 그룹.

secondary 그룹: 없거나 여러 개 존재 가능. 사용자가 파일 또는 디렉터리를 읽거나 쓰거나 실행할 때 그룹들의 권한을 받음.

https://m.blog.naver.com/wideeyed/221512008307

UFW 방화벽

UFW(Uncomplicated Firewall) 말 그대로 복잡하지 않은 방화벽이다.

데비안 계열 리눅스 환경에서 사용되며 리눅스의 커널은 server에 대한 client의 network 접속을 제어하는 netfilter라는 모듈을 통해 필터링을 수행한다. netfilter을 이용하여 server 접속에 대한 정책을 세우는 것이 바로 방화벽이다. 이를 설정하는 프로그램으로 iptables가 있으나 이는 작업이 복잡하여 간편화 해준 프로그램이 ufw이다.

설정

sudo apt install ufw # ufw 설치
sudo ufw status verbose # ufw 상태 확인 (디폴트는 inactive)
sudo ufw enable # 부팅 시 ufw 활성화
sudo ufw default deny # 기본 incoming deny로 설정
sudo ufw allow 4242 # 4242 포트 허용

sudo ufw status numbered # ufw 규칙 넘버링
sudo ufw delete <규칙번호> # 해당 규칙 삭제

user

useradd <사용자이름> # 사용자 추가
passwd <사용자이름> # 비밀번호 설정
userdel <사용자이름> # 사용자 삭제

SSH

SSH(Secure Shell)는 네트워크 프로토콜 중 하나로 컴퓨터와 컴퓨터가 public network를 통해 서로 통신을 할 때 안전하게 통신을 하기 위해 사용하는 프로토콜이다. 사용자 인증부터 데이터 전송까지 모든 과정이 암호화 되기 때문에 보안성이 매우 높다.

apt search openssh-server # openssh 설치 확인
apt install openssh-server # 설치되어 있지 않다면 설치
systemctl status ssh # openssh 실행 여부와 포트 번호 확인
sudo ufw allow 4242 # 4242 포트 허용 (ufw)
sudo vim /etc/ssh/sshd_config # ssh 설정 파일 수정. Port 22를 원하는 port 번호로 변경.
sudo systemctl restart ssh # 재시작해서 설정 적용

포트포워딩에 대한 내용: https://lamanus.kr/59

hostname

hostnamectl # 호스트명 체크
sudo hostnamectl set-hostname <바꾸려는 호스트 명> # 호스트명 변경

비밀번호 정책

sudo vi /etc/login.defs # Password aging controls 찾아서 max, min, warn_age 수정
sudo apt install libpam-pwquality # password 유효성 제한
sudo vi /etc/pam.d/common-password # password 정책 변경. pam_pwquality.so 수정
passwd -e <사용자명> # root 계정과 현존하는 사용자 계정의 암호 변경 강제. 다음 로그인 시 암호 변경

pam_pwquality.so 의 옵션

retry: 암호 입력 가능 횟수

minlen: 암호 최소 길이

difok: 기존 패스워드와 달라야하는 문자 수

ucredit=-1: 대문자 한 개 이상

lcredit=-1: 소문자 개수 한 개 이상

dcredit=-1: 숫자 한 개 이상

reject_username: username이 패스워드에 그대로 또는 뒤집혀서 들어가는지 검사

enforce_for_root: root 사용자가 변경하는 경우에도 위의 조건 적용. (이 옵션 다음에 적으면 적용하지 않음)

credit에서의 음수는 최소 개수, 양수는 해당 문자로 얻을 수 있는 최대 점수.

만약 ucredit=1 이고, minlen이 5 이면 암호가 “ABCDEF1!a” 여도 거부당함.

cron

특정한 시간에 or 시간 마다 작업을 자동으로 수행하게 하는 명령어

crontab -e # 현재 사용자의 cron 설정값을 저장하는 파일을 열음

crontab job 추가 규칙

/10 * * * : 10분 마다

2>&1 : 2(stderr)를 1(stdout) 으로 바꿈.

cron 프로세스는 /etc/crontab 파일에 설정된 것을 읽어 수행하며 새로운 프로세스를 띄워서 실행 시킴.

/usr/sbin/anacron : 서버가 일시중지 되었을 때도 작업이 실행되는 것을 보장해주기 위함.

cron의 수행 여부는 /var/log/syslog 에 저장됨.

만약 30초 간격으로 실행하고 싶다면

* * * * * /run.sh
* * * * * sleep 30; /run.sh

0개의 댓글