Skip to content
TUWLAB.com
모든 게시물에 대하여 '링크'
방식의 퍼가기만 허용합니다.
한양대학교 전자통신컴퓨터공학부
바라미
  • 357
  • 2682216
DNS Powered by DNSEver.com
Linux

[Linux] Sudo 명령의 Secure Path

Posted 2014. 11. 27 Updated 2015. 04. 24 Views 8659 Replies 0

sudo 명령은 해당 명령을 잠시 다른 계정(주로 root)의 권한으로 실행하고자 할 때, 계정 전환 등의 절차 없이 유용하게 사용할 수 있는 명령입니다. 다른 계정의 권한을 빌릴 수 있다는 말은 그 계정으로 할 수 있는 모든 일을 할 수 있다는 것을 의미하므로 사용시 유의해야 합니다.

보안상 상당히 위해가 될 수 있는  명령이기 때문에 리눅스 시스템에서는 모든 계정에게 sudo 명령을 사용할 수있는 권한을 부여하지 않고, sudoers라는 설정 파일을 통해 이 명령을 사용할 수 있는 계정의 범위를 한정합니다.

sudo에서 제공하는 또 다른 보안 기능 중 하나가 바로 Secure Path입니다. 이는 sudo 명령을 실행할 때 사용하는 가상 쉘의 PATH 정보를 설정합니다. 다시 말하면, sudo 명령을 실행할 때 현재 계정의 쉘이 아닌 새로운 쉘을 생성하고 그 안에서 명령을 실행하는데, 이 때 명령을 찾을 경로를 나열한 환경변수인 PATH값이 바로 이 secure_path가 됩니다.

즉, sudo 명령을 통해 실행하는 명령은 현재 계정의 쉘 환경도, 대신 실행하는 계정의 쉘 환경도 아닌 특별히 정의된 제 3의 쉘 환경에서 샌드박스 형태로 실행됩니다.

sudo 명령의 Secure Path 기능은 특히 보안상 매우 중요한데, 바로 트로이목마 해킹 공격에 대한 일차적인 방어 기능을 제공하기 때문입니다. 즉, 사용자의 부주의로 인해 현재 계정의 PATH에 악의적인 경로가 포함된 경우, 이를 무시함으로써 sudo를 통한 전체 시스템이 해킹되는 경우를 방지할 수 있습니다.


트로이목마 공격 시나리오

Secure Path 기능이 없거나 해제한 경우, 다음과 같은 트로이목마 공격이 가능합니다.

1. sudo 실행 권한이 있는 사용자가 개인적으로 사용하기 위해 인터넷을 통해 프로그램을 다운받고, 이를 사용자 권한으로 실행했습니다.

2. 이 프로그램에 현재 사용자의 PATH 정보를 변경하는 악성 코드가 숨어있었고, 프로그램이 실행되면서 사용자의 PATH 맨 앞부분에 /path/to/trojan:을 추가합니다. 이 디렉토리 안에는 루트 패스워드를 변경하고 외부 서버로 이 사실을 통보하는 cp라는 프로그램(변조된 cp)이 위치합니다. PATH의 맨 앞부분에 이 경로가 위치하므로, 이제부터 사용자가 cp 명령을 실행할때는 이 '변조된 cp'가 실행됩니다.

3. 사용자가 자신의 소유가 아닌 디렉토리로 파일을 복사 하기 위해 sudo cp 명령을 사용합니다. 이 때, 본래 시스템에 설치되어 있는 cp가 아닌 '변조된 cp'가 실행되며, sudo를 통해 실행되었기 때문에 루트 패스워드를 성공적으로 변경하고 외부 서버로 정보를 전송합니다. 명령을 실행한 사용자에게는 정상적인 cp를 실행한 것처럼 위장하기 위해 실제 파일을 복사하는 작업도 수행합니다. 사용자가 볼 때는 파일 복사가 정상적으로 이루어졌으므로, 아무런 이상도 알아차리지 못합니다.


Secure Path가 문제의 원인인 경우

현재 계정 및 대상 계정에서 이상 없이 실행되는 명령이 현재 계정에서 sudo -u {{대상 계정}} ~~ 과 같은 방법으로 실행했을 때 'Command Not Found' 오류가 발생한다면, 이는 Secure Path에 해당 명령이 있는 경로가 등록되어 있지 않기 때문입니다.

이 경로를 Secure Path에 항상 등록할 필요가 없으며, 이번 한 번만 실행하려 한다면 해당 명령의 절대경로를 입력해서 명령을 실행하면 됩니다. 명령의 절대경로를 잘 모를 경우, 다음과 같이 which를 사용해서 명령을 작성할 수 있습니다.

sudo -u git -H `which bundle` install --deployment --without development test mysql aws

해당 경로가 신뢰할 수 있으며, 앞으로도 지속적으로 사용할 필요가 있다면, 다음 방법을 이용하여 Secure Path를 수정하도록 합니다.


Secure Path 수정하기

sudoers 파일은 소유자인 root에게도 쓰기권한이 부여되어 있지 않으므로 임의로 수정할 수 없습니다. (그렇다고 chmod로 쓰기권한을 부여하는 것은 심각한 보안상 문제를 야기합니다.)

sudoers 파일을 수정하려 하는 경우 별도의 위치에 새로운 sudoers 파일을 작성해서, 원래 파일에 덮어쓰기를 하는 방법을 사용해야 합니다.

단, vi나 vim이 설치된 경우 sudoers 파일을 수정하는 visudo명령을 사용하면 유용합니다.

sudo visudo

sudoers 파일의 아래쪽에서 다음 줄을 찾고, 여기에 필요한 Secure Path를 덧붙입니다.

Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin


서비스 선택
이용중인 SNS 버튼을 클릭하여 로그인 해주세요.
SNS 계정을 통해 로그인하면 회원가입 없이 댓글을 남길 수 있습니다.
댓글
?
Powered by SocialXE

List of Articles
번호 분류 제목 글쓴이 최근 수정일 조회 수
» Linux [Linux] Sudo 명령의 Secure Path TUW 2015.04.24 8659
144 Linux [Linux] fdisk 활용 외: 파티션 생성, 배드블록 검사, 파일시스템 생성 TUW 2015.04.24 8548
143 Linux TCPDump를 활용하여 패킷 모니터링하기 TUW 2020.04.13 7519
142 일반 [C++] Template Class의 정의(Definition)와 구현(Implementation)은 한 파일 안에 있어야 한다. TUW 2015.11.26 10622
141 일반 [GIT] Patch 만들기 및 적용하기: format-patch, am TUW 2015.01.10 42737
140 일반 [GIT] 실행취소와 Commit 삭제: reflog, reset, checkout, revert TUW 2019.04.28 65327
139 일반 [GIT] 임시 저장소 사용하기: stash TUW 2015.11.27 5010
138 일반 [GIT] 병합하고 Commit 재정렬하기: cherry-pick, rebase, merge file TUW 2017.06.02 32710
137 일반 [GIT] Branch 관리하기: branch, checkout, push, pull 2 TUW 2018.02.03 48806
136 일반 [GIT] Commit하고 원격 저장소로 내보내기: add, reset, commit, push TUW 2018.01.18 28093
135 일반 [GIT] 로컬 저장소 정보 조회하기: status, show, log, diff, blame file TUW 2017.06.02 7734
134 일반 [GIT] 기본 환경 설정 및 작업 시작하기: config, clone, init, pull, fetch, remote TUW 2019.01.30 13210
133 일반 [GIT] GIT이란 무엇인가, GIT에 대하여 file TUW 2017.06.02 27973
132 Linux [ColorGCC] 컴파일 경고 및 오류메시지 컬러로 출력하기 file TUW 2017.06.02 9876
131 XE [XE] XE 1.7.4.x 적용 후 SocialXE에서 '잘못된 요청입니다.' 오류 해결하기 21 file TUW 2017.06.02 15161
130 Linux Linux 루트 디렉토리 구성 TUW 2018.01.04 17781
목록
Board Pagination Prev 1 2 3 4 5 6 7 ... 13 Next
/ 13

Powered by Xpress Engine / Designed by Sketchbook

sketchbook5, 스케치북5

sketchbook5, 스케치북5