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/www이 www-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기본적으로 파일이 제공되는 위치에 대한 권한을 설정하려면
sudo addgroup webmasterssudo adduser $USER webmasterssudo chown -R root:webmasters /var/wwwsudo find /var/www -type f -exec chmod 664 {} \;sudo find /var/www -type d -exec chmod 775 {} \;sudo find /var/www -type d -exec chmod g+s {} \;sudo chown -R www-data:webmasters application/cache/[기타...]
이제 로그 아웃했다가 다시 로그인하여 변경 사항을 적용하십시오.
이전 명령 세트는 다음을 수행합니다.
webmasters; 라는 새 그룹을 만듭니다 . 앱 파일에 대한 쓰기 권한이 필요한 모든 사용자가이 그룹에 추가됩니다.- 현재 사용자 (
$USER)를webmasters그룹에 추가합니다 . - 의 소유자 변경
/var/www에root와에 그룹webmasters그룹. - 의 모든 파일에 664 권한 (-rw-rw-r--)을 추가합니다
/var/www. - 의 모든 디렉토리에 775 권한 (drwxrwxr-x)을 추가합니다
/var/www. - SGID 비트
/var/www와 그 안의 모든 디렉토리를 설정합니다 . 이 마지막 요점은 몇 가지 설명이 필요합니다. 또한 chmod 8 진수 앞에 2를 두어 (예 : 2644) 같은 작업을 수행 할 수도 있습니다. - 소유자를
www-data(Apache의 사용자)로 설정하고 제공된 디렉토리의 그룹을로 설정합니다webmaster. 이를 통해 Apache 및webmasters그룹의 모든 사람이 디렉토리를 쓸 수 있습니다. 쓰기 가능한 다른 모든 디렉토리에 대해 동일한 작업을 수행하십시오.
/var/www가 해당 그룹에 추가하지 않고 어떻게 작성 합니까?