루트에서 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인 경우 계산할 뿐만 아니라 실제로 설정한다는 의미입니다.