문제 상황
웹서버에서 파일 권한 문제는 좀 골치아픈 측면이 있습니다. 사용자 문제인데요. 웹서버 사용자(우분투에서는 www-data죠)와 SSH/FTP 로그인 사용자가 다르기 때문입니다.
실제 겪은 두 가지 사례를 말씀드릴 수 있습니다.
- 웹서버가 만든 파일을 로그인 사용자로 건드리다가 쓰기 권한이 없어서 에러가 발생한 사례입니다. 커맨드라인으로 캐시를 업데이트하거나 삭제하는 경우였습니다. 이미 웹서버가 만들어 둔 캐시는 사용자와 그룹이 모두 www-data였고, other user에게는 쓰기 권한이 없었습니다. mytory로 로그인해 커맨드라인으로 명령을 내린 저는 에러를 만나야 했습니다.
- 사용자가 만든 파일을 웹서버가 건드리다가 쓰기 권한이 없어서 에러가 나는 경우도 있습니다. 이러면 최악의 경우 웹서버가 다운될 수 있습니다.
예컨대 저는 아직 웹서버가 생성한 로그가 없는 상황에서 커맨드라인 명령으로 처음 로그를 생성한 적이 있습니다. 로그를 쓰지 못해서 서버가 다운됐습니다.
두 경우 다 흔치 않지만 발생할 수 있는 일이라는 것이 중요합니다. 특히 로그 문제는 서버를 다운시킬 수도 있는 문제기 때문에 대형 사고로 이어질 수도 있습니다.
해결책
이 문제는 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 로그인 사용자가 달라 발생하는 문제를 상당히 해결할 수 있습니다.
빈도는 낮아도 어이없게 발생할 수 있는 서버 다운 사태를 막을 수 있는 예방책이기도 합니다.
댓글 남기기