sudo

Gaon12 (토론 / 기여)님의 2025년 1월 29일 (수) 11:52 판 (내용 보강)
(차이) ← 이전 판 / 최신판 (차이) / 다음 판 → (차이)


개요

유닉스, 리눅스에서 관리자 권한을 사용하거나 획득할 때 사용하는 명령어들입니다. 시스템 관리, 소프트웨어 설치, 설정 변경 등 관리자 권한을 필요로 하는 작업을 수행할 때 사용됩니다. 이러한 명령어들은 시스템 보안에 직접적인 영향을 미치므로 신중하게 사용해야 합니다.

su

su(Substitute User)는 유닉스리눅스에서 사용되는 명령어로, 다른 사용자의 권한으로 쉘을 실행할 수 있게 해주는 도구입니다. 이 명령어를 통해 로그인된 사용자가 다른 사용자의 권한을 임시로 얻을 수 있습니다.

역사

su 명령어는 1971년 최초의 유닉스 버전에서부터 존재했던 핵심 시스템 도구 중 하나입니다. Dennis Ritchie와 Ken Thompson이 AT&T Bell 연구소에서 개발한 이 도구는, 초기에는 단순히 사용자를 전환하는 기능만을 제공했습니다. 이후 버클리 소프트웨어 배포판(BSD)에서 다양한 보안 기능과 옵션들이 추가되었습니다.

상세 사용법

su 명령어는 다양한 옵션과 함께 사용할 수 있습니다:

  • su - 기본적으로 root 사용자로 전환
  • su username - 특정 사용자로 전환
  • su - 또는 su -l - 로그인 쉘로 전환 (환경 변수 완전 초기화)
  • su -c 'command' - 특정 명령어를 다른 사용자 권한으로 실행

환경 변수 처리

su 명령어는 사용자 전환 시 환경 변수를 다음과 같이 처리합니다:

  • su (옵션 없이): 현재 환경 변수 유지
  • su -: 새로운 사용자의 환경으로 완전히 전환
  • su -p: 현재 환경 변수를 유지하면서 전환

보안 고려사항

su 명령어 사용 시 고려해야 할 주요 보안 사항들:

  • root 비밀번호 노출 위험
  • 권한 남용 가능성
  • 감사(audit) 추적의 어려움
  • 사용자 전환 기록 관리의 중요성

로깅과 감사

su 명령어의 사용은 시스템 로그에 기록됩니다:

  • /var/log/auth.log (데비안 계열)
  • /var/log/secure (레드햇 계열)
  • 로그에는 사용자 전환 시도, 성공/실패 여부가 기록됩니다

sudo

sudo(SuperUser DO)는 관리자 권한이 필요한 명령을 실행할 수 있게 해주는 고급 권한 관리 도구입니다. 1980년대 뉴욕 대학교의 Bob Coggeshall과 Cliff Spencer가 개발했으며, 현재는 Todd Miller가 관리하고 있습니다.

상세 아키텍처

sudo는 다음과 같은 구조로 동작합니다:

  • sudoers 설정 파일: /etc/sudoers에 권한 정책 저장
  • 플러그인 아키텍처: 정책, 입출력, 감사 등을 처리하는 모듈식 구조
  • PAM 통합: 다양한 인증 메커니즘 지원
  • 명령어 별칭: 자주 사용하는 명령어 그룹 정의 가능

고급 설정 옵션

sudoers 파일 구문

# 사용자 지정
user    ALL=(ALL:ALL) ALL

# 그룹 지정
%admin  ALL=(ALL) ALL

# 비밀번호 없이 실행
user    ALL=(ALL) NOPASSWD: ALL

# 특정 명령어만 허용
user    ALL=(ALL) /bin/ls, /bin/cat

환경 변수 제어

sudo는 보안을 위해 기본적으로 대부분의 환경 변수를 초기화합니다. 다음 변수들은 예외적으로 유지됩니다:

  • TERM
  • PATH
  • HOME
  • MAIL
  • SHELL
  • LOGNAME
  • USER
  • USERNAME

보안 기능

sudo는 다양한 보안 기능을 제공합니다:

  • 명령어 제한: 사용자별로 실행 가능한 명령어 제한
  • 시간 제한: 권한 부여의 유효 시간 설정
  • 감사 로깅: 모든 명령어 실행 기록
  • 비밀번호 정책: 다양한 인증 방식 지원

최신 개발 현황

sudo 2.0 개발

2023년부터 시작된 sudo 2.0 개발은 다음과 같은 주요 변화를 포함합니다:

  • 모듈식 아키텍처 강화
  • 실시간 정책 업데이트 지원
  • 클라우드 네이티브 환경 지원 강화
  • 컨테이너 통합 기능 개선

CVE-2023-28487

2023년에 발견된 취약점으로, 특정 조건에서 권한 상승이 가능한 문제가 있었습니다. 이 취약점은 버전 1.9.13p2에서 패치되었습니다.

doas

자세한 내용은 doas 문서를 확인하세요!

doas(do as) 명령어는 OpenBSD에서 개발된 sudo의 대안입니다. 2015년에 처음 도입되었으며, 더 단순하고 안전한 설계를 목표로 합니다.

특징

  • 간단한 설정 파일 구조
  • 작은 코드베이스
  • 높은 보안성
  • BSD 계열 시스템에서 널리 사용

설정 예시

# /etc/doas.conf
permit persist keepenv :wheel
permit nopass root as root

기타 권한 관리 도구

PolicyKit

데스크톱 환경에서 사용되는 권한 관리 시스템으로, 세밀한 권한 제어가 가능합니다. 자세한 내용은 PolicyKit 문서를 확인하세요!

SELinux

NSA에서 개발한 강력한 접근 제어 시스템으로, 시스템 전반의 보안을 강화합니다. 자세한 내용은 SELinux 문서를 확인하세요!

sudo in Rust

2022년 12월에 시작된 섬네일을 만드는 중 오류 발생: sudo-rs 프로젝트는 sudo를 Rust로 재구현하는 작업을 진행 중입니다. 2024년 현재 다음과 같은 진행 상황을 보이고 있습니다:

주요 개발 현황

  • 기본적인 권한 상승 기능 구현 완료
  • sudoers 파일 파서 구현
  • PAM 인증 통합
  • 기본적인 로깅 시스템 구현

향후 계획

  • 플러그인 시스템 구현
  • 성능 최적화
  • 보안 감사 및 인증
  • 기존 sudo와의 완벽한 호환성 확보

이점

  • 메모리 안전성 보장
  • 현대적인 에러 처리
  • 향상된 동시성 처리
  • 더 나은 유지보수성

설치

데비안, 우분투 기반

root@localhost:~# apt update
root@localhost:~# apt install sudo

RHEL/CentOS/Fedora 기반

root@localhost:~# dnf install sudo

Arch Linux

root@localhost:~# pacman -S sudo

모범 사례

보안 권장사항

  • 최소 권한 원칙 준수
  • 정기적인 감사 로그 검토
  • sudo 버전 최신화 유지
  • 사용자별 권한 세분화

설정 예시

기본적인 보안 설정

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
Defaults        logfile="/var/log/sudo.log"
Defaults        log_year
Defaults        passwd_tries=3
Defaults        insults

각주

최근 바뀜

더 보기