TLDR;
다음 두가지를 고려한다. 단, setgid 가 설정돼 있다는 가정이 선행된다.
- 쓰기권한이 필요한 디렉토리의 Group 에, www-data(또는 apache 를 수행하는 사용자) 를 추가한다.
/etc/apache2/envvars
에umask 002
를 추가한다.
이러면 nextcloud 에서 생성한 파일을 서버의 사용자가 직접 수정할 수도 있고, 서버 사용자가 만든 파일을 nextcloud(다시 말해 www-data)가 쓸 수도 있다.
** 2022.05 현재 (nextcloud 23/24)
위 방법이 먹지 않는다. 002 로 바꿔도, Group Write 은 설정되지 않는다. 예전엔 됐었나본데, nextcloud 를 아주 열심히 쓰질 않아서 알 수가 없다. 오랜만에 확인해봤는데 안되네??
뭔가 nextcloud 가 판올림되면서, 뭔가 권한에 변경이 생긴 모양인데, 그와 연관된 문제인지도 모르겠다.
nextcloud 자체에 쓰기 권한 기능이 있나? 대충 둘러봤지만 찾을 수가 없었다. 아마도 없다고 생각된다.
nextcloud 는 사실 Apache 등 웹서버에 의해 작동되고, Apache 는 시스템에 할당된 특정 사용자(www-data 등)의 권한으로 실행되므로, 모든 읽기/쓰기 작업은 당연히 그 사용자(www-data 라고 가정)의 능력(?)에 달려있다.
내가 nextcloud 에서 외부 저장소로 설정한 한 디렉토리의 상황을 보자면 이렇다.
drwxrwsr-x 1 userabc networkgrp 470 2016-01-05 22:03 그림
이 디렉토리는 userabc
소유이고, 그룹은 networkgrp
이며, 그룹에는 setgid 가 적용돼 있다.
이 상태 그대로라면, 이 디렉토리를 nextcloud 에선 읽을 수만 있고 쓸 수는 없다. www-data 는 userabc 가 당연히 아니며, networkgrp 도 아니기 때문이다.
쓰기가 가능해지려면 몇가지 방법이 있을텐데.. 내 지식 선에서 언뜻 생각나는 건 대충 이 정도.
- 이 디렉토리 소유권을 www-data:www-data 로 바꾼다.
- 디렉토리 소유권을 userabc:www-data 로 바꾼다.
- www-data 를 networkgrp 그룹에 가입시킨다.
- 그냥 다 열어버린다. (chmod 777)
첫번째 방법엔 무리가 따른다. 이 디렉토리는 nfs 로도 공유가 되고 있는데, 소유권이 이렇게 바뀌면 다른 사용자(즉, 우분투 기준 uid 1000 등등)들은 이 디렉토리 및 하부 파일들을 수정할 수 없게 된다.
두번째 방법은, 언뜻 보면 괜찮은 방식 같지만, 절대로 쓰면 안되는 방식이다. 왜냐? 이 상태에서 nextcloud 로 파일을 생성하면, 소유권이 www-data:www-data 가 돼 버린다. 따라서 첫번째 방법과 동일한 상태가 돼 버린다.
네번째는? 이렇게 할 거면 굳이 이런 글을 쓰고 있을 이유가 없다.
결국, 세번째 방법이 내가 아는 선에서 가장 최선이라고 할 수 있겠다.
sudo usermod -a -G networkgrp www-data
이걸로 끝?
이라면 좋겠지만..
여기서 또 한가지 문제가 생긴다.
nextcloud 에서 각각 폴더/파일을 만들어보았다.
-rw-r--r-- 1 www-data networkgrp 48 2021-03-22 21:30 new-by-nextcloud2.txt drwxr-sr-x 1 www-data networkgrp 0 2021-03-22 21:32 폴더새거
큰 문제가 생겼다.
파일 생성엔 문제가 없었지만, 권한이 잘못 주어졌다. 그룹에 쓰기 권한이 있어야 하는데, 사용자에게만 ‘w’ 가 주어졌다.
이러면 힘들여 www-data 를 그룹에 참여시킨 이유가 없다. 이 설정대로라면, www-data 만이 이 파일을 수정할 수 있게 된다.
왜 이런 어처구니없는 상황이?
답은, 아주 우연하게 찾게 되었는데.. 만약 답을 못찾았으면 끝없는 삽질을 또 다시 할 뻔 했다.
게다가 웃긴 건, 이미 내가 써놓은 글에 답이 있었다는 건데.. 2019년 9월에 작성했다고 나와있지만, 정말 털끝만큼도 기억이 나질 않는다. 기억이 나지 않는 이유는, 써놓기만 하고 정작 적용을 하진 않았기 때문이리라.
이 글을 쓰는 도중, setgid 에 대한 내용이 있는 글을 찾고자, 구글에서 그룹 권한 site:nemonein.xyz
라고 검색을 했다. 그 결과 제일 처음에 나온 글이 “꽃삽질 : nologin 사용자의 umask 는..?? 특히 www-data 는 어떻게?” 였고, 무슨 내용인지 살펴봤는데..
바로 윗 부분에 대한 답이 쓰여져 있었다.
이런???
자세한 내용은 저 글을 참고하고, 답은 이렇다.
/etc/apache2/envvars
에 umask 002
를 추가한다.
apache 를 재시동하면, 드디어 원하는 결과를 얻을 수 있다!
이 문제가 도저히 해결 되지 않아서 lib/private/Files/Storage/Local.php 을 직접 수정했더니 권한은 부여 됩니다.
안녕하세요.
nextcloud 를 열심히 쓰고 있질 않아서, 저 문제는 그냥 내버려두고 있었습니다.
(제 능력으론 알려주신 파일을 수정하는게 불가능하기에.. 그림에 떡입니다.)
또, 그 파일을 수정하면, 판올림될 때마다 수정해야 하는 불편함도 있겠구요.
조만간 서버를 새로 구축하면서 다시 삽질을 해볼 생각이긴한데.. 몇몇 글에서 php-fpm 을 언급하고 있기에, 거기에서 해결책을 찾아볼 생각이긴 합니다.
뭔가 알아내면, 여기도 다시 정리를 하게 되겠죠.
해당 파일 열어서 umask(022)를 umask(002)로 바꾸어주면 됩니다 다섯군데 정도 있습니다. 판올림시나 또 다른문제가 생길지는 저도 잘모르겠습니다. 관련해서 검색하다 들어오게된 블로그인만큼 제가 쓴 미봉책이라도 올려두어 혹시 저처럼 도움이 필요한 사람이 볼까 하여 댓글 달아두었습니다 저는 php-fpm이 뭔지도 모르지만 뭔가 더 좋은 방법이 있을꺼라 생각합니다
아 그렇군요.
누군가에게 도움이 되리라 생각합니다. (오는 이는 별로 없는 곳이긴 하지만요.)
전 요즘 Resilio Sync 를 활용하고 있는지라..
아무튼, 조만간 권한 문제를 좀 더 고민해봐야겠습니다.
글 남겨 주셔서 고맙습니다.