Linux 14

다원·2023년 1월 22일
0

Server system 보안

서버를 운영하면 여러 사용자, 시스템 설정 서버 서비스 정보 저장
서비스를 정상 운영, 정보 노출을 피하기 위해 서버 머신에 보안 설정

서버 시스템에 보안을 설정할 때의 원칙

  • 필요한 프로그램만 설치, 사용자 접근 최소
  • 관련 프로그램(응용프로그램과 패치등) 지속적인 업데이트
  • 사용자에 대한 정확한 정보 최신 유지
  • 비밀성, 무결성, 가용성, 기록성, 부인봉쇄라는 측면을 염두하고 설정

손실의 우려가 있는 정보와 정보자산을 타겟으로 하는 위험과 위협, 취약점이 겹쳐지는 곳에서 시스템/네트워크 위험이 발생

보안상 주의 점

  • Hot Piece나 Bug Fix 이뤄지므로 항상 최신의 상태가 유지되도록 정기적 업데이트
  • 미리 서버시스템과 클라이언트 시스템으로 이루어진 Pilot System 먼저 패치를 적용시켜서 문제가 없는지 관찰 한 뒤 네트워크에 뿌림
  • 시스템과 소프트웨어 설정에 보안을 지정하는데 파일과 디렉터리에 적절한 권한을 설정, 하드웨어적인 저장장치에 BitLocker 등으로 암호화 해두어야함
  • root 계정 로그인 자제, su 명령어 사용자 제한 및 sudo 사용
  • 모니터링과 분석도 수시로 수행
  • 로그파일 관리 주의
  • 방화벽뿐만 아니라 침임탑지, 침입예방 라우터 적절히 설정
  • 최소한 SELinux 설정으로 주요 파일과 프로세스별로 권한을 세분화
  • Bios 조절하여 외부 디바이스로 시스템이 부팅되는 것을 막도록 CMOS 설정에 패스워드 설정

보안 설정

컴파일러 Permition 변경

컴파일러는 프로그램을 변환하는 프로세스, 컴파일러 파일로 외부에서 파일을 변경할 수 있기 때문에 관리자만이 사용 가능하도록 변경하는 것이 필요
g++ 컴파일러는 ~.c와 ~.cpp파일을 모두 c++ 파일로 취급해서 컴파일
gcc-c++: ~.c와 ~.cpp 파일을 구별해서 컴파일하는 컴파일러

  • 기본적으로 other도 컴파일러 실행 실행 권한 보유

    root 관리자만 실행할 수 있도록 권한 변경

파일의 권한(속성)을 변경하지 못하도록 설정

chatter(change attribute) 명령어를 사용하여 파일의 속성 변경을 막을 수 있음
root 사용자도 할 수 없도록 설정이 가능

chatter 명령어로 권한에 +i가 들어가면 파일의 속성을 변경할 수 없음
ls명령어로는 i에 대한에 대해 확인 할 수 없음

파일을 속성을 변경할려고 확인해보면 변경되지 않음

chattr의 권한을 해제하고 권한을 변경하면 변경됨

주요 명령어와 환경 설정파일과 서비스 등 데몬 백업

/usr/bin : 주요 명령어 , /usr/sbin : 시스템 설정 명령어
/etc/ : 각종 설정파일, /boot : boot 관련
/dev/sda : 운영체제가 들어있는 하드디스크
partition등 백업할 필요가 있음

주요 파일 백업 생성

백업 전 du -h 를 사용하여 디렉터리의 용량을 확인 > 용량에 맞는 하드디스크 추가
하드디스크 추가 후 파티션과 포맷을 진행 > 마운트 포인터 생성후 마운트

압축 명령어를 사용하여 마운트포인트 디렉터리 아래에 백업할 파일 저장
partion 백업의 경우 sfdisk를 사용(-d옵션: dump)
qmial, apache, vsftp, samba 등의 서비스 데몬도 백업 파일 생성이 가능

슈퍼데몬 보안

well-know 포트 이외에 포트는 접속하지 못하도록 하는 방법 등으로 보안
슈퍼데몬의 경우 /etc/xinetd 디렉터리 아래에 child Daemon이 존재,
설정파일에 includedir /etc/xinetd 때문에 슈퍼데몬을 실행하면 child 데몬이 동시 동작
child 데몬에 백도어를 저장할 경우 사용자가 슈퍼데몬을 실행할 때 백도어도 같이 실행됨
xinetd 디렉터리 아래에 backdoor라는 child Daemon을 생성

서비스 등록 흉내내어 /etc/services 에 추가

telnet 서버를 이용하기 위해 child Daemon 생성

방화벽을 열어주고 서비스 시작 한 후 외부에서 telnet 접속하면 곧 바로 root 사용자로 접속됨
telnet을 이용하여 backdoor port를 사용 할 경우 backdoor포트로 접속하여 들어가게 됨

원격 연결 사용자 연결 제한

open-ssh 설치 후 sshd_config 파일 수정
Port번호를 변경 할수 있고, root 사용자 접속과 특정 user의 접속을 설정할 수 있음
conf 파일에서 Port를 변경하였기 때문에 22번 포트로는 접속 할 수 없음

변경된 Port로 접속할 경우에도 root 사용자로 접속 할 수 없음

config 파일에서 접속가능한 user를 설정했음으로 해당 사용자로만 접속이 가능

포트 규제

/etc/securetty
console: 사용자와 컴퓨터의 인터페이스
tty root가 가상 터미널을 통해 접속, tty0은 모니터/키보드, tty1 이상부터 가상콘솔
CLI에서 실행되는 콘솔 = terminal
ttys: IoT의 Arduio 등에서 외부와 Serial 접속시 열리는 CLI 콘솔
vc: GUI 시행 콘솔 /dev/pts Xmanager에 의해서 X.org 접속시 열리는 GUI 콘솔, root 사용자 콘솔로 telnet,ssh 등 terminal 접속 시 사용
-> pts/1~pts/11로 표시되는데 원격지에서 root 접속을 막으려면 비워두거나 필요한 것만 주석을 제거하여 사용
pty: GUI 중 그래픽/텍스트의 가상 콘솔, xterm, screen 등에서 사용
hvc: HyperVisor Serial 연결을위한 콘솔

  • 포트 확인

su와 sudo 사용자 제한

/etc/sudoers파일에 사용자가 기록되거나, %whell 그룹의 일원이 되면 sudo 명령어를 사용 할 수 있음
/etc/pam.d/su 에 지정하면 설정이 우선됨
sticky bit를 주의해야되는데, sticky bit는 누구나 사용할 수 잇는 설정

사용자 패스워드 관리

/etc/login.def 파일의 설정대로 작동
사용자의 패스워드 설정에 대해 규정할 수 있음

중요 명령어는 root 사용자만 실행시키기

자주 사용하는 useradd,crond 등 명령어는 관리자만 사용하도록 속성을 변경
외부 속성 변경을 막기 위해 chattr + i 옵션
프로그램 실행에서 경로 설정은 중요
일반 자용자의 $HOME/.bash_profile에서 ~/bin 디렉터리
일반 사용자 홈디렉터리에서 bin 파일은 해당 사용자 이름으로 저장된 위치 이외의 어디서나 코드를 실행 할 수 있음

커널이나 시스템이 정보를 알려주는 배너 파일은 해당 파일을 확인하여 버전등의 정보를 알아낸 뒤 취약점을 찾아 침투 할 수 있기에 감추는 것이 좋음
/etc/issue, /etc/issue.net, /etc/redhat-release, /etc/motd

/proc를 통한 설정

가상 파일시스템으로 하드디스크의 저장된 /etc/sysctl.conf 파일에 설정된 커널 값을 메모리에 저장하는 역할 (속도 향상, /etc/sysctl.conf =/proc의 원본 파일)
커널에 대한 modular 방식과 monolithic 방식의 차이를 볼 수 있음
커널 자원에 대한 정보를 PID 구별해서 보관
물리적으로 존재하는 것은 아니기 때문에 가상파일시스템

/etc/sysctl.conf 커널의 설정값을 변경하면 /proc파일 시스템에 바로 반영
:메모리에서 실행되고 있는 설정값을 변경할 때 /proc파일을 쓸 경우 /etc/sysctl.conf에서 변경하는 것보다 속도가 빠름
/proc 파일은 메모리에 있어 휘발성 설정으로 reboot 할 경우 원상 복구 됨
sysctl -p: 하드디스크에 저장된 커널의 설정값을 확인할 수 있고
하드디스크에 저장된 값이 메모리에 올라가 있음을 확인 할 수 있음

/proc은 리눅스 커널 자원들에 대한 정보를 PID 구별해서 보관
메모리의 총 용량을 top으로 확인 할 수 있는데 /etc/proc의 meminfo와 값이 동일
시스템 설정 조정할 필요가 있을 경우에는 물리적인 /etc/sysctl.conf파일에서 변경해주는 것이 시스템을 안정되게 해야됨

  • 시스템 설정값 변경 시
  1. sysctl.conf 파일에서 파라미터_변수의 값을 변경
  2. echo "값" >> /proc/파라미터 변수: /proc의 파라미터의 변수 값을 변경
  3. sysctl -w 파라미터_변수 = 값
    원하는 값으로 변경해서 물리적으로 변경해도 일시적으로 /proc에만 적용되는 값
    sysctl -p or cat /etc/proc/sys/net방식으로 확인 해주면
  4. Telent FTP, SSH, HTTP 서비스와 열린 포트 등 조절
    : 연결시간 조절, 연결 유지 시간 조절 /proc/sys/net/ip4/tcp_keepalive_time,
    아는 포트 (proc/sys/net/ipv4/ip_local_port_range)로만 접속
profile
공부일지,

0개의 댓글