fileperms을 활용한 파일 탐색과 퍼미션 검사
이전에 작성한 탐색기 함수를 이용하여 대상 경로의 모든 파일 중 사용자가 지정한 퍼미션이 아닌 파일을 배열로 반환하는 함수를 만든다.
공동 공간에서 작업을 하거나 서버 내 파일 생성/삭제 등 여러 파일을 제어하다 보면 퍼미션이 꼬이는 경우가 종종 발생한다. 특히 웹 서비스와 관련된 파일을 만들고 관리하다 보면 퍼미션으로 인해 웹 페이지에서 접근이 안 되는 경우가 많다.
그럴 때 일괄적으로 특정 경로의 퍼미션 체크를 할때 유용하게 사용된다.
▽ 파일 탐색기 함수 포스팅
https://muabow.tistory.com/249
소스코드
<?php
// https://muabow.tistory.com/249, 참고
function get_file_list($_target_dir) {
if( $fp = opendir($_target_dir) ) {
$files = Array();
$in_files = Array();
while( $file = readdir($fp) ) {
if( $file[0] != '.' ) {
if( is_dir("{$_target_dir}/{$file}") ) {
$in_files = get_file_list("{$_target_dir}/{$file}");
if( is_array($in_files) ) {
$files = array_merge($files, $in_files);
}
} else {
array_push($files, "{$_target_dir}/{$file}");
}
}
}
closedir($fp);
return $files;
}
}
function get_invalid_perm_list($_target_dir, $_target_perm) {
$arr_res_info = [];
foreach( get_file_list($_target_dir) as $idx => $file ) {
$perms = fileperms($file);
$perms = $perms - 32768;
if( decoct($perms) != $_target_perm ) {
$arr_res_info[] = array("perm" => decoct($perms), "file" => $file);
}
}
return $arr_res_info;
}
?>
사용방법
<?php
// /var/log/apache2 경로의 모든 파일 중 퍼미션이 755가 아닌 것을 탐색한다.
$arr_invalid_list = get_invalid_perm_list("/var/log/apache2", 755);
print_r($arr_invalid_list);
?>
결과
muabow@muabow:~/public_html$ php permission_check.php
Array
(
[0] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.14.gz
)
[1] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.3.gz
)
[2] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.12.gz
)
[3] => Array
(
[perm] => 644
[file] => /var/log/apache2/other_vhosts_access.log.1
)
[4] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.12.gz
)
[5] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.14.gz
)
[6] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.5.gz
)
[7] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.2.gz
)
[8] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.8.gz
)
[9] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.6.gz
)
[10] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.8.gz
)
[11] => Array
(
[perm] => 640
[file] => /var/log/apache2/other_vhosts_access.log
)
[12] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.9.gz
)
[13] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.1
)
[14] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.11.gz
)
[15] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log
)
[16] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log
)
[17] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.3.gz
)
[18] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.2.gz
)
[19] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.10.gz
)
[20] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.9.gz
)
[21] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.7.gz
)
[22] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.1
)
[23] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.11.gz
)
[24] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.4.gz
)
[25] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.5.gz
)
[26] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.6.gz
)
[27] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.7.gz
)
[28] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.13.gz
)
[29] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.10.gz
)
[30] => Array
(
[perm] => 640
[file] => /var/log/apache2/error.log.4.gz
)
[31] => Array
(
[perm] => 640
[file] => /var/log/apache2/access.log.13.gz
)
)
해당 배열의 퍼미션과 파일의 목록을 확인하여 chmod 를 통해 퍼미션을 변경해주면 쉽게 퍼미션 관리를 할 수 있다.
끝.
'IT > web' 카테고리의 다른 글
[PHP] 상수를 이용한 다중 텍스트 치환 / const, define to text, constant, preg_match_all (0) | 2022.01.21 |
---|---|
[PHP] 문자열 앞글자 삭제하기 예제, ltrim/substr 활용 (0) | 2022.01.12 |
[PHP] readdir을 활용한 파일 목록 읽기 예제, 파일 탐색기 (0) | 2022.01.06 |
[PHP] web shell 설명 및 예제 공유 (0) | 2022.01.06 |
[PHP] curl GET/POST Rest API 인증, 요청 및 JSON 응답 처리 방법 (0) | 2022.01.06 |
댓글