SUID, SGID 및 고정 비트는 Linux에서 실행 파일 및 디렉터리에 대해 설정할 수 있는 강력한 특수 권한입니다. 우리는 그것들을 사용할 때의 이점과 잠재적인 함정을 공유할 것입니다.

이미 사용 중입니다.

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

Linux에서 저장된 비밀번호는 두 가지 방식으로 보호됩니다. 즉, 암호화되고 루트 권한이 있는 사람만 비밀번호가 포함된 파일에 액세스할 수 있습니다. 괜찮게 들릴지 모르지만 루트 권한이 있는 사람만 저장된 암호에 액세스할 수 있는 경우 해당 액세스 권한이 없는 사람이 암호를 변경하려면 어떻게 해야 합니까?

신분 상승

일반적으로 Linux 명령과 프로그램은 프로그램을 시작한 사람과 동일한 권한 집합으로 실행됩니다. 루트가 passwd 명령을 실행할 때 암호를 변경하려면, 루트 권한으로 실행됩니다. 이는 passwd 명령이 /etc/shadow 파일에 저장된 암호에 자유롭게 액세스할 수 있음을 의미합니다.

이상적인 것은 시스템의 모든 사람이 passwd 프로그램을 시작할 수 있지만 passwd 프로그램이 루트의 상승된 권한을 유지하도록 하는 체계입니다. 이렇게 하면 누구나 자신의 비밀번호를 변경할 수 있습니다.

위의 시나리오는 정확히 SUID(사용자 ID 비트 설정)가 수행하는 작업입니다. 그것 프로그램과 명령을 실행 프로그램을 실행하는 사람의 권한이 아니라 파일 소유자의 권한으로.

프로그램의 상태를 높이고 있습니다.

하지만 또 다른 난관이 있습니다. 그 사람은 다른 사람의 비밀번호를 도용하는 것을 방지해야 합니다. Linux는 SUID 체계를 통합하여 일시적으로 차용한 권한 집합으로 응용 프로그램을 실행할 수 있지만 이는 보안 이야기의 절반에 불과합니다.

누군가가 다른 사람의 암호로 작업하는 것을 방지하는 제어 메커니즘은 운영 체제와 SUID 체계가 아니라 passwd 프로그램에 포함되어 있습니다.

높은 권한으로 실행되는 프로그램은 “보안 설계” 사고 방식으로 생성되지 않은 경우 보안 위험을 초래할 수 있습니다. 즉, 보안을 가장 먼저 고려한 다음 이를 기반으로 구축합니다. 프로그램을 작성하고 나중에 보안을 시도하지 마십시오.

오픈소스 소프트웨어의 가장 큰 장점은 소스 코드를 직접 볼 수 있습니다. 또는 신뢰할 수 있는 동료 평가를 참조하십시오. passwd 프로그램의 소스 코드에는 검사가 있어서 프로그램을 실행하는 사람이 루트인지 확인할 수 있습니다. 누군가가 루트(또는 sudo를 사용하는 누군가)인 경우 다른 기능이 허용됩니다.

  Shotwell을 사용하여 Linux에서 사진을 가져오는 방법

이것 누군가가 루트인지 여부를 감지하는 코드입니다.

다음은 이를 고려한 예입니다. 루트는 암호를 변경할 수 있기 때문에 프로그램은 일반적으로 어떤 암호가 권한 변경을 가지고 있는지 확인하기 위해 수행하는 검사에 신경 쓸 필요가 없습니다. 따라서 루트의 경우 해당 검사를 건너뛰고 검사 기능을 종료합니다..

소스 코드 스니펫

핵심 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 비트가 설정되었음을 나타냅니다.

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

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

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

예제를 살펴보겠습니다. 일반 사용자 dave는 다음과 같이 passwd 명령을 입력합니다.

passwd

그만큼

passwd 명령은 dave에게 새 암호를 입력하라는 프롬프트를 표시합니다. ps 명령을 사용할 수 있습니다. 실행 중인 프로세스의 세부 정보를 보려면.

우리는 grep과 함께 ps를 사용할 것입니다. 다른 터미널 창에서 그리고 passwd 프로세스를 찾습니다. 또한 -e(모든 프로세스) 및 -f(전체 형식) 옵션을 ps와 함께 사용할 것입니다.

다음 명령을 입력합니다.

ps -e -f | grep passwd

그만큼

두 줄이 보고되고, 그 중 두 번째는 “passwd” 문자열이 포함된 명령을 찾는 grep 프로세스입니다. 하지만 우리가 관심을 갖는 것은 첫 번째 줄입니다. 왜냐하면 그것이 passwd 프로세스 dave가 시작한 것이기 때문입니다.

root가 실행했을 때와 동일하게 passwd 프로세스가 실행되는 것을 볼 수 있습니다.

  랜섬웨어로부터 Mac을 보호하는 방법

SUID 비트 설정

chmod를 사용하여 SUID 비트를 변경하는 것은 쉽습니다. u+s 기호 모드는 SUID 비트를 설정하고 us 기호 모드는 SUID 비트를 지웁니다.

SUID 비트의 일부 개념을 설명하기 위해 htg라는 작은 프로그램을 만들었습니다. dave 사용자의 루트 디렉토리에 있으며 SUID 비트가 설정되어 있지 않습니다. 실행 시 실제 및 유효 사용자 ID를 표시합니다(UID).

진짜 UID 프로그램을 시작한 사람에게 속합니다. 유효 ID는 프로그램이 에 의해 시작된 것처럼 작동하는 계정입니다.

다음을 입력합니다.

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

그만큼

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

htg

그만큼

dave가 프로그램을 실행했지만 유효 ID는 루트 사용자로 설정됩니다. 따라서 mary가 프로그램을 시작하면 아래와 같이 동일한 일이 발생합니다.

htg

그만큼

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

SGID 비트

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

효과적인 그룹도 표시하도록 ht 프로그램을 조정했습니다. htg 프로그램의 그룹을 사용자 mary의 기본 그룹인 mary로 변경합니다. 또한 chown과 함께 us 및 g+s 기호 모드를 사용하여 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

그만큼

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

프로그램을 실행하기 전에 dave와 mary가 속한 그룹을 설정해 보겠습니다. -G(그룹) 옵션과 함께 id 명령을 사용합니다. 모든 그룹 ID를 인쇄하려면. 그런 다음 ht 프로그램을 dave로 실행합니다.

다음 명령을 입력합니다.

id -G dave
id -G mary
htg

그만큼

mary에 대한 기본 그룹의 ID는 1001이고 htg 프로그램의 유효 그룹은 1001입니다. 따라서 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

그만큼

SGID 비트와 “geek” 그룹이 설정됩니다. 이는 작업 디렉토리 내에서 생성된 모든 항목에 영향을 미칩니다.

다음을 입력하여 작업 디렉터리에 들어가 “demo”라는 디렉터리를 만들고 속성을 확인합니다.

cd work
mkdir demo
ls -lh -d demo

그만큼

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

다음을 입력하여 파일을 생성해 보겠습니다. 만지다 명령을 실행하고 속성을 확인하십시오.

touch useful.sh
ls -lh useful.sh

그만큼

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

스티키 비트

스티키 비트는 역사적 목적에서 그 이름을 얻었습니다. 실행 파일에 설정하면 실행 파일의 텍스트 부분을 스왑에 보관해야 한다는 플래그를 운영 체제에 표시하여 더 빠르게 재사용할 수 있습니다. Linux에서 고정 비트는 디렉토리에만 영향을 미치므로 파일에 설정하는 것은 의미가 없습니다.

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

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

“shared”라는 디렉토리를 만들어 봅시다. chmod와 함께 o+t 기호 모드를 사용하여 해당 디렉토리에 고정 비트를 설정합니다. 그런 다음 해당 디렉토리와 /tmp 및 /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)가 설정되지 않은 것입니다.

x