Linux에서 SUID, SGID 및 고정 비트를 사용하는 방법

0
378
Linux 시스템의 터미널 창
Fatmawati Achmad Zaenuri / 셔터 스톡

SUID, SGID 및 Sticky Bits는 Linux에서 실행 파일 및 디렉토리에 대해 설정할 수있는 강력한 특수 권한입니다. 우리는 그것을 사용함으로써 얻을 수있는 혜택과 잠재적 인 함정을 공유 할 것입니다.

그들은 이미 사용 중입니다

다중 사용자 운영 체제에 보안을 구축하면 여러 가지 문제가 발생합니다. 예를 들어 (비상 적으로) 기본 개념의 암호를 사용하십시오. 누군가가 로그인 할 때마다 시스템은 사용자가 입력 한 비밀번호를 저장된 사본과 비교할 수 있도록 모두 저장해야합니다. 분명히 암호는 왕국의 열쇠이므로 반드시 보호해야합니다.

Linux에서 저장된 비밀번호는 두 가지 방식으로 보호됩니다. 암호화 된 비밀번호와 root 권한은 비밀번호가 포함 된 파일에 액세스 할 수 있습니다. 잘 들릴지 모르지만, 그 결과는 다음과 같습니다. root 권한은 저장된 비밀번호에 액세스 할 수 있습니다. 액세스 권한이없는 사용자는 비밀번호를 어떻게 변경합니까?

신분 상승

일반적으로 Linux 명령 및 프로그램은 프로그램을 시작한 사람과 동일한 권한으로 실행됩니다. 언제 root 실행 passwd 암호를 변경하라는 명령으로 root의 권한. 즉 passwd 명령은 저장된 암호에 자유롭게 액세스 할 수 있습니다. /etc/shadow 파일.

이상적인 것은 시스템의 모든 사람이 시스템을 시작할 수있는 체계입니다. passwd 프로그램을 가지고 있지만 passwd 프로그램 유지 root높은 특권. 이를 통해 누구나 자신의 비밀번호를 변경할 수 있습니다.

위의 시나리오는 Set User ID 비트 (SUID) 않습니다. 프로그램을 시작한 사람의 권한이 아니라 파일 소유자의 권한으로 프로그램과 명령을 실행합니다.

당신은 프로그램의 상태를 높이고 있습니다

그래도 다른 문제가 있습니다. 그 사람은 다른 사람의 비밀번호를 혼동하지 않아야합니다. 리눅스는 SUID 임시 대여 권한으로 응용 프로그램을 실행할 수 있도록하는 구성표입니다. 그러나 보안 수준의 절반에 불과합니다.

다른 사람의 비밀번호로 작업하지 못하게하는 제어 메커니즘은 passwd 운영 체제 및 SUID 체계가 아닌 프로그램.

높은 권한으로 실행되는 프로그램은 “보안 설계”사고 방식으로 만들지 않으면 보안 위험에 노출 될 수 있습니다. 즉, 보안이 가장 먼저 고려해야한다는 것을 의미합니다. 프로그램을 작성하지 말고 나중에 보안 조치를 취하십시오.

오픈 소스 소프트웨어의 가장 큰 장점은 소스 코드를 직접 보거나 신뢰할 수있는 동료 리뷰를 참조 할 수 있다는 것입니다. 에 대한 소스 코드에서 passwd 프로그램에 확인이 있으므로 프로그램을 실행하는 사람이 root. 누군가가 다른 기능을 사용할 수 있습니다 root (또는 누군가 sudo).

이것은 누군가가 있는지 여부를 감지하는 코드입니다 root.

"passwd.c"의 소스 코드 스 니펫

다음은이를 고려한 예입니다. 때문에 root 비밀번호를 변경할 수 있습니다. 프로그램은 개인이 어떤 비밀번호를 사용하여 권한이 변경되었는지 확인하기 위해 일반적으로 수행하는 검사를 방해하지 않아도됩니다. 그래서 root이 검사를 건너 뛰고 검사 기능을 종료합니다.

"passwd.c"의 소스 코드 스 니펫

핵심 Linux 명령 및 유틸리티를 사용하면 보안이 강화되었으며 코드가 여러 번 검토되었음을 확신 할 수 있습니다. 물론, 아직 알려지지 않은 익스플로잇의 위협은 항상 존재합니다. 그러나 새로 발견 된 취약점에 대응하기 위해 패치 나 업데이트가 빠르게 나타납니다.

타사 소프트웨어, 특히 오픈 소스가 아닌 소프트웨어는 사용에 매우주의해야합니다. SUID 와. 우리는 그렇게하지 말고, 그렇지 않으면 시스템이 위험에 노출되지 않도록해야합니다. 자신을 올바르게 관리하지 않는 프로그램과 프로그램을 실행하는 사람의 권한을 높이고 싶지 않습니다.

SUID를 사용하는 Linux 명령

다음은 일반 사용자가 실행할 때 SUID 비트를 사용하여 명령에 높은 권한을 부여하는 Linux 명령 중 일부입니다.

ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd

터미널 창에 SUID 비트가 설정된 Linux 명령 목록입니다.

파일 이름이 빨간색으로 강조 표시되어 SUID 비트가 설정되었음을 나타냅니다.

파일 또는 디렉토리에 대한 권한은 일반적으로 3 개의 문자 그룹 인 rwx로 표시됩니다. 이들은 읽기, 쓰기 및 실행을 나타냅니다. 서한이 있으면 해당 권한이 부여 된 것입니다. 하이픈 (-) 그러나 편지 대신에 해당 권한이 부여되지 않았습니다.

이 권한에는 파일 소유자, 파일 그룹 구성원 및 기타 권한의 세 가지 그룹이 있습니다 (왼쪽에서 오른쪽으로). 때 SUID 비트가 파일에 설정되면 “s”는 소유자의 실행 권한을 나타냅니다.

만약 SUID 실행 기능이없는 파일에 비트가 설정되어 있으면 대문자 “S”가이를 나타냅니다.

예를 살펴 보겠습니다. 일반 사용자 dave 유형 passwd 명령:

passwd

터미널 창의 "passwd"명령

그만큼 passwd 명령 프롬프트 dave 그의 새 비밀번호로 우리는 사용할 수 있습니다 ps 실행중인 프로세스의 세부 사항을 보려면 명령을 실행하십시오.

우리는 사용할 것이다 psgrep 다른 터미널 창에서 passwd 방법. 우리는 또한 -e (모든 과정) 및 -f (전체 형식) 옵션 ps.

다음 명령을 입력합니다 :

ps -e -f | grep passwd

터미널 창에서 "ps -e -f | grep passwd"명령

두 줄이보고되는데, 두 번째 줄은 grep “passwd”라는 문자열이있는 명령을 찾는 프로세스. 그것은 우리에게 가장 관심있는 첫 번째 줄입니다. passwd 방법 dave 발사했다.

우리는 볼 수 있습니다 passwd 프로세스는 다음과 같은 방식으로 실행됩니다. root 그것을 시작했다.

SUID 비트 설정

쉽게 변경할 수 있습니다 SUID 조금 chmod. 그만큼 u+s 기호 모드는 SUID 비트와 u-s 심볼릭 모드는 SUID 비트.

SUID 비트의 개념 중 일부를 설명하기 위해 작은 프로그램을 만들었습니다. htg. 루트 디렉토리에 있습니다. dave 사용자가 있고 SUID 비트 세트. 실행되면 실제적이고 효과적인 사용자 ID (UID)가 표시됩니다.

실제 UID는 프로그램을 시작한 사람에게 있습니다. 유효 ID는 프로그램이 시작된 것처럼 동작하는 계정입니다.

우리는 다음을 입력합니다 :

ls -lh htg
./htg

터미널 창에서 "ls -lh htg"및 "./htg"명령

프로그램의 로컬 사본을 실행하면 실제 ID와 유효 ID가 모두 dave. 따라서 정상적인 프로그램처럼 작동합니다.

복사해서 /usr/local/bin 다른 사람이 사용할 수 있도록 디렉토리.

우리는 다음을 사용하여 다음을 입력합니다. chmod 설정 SUID 비트가 설정되어 있는지 확인하십시오.

sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

터미널 창에서 "sudo cp htg", "/ usr / local / bin sudo chmod u + s / usr / local / bin / htg"및 "ls -hl / usr / local / bin / htg"명령

따라서 프로그램이 복사되고 SUID 비트가 설정됩니다. 다시 실행하지만 이번에는 /usr/local/bin 폴더:

htg

터미널 창에서 실행중인 "htg"프로그램

그래도 dave 프로그램을 시작하면 유효 ID가 root 사용자. 그래서 만약 mary 프로그램을 시작하면 아래와 같이 동일한 일이 발생합니다.

htg

터미널 창에서 "mary"사용자가 시작한 "htg"프로그램

실제 ID는 mary유효 ID는 root. 프로그램은 루트 사용자의 권한으로 실행됩니다.

관련 : Linux에서 chmod 명령을 사용하는 방법

SGID 비트

세트 그룹 ID (SGID) 비트는 SUID 비트. 때 SGID 비트는 실행 파일에 설정되고 유효 그룹은 파일 그룹으로 설정됩니다. 프로세스는 파일을 시작한 사람의 권한이 아니라 파일 그룹의 구성원의 권한으로 실행됩니다.

우리는 우리를 조정 htg 효과적인 그룹도 보여줍니다. 우리는 그룹을 변경합니다 htg 사용자가 될 프로그램 mary의 기본 그룹 mary. 우리는 또한 u-sg+s 상징적 모드 chown 제거하기 위해 SUID 비트와 설정 SGID.

이렇게하려면 다음을 입력하십시오.

sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg

"sudo chown root : mary / usr / local / bin / htg", "sudo chmod us, g + s / usr / local / bin / htg"및 "ls -lh / usr / local / bin / htg"명령 터미널 창에서.

당신은 볼 수 있습니다 SGID 그룹 권한에서 “s”로 표시된 비트. 또한 그룹이 mary 파일 이름이 이제 노란색으로 강조 표시됩니다.

프로그램을 실행하기 전에 어떤 그룹을 만들어 봅시다 davemary 에 속하는. 우리는 id 와 명령 -G (그룹) 옵션-모든 그룹 ID를 인쇄합니다. 그런 다음 htg 프로그램 dave.

다음 명령을 입력합니다 :

id -G dave
id -G mary
htg

터미널 창의 "id -G dave", "id -G mary"및 "htg"명령

에 대한 기본 그룹의 ID mary 1001이고 유효 그룹은 htg 프로그램은 1001입니다. dave의 멤버의 권한으로 실행되고 있습니다. mary 그룹. 마치 같은 dave 에 합류했다 mary 그룹.

적용하자 SGID 디렉토리에 비트. 먼저 “work”라는 디렉토리를 만든 다음 그룹을 “geek”으로 변경합니다. 그런 다음 SGID 디렉토리에 비트.

우리가 사용할 때 ls 디렉토리의 설정을 확인하기 위해 -d (디렉토리) 옵션을 통해 디렉토리의 내용이 아닌 세부 정보를 볼 수 있습니다.

다음 명령을 입력합니다 :

sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work

터미널 창에서 "sudo mkdir work", "sudo chown dave : geek work", "sudo chmod g + s work"및 "ls -lh -d work"명령

그만큼 SGID 비트 및 “geek”그룹이 설정됩니다. 이것들은 work 예배 규칙서.

다음을 입력하여 work directory,“demo”라는 디렉토리를 만들고 속성을 확인하십시오.

cd work
mkdir demo
ls -lh -d demo

터미널 창에서 "cd work", "mkdir demo"및 "ls -lh -d demo cd work"명령

그만큼 SGID 비트 및 “geek”그룹은 “demo”디렉토리에 자동으로 적용됩니다.

다음을 입력하여 touch 명령 및 속성을 확인하십시오.

touch useful.sh
ls -lh useful.sh

터미널 창에서 "touch useful.sh"및 "ls -lh useful.sh"명령

새 파일 그룹은 자동으로 “geek”으로 설정됩니다.

관련 : Linux에서 chown 명령을 사용하는 방법

스티커 비트

스티커 비트는 역사적 목적에서 이름을 얻습니다. 실행 파일에 설정된 경우, 실행 파일의 텍스트 부분을 서로 바꿔서 재사용 할 수 있도록 운영 체제에 플래그를 지정했습니다. Linux에서 고정 비트는 디렉토리에만 영향을 미치므로 파일에 설정하는 것은 의미가 없습니다.

디렉토리에 고정 비트를 설정하면 사람들은 해당 디렉토리 내에서 속한 파일 만 삭제할 수 있습니다. 파일에 설정된 파일 권한 조합에 관계없이 다른 사람에게 속한 파일은 삭제할 수 없습니다.

이를 통해 모든 사람과 프로세스가 공유 파일 저장소로 사용할 수있는 디렉토리를 만들 수 있습니다. 아무도 다른 사람의 파일을 삭제할 수 없기 때문에 파일이 보호됩니다.

“shared”라는 디렉토리를 만들어 봅시다. 우리는 o+t 상징적 모드 chmod 해당 디렉토리에 고정 비트를 설정합니다. 그런 다음 해당 디렉토리에 대한 권한과 /tmp/var/tmp 디렉토리.

다음 명령을 입력합니다 :

mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp

터미널 창의 "mkdir shared", "sudo chmod o + t shared", "ls -lh -d shared,"ls -lh -d / tmp ls "및"-lh -d / var / tmp "명령 .

고정 비트가 설정되면 “기타”파일 권한 세트의 실행 비트가 “t”로 설정됩니다. 파일 이름도 파란색으로 강조 표시됩니다.

그만큼 /tmp/var/tmp 폴더는 소유자, 그룹 및 기타에 대한 모든 파일 권한이 설정된 디렉토리의 두 가지 예입니다 (그러므로 녹색으로 강조 표시됩니다). 임시 파일의 공유 위치로 사용됩니다.

이러한 권한을 가진 사람은 이론적으로 모든 작업을 수행 할 수 있어야합니다. 그러나, 끈적 끈적한 비트는 그것들을 무시하고, 자신이 소유하지 않은 파일은 아무도 삭제할 수 없습니다.

알림

다음은 나중에 참조하기 위해 위에서 다루는 내용에 대한 빠른 점검 목록입니다.

  • SUID 파일에서만 작동합니다.
  • 신청할 수 있습니다 SGID 디렉토리와 파일에.
  • 고정 비트는 디렉토리에만 적용 할 수 있습니다.
  • s“,“g“또는”t”표시기가 대문자, 실행 비트 (x)이 설정되지 않았습니다.