PHP posix_setuid()를 사용하여 동일한 그룹에 있을 때 파일에 쓸 수 없습니다.

PHP posix_setuid()를 사용하여 동일한 그룹에 있을 때 파일에 쓸 수 없습니다.

루트에서 PHP 프로세스를 실행 중입니다. 이 프로세스는 posix_setuid(1500);출력 파일을 호출한 다음 열려고 시도합니다.

ls -l output.log이 출력은 다음과 같이 표시 됩니다.

-rwxrwxr-x 1 www-data www-data 2294376 3월 19일 12:05 Output.log

내 사용자 계정(jonny)에 대한 명령은 id다음 출력을 보여줍니다.

uid=1500(jonny) gid=1500(jonny) groups=1500(jonny),27(sudo),33(www-data)

uid를 jonny로 변경한 후에도 PHP 프로세스가 output.log 파일에 쓸 수 없는 이유는 무엇입니까?

답변1

posix_setuid(1500)UID를 1500으로만 변경하세요. 이는 파일에 대한 액세스 권한을 부여하지 않습니다. 일반 사용자로 로그인하여 이 파일에 액세스할 수 있는 이유는 UID 1500을 소유하고 있을 뿐만 아니라 그룹 1500과 보조 그룹 27 및 33도 소유하고 있기 때문입니다. 추가 그룹 33( www-data)이 있으면 파일에 액세스할 수 있습니다. 문서.

아마도 다음과 같이 해야 할 것입니다:

posix_initgroups("jonny", 1500);
posix_setuid(1500);

순서가 중요합니다. 를 호출하여 루트 권한을 포기한 후에는 posix_setuid더 이상 자격 증명을 설정할 수 없으므로 다른 순서로는 작동하지 않습니다.

참고하시기 바랍니다,선적 서류 비치posix_initgroups아마도 잘못된 것 같습니다(PHP 세계의 많은 것들처럼). "그룹 액세스 목록을 계산한다"고 나와 있지만 실제로는 참조하는 POSIX 함수처럼 동작하는 것 같습니다. true인 경우 계산할 뿐만 아니라 실제로 설정한다는 의미입니다.

관련 정보