[Linux] 파일 및 디렉토리 권한 관리
각각의 파일 및 디렉토리의 권한을 파일의 소유자(root), 특정 그룹(group), 기타 사용자(others)로 구분하여, 권한 상태를 지정할 수 있다(r(read)w(write)x(execute)).
root 사용자는 시스템에 대한 모든 권한을 가지고 있다. 즉 root 사용자는 기본적으로 시스템에서 모든 것을 수행할 수 있다. 이에 반해, 시스템의 다른 사용자는 제한된 기능과 권한을 가지며, 따라서 루트 사용자 만큼의 접근 권한을 가지지 못한다.
파일의 권한을 상승하기 위해서는 사용자가 root이거나, 파일을 생성한 파일의 소유자이여야 한다.
파일의 권한을 상승하기 위해 권한 변경을 하기 위해서는 ‘chmod’ : change mode 명령어를 사용하여 권한을 변경할 수 있다. 파일의 권한을 변경하기 위해서 ‘chmod’ 명령어를 이용해, 두가지 방법이 존재하는데, 하나는 ‘숫자’를 통한 권한 변경이고, 다른 하나는 ‘기호’ 표현을 통한 권한 변경 방법이 존재한다.
위에서 보듯이, 첫째 열은 해당 요소가 디렉토리인지 파일인지 알려준다. ‘d’ 일 경우, 디렉토리를 의미하고, ‘-’일 경우, 파일을 의미한다. 빨간 박스를 보면 파일을 나타내는 '-' 다음, 순서대로, rwx로 나타내어 지는데, 첫번째 rwx그룹이 '소유자'에 대한 권한이며, 두번째 rwx 그룹이 '특정 그룹'에 대한 권한을 나타내며, 세번째 rwx 그룹은 '기타 사용자'에 대한 권한이다.
즉 위에서 보듯이, 빨간박스에 존재하는 파일은, ‘-’로 파일을 나타내며, 사용자의 권한은 ‘rw-’, 즉 r(읽기), w(쓰기) 권한이 존재하고, x(실행)은 ‘-’로 실행 권한은 존재하지 않는다.
그룹 권한의 경우, ‘r–’로 오직 읽기 권한만 존재한다. 마찬가지로, 기타 사용자들 또한 ‘r–’로 오직 읽기 권한만 존재한다. 해당 파일의 권한을 상승하기 위해, 앞에서 말한 듯이 두가지 방식이 존재하는데, 먼저 ‘숫자’를 통한 권한 변경에 대해 말해보자면, ‘숫자’를 통한 권한 변경은 rwx를 8진수로 표현하여 권한 변경을 한다. 즉 읽기 권한인 r = 4, 쓰기 권한인 w = 2, 실행 권한인 x = 1로 치환되어 진다. 따라서, 파일 소유자, 그룹, 기타 사용자에 대해 rwx 모든 권한을 허용하기 위해, 아래와 같이, 4+2+1 = 7인 ‘chmod 777 [파일명]’을 사용하면 된다.
‘기호’ 표현을 통한 권한 변경 방법은 ‘ugo’를 통해 권한 변경이 가능하다. u = user(사용자), g = group(그룹), others(기타 사용자)를 나타낸다. 따라서 아래와 같이, 두번째 행에 존재하는 파일의 '기타 사용자' 권한을 변경하여, 읽기 권한을 추가하고 싶을 때는, ‘chmod o+w [파일명]’ 명령어를 사용하면 된다. 만약 사용자 권한을 변경하고 싶을 때는 ‘o’ 대신 u로, 그룹 권한을 변경하고 싶을 때는 ‘g’로 치환하면 되고, 권한을 상승시키고 싶을 때는 ‘+’, 권한을 제거하고 싶을 때는 ‘-’로 권한 변경이 가능하다.
참고로 kali의 경우, umask의 기본설정이 022로, 파일의 기본권한인 666에서 각각 022를 뺀, 644, 즉 소유자의 경우 실행권한을 빼고 읽기 권한과 쓰기 권한이 존재하며, 그룹과 기타 사용자의 경우, 오직 읽기 권한만 존재한다. 디렉토리의 경우, 기본 권한인 777에서 각각 022를 뺀, 755로, 소유자는 모든 권한을 가지고 있으며, 그룹과 기타사용자는 읽기 권한과 실행권한을 기본값으로 가진다. umask의 default 설정은 /home/kali 경로에 존재하는 .profile을 텍스트 에디터로 편집하여 변경이 가능하다.
앞에서 말한 rwx는 ‘일반 목적 권한’에 해당하고, 이러한 일반 권한 외에 세가지 ‘특수 권한’이 존재한다. 'SUID(Set User ID), SGID(Set Group ID), Sticky Bit' 가 세가지 특수 권한이다.
본래 사용자는 특정 파일을 실행하기 위한 권한을 가지고 있는 경우에만 파일을 실행할 수 있다. 즉 특정 사용자가 읽기 및 쓰기 권한만 가지고 있다면 파일을 실행할 수가 없다. 하지만 특수 권한을 부여하여, 즉 SUID or SGID 비트를 설정함으로서, 해당 파일을 소유자의 권한 혹은 파일 소유자 그룹의 권한으로 실행할 수 있도록 해준다.
SUID 비트의 설정의 경우, 일반적인 권한 앞에 4, 즉 777의 권한을 갖는 파일의 새 권한은 4777이 되며, SGID 비트의 경우, 일반적인 권한 앞에 2, 즉 777권한을 갖는 파일의 새 권한은 2777이 된다.
스티키 비트(Sticky Bit)의 경우, 디렉토리에 설정할 수 있는 권한 비트로서, 사용자가 특정 디렉토리 내의 파일을 삭제하거나 이름을 바꿀 수 있도록 허용한다. 그러나 Sticky Bit의 경우, 오래된 유닉스 시스템의 잔재여서 현대의 시스템(리눅스 같은)은 이를 무시한다.
특수 권한인 SUID 비트가 설정된 파일은 아래와 같이, rwx가 아닌, rws로 표현된다. 즉 실행권한이 ‘s’로 표현된 파일을 실행하는 모두는 루트 사용자의 권한을 가지게 된다는 것이다.
참고로 SUID 비트가 설정된 파일을 찾기 위해서는 아래와 같이 ‘find / -user root -perm -4000’ 명령어를 입력하면 된다. 즉 최상단 경로인 / 부터 탐색을 시작하고, 옵션 -user root를 통해, 소유자가 root인 파일이면서, -perm -4000을 통해, SUID 권한 비트가 설정된 최상단 경로부터 아래로 모든 파일을 탐색하도록 하여, 찾을 수 있다.