Chown (String $ filename, String | int $ user) : bool 함수는 지정된 파일 또는 디렉토리의 소유자를 변경하는 데 사용됩니다. 일반적으로 파일을 업로드 한 후 소유권 수정과 같이 파일 권한을 동적으로 조정 해야하는 시나리오에서 사용됩니다.
샘플 코드 :
<?php
$file = '/path/to/file.txt';
$user = 'www-data'; // 새로운 소유자 사용자 이름
if (chown($file, $user)) {
echo "파일 소유자가 변경되었습니다 {$user}";
} else {
echo "파일 소유자 변경에 실패했습니다";
}
?>
불충분 한 권한
chown () 함수는 충분한 권한이 필요하며 일반적으로 슈퍼 사용자 (루트) 만 파일 소유자를 변경할 수 있습니다. 현재 PHP 스크립트를 실행하는 사용자가 루트가 아닌 경우 시스템은 권한을 거부 하여이 오류가 발생합니다.
파일 시스템 제한
일부 파일 시스템 (예 : NFS, FAT32, 일부 마운트 옵션의 EXT4)은 파일 소유자 변경을 지원하지 않으며 chown ()을 호출 할 때 오류 가보고됩니다.
보안 모듈 제한
서버에서 보안 모듈 (예 : Selinux, Apparmor 등)이 활성화되어 파일 소유자의 변경 사항을 제한 할 수 있습니다.
PHP 구성 제한
일부 PHP 운영 환경 또는 보안 정책 (예 : Open_basedir 제한)은 간접적으로 불충분하게 권한을 부여 할 수 있습니다.
PHP 실행 환경의 사용자가 일반적으로 루트 권한이 필요한 chown ()을 실행할 수있는 권한이 있는지 확인하십시오. 생산 환경의 경우 다음 방법을 사용할 수 있습니다.
CLI 모드에서 sudo를 사용하십시오
sudo -u root php script.php
시스템 일정 작업 (CRON)을 사용하여 루트로 실행하십시오.
필요한 경우 PHP-FPM 또는 웹 서버의 실행중인 사용자를 조정하십시오.
chown ()을 사용할 수없는 경우 다음 대안을 고려할 수 있습니다.
chmod ()를 사용하여 소유자 대신 권한을 조정하십시오.
chmod($file, 0644);
외부 쉘 명령을 통해 실행 (권한을 사용할 수있는 경우)
exec("sudo chown www-data " . escapeshellarg($file));
참고 : exec ()를 사용할 때는 지휘 주입을 방지하기 위해 안전을 확인하십시오.
파일이있는 파티션이 chown ()을 지원하는지 확인하십시오. 마운트 중에 권한이 제한되면 다시 마운트를 고려하십시오.
mount -o remount,defaults /mount/point
또는 권한 작업을 지원하는 파일 시스템을 사용하십시오.
서버에 Selinux 또는 AppArmor가 활성화 된 경우 규칙을 일시적으로 종료하거나 조정할 수 있습니다.
Selinux 닫기 :
setenforce 0
관련 보안 정책을 조정하여 Chown 작업을 허용합니다
chown () : 허용되지 않은 오류는 일반적으로 불충분 한 권한으로 인해 발생합니다. PHP 스크립트가있는 사용자는 파일 소유자를 변경할 수있는 충분한 권한이 있어야합니다. 일반적으로 PHP 프로세스는 생산 환경에서 근본적으로 직접 실행되지 않습니다. 스케줄링 작업 또는 외부 명령을 통해 Sudo 로 작업을 수행하는 것이 좋습니다.
동시에 파일 시스템 유형 및 보안 모듈의 권한 제한에주의를 기울이고 실제 조건에 따라 적절한 솔루션을 선택해야합니다.
<?php
$file = '/path/to/file.txt';
$user = 'www-data';
if (!file_exists($file)) {
die("파일이 존재하지 않습니다");
}
if (@chown($file, $user)) {
echo "파일 소유자가 성공적으로 수정되었습니다 {$user}";
} else {
$error = error_get_last();
echo "소유자의 수정이 실패했습니다,오류 메시지: " . ($error['message'] ?? '알 수없는 오류');
}
?>