[Linux] Born2beRoot...Debian을 곁들인...

Austin·2024년 11월 28일

42-Cursus

목록 보기
6/24

Debian

  • Debian은 개인, 데스크탑, 서버 범용으로 모두 사용하기 적합하다. Rocky는 기업의 서버 운영 용도로 많이 사용된다. 설정도 Debian이 간단하게 가능하여 초보자가 사용하기에는 더욱 좋은 것 같아 선택했다.
    Debian vs RockyLinux 참고

Debian 설치

  • Install Debian 이 게시글에서 진행한 Debian 설치 과정을 통해서 아래와 같은 lvm을 사용함 암호화된 파티션을 생성 했다.

LVM 사용여부 확인

  • Debian 설치 시 암호화된LVM 사용을 기본으로 하면 LVM으로 암호화된 파티션이 생성된다.
  • lsblk 시스템에 연결된 모든 블록 장치(하드 디스크, SSD, USB 드라이브 등)의 목록을 볼 수 있다.
    sda5_crypt으로 암호화 된 파티션 수도 파악도 가능하다.


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

apt & aptitude

apt & aptitude 게시물을 통해 apt에 대해 알아보고 aptitude와 다른점을 알아 보았다.

  • apt는 저수준 패키지 관리자로, 주로 설치, 제거, 업그레이드 등 기본적인 기능을 제공한다.
  • aptitude는 고수준 패키지 관리자로, apt의 모든 기능에 더해 추가적인 기능을 제공한다.
    • 명령줄 및 대화형 텍스트 기반의 인터페이스, 사용되지 않는 패키지 자동 제거, 고급 검색 기능 등 사용자 편의성이 올라간 추가적인 기능 제공.

AppArmor 활성화

AppArmor는 리눅스 보안 프레임워크로 , 응용 프로그램별로 프로파일을 작성하여 해당 프로그램이 접근할 수 있는 리소스를 제한한다.
AppArmor는 Debian에서 기본으로 지원하며, SELinux보다 상대적으로 설정이 간단하고 Debian에 최적화 되어있다.
(SELinux는 매우 세부적인 제어가 가능하나 초기 설정과 정책 관리가 복잡하다고도 볼 수 있다.)
AppArmor의 사용법을 알아보고 Debian 시작 시 AppArmor가 활성화 되게 한다.

활성화 정보 확인

  • sudo aa-status 명령어를 통해 활성화 정보를 볼 수 있다.
    • apparmor module is loaded. 메시지로 AppAromor의 활성화가 된 것을 알 수 있다.
    • X profiles are in enforce mode. 를 통해 위협 보호가 되는 프로파일 수(X)를 확인할 수 있다.

SSH 설정

SSH 설정 방법을 보고 Port 변경 및 root계정의 접속을 차단한다.

port 확인

  • sudo systemctl status ssh 명령어로 활성화 상태, port 정보 확인 할 수 있다.
    4242 포트만 열려 연결 되어 있는지 확인한다.

root 계정 SSH 접속 금지

  • ssh user(id)@192.168.56.1 -p 4242 포트 4242를 통해 연결 확인하는데 id 부분에 root로 입력하여 root계정의 접속 확인을 하면 된다.
    SSH root계정 접속확인 세팅

새 사용자 SSH 연결 설정

  • sudo adduser 사용자 이름 명령어를 이용하여 계정을 생성한다.
    사용자 이름이 user id가 되고 넘어가면 password, name 등 추가 항목들이 나오는데 입력하고 넘어가면 계정이 생성 된다.

  • 이상태로 연결 설정은 위 ssh user(id)@192.168.56.1 -p 4242를 이용하여 확인하였다.

UFW 설정

UFW 방화벽 설정을 한다.

  • 특정 port만 TCP 연결 허용, 방화벽 자동 활성화 등의 설정을 한다.

UFW 활성화 상태 확인

  • sudo ufw status verbose 명령어로 현재 상태 정보 확인할 수 있다.
    4242 포트만 열려있는지 확인한다.
    가상머신 시작할 때 방화벽이 활성화 되야한다.

hostname 변경

  • hostnamectl현재 호스트 네임이 출력된다.
  • sudo hostnamectl set-hostname <myserver> 명령어에서 <myserver>부분에 변경될 hostname 을 넣으면 hostname이 변경된다.
  • sudo nano /etc/hosts열어
127.0.0.1 localhost
127.0.0.1 myserver

127.0.0.1 아랫줄에 hostname을 변경된 이름으로 변경 해준다.

사용자 그룹 추가

  • sudo usermod -aG sudo 사용자 이름
    sudo 그룹에 사용자를 추가하는 명령어다.
    sudo 그룹명 입력한 자리에 user42 등의 그룹명을 추가하면 그 그룹에 사용자가 추가된다.
  • groups 사용자 이름
    사용자가 속해있는 그룹을 확인할 수 있다.
    group 참고

사용자 암호 정책

비밀번호 정책 설정하기

  • sudo nano /etc/login.defs
    비밀번호 만료 경고 설정 변경 된 부분 확인.
    (만료일, 재변경 가능일, 만료 경고일 등)
  • sudo nano /etc/pam.d/common-password
    비밀번호 복잡성, 품질 설정 변경 확인.
    sudo nano /etc/pam.d/passwd에서 @include common-password로 common-password 파일에서 설정한 내용을 참조하고 있는지 확인 필요함.
  • sudo passwd root
    root 계정 비밀번호 변경된다.
  • passwd username
    사용자 계정 비밀번호 변경된다.
    sudo passwd username으로 sudo로 root 권한을 주어 비밀번호를 변경하면 root 계정 비밀번호와 같은 정책만 적용받게 되어 일부 정책이 무시될 수 있다.

sudo 구성

sudo 구성 설정

  • visudo
    /ect/sudoers 파일을 수정한다.
    sudo 사용 시 로그 저장, 로그인 메시지 등 여러 구성 요소에 대한 설정을 변경, 추가 한다.
    • passwd_tries : sudo 명령어 사용 시 잘못된 비밀번호를 입력할 수 있는 횟수를 제한한다.
    • uthfail_message : 인증 시도가 실패했을 때 표시될 메시지를 설정한다.
    • badpass_message : 잘못된 비밀번호를 입력했을 때 표시될 메시지를 설정한다.
    • iolog_dir : 입출력 로그를 저장할 디렉토리를 지정한다.
    • log_input, log_output : sudo 세션의 입력과 출력을 모두 기록한다.
    • requiretty : sudo가 실제(터미널)TTY를 사용하도록 설정하여 보안을 강화한다.
    • secure_path : sudo에서 사용할 수 있는 경로 제한한다.

monitoring

cron이란?

Cron은 유닉스 계열의 컴퓨터 운영체제에서 사용되는 시간 기반 작업 스케줄러이다.
사용자가 지정한 시간에 자동으로 명령이나 스크립트를 실행할 수 있도록 해준다.

  • crontab
    cron 작업은 crontab(cron table) 파일에 의해 관리된다.
    각 사용자는 자신의 crontab 파일을 가질 수 있으며, 시스템 전체에 영향을 미치는 crontab 파일도 존재한다.

스크립트 작성

모니터링 스크립트 작성

  • monitoring.sh 스크립트를 작성한다.
    • 아키텍처와 커널 버전
    • 물리 프로세서 수
    • 가상 프로세서 수
    • 메모리 사용률(백분율 표시)
    • 디스크 사용률(백분율 표시)
    • CPU 사용률(백분율 표시)
    • 마지막 부팅 시간
    • LVM 사용 여부
    • 활성 TCP 연결 수
    • 로그인한 사용자 수
    • 네트워크 정보
    • sudo 명령어 실행 횟수

스크립트 자동 실행

  • chmod +x monitoring.sh
    chmod +x를 이용하여 monitoring.sh스크립트에 실행 권한을 부여한다.
    chmod로 권한 변경, +로 권한 추가, x는 실행권한을 말한다.
  • crontab -e
    사용자의 크론 작업을 편집하는데 사용된다.
    -e옵션은 등록, 편집 등을 하는 옵션이다.
  • */10 * * * * /root/monitoring.sh | wall
    10분간격으로 root 폴더 안에있는 monitoring.sh를 실행하여 |를 통해 wall로 출력을 전달한다.
  • cronta -l
    현재 크론 작업 확인한다.

스크립트 실행 중단 방법

  • crontab -e로 편집한다.
  • */10 * * * * /root/monitoring.sh | wall 이 코드 앞에 #을 붙여 이 코드를 주석 처리한다.

가상머신 서명 추출

  • sha1sum <가상 디스크 파일 경로>
    가상 머신 디스크 파일의 SHA-1 해시 값을 추출한다.


vdi 파일을 넣으면 사진과 같이 나온다.

추가 명령어

  • head -n 2 /etc/os-release
    시스템의 운영 체제 정보를 제공한다.
  • aa-status
    AppArmor의 현재 상태를 확인하는 데 사용된다.
  • ss -tunlp
    현재 네트워크 연결 및 소켓 정보를 확인한다.
    • -t : TCP 소켓만 표시
    • -u : UDP 소켓만 표시
    • -n : 포트를 이름 대신 숫자로 표시 (예: http 대신 80)
    • -l : 수신 대기(Listening) 중인 소켓만 표시
    • -p : 해당 소켓을 사용하는 프로세스와 PID를 표시
  • ufw status
    UFW의 현재 상태를 확인하는 데 사용된다.

0개의 댓글