당신은 리눅스 시스템에서 작업을 수행해야 할 때 액세스 거부로 마주치는 상황에 처한 적이 있나요? 그러한 고민을 고스란히 해결해주는 리눅스의 특수 권한 세계를 환영하세요!
이 튜토리얼은 리눅스의 특수 권한인 스티키 비트, 사용자 ID 설정(SUID) 및 그룹 ID 설정(SGID)의 세부 사항을 마스터할 수 있는 열쇠입니다. 이러한 특수 권한은 더 높은 수준의 보안 제어를 제공합니다.
계속 읽어보고 정밀하고 자신감 있게 파일을 안전하게 관리하세요!
전제 조건
리눅스의 특수 권한에 대한 세부 사항에 뛰어들기 전에 리눅스 머신을 갖추고 있는지 확인하세요. 이 튜토리얼은 실습을 위해 Ubuntu 22.04 LTS (Jammy Jellyfish)를 사용합니다.
리눅스에서 특수 권한을 가진 파일 실행하기(SUID)
리눅스 파일 권한은 일반적으로 사용자와 그룹의 권한에 따라 파일을 읽기, 쓰기 또는 실행할 수 있는 능력을 결정합니다. 그러나 사용자가 자신의 권한이 아닌 파일 소유자의 권한으로 파일을 실행해야 하는 상황도 있습니다.
예를 들어, 루트 사용자만 실행할 수 있는 프로그램이 있는데 특정 작업을 위해 일반 사용자가 실행해야 할 필요가 있다고 가정해보겠습니다. 이러한 경우에 SUID가 매우 중요해집니다.
SUID 권한을 설정하는 방법을 보려면 다음 단계를 따르세요:
1. 터미널을 열고 다음 명령을 실행하여 (useradd
) ‘A-user’라는 사용자(임의)를 생성하고 비밀번호(passwd
)를 할당하세요.

2. 다음으로 아래의 stat
명령을 실행하여 cat
명령의 현재 권한을 확인하세요.
나중에 비교를 위해 액세스 권한을 확인하세요:
- 0755 – 파일을 소유자의 권한으로 실행할 수 있도록 허용하며, 파일을 실행할 때 일반 사용자에게 높은 권한을 부여합니다.
- -rwxr-xr-x – 파일을 읽고 쓰고 실행할 수 있도록 소유자에게 권한을 설정하고(rwx), 그룹 구성원 및 다른 사용자는 파일을 읽고 실행할 수 있습니다(r-x 및 r-x).

cat
command3. 이제 아래의 chmod
명령을 실행하세요. 이 명령은 출력을 제공하지 않지만 cat
명령에 SUID 비트를 설정합니다.
이 명령을 사용하면 cat
명령이 명령을 실행하는 사용자의 권한이 아닌 파일 소유자의 권한으로 실행됩니다.
? SUID를 사용할 때 주의가 필요하며, 제대로 구현되지 않으면 보안 위험을 초래할 수 있습니다. SUID를 신뢰할 수 있는 명령 및 파일에만 적용하도록 하십시오.
4. SUID 비트를 설정한 후에는 다음 stat
명령을 실행하여 cat
명령의 권한을 다시 확인하여 SUID 비트가 있는지 확인하십시오.
성공하면 다음과 같은 결과가 표시됩니다. 여기서 두 번째 단계에서 기록한 정보와 비교하게 될 것입니다:
- 0755에서 4755(숫자 4는 SUID 비트를 나타냄)로 변경됩니다.
- -rwxr-xr-x에서 -rwsr-xr-x로 변경되었습니다. 여기서 s는 사용자의 실행 (x) 권한을 나타냅니다.

5. 아래의 cat
명령을 실행하여 현재 로그인한 사용자가 /etc/shadow
파일에 액세스할 수 있는지 테스트하십시오. 이 파일은 암호화된 사용자 암호 및 관련 정보를 저장하는 중요한 시스템 파일로 루트 사용자만 액세스할 수 있습니다.
cat
명령은 기본적으로 Linux에서 파일의 내용을 볼 수 있도록 합니다. 그러나 이 동작이 항상 모든 파일에 적용되지는 않습니다.
현재 사용자는 파일에 액세스할 수 있는 권한이 없기 때문에 아래의 메시지가 나타납니다.

6. 이제 아래 명령을 실행하여 새로운 사용자(A-user
)로 전환하고 /etc/shadow
파일에 다시 접근해보세요.
이번에는 cat
명령이 파일 소유자(일반적으로 root)의 권한으로 실행되는 것입니다.
이 파일의 내용을 읽을 수 있는 권한을 일시적으로 A-user에게 부여했으므로 아래와 같은 출력이 나올 것입니다.

7. 보안상의 이유로 다음 명령을 실행하여 현재 사용자(A-user)에서 exit
하여 cat
명령의 권한을 원래 상태로 되돌립니다.

cat
command8. 마지막으로 아래 명령을 실행하여 SUID 비트가 제거되었는지 확인하십시오.
SUID 비트가 액세스 권한에서 더 이상 나타나지 않는 것을 주의하십시오.

Linux 디렉토리에서 협업 워크플로우 활성화(SGID)
Linux에서 SUID를 통해 파일을 실행하는 것은 탁월하게 작동합니다. 그러나 여러 사용자가 프로젝트에 협업하는 협업 워크플로우를 지향한다면 어떨까요? 일반적으로 새로 생성된 파일이 부모 디렉토리의 그룹 소유권을 상속받아야 합니다.
이러한 시나리오에 직면했을 때 SGID가 게임 체인저 역할을 합니다. 이 강력한 기능은 공유 리소스의 관리를 간소화하고 Linux 환경에서 그룹 기반 워크플로우를 향상시킵니다.
SGID가 작동하는 방법을 확인하려면 그룹을 만들고 사용자를 추가한 다음 디렉토리에 SGID 권한을 설정하고 다음과 같이 기능을 테스트하십시오:
1. 루트 사용자로 로그인하여 임의의 이름인 demo
라는 새 그룹을 만듭니다. 이 그룹은 SGID 기능을 테스트하는 데 사용됩니다.
이 명령은 터미널에 출력을 생성하지 않습니다.

2. 다음으로 아래 명령을 실행하여 협업 환경을 모의하는 데 사용할 두 사용자(userA
및 userB
)를 만듭니다.

3. 새 사용자를 만든 후에 아래 usermod
명령을 실행하십시오. 이 명령은 터미널에 출력을 생성하지 않지만 사용자(userA
및 userB
)를 demo
그룹에 추가합니다.
4. 이제 각 명령을 실행하여 디렉토리(/demo-dir
)를 만든 다음 디렉토리의 사용자 및 그룹 소유권을 각각 userA
및 demo
로 설정하십시오.
? 성공적으로 실행되면 이 명령은 터미널에 출력을 생성하지 않습니다. 이는 튜토리얼 전체에 걸쳐 적용됩니다.
5. 다음으로 다음 ls
명령을 실행하여 /demo-dir
디렉토리의 권한을 확인하십시오.
아래 출력은 /demo-dir 디렉토리의 사용자가 userA로 설정되어 있고 그룹은 데모로 설정되어 있음을 확인합니다.

6. 확인된 권한으로 아래 chmod
명령을 실행하여 /demo-dir/
디렉토리에 SGID 비트를 설정하십시오. 다음과 같이 설정하십시오:
g+s
– Set the SGID bit on the/demo-dir/
directory.o-rwx
– Remove all permissions (read, write, execute) for others.u+rwx
– Grant read, write, and execute permissions to the owner.g+rwx
– Grant read, write, and execute permissions to the group.
7. SGID가 설정되면 다음 명령을 실행하여 /demo-dir
디렉토리의 권한을 확인하십시오.
성공하면 SGID 비트가 설정된 것을 확인할 수 있습니다. 8진 모드 권한의 숫자 2
와 그룹 소유자 실행 (x
) 권한 위치에 있는 s
로 표시됩니다 (rws
).

8. 다음 명령을 실행하여 userA
를 위한 /home
디렉토리를 만드십시오.
9. 다음 명령을 실행하여 (su
) userA
로 전환하고 /demo-dir
디렉토리에 textA.txt
(임의)라는 파일을 만드십시오.
이 명령에는 출력이 없습니다 (이 튜토리얼 전반에 걸쳐 적용됨), 하지만 다음 단계에서 파일 권한을 확인할 수 있습니다.
10. 아래 ls
명령을 실행하여 textA.txt
파일의 권한을 확인하십시오.
아래에서, textA.txt 파일의 그룹 소유주는 demo이며, 이는 생성자인 userA의 기본 그룹입니다. demo 그룹의 멤버는 파일을 읽고 수정할 수 있지만, 다른 사람들은 읽기만 할 수 있습니다.
/demo-dir 디렉토리에서 새 파일이 디렉토리의 그룹 소유권을 상속받도록 하기 위해, 다음 단계에서 설명할 것처럼 디렉토리에 SGID 비트를 설정해야 합니다.

11. 이제, 현재 사용자(userA)에서 exit
하여 /demo-dir
디렉토리에서 SGID 비트(chmod g+s
)를 설정하는 다음 명령어를 실행하십시오.

12. SGID가 설정되면, 아래 명령어를 실행하여 /demo-dir
디렉토리에 추가한 SGID 비트를 확인하십시오.
아래와 같이, SUID 비트 2가 추가되었으며, 그룹 소유자 실행 자리에 s가 있음을 알 수 있습니다. 이 출력은 SGID 비트가 /demo-dir 디렉토리에 성공적으로 설정되었음을 확인시켜 줍니다.

13. 다음으로, userA
로 다시 전환하여 /demo-dir
디렉토리에 testA.txt
(임의의 이름)라는 또 다른 파일을 생성하십시오.
14. 생성한 후, 아래 ls
명령어를 실행하여 새 파일(testA.txt
)의 소유권을 확인하십시오.
SGID가 예상대로 작동하면, 출력에서 userA가 소유자이지만, SGID 비트가 /demo-dir 디렉토리에 설정되어 있기 때문에 그룹 소유권은 demo입니다.

15. SGID 기능을 더 테스트하기 위해 userB
를 위한 /home
디렉토리를 생성합니다.
16. userB
로 전환하고 동일한 /demo-dir
디렉토리에 testB.txt
(임의로)라는 파일을 생성합니다.

17. 새 파일인 testB.txt의 정보를 보려면 (ls
) 확인합니다.

파일 보호하기 (Sticky Bit)
리눅스 디렉토리에서 파일을 보호하는 것은 협업 워크플로우를 촉진하고 원활한 협업을 가능하게 합니다. 그러나 파일을 효과적으로 관리하기 위해 안전한 환경을 구축해야 할 때, Sticky Bit 권한이 유용합니다.
Sticky Bit를 설정하면 사실상 파일 소유자, 디렉토리 소유자 또는 루트 사용자에게 “성을 주는” 것과 같습니다. 이렇게 하면 디렉토리 내에서 파일을 삭제하거나 이름을 변경할 수 있는 권한을 소유한 사람들만이 이를 수행할 수 있으므로, 민감한 데이터를 추가로 보호할 수 있습니다.
Sticky Bit 권한을 설정하려면 다음 단계로 공유 디렉토리를 먼저 생성해야 합니다.
1. 루트 사용자로 로그인하고 여러 사용자가 파일을 만들 수 있는 (공유) 디렉터리를 생성하십시오.
2. 다음으로, 아래 명령을 실행하여 /shared-dir
디렉터리의 권한을 모두에게 쓰기 권한을 부여하십시오.
1777
에서 첫 번째 숫자(1
)는 Sticky Bit를 설정하고, 나머지(777
)는 디렉터리를 모든 사람이 읽을 수 있고 쓸 수 있고 실행할 수 있게 만듭니다.
다음은 리눅스 시스템에서 Sticky Bit의 특징이나 속성입니다:
Feature | Function |
Directory Protection | When the Sticky Bit is set on a directory, it allows only the owner of a file within that directory to delete or rename their own files. Other users, even if they have write permissions to the directory, cannot delete or rename files owned by other users. |
Shared Directories | The sticky bit is handy for directories that are shared among multiple users. For example, on a system with a /tmp directory used by all users to store temporary files, setting the Sticky Bit prevents users from accidentally or maliciously deleting files owned by other users. |
아래에서 권한 필드의 나중 부분에 ‘t’ 문자를 볼 수 있습니다. 이것은 Sticky Bit가 /shared-dir 디렉터리에 설정되었음을 나타냅니다.

3. userA
로 전환하여 /shared-dir
디렉터리에 fileA.txt
(임의)라는 파일을 생성하십시오:
4. userA에서 나와서 userB
로 전환하고 동일한 /shared-dir
디렉터리에 다른 파일인 fileB.txt
(임의)를 만드십시오.
5. 이제 사용자B
를 종료하고 사용자A
로 전환하여 사용자B
의 fileB.txt
파일을 삭제하려고 시도하세요.
파일 소유자만 변경 또는 파일을 삭제할 수 있기 때문에 아래와 같은 출력을 받게됩니다.

6. 마지막으로 공유 디렉토리(/shared-dir
) 내의 모든 파일을 나열하는 다음 명령 목록(ls
)을 실행합니다.
스티키 비트 권한이 작동하면 사용자B가 만든 fileB.txt 파일이 안전하게 유지되고 삭제되지 않았음을 확인할 수 있습니다.

결론
리눅스의 특별 권한을 탐색하는 이 과정을 마무리하면 SUID, SGID 및 스티키 비트라는 강력한 도구 집합을 활용할 수 있습니다. 이러한 지식을 바탕으로 액세스 제어를 세밀하게 조정하고 파일을 정밀하게 보호할 수 있습니다.
하지만 여기서 멈추지 마세요! SGID를 사용하여 공유 디렉토리를 설정하고 파일이 그룹 소유권을 상속하는 방법을 실험해 보는 것은 어떨까요? 리눅스 세계는 여러분의 연구대상이며, 각 시도마다 시스템 보안을 숙련된 기술로 마스터할 것입니다!
Source:
https://adamtheautomator.com/special-permissions-in-linux/