리눅스 권한 설정 방법 (chmod, getfacl, setfacl)


리눅스 권한 설정 방법 (chmod, getfacl, setfacl)
리눅스에서 여러 사용자가 함께 사용하는 파일 또는 디렉터리에 사용자, 그룹 권한을 설정하는 방법에 대해서 설명드립니다. chmod 권한 부여, 변경 방법과 getfacl, setfacl 등 리눅스 ACL 명령어 이용한 그룹 권한 설정하는 방법에 대해서 함께 설명드리도록 하겠습니다.

리눅스 권한(permission)의 이해

리눅스는 파일과 디렉터리는 읽고(r, 4), 쓰고(w, 2), 실행(x, 1) 권한이 있습니다. 파일의 실행 권한은 직접 실행할 수 있는 권한이고 디렉터리의 실행권한은 디렉터리 파일 내부를 조회 할 수 있는 권한입니다. 그리고 이 3개의 권하는 소유자(user)와 그룹(group)과 그 외의 사용자(other)으로 나눠서 각각 설정할 수 있습니다.

아래의 내용은 현재의 디렉터리에서 파일 목록을 출력한 것입니다.

$ ls -alh
total 12K
drwxr-xr-x  3 ubuntu ubuntu 4.0K  7월 20 01:51 .
drwxr-xr-x 34 ubuntu ubuntu 4.0K  7월 20 01:50 ..
drwxr-xr-x  2 ubuntu ubuntu 4.0K  7월 20 01:50 a
-rw-r--r--  1 ubuntu ubuntu    0  7월 20 01:51 b

a 디렉터리와 b 파일의 권한을 확인하면 다음과 같습니다.

  • a (drwxr-xr-x) : d는 디렉터리를 의미하고, 소유자(rwx), 그룹(r-x), 그 외 사용자(r-x)권한을 갖습니다. 권한을 숫자로 표기하면 755가 됩니다.
  • b (-rw-r–r–) : 시작의 -는 파일을 의미하고, 소유자(rw-), 그룹(r–), 그 외 사용자(r–)권한을 갖습니다. 권한을 숫자로 표기하면 644가 됩니다.

리눅스 권한 설정 방법

파일 또는 디렉터리의 권한을 변경하기 위해서는 chmod 라는 명령어를 사용합니다. 명령어를 사용하는 방법은 아래와 같습니다.

$ chmod [모드] [파일]

모드는 권한을 부여할 모드입니다. 각 사용자 유형(u, g, o)에 따른 권한 추가(+), 제거(-), 할당(=)기호를 사용할 수 있고, 권한 값(r,w,x)를 지정할 수 있습니다. 아래의 예제는 file.txt 에 그룹 사용자 에게 쓰기 권한을 부여하는 방법입니다.

$ chmod g+w file.txt

리눅스 ACL 명령어

ACL(Access Control List) 명령어는 파일이나 소유자, 그룹에 대한 다양한 권한 (permission)을 부여 할 수 있는 방법입니다. ACL 설정하기 위해서 getfacl 과 setfacl 명령어 사용법에 대해서 설명드리도록 하겠습니다. ACL 명령어는 여러 상황에서 사용될 수 있는데 이 글에서는 공통 그룹에 대한 권한을 설정하는 예제를 통해 설명드리도록 하겠습니다.

시나리오

git Repository 에서는 각각의 사용자가 push 되는 내용을 적용하기 위해서는 Repository 디렉터리에서 각 사용자가 파일 또는 디렉터리를 읽고 쓸 수 있어야 합니다. 공통된 그룹으로 지정하여, 해당 그룹에서는 신규 생성되는 파일과 디렉터리의 읽고 쓰기 권한이 자동으로 생성 되도록 수정할 것입니다.

사용자 계정 설정

다음의 adduser 명령어를 이용하여, 각각의 사용자 user1, user2를 생성합니다. 그리고 dev라는 사용자를 함께 생성합니다.

$ sudo adduser user1
$ sudo adduser user2
$ sudo adduser dev

그리고 user1 과 user2 사용자를 dev 그룹으로 지정합니다.

$sudo usermod -g dev user1
$sudo usermod -g dev user2

공통으로 파일을 읽고 쓸 대상 디렉터리를 /data/git 위치에 생성합니다.

getfacl 명령어

/data/git 위치에서 다음과 같은 getfacl 명령어를 실행하면 ACL 정보를 확인할 수 있습니다.

dev@host:/data/git$ getfacl .
# file: .
# owner: dev
# group: dev
user::rwx
group::rwx
other::r-x
리눅스 권한 설정 방법

권한 문제

/data/git 위치에서 user1 사용자가 파일을 생성해 보도록 하겠습니다.

user1@host:/data/git$ touch 1.txt

생성된 파일의 권한을 확인해 보면, 아래와 같이 user1 사용자만 읽고,쓰기 권한이 있습니다.

user2@host:/data/git$ ls -alh
total 8.0K
drwxrwxr-x  2 dev   dev  4.0K  7월 20 02:32 .
drwxr-xrwx 12 root  root 4.0K  7월 20 02:17 ..
-rw-r--r--  1 user1 dev     0  7월 20 02:32 1.txt

위에서 생성된 파일을 user2 사용자 권한으로 파일을 쓰려고 하면, 아래와 같은 권한 에러가 발생하게 됩니다.

user2@host:/data/git$ echo "hello, world" > 1.txt 
bash: 1.txt: Permission denied

여러 사용자가 작업 하는 디렉터리 환경에서 ACL를 이용하여, 함께 파일을 생성하고 읽고 쓸 수 있도록 설정을 변경해 보도록 하겠습니다.

setfacl 명령어

다음과 같은 setfacl 명령어를 사용하면 dev 그룹에 읽고(r), 쓰기(w)권한을 /data/git 디렉터리에 부여 할 수 있습니다.

$ sudo setfacl -Rdm g:dev:rw /data/git

명령어에서 사용된 옵션은 다음과 같습니다.

  • -R, –recursive : recurse into subdirectories
  • -d, –default : operations apply to the default ACL
  • -m, –modify=acl : modify the current ACL(s) of file(s)

위의 명령어를 실행 한 다음 getfacl 명령어로 ACL을 확인한 결과는 아래와 같습니다.

리눅스 권한 설정 방법

기존 파일을 삭제 후, 다시 user1 사용자가 파일을 생성하면 새롭게 그룹 사용자 권한에 쓰기 권한이 추가 된 것을 확인 할 수 있습니다.

user1@host:/data/git$ touch 1.txt
user1@host:/data/git$ ls -alh
total 8.0K
drwxrwxr-x+  2 dev   dev  4.0K  7월 20 02:40 .
drwxr-xrwx  12 root  root 4.0K  7월 20 02:17 ..
-rw-rw-r--+  1 user1 dev     0  7월 20 02:40 1.txt

그 위에 user2 사용자가 기존에 생성된 1.txt 파일을 편집하면 아래와 같이 권한 문제가 해결 된 것을 확인 할 수 있습니다.

리눅스 권한 설정 방법

리눅스 권한 설정 방법에 대해서 ACL 명령어 등을 이용하여 설명드렸습니다.

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)