상위 폴더에 대한 읽기 액세스 권한을 부여하지 않고 www-data가 폴더를 생성하도록 허용하는 방법

상위 폴더에 대한 읽기 액세스 권한을 부여하지 않고 www-data가 폴더를 생성하도록 허용하는 방법

질문하는 것이 적절한 질문인지 잘 모르겠습니다. 그래서 제가 하려는 일을 설명하려고 노력하겠습니다.

내부 웹 애플리케이션(PHP 언어)이 있고 폴더를 생성하고 싶습니다. 문제는 Apache 사용자 www-data가 폴더를 생성하려는 상위 폴더에 대한 액세스 권한이 없다는 것입니다.

www-data에 상위 폴더에 대한 액세스 권한을 부여하는 것은 적절하지 않다고 생각하므로 www-data보다 더 많은 권한을 갖고 www-data를 실행할 수 있는 스크립트를 만들 수 있는지 궁금합니다. 스크립트는 단순히 다음을 수행합니다(의사 코드).

FOLDER_NAME = sanitise(<arg-val-1>)
mkdir /some-path/$FOLDER_NAME

이 스크립트를 생성하기에 적합한 위치는 어디이며 www-data는 이를 루트로 어떻게 실행합니까? (또는 이 문제를 해결하는 더 좋은 방법이 있습니까?)

저는 데비안 리눅스를 사용하고 있습니다.

답변1

당신이 말하는 것을 유용한 방법으로 할 수는 없지만, 의심할 여지 없이 충분히 가까운 무언가가 있고 그것이 당신이 정말로 원하는 것을 이루어줍니다.

디렉터리를 생성하도록 설정하더라도 하위 디렉터리는 상위 디렉터리를 통해서만 액세스할 수 있으므로 사용자는 www-data여전히 해당 디렉터리에 액세스할 수 없습니다 . /some-path/subdirectory(이 문제를 해결할 수 있는 몇 가지 방법이 있지만 권장하지는 않습니다. 두 가지 모두에 액세스할 수 있는 프로세스가 있을 수 있으며 권한을 으로 /some-path변경한 다음 권한을 제거할 수 있습니다. 생성된 프로세스는 여전히 현재 디렉터리에 액세스할 수 있습니다. 절대 경로를 통하지 않음) 디렉토리를 다른 위치에 바인드 마운트할 수 있지만 원하는 경우 다른 위치에 디렉토리를 생성할 수도 있습니다.)/some-path/subdirectory/some-path/subdirectory

www-data최소한 액세스할 수 있는( x권한 비트) 디렉터리에 이러한 디렉터리를 배열합니다 . 디렉토리가 다른 사용자 및 다른 그룹에 속해야 한다는 것이 문제인 경우 디렉토리에 액세스 제어 목록( )을 설정하십시오 setfacl -m user:www-data:x /some-path.SUDOERS를 통해 특정 디렉터리에서 실행 중인 명령을 제한하는 방법은 무엇입니까?더 많은 정보를 알고 싶습니다.

www-data사용자가 쓸 수 없는 경우에도 /some-path디렉터리를 생성하려면 높은 권한이 필요합니다. 최소한 두 가지, 어쩌면 세 가지 작업을 수행해야 합니다.

  1. 충분한 권한이 있는 사용자로 하위 디렉터리를 만듭니다.
  2. 필요한 경우 하위 디렉터리의 소유권을 변경합니다.
  3. 필요한 경우 하위 디렉터리의 권한을 변경합니다.

하위 디렉터리가 해당 www-data사용자에게 속해야 하는 경우 해당 디렉터리에 쓸 수 있는 그룹으로 만들 수 있습니다 /some-path. 필요한 경우 쓰기 를 some-group허용하는 ACL을 설정합니다 /some-path. 그런 다음 명령을 실행할 권리를 setfacl -m group:some-group:rwx /some-path부여하십시오www-datamkdir스도. visudo다음 규칙을 실행 하고 추가합니다.

 www-data ALL = ( : some-group) /bin/mkdir /some-path/[0-9A-Z_a-z]*, !/bin/mkdir /some/path/[!-0-9A-Z_a-z]

이를 통해 www-data실행이 .sudo -g some-group mkdir /some-path/foo-bar/some-path

하위 디렉토리가 해당 디렉토리에 쓸 수 있는 다른 사용자에게 속해야 하는 경우 some-path해당 mkdir사용자로 명령을 실행하십시오. 올바른 권한과 소유권을 사용하여 디렉터리가 생성되도록 준비할 수 있습니다. 파일 의 경우 sudoers:

www-data ALL = (some-user : some-group) /bin/mkdir -m 775 /some-path/[0-9A-Z_a-z]*, !/bin/mkdir /some/path/[!-0-9A-Z_a-z]

에 속한 sudo -u some-user -g some-group mkdir -m 775 /some-path/foo-bar그룹이 쓸 수 있는 디렉터리를 생성하려면 실행하세요.some-user:some-group/some-path

답변2

다음 사항이 귀하의 상황에 적합한지 확실하지 않습니다.

다음을 가정

  • www-데이터 쓰기 가능 디렉터리:/var/www/데이터
  • 원래 예상되는 상위 디렉토리:/집/부모

이 작업을 수행:

ln -s /var/www/data /home/parent/data

따라서 www-data를 /home/parent에 직접 쓰지 마십시오.데이터방문 가능부모소프트 링크를 통해.


아래 표시된 대로 로컬로 마운트하여 이 작업을 수행할 수도 있습니다.

mount -o bind /var/www/data /home/parent/data

또는 설치부모곧장

mount -o bind /var/www/data /home/parent

로컬 마운트 방법을 사용하면 대상 디렉터리가 일반 파일 시스템처럼 동작합니다.

관련 정보