리눅스에서는 파일과 디렉토리에 대한 접근 권한을 설정하여 보안을 관리합니다.
각 파일과 디렉토리는 소유자, 그룹, 기타 사용자에 대한 권한을 가집니다.
포스팅 목차
1. 파일 접근 권한
권한 종류
읽기 (r) ‘4’ : 파일 내용을 읽을 수 있음
쓰기(w) ‘2’ : 파일 내용을 변경할 수 있음
실행(x) 1′ : 파일을 실행할 수 있음 (디렉토리의 경우, 디렉토리 내 파일 목록을 볼 수 있음)
권한 표시
rwx r-x r–와 같은 형식으로 표시
첫 번째 문자 : 파일 유형 (- 파일, d 디렉토리)
다음 세 문자: 소유자 권한 [rwx]
다음 세 문자 : 그룹 권한 [r-x]
마지막 세 문자: 기타 사용자 권한 [r–]
첫번째 -, d를 제외한 세문자씩 이해가 되겠죠?
– : 일반 파일
텍스트 파일, 실행 파일 등 –rw-r–r– (일반 파일로, 소유자는 읽기/쓰기, 그룹과 기타 사용자는 읽기만 가능)
d: 디렉토리
폴더(디렉터리) drwxr-xr-x : 디렉토리로, (소유자는 읽기/쓰기/실행, 그룹과 기타 사용자는 읽기/실행 가능)
이렇게 일반 파일, 디렉터리를 알아봤습니다. 위에 제공한 사진 중에 l 이라는 형식이 있습니다.
해당 l은 심볼릭 링크로 다른 파일이나 디렉토리를 가리키는 링크
lrwxrwxrwx : 심볼릭 링크로, (모든 사용자에게 읽기/쓰기/실행 권한이 표시되지만 실제 권한은 링크된 파일에 따라 다름)
추가적으로 몇개 더 알아보겠습니다. 다양한 종류가 있지만 알아두면 좋습니다.
b : 블록 장치 파일하드 드라이브, CD-ROM 등과 같은 장치 파일brw-rw—- : 블록 장치 파일로, 소유자와 그룹은 읽기/쓰기 가능
c : 문자 장치 파일키보드, 마우스 등과 같은 장치 파일crw-rw-rw- : 문자 장치 파일로, 모든 사용자에게 읽기/쓰기 가능
p : 파이프프로세스 간 통신에 사용prw-r–r– : 파이프로, 소유자는 읽기/쓰기, 그룹과 기타 사용자는 읽기만 가능
s : 소켓네트워크 통신에 사용srwxr-xr-x : 소켓으로, 소유자는 읽기/쓰기/실행, 그룹과 기타 사용자는 읽기/실행 가능
2. 기본 접근 권한 설정
umask란?
umask는 새로 생성되는 파일과 디렉토리의 기본 권한을 설정하는 데 사용됩니다.
기본적으로 허용되는 최대 권한에서 umask 값을 빼서 실제 권한을 결정합니다.
기본 권한
파일 : 666 (읽기/쓰기)
디렉토리 : 777 (읽기/쓰기/실행)
umask는 기본 권한에서 제거할 권한을 지정합니다.
umask 022는 그룹과 기타 사용자에 대한 쓰기 권한을 제거합니다.
그러면 umask 022로 값을 지정하면 파일의 기본권한 666 – 022 = 644가 되겠죠?
644가 의미하는 것은 소유자의 읽기/쓰기 권한 부여 및 그룹, 기타는 읽기 권한만 생기게 되겠죠 그럼 소유자를 제외한 유저들은 읽기에 대한 권한만 부여됩니다.
디렉터리는 어떻게 될까요 기본 생성 권한 777 – 022 = 755로 변경됩니다. 소유자는 읽기/쓰기 권한 그룹, 기타는 읽기/실행 권한이 부여가 됩니다.
이렇게 umask를 통해서 새로 생성되는 파일, 디렉터리에 대한 보안강화가 가능합니다.
리눅스에서 umask를 설정할 때, 앞의 두 자리는 생략 가능하며, 시스템이 자동으로 0을 채워 4자리로 표시합니다.
3. 특수 접근 권한
SUID (Set User ID)
파일 실행 시 소유자의 권한으로 <– 이말의 뜻은
SUID는 파일의 소유자가 아닌 사용자가 해당 파일을 실행할 때, 파일 소유자의 권한으로 실행되도록 하는 특수 권한입니다. 주로 실행 파일에 적용되며, 시스템 관리 작업을 일반 사용자에게 허용할 때 사용
SUID의 동작 방식
파일 소유자 권한으로 실행 : 파일을 실행하는 사용자가 파일 소유자의 권한을 임시로 획득
보안 관리 : 특정 시스템 명령이나 프로그램이 일반 사용자에 의해 실행될 수 있도록 허용
실행예 : chmod u+s (filename)
chmod u+s filename
이렇게 되면 일반 사용자가 파일에 대한 실행 권한을 부여받게 됩니다.
그러면 사용자가 자신의 패스워드를 변경할 수 있도록 할려면 아래와 같이 명령어를 입력하면 되겠죠?
chmod u+s /usr/bin/passwd
하지만 일반사용자에게 패스워드 변경 권한을 준다는 것은 보안의 문제가 있을수 있어서 현업에서는 비추천입니다.
SGID (Set Group ID)
SGID는 파일이나 디렉토리에 설정할 수 있는 특수 권한으로, 파일을 실행하거나 디렉토리에 파일을 생성할 때 그룹 권한을 상속받도록 합니다. 주로 디렉토리에 적용되어 협업 환경에서 유용하게 사용됩니다.
SGID의 동작 방식
파일에 SGID 설정
파일 실행 시: 실행하는 사용자가 파일의 그룹 권한을 임시로 획득
예시 : 특정 그룹의 권한으로 실행해야 하는 프로그램
디렉토리에 SGID 설정
디렉토리 내 파일 생성 시 : 생성된 파일이 부모 디렉토리의 그룹 소속
협업 환경 : 여러 사용자가 동일한 그룹으로 파일을 생성하고 관리할 때 유용
SGID 설정 방법
# g+s: 그룹에 SGID 권한 부여
chmod g+s filename_or_directory
# -rwxr-sr-x (파일) 또는 drwxr-sr-x (디렉토리)
ls -l filename_or_directory
Sticky Bit
Sticky Bit는 디렉토리에 설정할 수 있는 특수 권한으로, 디렉토리 내 파일을 삭제하거나 이름을 변경할 수 있는 권한을 파일 소유자와 디렉토리 소유자에게만 제한합니다. 주로 공용 디렉토리에서 사용됩니다.
chmod +t directoryname
Sticky Bit의 동작 방식
파일 삭제 제한 : 디렉토리 내 파일을 소유자만 삭제 가능
공용 디렉토리 관리 : 여러 사용자가 파일을 생성할 수 있지만, 삭제는 소유자만 가능
Sticky Bit 설정 방법
chmod +t directory
예 : /tmp 디렉토리
( 모든 사용자가 임시 파일을 생성하는 공용 디렉토리 )
Sticky Bit 필요성 : 각 사용자가 자신의 파일만 삭제 가능