[정보보안기사/리눅스] 권한 관리
패스워드 권한
일반적으로 패스워드 파일의 소유자는 root 이고 root만 rw-
로 되어 있다. 이것은 root 사용자만 읽고 쓰기가 가능하다는 의미이다.
만약, 일반 사용자가 패스워드를 변경하면 /etc/passwd 파일이 수정되어야 하는데 사용자는 root가 아니므로 /etc/passwd 파일을 수정할 수 없다.
패스워드를 변경하려면 passwd 프로그램을 실행해야 하고 passwd 프로그램은 /usr/bin/passwd에 있는 실행 파일이다. x
라는 필드 때문에 파일의 소유자는 root 이며 root, 같은 그룹, 다른 사용자 모두 실행할 수 있다.
그런데, 권한 부분을 자세히 살펴보면 s
를 확인할 수 있는데 특수 권한이라고 하여 실행 시 소유자의 권한으로 실행된다는 것을 의미한다. passwd 실행 파일의 소유자는 root 이므로 passwd 실행 파일을 실행시키는 일반 사용자도 순간적으로 소유자인 root의 권한을 획득한다. 이 과정을 리눅스에서는 특수 권한인 setuid
라고 한다. 그렇기 때문에 일반 사용자는 /usr/bin/passwd 라는 파일을 실행해서 패스워드를 변경하고 /usr/bin/passwd 파일은 /etc/passwd 파일을 수정하게 되는 것이다.
/bin/false
설정하면 로그인할 때 셀(Shell)을 실행하지 않는다.
권한 관리
디폴트 권한 umask
리눅스의 권한 관리는 소유자/그룹/다른 사용자로 이루어진다. 그리고 각각은 읽기(r)/쓰기(w)/실행(x) 권한을 가질 수 있다.
예를 들어, rw-rw-rwx 식으로 조회가 된다면 맨 왼쪽은 파일을 만든 소유자로 읽고 쓸수가 있고 그 다음은 같은 그룹의 사용자로 읽고 쓸 수 있다는 의미를 가지며 마지막으로 다른 사용자는 읽고, 쓰고, 실행이 가능하다.
하지만, 파일을 만들 때마다 사용자가 매번 권한을 부여하는 것은 귀찮은 일이기에 Default 권한이라는 것이 존재한다. Default 권한 값을 가지고 있는 것은 umask 값인데 만약 값이 0022라면 두 번째 자리부터 0은 소유자, 2는 그룹, 마지막 2는 다른 사용자를 의미하며 이것을 6에서 빼서 그 권한을 확인할 수 있다. 즉 666
- 022 = 644가 되고 여기서 644의 6이라는 것은 r = 4, w = 2, x =0의 의미로 4+2+0=6이 된다. 소유자는 읽기, 쓰기, 권한을 가지고 있다는 의미이며 4 값을 가지는 그룹과 다른 사용자는 읽기만 가능하다는 것이다. 단, 디렉터리를 mkdir 명령을 통해서 생성하면 Default 권한이 777
-022=755가 된다.
umask 값을 확인하기 위해서는 umask 명령을 실행하여 확인할 수 있으며 일반적으로 권한 백 단위라고 생각해도 좋지만, 리눅스는 특수 권한이라고 하여 천 단위 권한이 존재한다. setuid(4000
), setgid(2000
), sticky(1000
) 비트를 의미한다.
권한 부여 및 변경
chmod 명령으로 사용자에게 권한을 부여하려면 u 옵션에 rwx(읽기[4], 쓰기[2], 실행[1]) 권한을 부여하고 그룹에게 권한을 부여할 때는 g 옵션, 다른 사용자에게 부여할 때는 o 옵션을 사용한다. 최대 권한은 777이다.
chmod [옵션] [파일명]
chmod 명령은 숫자를 사용해서 권한을 부여할 수도 있지만 문자를 써더 권한을 부여하거나 삭제가 가능하다
명령기호 | 설명 |
---|---|
u | user |
g | group |
o | other |
a | all |
+ | 추가 |
- | 삭제 |
r | 읽기 |
w | 쓰기 |
x | 실행 |
chown 명령어는 파일에 대한 사용자와 그룹을 변경할 수 있는 명령어로 다음과 같은 형식으로 사용한다
chown [Option] [UID:GID] [디렉터리명 / 파일명]
chown 명령어 옵션 | 설명 |
---|---|
-R | 하위 디렉터리의 모든 권한 변경 |
-c | 권한 변경 파일 내용 출력 |
chgrp 명령은 파일이나 디렉터리의 소유 그룹을 변경하는 명령어로 다음 형식으로 사용한다
chgrp [Option] [그룹 파일]
chgrp 옵션 | 설명 |
---|---|
-c | 실제 변경된 것을 보여준다 |
-h | 심볼릭 링크 자체의 그룹을 변경 |
-f | 그룹이 변경되지 않는 파일에 대해서 오류 메시지를 보여주지 않는다 |
-v | 작업 진행 상태를 설명 |
-R | 하위 모든 파일도 지정한 그룹으로 변경 |
특수 권한 관리
- 특수 권한 파일 검색
#find / -perm [4000/2000/1000] -print
setuid
setuid
권한이 설정된 파일을 다른 사용자가 실행하게 되면, 실행될 때 그 파일의 소유자 권한으로 실행되는 파일이다.
setuid의 설정은 chmod 명령으로 8진수 4000이나, u+s를 사용해서 설정할 수 있다.
실행파일에 setuid를 설정하면 소문자 s
가 되고 정상적으로 실행할 수 있으나, 실행파일이 아닌 파일에 setuid를 설정하면 대문자 S
가 되고 실행은 불가능하다.
setgid
setgid
는 파일 생성자의 그룹 소유권을 얻는 것으로 동일한 프로젝트에 실행 권한을 부여하기 위하여 사용한다.
예를 들어, A라는 사용자는 B의 디렉터리에 디렉터리 생성 및 파일 생성을 할 수 없다. 하지만 root가 chmod 2777 B 디렉터리에 setgid를 부여하면 A 사용자가 B 디렉터리에 하위 디렉터리를 만들거나 파일을 생성할 수 있게 된다.
setgid의 설정은 chmod 명령으로 8진수 2000으로 설정이 가능하다.
sticky bit
sticky bit
는 공용 디렉터리를 만들어 누구나 자유롭게 사용할 수 있도록 한 것으로 권한부여는 1000으로 설정한다.
sticky bit가 부여된 디렉터리는 누구나 자유롭게 사용할 수 있지만, 해당 디렉터리의 삭제는 소유자만 가능하다.
댓글남기기