업데이트:

태그:

카테고리:



리눅스의 패키지 관리

대부분의 리눅스 배포판은 몇 천개의 패키지를 가진 온라인 레포지토리와 연결된 패키지 관리툴을 사용한다.
운영체제의 컴포넌트, 문서, 응용프로그램을 쉽게 삭제할 수 있고, 설치할 수 있다.

데비안은 패키지 포맷으로 .deb 를 가지며,
패키지 관리자로 dpkg, apt-get, aptitude가 있고, 이는 대부분의 배포판(데비안 뿐만 아니라, 우분투, 민트 등)과 비슷하다.

CentOS의 경우, Red Hat 패키지 포맷으로 .rpm을 가지는데, rpm, yum이 패키지 관리자이다. 그리고 이는 Red Hat, Fedora CentOS 와 비슷하다.


패키지 용어

패키지로 사용가능한 리눅스 배포판의 많은 소프트웨어와 문서들은 repository라는 곳을 통해 배포된다.

.deb패키지들은 데비안, 우분투, 민트 등과 같은 데비안과 우분투의 파생모델에서 사용되는데, apt-get(apt와 내부 동작 차이가 없음), aptitude를 사용할 수 있다.


apt, aptitude

aptitude와 apt-get은 dpkg의 프론트 엔드이고,
다른 그래픽 유저 인터페이스의 백엔드이고,
다른 그래픽 유저 인터페이스의 백엔드이다.

aptAdvanced Packaging Tool의 약자로 오픈소스이다.
.deb패키지의 일부였으나, 현재는 .rpm패키지와 함께 작동할 수 있다.


aptitude는 고급 패키징 도구이고, apt보다 상위 수준의 패키지 관리자이다.
aptitude는 apt-get, apt-mark, apt-cache의 기능을 포함해 더 많은 기능을 제공한다.

또한 aptitude는 대화형 UI가 제공된다는 장점이 있다. 반면, apt는 저수준 패키지 관리자로써, 커맨드라인 인터페이스로 제한되어있다.

위처럼 aptitudeapt보다 더 많은 기능을 가지고 있음을 알 수 있다.



SELinux, Apparmor

SeLinux

Security-Enhanced Linux의 줄임말이다.
레드햇 계열(위의 CentOS, Fedora, Red Hat 등)에서 사용된다.
시스템 전체에 보안을 설정할 수 있다.

표준 유닉스 권한은 는 Discretionary Access Control, DAC으로 파일에 권한을 주게된다.
어떤 유저가 어느 파일을 소유하고 있다면 해당파일을 chmod 777로 유저 전체가 읽을 수 있게 할 수 있다는 것이다.

selinux를 사용하면, 커널은 Mandatory Access Control, MAC을 강제하는데, 이는 DAC의 대용품으로써 프로세스들 또는 쓰레드들이 그 파일로 무엇을 할 수 있는지 컨트롤할 수 있다.
커널에 의해서 프로세스들이 필요로하는 최소한의 접근만 가능할 수 있게 막을 수 있다.


App armor

데비안의 리눅스 커널에는 SELinux 가 기본적으로 비활성화 되어있다.
대신, 데비안계열(데비안, 우분투, 민트 등)에서 사용되는 AppArmor가 있다.
표준 유닉스에서 위와같이 DAC모델로 보안하는데, 이를 보완한 리눅스 커널 보안 모듈이다.


위의 SELinux와는 달리, 개별 응용프로그램을 보호하고, 응용프로그램 단위의 보안모델을 가진다.
이에 따라, SELinux보다 덜 복잡하고, 더 적은 수의 작업을 제어할 수 있다.


  • 기능 AppArmor는 특정 프로그램, 컨테이너에서 필요한 리눅스 기능, 네트워크 사용, 파일 권한 등에 대한 접근을 허용하는 프로파일로 구성되고, 각 프로파일은 enforce 또는 complain 모드로 실행할 수 있다.

데비안에서 apparmor는 시스템이 부팅될때, 자동으로 실행된다.
현재 AppArmor가 작동하는지 확인하기 위해선, /usr/sbin/aa-status로 확인할 수 있다.



SSH

개요

secure shell, ssh는 원격 리눅스 컴퓨터와 상호작용을 하기 위한 보안 프로토콜을 사용하는 도구들을 의미한다.

예전에는 telnet, rlogin, rsh 등으로 원격 컴퓨터를 서버에 연결했는데, 이 프로토콜들은 로그인세션을 암호화하지 않아 사용자의 아이디 비밀번호가 wireshark, tcpdump에 의해 가로채기 당했다.
위의 것들은 더이상 사용되지 않고, ssh가 사용된다.

ssh 프로토콜은 2가지의 방법으로 보호되는데,

  1. 접속이 암호화된다.
  2. 접속이 양방향으로 인증된다.


사용

  • 리눅스를 데스크탑대용으로 사용하는 경우는 거의 없다.
  • 리눅스는 서버 시장에서 압도적 다수를 차지하기 때문에 사용된다.
  • IOT처럼 사물인터넷에서 사물의 안에 설치된 작은 컴퓨터는 리눅스이다.


client의 컴퓨터로 server의 컴퓨터를 원격제어 해야할때 사용되는게 SSH. 리눅스 계열의 서버컴퓨터를 원격제어해야할때 사용되는게 SSH. SSH를 사용하기위해선 서버컴퓨터에 SSH Server를 깔아야하고, 제어하는 컴퓨터에는 SSH Client가 깔려있어야한다. SSH Client에서 원격명령을 내리면, SSH Server가 자신이 설치된 Server컴퓨터에 직접적으로 명령을 내리는 구조이다.

ssh 접속은 터널이 입력되기 전에 암호화되고, 그리고 사용자의 아이디/비밀번호 또는 public/private key를 이용한 인증이 이루어진다.


public, private keys

ssh 프로토콜은 public key 와private key로 이뤄진다.
A라는 컴퓨터와 B라는 컴퓨터가 있다고 생각해보자.
A컴퓨터가 B컴퓨터에게 암호화된 메세지를 보내고 싶다면,

  • A에는 B의 public key가 있어야한다.
  • B는 A와 public key를 공유해야한다.
  • 단, B의 private key는 자신만 알고 있어야한다.

이 상황에서, B컴퓨터는 A의 암호화된 메세지를 읽을 수 있는 유일한 컴퓨터가 된다.


B가 메세지가 A로부터 온 것인지 확인하기 위해서, B는 A의 public key를 확인해 A가 private key로 메세지에 서명했는지 확인한다.
A가 A만의 private key를 가지고 있으므로, B는 A가 보낸 메세지임을 확인할 수 있게된다.

위에서 메세지를 보내고 싶어하는 A가 Client, B가 Server라고 생각하면된다.


설치

  • 맥에는 기본적으로 ssh 깔려있음.
  • ssh-keygen 프로그램을 이용해 client에서 키를 만들 수 있다.
  • ssh key는 서버에 접속할때 비밀번호를 요구하는 것보다 높은 보안수준을 요구할때 사용되는 보안방식.
  • ssh [로그인할 아이디]@[서버 아이피] 로 접속.

그래서 client의 private key와 server의 public key가 서로 일치하는 것이 확인되면, 로그인 인증에 성공한다.


포트변경

ssh는 기본적으로 22번 포트를 사용한다.
이 포트를 변경하기 위해선, /etc/ssh/sshd_config에서 #Port 22를 수정하자



네트워크 입문

80,90년대에는 네트워크를 구성하기위해 엄~청 많은 프로토콜이 사용되었다.
오늘날, 이 프로토콜들은 TCP/IP로 대체되었는데,

Transmission Control Protocol/Internet Protocol의 약자이다.


  • RFC TCP/IP는 몇 천개의 프로토콜로 쌓아져있는 프로토콜이다.
    흔히 알려진 HTTP, DHCP, DNS는 이 중 일부일 뿐이다.
    이 프로토콜들은 RFCs안에 정의되어있는데, RFC2616은 HTTP, RFC2131은 DHCP이다.


  • 인터넷 인터넷은 유닉스와 RFCs가 나왔을 때부터 같이 성장해왔다.
    오늘날 인터넷은 세계적인 TCP/IP 네트워크가 되었다.


  • 인트라넷 인트라넷은 특정 그룹의 사람만 접속 가능한 TCP/IP 네트워크이다.
    사용에 제한이 있는데, 인터넷이 하는 프로토콜 스택과 동일한 스택에 의존한다.


  • 4G, 5G, Wi-fi, hotspot 위의 것들도 모두 TCP/IP프로토콜이다.


TCP/IP Layer

TCP/IP 프로토콜들은 레이터 안에서 작동하고, 4개의 레이어에 따라 나뉘게된다.

Screen Shot 2022-04-04 at 4 55 57 PM


IP address

IP주소는 Internet 레이어에 속한다.

Screen Shot 2022-04-04 at 6 17 50 PM

모든 컴퓨터는 인터넷, 인트라넷 안에서 네트워크에 속하게 되고, 각각의 IP-address를 가지게된다.

컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기위해서 사용하는 특수한 번호이고,
~.~.~.~처럼 .이 3개인 숫자의 연속이다.
정확하게는, 32bit(4byte)짜리 숫자의 모음이라고 생각하면된다.

unsigned char가 4개 연속으로 있는 이 번호는 사람이 외우기 어렵기때문에, 이름을 달 수 있도록 해주는게 DNS이다.

오늘날 주로 사용되는건 IPv4인데, 주소가 부족해져 IPv6주소가 점점 널리 사용되고 있다.


  • IPv4

위의 사진의 경우, IPv4로 생각하면된다.
이론적으로 42억개의 IP가 존재하는데, 중간의 일부 번호는 특별한 용도로 예약되어있다.
가령, 127.0.0.1localhost로 자기 자신을 의미한다.(127로 시작하는 모든 주소가 그렇다.)


  • IPv6

32비트가 부족해져 IP의 새로운 버전이 나왔다.
주소의 길이가 128비트가 되었고 16진수 8개로 각각 :기호로 구분한다.


MAC-address

Screen Shot 2022-04-04 at 6 18 15 PM

  • 네트워크 연결에 사용되는 하드웨어에는 MAC 주소가 있다.
  • 각 MAC 주소는 로컬 환경에 따라 다르다.
  • MAC 주소는 Link 레이어의 한 부분이다.

맥 주소는48bit로 이루어지고, 16진법으로 표현된다.


TCP, UDP

TCP와 UDP는 전송 프로토콜이다.

Screen Shot 2022-04-04 at 6 18 37 PM

TCP는 많은 오버헤드(application 레이어에서 보낸 메타 데이터와 네트워크 라우팅 정보 등)을 가진 신뢰할 수 있는 프로토콜이며
UDP는 단순하고, 빠르지만 신뢰할 수 없는 프로토콜이다.

  • TCP TCP 프로토콜은 2개의 컴퓨터 간에서 3개의 절차로 이루어진다.
    Screen Shot 2022-04-04 at 6 07 20 PM

    1. SYN 패킷이 A라는 컴퓨터로부터 B 컴퓨터에 전달된다. 이 부분의 경우, A라는 컴퓨터가 B 컴퓨터에게 연결할 것인지 물어보는 부분(SYN)이다.
    2. SYN, ACK 패킷이 B로부터 A에게 전달된다. B컴퓨터가 A컴퓨터에 연결에 동의했음을 나타낸다.(ACK) 그리고 A컴퓨터에게 연결할 것인지 다시 물어본다.(SYN)
    3. ACK 패킷이 A컴퓨터로부터 B에게 전달된다. A컴퓨터가 연결에 동의했음을 나타낸다.(ACK)
      그리고 연결이 완료된다.


    위 절차가 완료되면, TCP는 A컴퓨터로부터 컴퓨터 B의 모든 패킷에 번호를 매겨 모든 패킷의 송수신을 확인하며, 필요에 따라 재발송한다.
    TCP 전송이 완료되면 FIN패킷이 송신되 최종 ACK가 수신된다.


    이메일에 사용되는 SMTP, 웹사이트에 사용되는 HTTP프로토콜은 TCP 접속에 의존한다.


  • UDP UDP 프로토콜은 접속을 세팅하지않고, 데이터를 보내기만한다.
    따라서 TCP보다 훨씬 단순하고, 빠른데 로컬 서브넷의 DNS쿼리는 이 UDP를 사용하여 수행된다.


port

네트워크에 연결된 모든 장치는 데이터를 주고받기 위해 Port라는 것을 이용한다.

Screen Shot 2022-04-04 at 6 19 41 PM

  • SSH는 22 port를 이용한다.
  • DNS는 53 port를 이용한다.
  • HTTP는 80 port를 이용한다.


TCP 접속은 client 응용프로그램으로부터 시작되는데, source port 와 destination port를 사용하게된다.
destination port는 서버 응용프로그램에게 접속하기위해, source port는 트래픽이 client 응용프로그램으로 돌아가기위해 필요하다.



UFW

Uncomplicated FireWall의 약자이다.

  • root 권한으로 apt install ufw를 하면 설치할 수 있다.

  • 상태를 확인하기 위해선 /usr/sbin/ufw status로 확인할 수 있다.

  • 기본 규칙 집합으로 UFW를 켜기 위해선 ufw enable를 해야하고, 시스템이 켜질때마다 켜지게된다.

  • 기본적으로 몇몇 예외를 제외하곤, 수신 거부가 적용되어있다(들어오는 연결 거부) 예외사항은 ufw show raw

  • 연결을 허용하기 위해선 ufw allow <port>/<optional : protocol> 이렇게 허용할 수 있다.

ufw status로 현재 어느 포트로 들어와서 어디로 나가는지 알 수 있다.

댓글남기기