리눅스, 특정 폴더에 생길 미래의 파일/하위 폴더 권한을 미리 설정하는 데 사용하는 acl

, , ,

문제 상황

웹서버에서 파일 권한 문제는 좀 골치아픈 측면이 있습니다. 사용자 문제인데요. 웹서버 사용자(우분투에서는 www-data죠)와 SSH/FTP 로그인 사용자가 다르기 때문입니다.

실제 겪은 두 가지 사례를 말씀드릴 수 있습니다.

  1. 웹서버가 만든 파일을 로그인 사용자로 건드리다가 쓰기 권한이 없어서 에러가 발생한 사례입니다. 커맨드라인으로 캐시를 업데이트하거나 삭제하는 경우였습니다. 이미 웹서버가 만들어 둔 캐시는 사용자와 그룹이 모두 www-data였고, other user에게는 쓰기 권한이 없었습니다. mytory로 로그인해 커맨드라인으로 명령을 내린 저는 에러를 만나야 했습니다.
  2. 사용자가 만든 파일을 웹서버가 건드리다가 쓰기 권한이 없어서 에러가 나는 경우도 있습니다. 이러면 최악의 경우 웹서버가 다운될 수 있습니다.
    예컨대 저는 아직 웹서버가 생성한 로그가 없는 상황에서 커맨드라인 명령으로 처음 로그를 생성한 적이 있습니다. 로그를 쓰지 못해서 서버가 다운됐습니다.

두 경우 다 흔치 않지만 발생할 수 있는 일이라는 것이 중요합니다. 특히 로그 문제는 서버를 다운시킬 수도 있는 문제기 때문에 대형 사고로 이어질 수도 있습니다.

해결책

이 문제는 chmod나 chown으로는 해결이 안 됩니다. 이 명령어들은 현재 파일의 권한에 관여하는 것이지 미래 파일/하위 폴더의 권한에 관여하는 것이 아니기 때문입니다.

해결책은 ACL(Access Control List)입니다. 이걸 이용하면 특정 폴더의 현재/미래 권한을 설정할 수 있습니다. 우분투 패키지명은 acl입니다. 아래 명령으로 설치합니다.

sudo apt install acl

예컨대 아래 명령어는 캐시 폴더의 미래 권한(-d: default, 향후 기본 권한)에서 Other User(o)에게 읽기와 쓰기 권한(rw)을 부여하도록 설정(-m: modify, 수정)합니다.

setfacl -d -m o::rw cache

특정 사용자에게 권한을 부여할 수도 있습니다. 아래처럼 쓰면 앞으로 생길 파일과 하위 폴더에 mytory에게 읽기 쓰기 권한을 부여합니다.

setfacl -d -m u:mytory:rw cache

미래 권한만이 아니라 현재 권한도 바꿀 수 있습니다. -d를 빼고 쓰면 그렇게 됩니다.

setfacl -m u:mytory:rw cache

acl에 의해 설정된 권한을 확인하려면 getfacl 명령을 사용합니다.

getfacl cache

결론

acl을 이용하면 웹서버 사용자와 SSH/FTP 로그인 사용자가 달라 발생하는 문제를 상당히 해결할 수 있습니다.

빈도는 낮아도 어이없게 발생할 수 있는 서버 다운 사태를 막을 수 있는 예방책이기도 합니다.

👇 카테고리 글 목록

, , ,

대표글

댓글 남기기