웹마스터 팁
config 파일을 일반 유저가 쓸 수 없는 문제 해결법
2015.07.09 13:00
https://github.com/xpressengine/xe-core/issues/1605
현재 files
아래에 생성되는 모든 파일의 퍼미션은 그 파일의 소유자/그룹이 모두 www-data
혹은 그에 준하는 사용자입니다.
따라서 이 아래의 파일을 수정해주려면 https://www.xpressengine.com/qna/21638521 에 언급되어있는 것처럼 간단한 php 스크립트를 만들어서 해결해야 합니다.
https://www.xpressengine.com/devlog/22674444 같은 공식 문서는 아예 호스팅 업체에 문의하라는 일반 사용자 입장에서 조금 황당한 설명이 있기도 합니다.
이러한 문제를 해결하려면 유닉스에 익숙하신 사용자라면 files
디렉토리 퍼미션에 sgid
퍼미션을 주면 된다는 사실을 알고계실것입니다. 즉, files
디렉토리 아래에 생성되는 모든 파일의 그룹소유주가, 자신의 그룹 소유주와 같게 됩니다.
즉 자신의 유저/그룹에 각각 foobar:hello
이고 files/
디렉토리에 sgid
퍼미션 비트가 설정되어 있으면,files/
아래에 www-data
아파치 유저에 의해서 생성되는 files/cache/page/foobar.php
파일의 소유주:그룹
은www-data:www-data
가 아닌 www-data:hello
가 됩니다.
따라서 소유주는 files
아래의 모든 파일을 손쉽게 삭제하여 관리할 수 있으며, 특정 템플리트 캐시를 고쳐서 간단히 테스트해볼 수 있는 방법을 써먹을 수도 있어서 호스팅 관리자를 덜 괴롭히게 할 것입니다.
디렉토리에 SGID
비트를 설정하려면 chmod 2777 files
라고 하면 됩니다.
최초 XE를 설치할 때에 XE 최상위 디렉토리의 퍼미션을 777
이 아닌 2777
라고 해야 합니다.
또한 XE가 이미 설치되어 있는 경우에는 다음과 같은 명령으로 모든 디렉토리에 대해 sgid
비트를 세팅할 수 있습니다. (files
포함. 파일 소유주의 그룹이 mygroup
인 경우)
$ sudo find files -type d |xargs chmod 2777
$ sudo find files -type d |xargs chgrp mygroup
도쿠위키에서 설정하는 방법
https://www.dokuwiki.org/install:permissions#tipusing_the_setgid_bit
현재 XE 메뉴얼 페이지에서는 files
디렉토리를 만든 후에 707
퍼미션으로 만들라고 되어있는데,
- 현재
files
디렉토리는 자동 생성 가능함. - 자동 생성될 경우에 퍼미션은
777
임 메뉴얼의 설명707
과 다름 (디렉토리에 그룹 퍼미션에0
을 주는 것은 별 의미 없음. 다른 사용자가7
이므로 디렉토리 리스팅이 가능.) files
디렉토리를 미리 만들 경우에는- 관리자 레벨인 경우에는
files
디렉토리 퍼미션777
770
권장 - 일반 유저인 경우에는
files
디렉토리 퍼미션2777
권장.
- 관리자 레벨인 경우에는
※주의
2777 퍼미션을 주고 설치를 직접 해본 결과 umask 기본 설정이 022로 되어있는 관계로 2777을 주어도 사용자가 파일을 쓸 수 없음이 확인되었습니다. 이 부분은 XE를 직접 패치하여 (umask('000')을 넣고, chmod는 제거해서 해결해야 하는 문제입니다.
이 문제는 https://github.com/xpressengine/xe-core/pull/1616 패치로 해결할 수 있습니다.
댓글 15
-
Luatic™
2015.07.09 16:23
-
wkp
2015.07.09 20:40
일반 유저가 755 혹은 775로 줄 수 있나요?? 문서 제목에도 나와있지만 일반유저를 기준으로 하고있습니다. 일반유저는 무조건 xx7을 줘야 합니다. 안그러면 설치도 안되지요.
-
Luatic™
2015.07.10 01:03
저희는 일반 유저도 775 또는 755를 줘야 정상작동됩니다. = ㅅ=; files 폴더에 777준적이 한번도 없습니다 755로 잘 운영하고 있습니다
-
wkp
2015.07.11 21:50
이 경우는 이미 files의 소유주가 본인이 아닌 아파치의 경우입니다. 이러한 경우에는 본인 즉 실제 일반 운영자이고 현재 XE에서는 파일을 쉽게 삭제하지 못합니다. (간단한 스크립트로 해결하면 물론 됩니다)
-
Luatic™
2015.07.12 10:55
제말은 "https://www.xpressengine.com/devlog/22674444 같은 공식 문서는 아예 호스팅 업체에 문의하라는 일반 사용자 입장에서 조금 황당한 설명이 있기도 합니다." 작성하신 부분의 황당한 설명이라는 표현이 맞지 않다는 것입니다. 실제로 여러환경이 존재활 수 있습니다. 사용하는 업체에 문의하라는게 뭐가 황당하신지 wkp님이야 좀 아시니까 관계없겠지만 제가 보기로는 XE사용자의 거의 80%는 쌩 초보 입니다. 팁을 이렇게 자기중심적으로 올리면 나머지 초보자들은 피해를 볼수있어서 댓글을 올렸던 겁니다.
얼마전 어떤 질문자가 잘못된 답변을 보고 조치하셔서 사이트를 날린 경우를 보았습니다. 답변이든 팁이든 좀더 생각하고 올려야 하겠단 생각을 하게되었고 그런던중 wkp님의 팁을 보고 댓글단겁니다.
-
wkp
2015.07.12 17:34
음?? 제가 쓴 문서가 조금 오해를 받을만한 내용인지 생각해봤습니다.
이 문서는 사실 일반적인 내용을 다룬 것이고 이 문서에 맞지 않게 작동하는 부분을 버그로 보고 https://github.com/xpressengine/xe-core/pull/1616 패치를 제출했습니다. 이 문서가 좀 성급하게 여기 올린 것은 사실입니다만, 이 문서의 목적은 "웹마스터 팁"를 위한 일반유저 설정 관련된 문제를 다룹니다.
이것만 적용해도 일반유저가 문서를 지울 수 있게 됩니다. 웹마스터를 덜 피곤하게 만들 수 있지요.
-
Luatic™
2015.07.12 18:39
일부 환경에서는 사이트가 안열린다거나 하는 문제가 발생될 수 있어서 댓글 단겁니다. :)
-
wkp
2015.07.12 19:09
네엡~ 알겠습니다~~
-
Luatic™
2015.07.10 01:11
그러니 호스팅사에 문의하는게 제일 좋은 방법입니다. 사용자가 호스팅환경을 정확하히 파악하지 못하고 함부로 777때리고 하는경우 간혹 files폴더가 삭제 안된다니 하는 일이 발생하는거죠..
-
기진곰
2015.07.12 22:19
공식 문서에서 제안하는 퍼미션과 실제 적용되는 퍼미션이 서로 다르고, chmod 함수에 의존하다 보니 고급 사용자가 설정한 sgid 비트가 날아가 버리는 등의 문제가 있는 것은 사실입니다. 여기까지는 @wkp 님의 진단에 동의합니다.
그러나 @Luatic™ 님의 말씀처럼 호스팅 환경에는 여러 가지가 있는 것 역시 사실입니다. 고객 계정 따로, 아파치 계정 따로 돌아가는 방식이 여전히 많이 사용되고 있긴 하지만, 꼭 그렇지는 않습니다. 이게 당연한 것처럼 여겨서는 안 된다는 거죠.
해외의 cPanel 기반 호스팅은 이미 수년 전부터 mod_suexec과 fastcgi 등을 조합하여 모든 PHP 스크립트를 고객 계정의 권한으로 실행하도록 하고 있습니다. @Luatic™ 님의 서버도 이런 방식일 거라고 추측됩니다. 파일도 본인이 소유하고, PHP 스크립트도 본인 권한으로 실행하고, 아파치 계정은 CSS, JS 등 정적 파일에 접근할 때나 쓰는 거죠. 755만으로도 다 된다는 겁니다. 계정 내의 모든 파일에 무조건 쓰기권한이 주어지므로 보안 취약점이 발생하기 쉬운 구조이지만, 고객 입장에서 워낙 편리하기 때문에 국내에서도 점점 이런 환경이 늘어나고 있는 것 같습니다.
-
BJ람보
2015.07.12 23:11
네 제 서버가 지금 이상태로 세팅되어있습니다.
Cpanel 에 기진곰님께서 언급하신 상태로 말이죠.
(C패널 단독서버 국내서버에서 사용중입니다 Apache2.4+nginx+php5.6.9 +fcgi(?)+마리아dB 10 )
정확히 집으셧네요 기본 사용자가 root사용을 하는게 아니라 그 사용자계정에 따로 전체권한을 주는 방식이죠. 거기서 FTP추가계정을 해서 사용하는 방식으로말이죠.
-
Luatic™
2015.07.12 23:12
@기진곰 님은 X에 번쩍 S에 번쩍 하시는듯 + ㅅ+ 멋져부려~!
-
wkp
2015.07.12 23:35
아 그부분을 미처 생각하지 못했었네요. suexec를 놀랍게 허용하는 호스팅 계정이 있나보네요? 가상호스트 혹은 chroot등을 함께 세팅한 것일수도 있겠군요.
일단 공식 문서에서 조차도 그러한 상황을 가정하고 세세한 내용을 적은것도 아니거니와 일반적 상황을 고려하였을 경우에 sgid 비트를 사용하는 것이 가장 나은 선택일 것이고, 그에 맞게 XE의 문제도 고치는것이 바람직해 보입니다.
-
기진곰
2015.07.13 09:45
좀더 나아가서, XE를 설치할 때 현재 실행중인 파일의 소유자과 실제 실행중인 프로세스의 소유자를 비교해서 최적의 퍼미션을 자동으로 설정해 주는 방법도 있겠네요. sgid까지 포함해서 말이예요.
if(fileowner(__FILE__) == getmyuid())
{
// suexec 환경임. 기본 umask를 022 또는 002로 셋팅함
}
else
{
// 일반 환경임. files 폴더를 2777로 생성하고
// 기본 umask도 적절히 변경함
} -
wkp
2015.07.13 19:20
umask 옵션이 정식으로 제공되면 이런 식으로 기본 설정값을 주면 좋겠네요~!
환경에 따라 다르게 줄수있습니다. 일부 환경에서는 755 또는 775로 주는 경우도 있습니다. 무조건 이렇게 주라는건.. 위험할수도 있겠네요, 님의 환경과 비슷한 환경이 아닌 다른 환경의 사용자가 동일하게 권한을 준다면 사이트가 안열리거나 하느 등의 문제가 생길수있습니다.