[Linux]권한 및 소유권 관리를 위한 리눅스 명령어들
이 번에는 리눅스 파일 및 디렉토리의 권한 및 소유권 관리를 위한 명령어들을 정리해 봅니다. chmod는 주로 shell script 파일의 실행권한을 부여할 때 사용하고 chown 명령어는 외부 자료나 외부 패키지를 설치하고 소유권을 부여할 때 사용합니다. 그리고 chattr은 주요 환경 설정 파일이나 삭제해서는 안되는 실행 파일에 설정해서 임의의 변경이나 삭제 등으로부터 파일을 보호할 수 있습니다.
- chmod : 파일 및 디렉토리의 권한 수정
- chown : 파일 및 디렉토리의 소유자계정 및 소유그룹 변경
- chgrp : 파일 및 디렉토리의 소유그룹 변경
- chattr / lsattr : 파일의 속성을 변경/출력
- setfacl / getfacl : 그룹에 속해있지 않는 사용자에게 해당 그룹 소유의 파일에 권한(rwx)을 설정/설정값 출력
chmod [옵션] 권한 {파일|디렉토리}
- 파일 및 디렉토리에 읽기/쓰기/실행 권한을 부여 또는 제거하는 명령어
- UNIX와 Linux는 파일/디렉토리에 대한 접근 권한 및 종류를 나타내기 위해 16bit 사용
1 ~ 4 bit : 파일/디렉토리의 종류(`file` 명령으로 확인) 5 ~ 7 bit : 특수권한 (4-setuid, 2-setgid, 1-sticky bit) 8 ~ 10 bit : owner 권한 11 ~ 13 bit : group 권한 14 ~ 16 bit : other 권한
- [옵션] -R: 하위 디렉토리 및 파일에 모두 적용
- owner/group/other 권한 부여 방법
– 권한은 문자(rwx)와 숫자([0-7])로 표현 가능(0:—, 1:–x, 2:-w-, 3:-wx, 4:r–, 5:r-x, 6:rw-, 7:rwx)권한 파일 디렉터리 r 파일 내용을 볼 수 있는 권한 디렉터리 내부의 내용을 볼 수 있는 권한 w 파일의 내용을 수정할수 있는 권한 디렉터리 내부에 파일 생성 및 삭제 할 수 있는 권한 x 파일의 내용을 실행시킬 수 있는 권한 디렉터리 내부로 접근 할 수 있는 권한 – 파일/디렉토리 생성 시 초기 권한은 “/etc/login.defs” 파일의 UMASK 지시자에 설정된 값(default값 022)를 따른다
- owner/group/other 권한 부여 예제
## 지정된 파일 또는 디렉토리에 대해 모든 사용자에게 모든 권한 부여 ##
chmod 777 {file명 | directory명}
chmod u=rws,g=rwx,o=rwx{file명 | directory명}
chmod a=rwx {file명 | directory명}
## 지정된 파일 또는 디렉토리에 대해 +/-를 사용해 권한을 추가 부여 또는 삭제 ##
chmod 754 {file명 | directory명}
chmod u=rwx,g-w,u-wx {file명 | directory명}
– passwd, su 명령어 및 /tmp 디렉토리는 특수권한이 설정되어 있음
– setuid(4)
- root만 접근가능한 파일이나 명령에 대해, 일반 사용자로 접근하는 것이 필요할 경우
- 사용자가 파일을 실행했을 때 해당 사용자의 권한이 아닌 파일의 소유자 권한으로 실행
- chmod u+/-s {파일|디렉토리}
- `find / -perm -4000 -ls` 명령어를 통해 확인
ls -lF $(which passwd) & ls -lF $(which su)
-rwsr-xr-x. 1 root root 27936 3월 23 2019 /bin/passwd*
-rwsr-xr-x. 1 root root 32208 3월 22 2019 /bin/su*
– setgid(2)
- 유효 그룹 ID(EGID)를 사용자의 실제 그룹ID에서 파일 소유자의 그룹ID로 변경
- chmod g+/-s {파일명|디렉토리}
- `find / -perm -2000 -ls` 명령어를 통해 확인
chmod g+s dir1
ls -ldF dir1
drwxr-sr-x 2 root root 6 8월 7 07:31 dir1/
– sticky bit(1)
- 파일의 sticky bit는 무시, 특정 디렉토리를 누구나 자유롭게 사용할 수 있도록 설정
- 다른 사용자가 생성한 파일 삭제 불가(`chmod o+w` 권한이 있을 경우 수정은 가능)
- chmod o+/-t 디렉토리
- `find / -type d -perm -1000 -ls` 명령어를 통해 확인
ls -ldF /tmp
drwxrwxrwt. 11 root root 4096 Feb 14 23:08 /tmp/
chown [-hR] 소유자:소유그룹 {파일|디렉토리}
- chown은 root 사용자만 사용. 그래서 보통 sudo와 함께 사용
- 옵션 -R : 하위 디렉토리 및 파일에 모두 적용
- 옵션 -h: 심볼릭(소프트) 링크 파일 자체의 소유자 및 소유그룹 변경
심볼릭 링크 파일에 -h 옵션을 사용하지 않으면 링크된 원본 파일의 소유자자:소유그룹이 변경된다. - chown 소유자 {파일|디렉토리} : 소유자만 변경
- chown :소유그룹 {파일|디렉토리} : 소유그룹만 변경(==`chgrp [-R] 소유그룹 {파일|디렉토리}`)
chattr [옵션] [오퍼레이터][속성] {파일명|디렉토리} / lsattr 파일명
- chattr [옵션] [오퍼레이터][속성] {파일명|디렉토리}
- [옵션]
-R: 현재 디렉터리 이하의 모든 디렉터리와 파일의 속성을 변환
-V : 변환된 속성의 자세한 정보를 출력 - [오퍼레이터]
+: 속성 추가
-: 속성 제거
=: 지정된 속성만 설정(“=”만 사용할 경우 모든 속성 초기화) - [속성]
i: 파일의 삭제(rm),이름변경(mv),데이터 수정 및 추가, 링크 모두 방지
a: 데이터 추가(>>)만 가능
A: 파일에 접근할 때 atime의 수정 방지
d: dump 명령어로 백업할 때 제외(“/etc/fstab” 파일의 다섯 번째 필드 참고) - lsattr 파일명: 지정한 파일에 chattr 명령어로 설정된 속성 출력
- 사용 예
touch file1 && lsattr file1
---------------- file1
chattr +a +i file1 && lsattr file1
----ia---------- file1
chattr -a file1 && lsattr file1
----i----------- file1
setfacl [옵션] 권한설정 {파일명|디렉토리명} / getfacl [옵션] {파일|디렉토리}
- setfacl [옵션] 권한설정 {파일명|디렉토리명}
- [옵션]
-m: 권한 추가(–modify)
-x: 권한 삭제
-b: 모든 권한 초기화(–remove-all)
-k: 기본 권한 삭제(–remove-default)
-R: 지정한 디렉토리의 파일 및 하위디렉토리에 대해 재규적으로 ACL 설정 - 권한설정 – [기본권한]대상:권한
기본권한
d:
대상
u:uid: – 특정 사용자에 대해 ACL 설정. uid 대신 사용자 이름을 입력해도 된다.
g:gid: – 특정 그룹에 대해 ACL 설정. gid 대신 그룹 이름을 입력해도 된다.
m:: – Effective rights mask
o:: – 다른 사용자에 대해 ACL 설정
권한
문자로 r, w, x, -를 아무렇게 조합하거나 숫자로 0에서 7까지의 수를 입력해도 된다.
예: r, w, rwx, r–, -, —, 0, 7, 000, 007 - 사용 예
## /shared 디렉토리에 새로운 파일이 생성될 때 jeno사용자에게 rwx 기본 권한 부여 ##
setfacl -m d:u:jeno:rwx /shared
## root사용자에서 읽기 권한 부여 ##
setfacl -m u:root:r <파일명>
## root사용자에게 부여된 ACL 제거하기 ##
setfacl -x u:root <파일명>
## 모든 사용자 및 그룹에게 읽기/쓰기 권한 부여 ##
setfact -m m::rw 파일명
## file1의 ACL정보를 file2에 그대로 적용 ##
getfact file1 | setfact --set-file=- file2
- [옵션]
- getfacl [옵션] {파일명|디렉토리명}
- [옵션]
-a: 파일의 ACL 출력(default)
-d: 기본 ACL 출력
-R: 모든 파일과 디렉토리를 재귀적으로 탐색하여 ACL 정보 출력
-p 절대경로: 파일명에 절대경로까지 포함 - 사용 예
getfacl /etc/passwd
getfacl: Removing leading '/' from absolute path names
# file: etc/passwd
# owner: root
# group: root
user::rw-
group::r--
other::r--
- [옵션]
함께 읽어보면 좋은 Contents
- Linux서버 취약점 분석/조치법 > 패스워드 복잡성 설정
- [Linux]비밀번호의 암호화 알고리즘 및 솔트(salt)에 관하여
- [Linux]사용자 정보 변경 명령어들의 필수 옵션 추가 정리
- [Linux]권한 및 소유권 관리를 위한 리눅스 명령어들
- [Linux]사용자와 그룹 관리를 위한 리눅스 명령어 및 관련 파일들 총정리