[부트캠프 - 16일차] 1/13.화 - Linux & Network

developowl·2026년 1월 14일

부트캠프

목록 보기
7/24
post-thumbnail

9.UserManagement

사용자 계정 관리 파일

/etc/passwd

  • 사용자 계정 정보가 저장된 기본 파일

  • 초창기 유닉스에서는 암호도 파일에 저장했으나 해킹 위험이 증가하면서 암호는 /etc/shadow 파일에 별도로 저장

  • root 계정으로 수정이 가능하지만 되도록이면 명령으로 변경하는 것을 권장

  • 파일 구조: 콜론(:) 으로 구분된 7개의 항목

    • 로그인 ID: 32자까지 가능, 대소문자 + 숫자 + ‘_’ + ‘-’ 가 가능하지만, ‘-’으로 시작은 안 되고 숫자로만 구성해도 안 됨
    • x: 초창기 유닉스에서 비밀번호를 저장하던 위치인데 지금은 무조건 ‘x’
    • UID: 사용자를 구분하기 위한 번호
      • 0~999번과 65534번은 시스템 사용자를 위한 UID
      • 시스템 사용자 계정은 시스템이 관리 업무를 위해 내부적으로 사용하려고 예약한 계정이므로 임의로 수정하면 안 됨
    • GID: 그룹을 구분하기 위한 번호.
      • 사용자는 반드시 한 개 이상의 그룹에 소속되어야 하고, 사용자의 기본 그룹은 사용자를 만들 때 정해지는데 그룹을 지정하지 않으면 로그인 ID로 그룹을 생성해서 지정
    • 설명 : 사용자의 실명이나 부서명 및 연락처 등 사용자에 대한 일반적인 정보가 기록되는 부분
    • 홈 디렉토리 : 사용자 계정에 할당된 홈 디렉터리의 절대 경로를 기록
    • 로그인 셸 : 사용자의 로그인 셸

/etc/shadow

  • 보안 문제 때문에 사용자 암호에 관한 정보를 별도로 관리하는 파일

  • /etc/passwd 는 누구나 읽을 수 있지만, /etc/shadow 파일의 경우 root 사용자만 읽고 쓸 수 있으며, shadow 그룹은 읽기만 가능

    • 로그인 ID : 사용자 계정의 이름으로 /etc/passwd 파일의 로그인 ID
    • 암호(패스워드)
      • 실제 비밀번호가 암호화 되어 저장
      • 비밀번호는 일방향 암호여서 원래 어떤 문자인지 복호화할 수 없음
      • 사용자가 로그인할 때 입력하는 비밀번호를 다시 암호화하여 이 암호와 비교
      • 이 암호 항목에 아무 값도 없으면 암호가 지정되지 않은 계정
      • 시스템 계정에는 *가 표시되어 있음
    • 최종 변경일
      • 암호가 마지막으로 변경된 날짜
      • 유닉스 전통을 따라 1970.1.1 을 기준으로 날수를 기록
    • MIN
      • 암호를 사용할 수 있는 최소 기간으로 3이면 암호 변경 후 최소한 3일은 그 암호를 그대로 사용해야 함
    • MAX
      • 암호를 사용할 수 있는 최대 기간
    • WARNING
      • 암호가 만료되기 전에 경고를 시작하는 날수를 나타내는데 7이면 암호가 만료되기 7일 전부터 로그인할 때 경고 메시지가 나타남
    • INACTIVE
      • 암호가 만료된 후에도 이 항목에 지정한 날수 동안은 로그인이 가능하도록 함.
      • 이 기간이 지나면 계정이 잠겨버리고, 관리자에게 문의해야만 해결 가느
    • EXPIRE
      • 사용자 계정이 만료되는 날로 이 날짜가 지나면 해당 계정으로 로그인할 수 없는데 이 항목은 최종 변경일처럼 유닉스 기준시를 기준으로 날수로 표시
    • Flag
      • 향후 사용할 목적으로 비워둔 항목

/etc/login.defs

  • 사용자 계정의 설정과 관련된 기본값을 정의한 파일
  • 파일 내용

/etc/group

  • 그룹의 정보가 저장된 파일

  • 리눅스에서 사용자는 기본적으로 하나 이상의 그룹에 속함

    • 그룹 이름
    • X
      • 그룹의 비밀번호인데, 현재는 /etc/gshadow 로 이전
    • GID
    • 그룹 멤버
      • 그룹에 속한 멤버들의 사용자 계정 이름으로 쉼표를 넣어 사용자를 구분하며 사용자의 2차 그룹을 나타냄

useradd - 사용자 계정 생성 명령

useradd [옵션] [로그인 ID]
  • 옵션
    • u uid: UID를 지정
    • -o: UID의 중복을 허용
    • -g gid: 기본 그룹의 GID를 지정
    • -G gid: 2차 그룹의 GID를 지정
    • -d 디렉터리이름: 홈 디렉터리를 지정
    • -s 셸: 기본 셸을 지정
    • -c 설명: 사용자의 이름 등 부가적인 설명을 지정
    • -D: 기본 값을 설정하거나 출력
    • -e 유효 기간: EXPIRE 항목을 설정(YYYY-MM-DD).
    • -f 비활성 일수: INACTIVE 항목을 설정
    • -k 디렉터리: 계정 생성 시 복사할 초기 파일이나 디렉터리를 설정해 놓은 디렉터리를 지정

adduser - 사용자 계정 생성 명령

adduser [옵션] 로그인 ID
  • 옵션
    • -uid UID: UID를 지정
    • --gid GID: 기본 그룹의 GID를 지정
    • --home DIR: 홈 디렉터리를 지정
    • --shell 셸: 기본 셸을 지정
    • --gecos 설명: 사용자의 이름 등 부가적인 설명을 지정
  • adduser 명령으로 사용자 계정을 만들면 기본 설정에 따라 사용자 계정을 등록한 후 암호 및 기타 정보를 입력하도록 함

그룹 관리 명령

groupadd

groupadd [옵션] [그룹명]
  • 옵션
    • -g gid : 그룹의 GID를 지정
    • -o : GID의 중복을 허용

addgroup

addgroup [옵션] 그룹명
  • 옵션
  • gidGID : 그룹의 GID를 지정

groupmod - 그룹 정보 수정

groupmod [옵션] [그룹명]
  • 옵션
    • -g gid : 그룹의 GID를 수정
    • -o : GID의 중복을 허용
    • -n 그룹명 : 그룹명을 다른 이름으로 변경

groupdel - 그룹 삭제

groupdel [그룹 이름]

gpasswd - 그룹 암호 설정하고 사용

gpasswd [옵션] [그룹명]
  • 옵션
    • -a 사용자 계정 : 사용자 계정을 그룹에 추가
    • -d 사용자 계정 : 사용자 계정을 그룹에서 삭제
    • -r : 그룹 암호를 삭제

사용자 정보 관리 명령

UID, EUID

  • UID는 실제 UID로 RUID 라고도 하며 EUID는 유효 사용자 ID
  • UID(RUID)는 사용자가 로그인할 때 사용한 계정의 UID를 의미하고 EUID는 현재 명령을 수행하는 주체의 UID를 의미
  • UID와 EUID가 달라지는 경우
    • 실행 파일에 setuid가 설정되어 있는 경우
      • 해당 파일을 실행한 프로세스의 UID는 사용자 계정의 UID가 아니라 실행 파일 소유자의 UID가 되는데 이때 실행 파일 소유자의 UID를 EUID 라고 함
    • su 명령을 사용하여 다른 계정으로 전환한 경우
      • 사용자가 로그인하면 처음에는 UID와 EUID가 같은 값을 갖지만 su 명령을 사용하여 다른 사용자로 전환하면 UID와 EUID가 달라짐

who - 사용자 로그인 정보 확인

  • 현재 시스템에 로그인한 사용자의 이름과 로그인한 단말기 번호, 로그인 시간 등의 정보를 출력
    who [옵션]
    • 옵션
      • -q: 사용자명만 출력
      • -H: 출력 항목의 제목도 함께 출력
      • -b: 마지막으로 재부팅한 날짜와 시간을 출력
      • -m: 현재 사용자 계정의 정보를 출력
      • -r: 현재 런레벨을 출력

w - 사용자 로그인 정보 확인

w [사용자명]
  • 현재 시스템에 로그인한 사용자의 정보 외에 사용자가 현재 실행 중인 작업에 대한 정보를 알려주는데 명령의 인자로 사용자명을 지정하면 그 사용자의 정보만 출력
  • 사용자명을 생략하면 현재 사용자 로그인 정보를 출력

last - 사용자 확인 명령

  • 사용자명괴 로그인한 시간, 로그아웃한 시간, 터미널 번호나 IP 주소를 출력
    • 누가 언제 로그인해서 로그아웃 했는지를 한 눈에 알 수 있음

UID와 EUID 확인 명령 - whoami, who am i, id

  • 현재 작업 중인 내가 누구인지, UID와 EUID는 무엇인지 확인하는 명령
  • 각 명령은 다음과 같이 구별
    • UID 출력: whoami, who -m
    • EUID 출력: whoami, id

groups - 소속 그룹 확인 명령

groups [계정명]
  • 소속 그룹 확인

root 권한 사용

  • root 권한을 사용하는 방법

    • su 명령을 사용하여 root 계정으로 전환하는 것
      • 간단한 방법이지만, 일반 사용자가 모든 시스템 관리 권한을 가지게 되어 보안상 매우 위험
    • 일반 사용자에게 시스템 관리 작업 중 특정 작업만 수행할 수 있는 권한을 주는 것
  • sudo 권한 설정

    • 일반 사용자가 sudo 명령으로 root 권한을 실행하려면 특정 권한을 부여받아야 함

      • 제한적인 권한 부여
    • 권한은 /etc/sudoers 파일에 설정해야 하는데 이 파일은 root 계정으로만 수정할 수 있음

    • /etc/sudoers 파일은 vi 도 편집할 수 있지만 visudo 명령을 사용해 수정할 것을 권장
      - visudo 명령은 파일을 수정한 후 문법이 맞는지 확인하고 저장

      # 계정 ALL=명령어절대경로 나열
      developowl ALL=(ALL) ALL
      developowl ALL=/usr/sbin/useradd
    • 리눅스 설치 후 만든 계정에서 sudo 명령이 안 되면 이 파일을 수정하면 됨

passwd 명령

  • 사용자 계정의 암호를 수정하는 명령
  • 암호를 잠그면 로그인할 수 없음.
  • 로그인 중에 암호를 잠그게 되면 sudo 명령은 사용할 수 없지만, 로그인한 세션에는 영향이 없음
    passwd [옵션] [사용자 계정]
    • -l 사용자 계정 : 지정한 계정의 암호를 잠금
    • -u 사용자 계정 : 암호 잠금을 해제
    • -d 사용자 계정 : 지정한 계정의 암호를 삭제

파일 및 디렉터리의 소유자와 소유자 그룹 변경

chown

  • change owner
  • 파일과 디렉토리의 소유자 와 소유 그룹을 변경하는 명령
    chown [옵션] [사용자 계정] [파일명/디렉터리명]
    • 옵션
      • -R : 서브 디렉터리의 소유자와 소유 그룹도 변경

chgrp

  • 파일과 디렉토리의 소유 그룹을 변경하는 명령
    chgrp [옵션] [사용자 계정] [파일명/디렉터리명]
    • 옵션
      • -R : 서브 디렉터리의 소유 그룹도 변경

디스크 사용량 설정

  • 리눅스는 기본적으로 여러 사용자가 함께 사용하는 시스템이므로 특정 사용자가 과도하게 디스크를 사용하지 않도록 제한할 필요가 있음
  • 디스크 사용량을 제한하는 것을 디스크 쿼터 라고 하는데, 디스크 쿼터를 설정하는 방법으로는 하드디스크에서 사용자가 사용할 수 있는 파일의 전체 용량을 설정하는 방법과 사용자가 사용할 수 있는 총 파일 수를 설정하는 방법이 있음
  • 쿼터 값을 설정할 때 hard limit 과 soft limit 두 가지 값이 있는데,
    • 하드 리미트는 사용자가 절대로 넘을 수 없는 최대치를 명시한 값이고,
    • 소프트 리미트는 일정 시간 내에는 넘을 수 있는 한계치를 설정한 값
      • 정해진 시간이 지나면 하드 리미트 값이 적용되어 새로운 파일을 저장할 수 없음

10. NetworkManagement

네트워크 기초

TCP/IP 프로토콜

  • Protocol
    • 컴퓨터와 컴퓨터가 데이터를 주고받기 위한 통신 규칙 또는 규약
  • TCP/IP
    • 인터넷에서의 프로토콜

계층 구조

  • Application Layer
    • 서비스 제공 응용 프로그램
    • 프로토콜: DNS, FTP, SSH, HTTP, Telnet
    • 장비: Gateway
    • 전송 단위: Message
  • Transport Layer
    • 응용 프로그램으로 데이터 전달, 흐름 제어
    • 프로토콜: TCP, UDP
    • 전송 단위: Segment
  • Network Layer
    • 주소 관리 및 경로 탐색(Routing)
    • 프로토콜: IP, ICMP
    • 장비: Router
    • 전송 단위: Packet
  • Link Layer
    • 네트워크 장치 드라이버
    • 프로토콜: ARP
    • 장비: Switch
    • 전송 단위: Frame
  • Physical Layer
    • 전송 매체
    • 프로토콜: 구리선, 광케이블, 무선
    • 장비: HUB
    • 전송 단위: Bit

MAC Address

  • Media Access Control 의 약자
  • 하드웨어를 위한 주소이며 다른 말로 이더넷 주소, 하드웨어 주소, 물리 주소 라고도 함
  • 네트워크 인터페이스 카드(랜 카드)에 저장된 주소
  • 기본적으로 네트워크 인터페이스 카드가 만들어질 때 부여되며, 원칙적으로는 수정할 수 없지만 일부 네트워크 인터페이스 카드의 경우 사용자가 MAC 주소를 수정할 수 있도록 허용함
  • 특별한 경우가 아니면 MAC 주소는 수정하지 않는 것이 좋음
  • MAC 주소는 각 하드웨어를 구별하는 역할을 수행
  • MAC 주소는 ‘:’ 이나 ‘-’ 로 구분되는 여섯 개의 16진수로 구성되며 총 48bit
  • 앞의 세 자리는 제조사 번호이고, 뒤의 세 자리는 일련번호

IP Address

  • 컴퓨터가 인터넷에 연결되려면 IP 주소가 할당되어 있어야 함
  • 보통 인터넷 주소라고 부르는 것이 IPinternet protocol 주소
  • IP 주소는 인터넷으로 연결된 네트워크에서 각 컴퓨터를 구분하기 위해 사용
  • IPv4 주소는 1바이트 크기의 숫자 네 개로 구성되므로 총 4 바이트
  • 숫자 네 가지와 마침표(.)로 구성된 주소가 IPv4 주소
  • IPv4 주소는 고갈되어 더 이상 새로운 주소를 배정받을 수 없는데 이를 대체하기 위해 개발된 주소는 IPv6.
    • 16진수로 표기하며 128bit
  • TCP/IP 프로토콜의 3~5 계층은 IP 주소를 사용
  • 구성

NetMask

  • IP 주소에서 네트워크 부분을 알려주는 역할을 하는 것이 netmask

  • 하나의 네트워크를 다시 작은 네트워크(서브넷)로 분리할 때도 사용하므로 서브넷 마스크라고 부르기도 함

  • C 클래스 IP 주소의 경우 기본 넷마스크가 255.255.255.0

    • 이 경우 192.168.100.0 이라고 표현하기도 함.
  • 0.0.0.0 → 모든 컴퓨터

  • 255.255.255.255 → 나 혼자만 사용하고 싶을 때

📌 VPC의 원리는 무엇일까?

  • Virtual Private Cloud
  • 물리적으로 떨어져 있는 자원들을 가상화 기술로 묶어서 마치 옆에 있는 서버처럼 관리하는 것

1. 왜 같은 VPC 내에서는 통신 비용이 발생하지 않을까?

  • 보통 클라우드에서 비용이 발생하는 지점은 데이터가 Public Internet(공인 인터넷망) 으로 나갈 때이다.
  • 하지만 같은 VPC 내의 통신은 다음과 같은 이유로 비용이 저렴하거나 무료이다.
    • 자체 네트워크망 이용 : 데이터가 외부 인터넷으로 나가지 않고, 클라우드 사업자가 미리 구축해둔 거대한 전용 광섬유 네트워크 안에서만 움직인다.
    • 게이트웨이 생략 : 외부로 나갈 때 필요한 복잡한 검사나 공인 IP 변환 과정을 거치지 않으므로 사업자 입장에서는 추가 리소스 비용이 거의 들지 않음.
    • 서비스 유도 : 사용자들이 보안과 성능이 좋은 VPC 내부망을 더 많이 쓰도록 유도하기 위한 정책적인 측면도 크다.
    • <주의>
      • 같은 VPC라도 서로 다른 Region 간 통신이나, 가용 영역(AZ) 간 통신에는 데이터 전송료가 발생할 수 있다.

2. VPC 연결을 하면 통신 속도가 향상되나요?

  • → 넵, 일반 인터넷망을 거치는 것보다 속도와 안정성 면에서 훨씬 유리합니다.
    • 홉(Hop) 수의 감소 : 일반 인터넷은 목적지까지 가기 위해 수많은 통신사 장비(Router)를 거치며 병목 현상이 발생한다. 반면 VPC 내부망은 최적화된 최단 경로로 연결된다.
    • 대역폭 보장 : 외부 인터넷의 혼잡도에 영향을 받지 않는 고속 전용선을 사용하므로 Latency 가 매우 낮고 일정하다
    • MTU(Maximum Transmission Unit) : VPC 내부망은 일반 인터넷보다 더 큰 데이터 덩어리(Jumbo Frames)를 한 번에 보낼 수 있어 효율이 좋다

3. Tunneling

  • 물리적으로 떨어진 서버가 어떻게 같은 네트워크인 것처럼 행동할까?
  • → Encapsulation 기술 덕분에
    1. A 서버가 보낸 데이터를 가상의 주소가 담긴 특수 봉투에 넣는다
    2. 이 봉투를 클라우드 사업자의 전용망을 통해 빛의 속도로 전송한다
    3. 받는 쪽에서 봉투를 까보면 마치 동일한 스위치에 연결된 것처럼 데이터가 나타난다.

정리

  • VPC(Virtual Private Cloud)는 ‘클라우드 서비스 이용료’ 라는 패키지 안에 내부 통신 비용이 이미 포함되어 있거나 매우 저렴하게 책정이 되어 있기에 비용이 거의 발생하지 않는다고 한다.
  • 실제로는 CSP 등이 자사들의 클라우드 시스템 운영을 위해 전세계에 깔아둔 통신망을 사용하므로 외부 통신사(IPC)에 망 사용료를 낼 필요가 없는 것.
  • SDN(Software Defined Networking), 대역폭 보장으로 인해 병목 현상이 없다.

Broadcast Address

  • 네트워크에 있는 모든 컴퓨터에 메시지를 보낼 때 사용하는 것으로 호스트 부분을 모두 1로 설정
  • 자신의 네트워크 대역에서 가장 마지막 IP 주소로 이 주소에 데이터를 전송하면 네트워크에 속한 모든 컴퓨터에게 데이터가 전송됨
    • 192.168.100.0/24 이면 브로드캐스트 주소는 192.168.100.255

Network Address

  • 자신의 네트워크 대역에서 첫번째 IP 주소로 이 주소는 네트워크를 찾아가기 위한 주소

Host Name

  • 컴퓨터가 인터넷에 연결되려면 IP 주소가 있어야 하는데 이 주소는 숫자로 되어 있어서 기억하기가 어려움
  • 문자로 된 주소를 고안했고, 이것이 호스트이름(Hostname) 또는 도메인(Domain)
  • 호스트 이름도 두 부분으로 구성되는데, 하나는 호스트이고 다른 하나는 도메인
  • www.naver.com 에서 보면 naver.com은 Domain 이고, www가 Host

Port

  • 네트워크 서비스를 이용할 때 사용자의 패킷은 IP 주소를 보고 해당 서버 컴퓨터를 찾아가는데, 서버 컴퓨터에 도착한 사용자의 패킷은 어떤 서비스를 요청했는지 확인한 다음 해당 데몬에 패킷을 전달
  • 웹 서비스를 요청했으면 웹 서버 데몬(httpd)에 전달하는 것
  • 사용자가 어떤 서비스를 요청했는지를 구분해주는 것이 포트 번호
  • 서비스 별로 사용 중인 포트 번호 확인
    • cat /etc/services | grep ftp
    • /etc/services 파일에 저장된 포트 번호는 국제 표준으로 합의하여 사용하고 있는 것
  • 사용자가 개발한 네트워크 프로그램은 이 파일에 정의되지 않은 번호를 사용해서 서비스를 제공하는 것을 권장

네트워크 설정

인터넷에 연결하려면 설정해야 할 주소

  • IP Address
  • Subnet Mask
  • Broadcast Address
  • Gateway Address
  • DNS Address

네트워크 관리자

  • 우분투에서는 NetworkManager 가 네트워킹 서비스를 제공

  • 네트워크 관리자는 네트워크의 제어와 설정을 관리하는 daemon

  • 네트워크 관리자를 이용해서 IP 주소 설정, 고정 라우터 설정, DNS 설정등을 수행할 수 있음

  • 유닉스와 리눅스가 예전부터 제공하던 ifcfg 형식의 설정 파일도 지원

  • 네트워크 관리와 관련된 도구

  • 네트워크 관리자: 기본 네트워킹 데몬

  • nmcli 명령: 네트워크 관리자를 사용하는 명령 기반 도구

  • ip 명령: 네트워크를 설정하는 명령을 제공

  • GUI 에서는 [설정] - [네트워크]

  • GUI 에서는 nm-connection-editor

설치 및 활성화

# Install
sudo apt install network-manager

# 확인te
systemctl status NetworkManager

# 부팅하자마자 활성화
systemctl enable NetworkManager

nmcli 명령

nmcli [옵션] 명령 [서브 명령]
  • 옵션

    • -t : 실행 결과를 간단하게 출력
    • -p : 사용자가 읽기 좋게 출력
    • -v : nmcli의 버전을 출력
    • -h : 도움말을 출력
  • 서브 명령

    • general {status | hostname} : 네트워크 관리자의 전체적인 상태를 출력하고 호스트 이름을 읽거나 변경할 수 있음
    • networking {on | off | connectivity} : 네트워크를 시작 및 종료하고 연결 상태를 출력
    • connection {show | up | down | modify | add | delete | reload | load} : 네트워크를 설정
    • device {status | show} : 네트워크 장치의 상태를 출력

네트워크의 전체 상태를 확인 - nmcli general

  • CONNECTIVITY 값
    • none : 네트워크에 연결되지 않음
    • limited : 호스트가 네트워크에 연결되어 있지만 인터넷에 연결이 안 된 것
    • full : 네트워크에 연결되어 있고 인터넷도 사용 가능
    • unknown : 알 수 없음

활성화 또는 비활성화

# 상태 확인
nmcli net con  

# 비활성화
nmcli net off 

# 활성화
nmcli net on 

디바이스(NIC) 상태 확인

# 전체 상태 확인 (loopback - 나 자신)
nmcli dev status

# 특정 장치의 상태
nmcli dev show enp0s3

ip 명령으로 주소 관리

  • ip 명령으로 네트워크 설정이 가능하지만 재부팅하면 내용이 사라지기 때문에 내용을 보존하기 위해서는 설정 파일에 저장해야 함.
    ip [옵션] 객체 [서브 명령]
    • 옵션
      • -V : 버전을 출력
      • -s : 자세한 정보를 출력
    • 객체 [서브 명령]
      • address [add | del | show | help] : 장치의 IP 주소를 관리
      • route [add l del | help] : 라우팅 테이블을 관리
      • link [set] : 네트워크 인터페이스를 활성화 또는 비활성화
# 전체 장치에 대한 상세 정보 출력
ip addr show 

# 특정 장치에 대한 상세 정보 출력
ip addr show enp0s8

# ip 주소 추가
sudo ip addr add 192.168.1.20/24 dev enp0s8

# 확인
ip addr show enp0s8

# ip 주소 삭제
sudo ip addr del 192.168.1.20/24 dev enp0s8

profile
Don’t get mad at the computer.

0개의 댓글