Apache와 PHP를 실행하는 표준 서버가 있습니다. 내가 실행중인 응용 프로그램은 파일을 생성하며 Apache 사용자가 소유합니다 www-data
. SFTP를 통해 업로드 한 파일은 내 사용자가 소유합니다 charlesr
. 모든 파일은 www-data
그룹의 일부입니다 . 내 문제는 그룹의 일부 www-data
이지만 소유하고있는 SFTP를 통해 파일을 수정하거나 덮어 쓸 수 없다는 것 입니다. SSH 세션을 통해 문제없이 파일을 수정할 수 있습니다.charlesr
www-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 webmasters
sudo adduser $USER webmasters
sudo chown -R root:webmasters /var/www
sudo 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
가 해당 그룹에 추가하지 않고 어떻게 작성 합니까?