Sudo: 두 판 사이의 차이

Gaon12 (토론 / 기여)
시작
 
Gaon12 (토론 / 기여)
내용 보강
 
2번째 줄: 2번째 줄:


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


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


=== 사용법 ===
=== 역사 ===
'''su''' 명령어를 입력하고 다른 사용자의 이름을 지정하면 해당 사용자의 권한으로 새로운 쉘 세션을 시작할 수 있습니다. 일반적으로 root 사용자로 전환하는 경우가 많으며, 이때는 '''su''' 또는 '''su root''' 명령을 사용합니다. 이 경우 root 사용자의 비밀번호를 입력해야 합니다.
'''su''' 명령어는 1971년 최초의 유닉스 버전에서부터 존재했던 핵심 시스템 도구 중 하나입니다. Dennis Ritchie와 Ken Thompson이 AT&T Bell 연구소에서 개발한 이 도구는, 초기에는 단순히 사용자를 전환하는 기능만을 제공했습니다. 이후 버클리 소프트웨어 배포판(BSD)에서 다양한 보안 기능과 옵션들이 추가되었습니다.


=== su - ===
=== 상세 사용법 ===
'''su -''' 명령어는 새로운 로그인 세션을 시작하고 사용자의 환경을 완전히 변경합니다. 사용자의 홈 디렉토리, 환경 변수 등이 해당 사용자의 설정으로 변경됩니다. 일반적으로 <code>root</code> 사용자로 전환할 때 사용됩니다.
su 명령어는 다양한 옵션과 함께 사용할 수 있습니다:


=== su의 문제점 ===
* '''su''' - 기본적으로 root 사용자로 전환
'''su''' 명령어의 가장 큰 문제점은 사용자가 <code>root</code> 비밀번호를 알아야 한다는 것입니다. 이로 인해 시스템 보안에 취약점이 생길 수 있습니다. 또한, 일반 사용자가 <code>root</code> 권한을 가진 쉘에 액세스하면 실수로 시스템을 손상시킬 위험이 있습니다.
* '''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 ==
'''sudo'''(SuperUser DO)는 특정 사용자가 다른 사용자의 권한(일반적으로 <code>root</code> 사용자)으로 명령을 실행할 수 있게 하는 Unix와 Linux의 명령어입니다. <code>sudo</code>는 <code>su</code>의 대안으로 개발되었으며, 보안 문제를 해결하기 위한 해결책을 제공합니다.
'''sudo'''(SuperUser DO)는 관리자 권한이 필요한 명령을 실행할 수 있게 해주는 고급 권한 관리 도구입니다. 1980년대 뉴욕 대학교의 Bob Coggeshall과 Cliff Spencer가 개발했으며, 현재는 Todd Miller가 관리하고 있습니다.


=== 사용법 ===
=== 상세 아키텍처 ===
'''sudo''' 뒤에 실행하려는 명령어를 적으면 해당 명령어를 <code>root</code> 권한으로 실행할 수 있습니다. 예를 들어, '''<code>sudo apt update</code>''' 명령은 패키지 리스트를 업데이트하라는 명령을 관리자 권한으로 실행합니다.
sudo는 다음과 같은 구조로 동작합니다:


=== sudo의 장점 ===
* '''sudoers 설정 파일''': /etc/sudoers에 권한 정책 저장
<code>sudo</code>의 가장 큰 장점은 사용자가 <code>root</code> 비밀번호를 알 필요가 없다는 것입니다. 또한, sudo는 사용자에게 필요한 권한만 부여할 수 있으므로 보안에 유리합니다.
* '''플러그인 아키텍처''': 정책, 입출력, 감사 등을 처리하는 모듈식 구조
* '''PAM 통합''': 다양한 인증 메커니즘 지원
* '''명령어 별칭''': 자주 사용하는 명령어 그룹 정의 가능
 
=== 고급 설정 옵션 ===
==== sudoers 파일 구문 ====
<syntaxhighlight lang="text">
# 사용자 지정
user    ALL=(ALL:ALL) ALL
 
# 그룹 지정
%admin  ALL=(ALL) ALL
 
# 비밀번호 없이 실행
user    ALL=(ALL) NOPASSWD: ALL
 
# 특정 명령어만 허용
user    ALL=(ALL) /bin/ls, /bin/cat
</syntaxhighlight>
 
==== 환경 변수 제어 ====
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 계열 시스템에서 널리 사용
 
=== 설정 예시 ===
<syntaxhighlight lang="text">
# /etc/doas.conf
permit persist keepenv :wheel
permit nopass root as root
</syntaxhighlight>
 
== 기타 권한 관리 도구 ==
=== PolicyKit ===
데스크톱 환경에서 사용되는 권한 관리 시스템으로, 세밀한 권한 제어가 가능합니다. 자세한 내용은 [[PolicyKit]] 문서를 확인하세요!
 
=== SELinux ===
NSA에서 개발한 강력한 접근 제어 시스템으로, 시스템 전반의 보안을 강화합니다. 자세한 내용은 [[SELinux]] 문서를 확인하세요!
 
== sudo in Rust ==
2022년 12월에 시작된 {{깃허브/저장소|memorysafety|sudo-rs}} 프로젝트는 sudo를 [[Rust]]로 재구현하는 작업을 진행 중입니다. 2024년 현재 다음과 같은 진행 상황을 보이고 있습니다:
 
=== 주요 개발 현황 ===
* 기본적인 권한 상승 기능 구현 완료
* sudoers 파일 파서 구현
* PAM 인증 통합
* 기본적인 로깅 시스템 구현
 
=== 향후 계획 ===
* 플러그인 시스템 구현
* 성능 최적화
* 보안 감사 및 인증
* 기존 sudo와의 완벽한 호환성 확보
 
=== 이점 ===
* 메모리 안전성 보장
* 현대적인 에러 처리
* 향상된 동시성 처리
* 나은 유지보수성


== 설치 ==
== 설치 ==
거의 대부분의 시스템에는 <code>sudo</code>가 미리 설치되어 있지만, 만약 설치되어 있지 않다면 다음과 같이 설치하면 됩니다.
=== 데비안, 우분투 기반 ===
=== 데비안, 우분투 기반 ===
<syntaxhighlight lang="shell">
<syntaxhighlight lang="shell">
root@localhost: /# apt install sudo
root@localhost:~# apt update
root@localhost:~# apt install sudo
</syntaxhighlight>
</syntaxhighlight>


=== 센토스 기반 ===
=== RHEL/CentOS/Fedora 기반 ===
<syntaxhighlight lang="shell">
<syntaxhighlight lang="shell">
root@localhost: /# yum install sudo
root@localhost:~# dnf install sudo
</syntaxhighlight>
</syntaxhighlight>


=== sudo 버그 및 취약점 ===
=== Arch Linux ===
==== CVE-2021-3156 ====
<syntaxhighlight lang="shell">
2021년에는 <code>sudo</code>에 대한 보안 취약점이 발견되어 큰 이슈가 되었습니다. 이는 "Baron Samedit"라는 이름의 취약점<ref>취약점 코드명 <code>CVE-2021-3156</code></ref>으로, <code>sudo</code> 명령어를 통해 임의의 명령을 실행할 수 있는 문제였습니다. 이 취약점은 공격자가 시스템을 완전히 제어할 수 있게 만들 수 있으므로 매우 심각한 문제였습니다.
root@localhost:~# pacman -S sudo
</syntaxhighlight>


권한이 없는 로컬 사용자가 별도의 인증 없이 '''ROOT''' 권한을 획득하고 사용할 수 있었습니다. 영향을 받는 버전은 Stable 버전 <code>1.9.0~1.9.5p1</code>, Legacy 버전 <code>1.8.2~1.8.31p2</code> 이 영향을 받습니다. 2011년 7월 버전 부터 영향<ref>2011년부터 영향을 받기 때문에, 발견되기까지 2021년까지 9년 정도 걸린 것이다.</ref>이 있었습니다.
== 모범 사례 ==
=== 보안 권장사항 ===
* 최소 권한 원칙 준수
* 정기적인 감사 로그 검토
* sudo 버전 최신화 유지
* 사용자별 권한 세분화


이후 이 문제는 패치되었습니다.
=== 설정 예시 ===
 
==== 기본적인 보안 설정 ====
== sudo in Rust ==
<syntaxhighlight lang="text">
2022년 12월 12일에 시작된 {{깃허브/저장소|memorysafety|sudo-rs}}의 프로젝트는 <code>sudo</code>를 [[Rust]]로 재작성하는 작업을 진행하고 있습니다. 이 프로젝트는 Rust의 메모리 안전성 등의 장점을 활용하여 <code>sudo</code>의 안정성과 보안성을 향상시키려는 것이 목표입니다.
Defaults        env_reset
 
Defaults        mail_badpass
이 작업은 <code>sudo</code>의 코드 베이스를 현대화하고 향후 유지 보수를 용이하게 하는 것이 주요 목적입니다. Rust를 사용하면 메모리 관련 버그를 방지하고 보다 안정적인 소프트웨어를 만들 수 있으므로, 이 변화는 <code>sudo</code>의 미래에 큰 영향을 미칠 것으로 예상됩니다.
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
</syntaxhighlight>


== 각주 ==
== 각주 ==


<!--분류-->
<!--분류-->
[[분류:유닉스]] [[분류:리눅스]] [[분류:시스템 관리자 권한]] [[분류:보안]] [[분류:sudo]]
[[분류:유닉스]] [[분류:리눅스]] [[분류:시스템 관리자 권한]] [[분류:보안]] [[분류:sudo]] [[분류:시스템 관리]] [[분류:권한 관리]]

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월에 시작된 Green ticksudo-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

각주[편집 / 원본 편집]