**setuid**, **setgid**, 그리고 **sticky bit**는 Unix와 Linux에서 파일이나 디렉토리에 부여할 수 있는 특별한 권한들입니다.
1. **setuid (Set User ID):** setuid가 설정된 실행 파일은 해당 파일의 소유자의 권한으로 실행됩니다. 이것은 일반 사용자가 시스템에서 root 권한을 필요로 하는 작업을 수행하는 데 사용되는 중요한 메커니즘입니다. 예를 들어, `passwd` 명령은 사용자 비밀번호를 변경하는 데 사용되는 명령어이지만, 이 정보는 일반 사용자가 접근할 수 없는 `/etc/shadow` 파일에 저장됩니다. 따라서 `passwd` 실행 파일은 setuid 권한이 설정되어 있어, 실행 시 root 권한으로 실행되며 이 파일에 접근할 수 있습니다.
2. **setgid (Set Group ID):** setgid가 설정된 파일은 해당 파일의 그룹 ID로 실행됩니다. 이것은 파일이 속한 그룹의 모든 사용자가 공유 리소스에 접근할 수 있게 해줍니다. setgid가 디렉토리에 설정되면, 해당 디렉토리에서 생성된 파일이나 디렉토리는 부모 디렉토리와 같은 그룹 ID를 가집니다.
3. **Sticky bit:** Sticky bit가 설정된 디렉토리에서는, 파일의 소유자 또는 root만 해당 파일을 삭제하거나 이름을 변경할 수 있습니다. 이것은 일반적으로 world-writable 디렉토리(예: `/tmp` 디렉토리)에 적용되어, 사용자가 다른 사용자의 파일을 삭제하는 것을 방지하는 데 사용됩니다.
이러한 권한은 `chmod` 명령어를 사용하여 설정할 수 있습니다. setuid는 4, setgid는 2, sticky bit는 1로 표현되며, 이들을 조합하여 `chmod` 명령에 인자로 전달합니다. 예를 들어, 파일에 setuid 권한을 부여하려면 `chmod 4755 filename`을 실행합니다. 여기서 4는 setuid를, 755는 일반적인 파일 권한(소유자에게 읽기/쓰기/실행 권한, 그룹과 다른 사용자에게 읽기/실행 권한)을 나타냅니다.
파일 권한에는 여러 가지 상황에 적용되는 setuid, setgid, 그리고 sticky bit가 있습니다. 아래에서는 각 항목이 어떻게 사용되는지에 대한 구체적인 사례를 들어 설명하겠습니다.
1. **setuid:** `/usr/bin/passwd` 파일은 사용자가 자신의 비밀번호를 변경할 수 있게 해주는 명령어입니다. 이 파일은 root 소유이며 setuid 비트가 설정되어 있습니다. 이것은 일반 사용자가 해당 명령을 실행할 때 임시로 root 권한을 받아 비밀번호를 변경할 수 있게 해줍니다. 권한을 확인하려면 `ls -l /usr/bin/passwd`를 실행하면, `-rwsr-xr-x`와 같은 출력이 나옵니다. 여기서 's'는 setuid가 설정된 것을 나타냅니다.
2. **setgid:** `/usr/bin/wall`은 시스템의 모든 사용자에게 메시지를 보내는 데 사용되는 명령어입니다. 이 파일은 tty 그룹의 소유이며 setgid 비트가 설정되어 있습니다. 이렇게 함으로써, 일반 사용자가 `wall` 명령을 실행하면 임시로 tty 그룹의 권한을 받아 모든 사용자에게 메시지를 보낼 수 있게 됩니다. 권한을 확인하려면 `ls -l /usr/bin/wall`을 실행하면, `-rwxr-sr-x`와 같은 출력이 나옵니다. 여기서 's'는 setgid가 설정된 것을 나타냅니다.
3. **Sticky bit:** `/tmp`와 `/var/tmp` 디렉토리는 모든 사용자가 파일을 만들 수 있도록 허용하는데, 이 디렉토리에는 sticky 비트가 설정되어 있습니다. 이것은 사용자가 자신이 만든 파일만 삭제할 수 있도록 보장하며, 다른 사용자의 파일은 삭제할 수 없습니다. 권한을 확인하려면 `ls -ld /tmp` 또는 `ls -ld /var/tmp`를 실행하면, `drwxrwxrwt`와 같은 출력이 나옵니다. 여기서 't'는 sticky bit가 설정된 것을 나타냅니다.
'ISMS-P > 보안' 카테고리의 다른 글
| Syslog (0) | 2023.07.05 |
|---|---|
| at과 crontab (0) | 2023.07.05 |
| umask (0) | 2023.07.05 |
| 보안 취약점이 있는 유닉스 서비스와 포트 번호의 목록 (0) | 2023.07.05 |
| PKI, PMI (0) | 2023.07.05 |