www-data가 소유 한 파일에 대한 SFTP 권한 거부


23

Apache와 PHP를 실행하는 표준 서버가 있습니다. 내가 실행중인 응용 프로그램은 파일을 생성하며 Apache 사용자가 소유합니다 www-data. SFTP를 통해 업로드 한 파일은 내 사용자가 소유합니다 charlesr. 모든 파일은 www-data그룹의 일부입니다 . 내 문제는 그룹의 일부 www-data이지만 소유하고있는 SFTP를 통해 파일을 수정하거나 덮어 쓸 수 없다는 것 입니다. SSH 세션을 통해 문제없이 파일을 수정할 수 있습니다.charlesrwww-data

그래서 어떻게해야할지 모르겠습니다. 소유 한 파일 을 수정할 수있는 SFTP 세션 권한을 어떻게 부여 www-data합니까?

약간의 배경 지식을 위해 다음은 서버를 설정할 때 직접 작성한 참고 사항입니다.

Now set up permissions on `/var/www` where your files are served from by
default:

$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www

Now log out and log in again to make the changes take hold.

The previous set of commands does the following:

1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.

그런 다음 SGID 비트 설정의 의미 (즉, 작성된 모든 파일 /var/wwwwww-data자동으로 그룹의 일부가 됨)에 대해 설명하겠습니다 .


최신 정보

문제는 앱 자체 또는보다 구체적으로는 응용 프로그램 프레임 워크 ( Kohana )가 0644 (rw-r--r--)에 작성하는 특정 파일을 설정 하여 발생한 것으로 보입니다 . 즉 그룹 쓰기 가능하지 않습니다. 이것은 파일도 소유한다는 사실과 함께로 www-data로그인 할 때 SFTP를 통해 파일을 편집 할 수 없음 을 의미합니다 charlesr. 왜 SSH를 통해 파일을 편집 할 수 있는지 잘 모르겠습니다. 내 추측은 내가 sudo를 사용해야했을 것입니다.

여기에 이전 전략의 결함을 지적하고 최종적으로 그럭저럭 나올 때까지 Linux 권한의 세계에서 매리 네이드에 도움을 주었던 Marty Fried지칠 줄 모르는 도움 덕분에 이제 내가 사용하는 권한 전략이 있습니다. 고마워 마티!

개요

  • 파일 및 디렉토리 /var/www는 다음을 소유해야합니다.root:webmasters
  • 모든 개발자는 webmasters그룹의 구성원이어야합니다
  • 의 모든 디렉토리 /var/www는 다음으로 설정해야합니다. 2775또는 u=rwx,g=rwxs,o=rx(rwxrwx-rx)
  • 의 모든 파일 /var/www은 다음으로 설정해야합니다. 0664또는 ug=rw,o=r(rw-rw-r--)

다음은 소유해야합니다 www-data:webmasters(즉, Apache가 쓸 수있는 디렉토리입니다).

  • 응용 프로그램 / 캐시
  • 응용 프로그램 / 로그
  • 업로드
  • client_helpers / 업로드

어떻게

/var/www기본적으로 파일이 제공되는 위치에 대한 권한을 설정하려면

  1. sudo addgroup webmasters
  2. sudo adduser $USER webmasters
  3. sudo chown -R root:webmasters /var/www
  4. sudo find /var/www -type f -exec chmod 664 {} \;
  5. sudo find /var/www -type d -exec chmod 775 {} \;
  6. sudo find /var/www -type d -exec chmod g+s {} \;
  7. sudo chown -R www-data:webmasters application/cache/ [기타...]

이제 로그 아웃했다가 다시 로그인하여 변경 사항을 적용하십시오.

이전 명령 세트는 다음을 수행합니다.

  1. webmasters; 라는 새 그룹을 만듭니다 . 앱 파일에 대한 쓰기 권한이 필요한 모든 사용자가이 그룹에 추가됩니다.
  2. 현재 사용자 ( $USER)를 webmasters그룹에 추가합니다 .
  3. 의 소유자 변경 /var/wwwroot와에 그룹 webmasters그룹.
  4. 의 모든 파일에 664 권한 (-rw-rw-r--)을 추가합니다 /var/www.
  5. 의 모든 디렉토리에 775 권한 (drwxrwxr-x)을 추가합니다 /var/www.
  6. SGID 비트 /var/www와 그 안의 모든 디렉토리를 설정합니다 . 이 마지막 요점은 몇 가지 설명이 필요합니다. 또한 chmod 8 진수 앞에 2를 두어 (예 : 2644) 같은 작업을 수행 할 수도 있습니다.
  7. 소유자를 www-data(Apache의 사용자)로 설정하고 제공된 디렉토리의 그룹을로 설정합니다 webmaster. 이를 통해 Apache 및 webmasters그룹의 모든 사람이 디렉토리를 쓸 수 있습니다. 쓰기 가능한 다른 모든 디렉토리에 대해 동일한 작업을 수행하십시오.

답변:


10

Ubuntu.com에는 Apache guide 와 같은 훌륭한 서버 안내서가 있습니다. 신중하게 작성한 절차를 어디서 얻었습니까? 내가 설정하지 않은 서버에 대해 그다지 많은 문제를 겪어 본 적이 없지만, 제대로하지 않았을 가능성에 개방적이지만 실제로 서버를 설치하지 않았습니다. 매우 공개적이거나 매우 큰 것은 내가 알지 못하는 보안 허점이있을 수 있습니다.

그러나 www-data 그룹의 구성원 일 필요는 없으며 www-data가 www의 소스 파일을 소유하지 않습니다. 필자는 아파치에서이 파일을 자신의 파일에만 사용하고 다른 파일 자체에 대한 쓰기 권한을 가지고 있지 않다는 것을 이해합니다. 이론적으로 중요한 파일은 www-data가 쓰기 권한을 가질 수 없기 때문입니다. www-data가 소유 한 파일은 다른 사람에게 읽기 전용 권한을 부여 할 것이며 아무도 파일에 대한 쓰기 권한이 없어야합니다. 물론 나는 완전히 틀릴 수 있으며, 만약 그렇다면, 누군가가 나와 다르게 설명하는 실제 문서를 알려주기를 바랍니다.

아마도 뭔가 빠졌지 만 문제는 매우 간단합니다. sftp를 사용하여 로그인 한 사용자는 www-data 그룹의 구성원이어야하며 수정하려는 파일에는 www-data 그룹에 대한 쓰기 권한이 있어야합니다. ssh를 사용하여 파일을 수정할 수 있지만 sftp를 사용하여 파일을 수정할 수는 없습니다. 두 계정 모두에 동일한 계정으로 로그인 하시겠습니까? sftp에서는 !groups그룹을 나열하거나 !whoami사용중인 로그인 이름을 확인하는 등의 명령을 입력 할 수 있습니다 . 결과는 ssh를 사용하여 보는 것과 일치해야합니다 (느낌표에서 느낌표를 뺀 것).

권한이 있으면 sftp에서 chmod, chown, chgrp를 사용할 수도 있습니다.

그건 그렇고, 나는 당신의 목록에 적어도 하나의 나쁜 명령이 있다고 생각합니다.

sudo chmod -R g+rw /var/www

이것은 / var / www의 모든 파일과 폴더에 대한 쓰기 권한을 세계에 부여합니다. 이것은 나쁜 생각처럼 들립니다. 일반적으로 특정 디렉토리가 더 많은 권한을 필요로하지 않는 한 (일반적으로 단일 디렉토리 만) 루트 권한이 없으면이 디렉토리에 대한 쓰기 권한이 있습니다.

참고 : 이것은 내 잘못이었습니다. 이것을 지적 해 준 DonalLafferty에게 감사합니다. "a"가 아닌 "g"를 지정하므로 그룹 권한 만 변경됩니다. 피곤한 오래된 눈 (또는 나쁜 글꼴)이 "a"로 읽었을 것입니다.

설명을위한 편집

일반적으로 Apache에서 작성된 파일은 www-data 그룹과 다른 모든 사용자에 대해 읽기 전용이며 / var / www의 루트 소유 파일과 동일합니다. 따라서 다른 사람을 www-data의 회원으로 만들 이유가 없어야합니다. 문제는 모든 사람에게 쓰기 권한을 부여하는 것입니다. 이는 다른 경우입니다. 이는 사이트 내에서 특정 디렉토리를 사용 가능하게하여 수행해야하며, 루트에 의해 소유되거나 sudo를 사용하지 않고 소유자를 직접 작성하여 sudo와 함께 chmod를 사용하여 간단하게 수행됩니다.

전체 사이트에 액세스해야하는 개발자가 더 많은 경우, 즉 "웹 마스터"와 같은 사용자 + 그룹을 만들고자하는 경우 해당 사이트를 사이트 소유자로 설정하고 해당 그룹에 대한 쓰기 권한을 부여하고 모든 개발자 구성원을 만드십시오. 그 그룹의. 따라서 사이트 디렉토리 목록은 다음과 같습니다.

drwxrwxr-x  ##  webmasters     webmasters   #### ####-##-## ##:##  mysite.com

더 많은 편집

그 이후에는 사용자 "웹 마스터"를 그룹으로 만들 필요가 없다는 것을 깨달았습니다. 그러면 root : webmasters가 파일을 소유 할 수 있습니다. 즉 root는 소유자이지만 webmasters는 그룹입니다.

아래 질문에 대한 답변으로 Apache가 작성하는 파일은 www-data 및 그룹 www-data가 소유합니다. 이 파일들은 일반적으로 여러분이 쓰는 것이 아니므로 www-data의 멤버가 아닌 사람은 읽기 전용 액세스 권한을 가질 수 있습니다. 디렉토리 권한에 따라 다릅니다. 가끔 쓰기 액세스 권한 이상이 필요한 경우 그룹에 자신을 추가하는 것이 유용 할 수 있습니다. 일반적으로 Apache가 저장 한 컨텐츠에 대해 특정 디렉토리를 쓰기 가능하게 만듭니다. 쉘 액세스없이 Apache를 실행하는 대부분의 공유 웹 호스팅에는 그룹을 설정할 수있는 방법이 없을 수도 있습니다.

그러나 Apache는 루트가 소유 한 파일도 읽을 수 있습니다. 거의 모든 파일은 쓰기 가능하지 않은 세계에서 읽을 수있는 액세스 권한이 있습니다. 따라서이를 변경하지 않으면 Apache는 웹 마스터 그룹에있을 필요가 없습니다.

이것은 실제 아파치가 아닌 모든 기본 리눅스 설정입니다. Apache는 웹 서버 내에서의 액세스에만 관심이 있으며 구성 파일에 의해 설정됩니다. 이러한 이유로 게시물에 포함 된 Ubuntu 설명서 링크는 공개 위키보다 더 나은 소스로 간주되어야합니다.

그런데 O'Reilly Apache Cookbook은 "htdocs, cgi-bin 및 아이콘과 같은 문서 디렉토리는 특정 웹 사이트의 개발 모델에 가장 적합한 방식으로 권한을 설정해야합니다. 그러나 어떤 경우에도 웹 서버 사용자는 디렉토리에 포함 된 디렉토리 나 파일을 쓸 수 없어야합니다. "

마지막으로 ACL을 사용하는 것이 더 많은 제어가 필요한 경우 파일 권한을 설정하는 좋은 방법입니다. 항상 설정하는 좋은 방법 일 수 있으며 조사 해야하는 것입니다.


안녕 @ marty-fried, 답변 주셔서 감사합니다, 그것은 시험해 볼 많은 것을 제공합니다. 레. 당신의 질문. 나는 다양한 출처에서 정보를한데 모으기 때문에 (내가 사용하는 안내서에 기록한 이유) 정확한 출처를 기억할 수 없다. 이 특정 소스 (솔루션 1)를 사용하지는 않았지만 (방금 찾은 것), 내 결정에 좋은 근거를 제공합니다. Apache 가이드에서 언급 한 것처럼 'webmasters'라는 그룹을 만드는 것이 좋지만, 그렇게하면 Apache /var/www가 해당 그룹에 추가하지 않고 어떻게 작성 합니까?
Charles Roper

그리고 않는 다른 사용자에게 액세스 권한을 부여 할 필요가 /var/www나는에 그룹 액세스 권한을 부여 생각했다, 그래서 www-data좋은 솔루션이 될 것입니다 모든 사람에게 해당 그룹의 구성원 및 제작. 나는 덮어 쓸 수있는 지금 아파치의 문제를 볼 수 있는 것처럼, 거기에 파일을. 나 자신을 포함하여 2 명의 개발자만이 코드에 액세스 할 수 있기 때문에 단기적으로 비교적 안전합니다.
Charles Roper

1
고마워 마티 아파치 쿡북 (Apache Cookbook)의이 부분은 나를 웃게 만들었다. "아파치 서버에서 파일 권한을 설정하는 올바른 방법을 12 명에게 요청하면 수십 가지의 다른 답변을 얻을 수 있다는 것을 알아야한다." 지금 진행하는 데 필요한 모든 것을 내게 주셨습니다. 시간 내 주셔서 감사합니다. :-)
Charles Roper

1
나도 조금 배웠다. 그래서 나는 심도 깊은 토론을 즐기는 이유이다-보통 흐릿한 부분을 명확히하는 데 도움이된다. 저는 주로 문제를 해결하고 웹 사이트를 설정하라는 요청을받는 프로그래머이므로 항상 더 나은 방법을 배우고 있습니다. 다른 질문이 있으면 언제든지 문의하십시오.
Marty Fried

1
AFAIK, sudo chmod -R g + rw / var / www는 'group'액세스를 제공합니다. 세계에 액세스하려면 'a + rw'를 사용하십시오.
Donal Lafferty

7

나는 당신이 사용하지 않은 것으로 나타났습니다 chown.

파일 / 폴더의 소유권을 올바르게 설정하려면 다음과 같이 전체 디렉토리를 설정할 수 있습니다. chown -R www-data:www-data

이것은 소유권을 그룹 www-data과 사용자로 설정합니다www-data

또한 임시 해결 방법 으로이 작업을 수행 할 수 있습니다.

chmod 777 /var/data/<filename> 또는 chmod 777 /var/data/<foldername>

필요에 따라 파일을 편집 한 다음

chmod 644 /var/data/<filename> 또는 chmod 755 /var/data/<foldername>

"-R"스위치는 모든 하위 파일 및 폴더의 사용 권한도 변경하므로 사용에주의하십시오.

664는 Apache 표준 파일 권한이며 755는 표준 폴더 권한입니다.

희망이 있습니다 :)


답변 해 주셔서 감사합니다. 대단히 감사합니다. 그러나 실제로 도움이되지 않습니다. 파일을 chowning하면 SFTP를 사용할 때 모든 파일을 수정할 수 없습니다 (나중에있는 것과 반대입니다!). a) SFTP에서 chmod에 대한 권한이 없으므로 chmod 해결 방법을 실제로 사용할 수 없습니다. b) SSH를 통해 로그인하고 권한을 변경하고 SFTP를 수행하고 다시 변경하는 것을 원하지 않습니다. 그리고 c) 일부 파일은 보안상의 이유로 다른 권한을 가지므로 어쨌든 chmod 수 없습니다.
Charles Roper

무엇입니까 /var/data? 또한 명령을 사용하기 위해 어떤 디렉토리를 제안하고 chown -R www-data:www-data있습니까? 바라건대 /var/www.
Marty Fried
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.