윈도우 리눅스 공용입니다.
단 윈도우의 경우에는 소유권, 그룹정보는 가져오지 못합니다.
여러가지 활요예가 있겠지만
이런경우에 유용합니다.
압축을 하고 전혀 다른 계정에 압축을 풀었을때
퍼미션이나 소유권 문제때문에 고민할때 사용하면 유용합니다.
이하 소스입니다.
function Ysave_dir_owner_perm($dir, $debug=false){
if (!is_dir($dir)) return false;
if (!preg_match("`/$`", $dir)) $dir .= '/';
if (preg_match("`win`i", PHP_OS)) $os = 'windows';
else $os = 'unix or linux';
$text = '';
$d = dir($dir);
while (false !== ($entry = $d->read())) {
if (substr($entry, 0, 1) == '.') continue;
if ($os != 'windows') $text .= 'chown ' . fileowner($dir . $entry) . '.' . filegroup($dir . $entry) . ' ' . $dir . $entry . " \n";
$text .= 'chmod ' . substr(decoct(fileperms($dir . $entry)), -4) . ' ' . $dir . $entry . " \n";
if ($debug == true) {
if ($os != 'windows') echo 'chown ' . fileowner($dir . $entry) . '.' . filegroup($dir . $entry) . ' ' . $dir . $entry . " <br>\n";
echo 'chmod ' . substr(decoct(fileperms($dir . $entry)), -4) . ' ' . $dir . $entry . " <br>\n";
}
if (is_dir($dir . $entry)){
$text .= Ysave_dir_owner_perm($dir . $entry, $debug);
}
else{
continue;
}
}
$d->close();
return $text;
}
function Ysave_file($file, $text, $perm=0777){
if (empty($file)) return false;
$fp = @fopen ($file, 'w');
if (empty($fp)) return false;
@fwrite ($fp, $text);
@fclose($fp);
return @chmod ($file, $perm);
}
$dir = './';
$text = Ysave_dir_owner_perm($dir, true);
if ($text == false) echo '디렉토리내의 정보를 읽는데 실패하였습니다.';
$save_result = Ysave_file('./temp/owner_perm.txt', $text, 0777);
if (empty($save_result)) echo '파일저장에 실패하였습니다.';
참고 url http://82da.com/Ybbs/sample/Ysave_dir_owner_perm.php<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
단 윈도우의 경우에는 소유권, 그룹정보는 가져오지 못합니다.
여러가지 활요예가 있겠지만
이런경우에 유용합니다.
압축을 하고 전혀 다른 계정에 압축을 풀었을때
퍼미션이나 소유권 문제때문에 고민할때 사용하면 유용합니다.
이하 소스입니다.
function Ysave_dir_owner_perm($dir, $debug=false){
if (!is_dir($dir)) return false;
if (!preg_match("`/$`", $dir)) $dir .= '/';
if (preg_match("`win`i", PHP_OS)) $os = 'windows';
else $os = 'unix or linux';
$text = '';
$d = dir($dir);
while (false !== ($entry = $d->read())) {
if (substr($entry, 0, 1) == '.') continue;
if ($os != 'windows') $text .= 'chown ' . fileowner($dir . $entry) . '.' . filegroup($dir . $entry) . ' ' . $dir . $entry . " \n";
$text .= 'chmod ' . substr(decoct(fileperms($dir . $entry)), -4) . ' ' . $dir . $entry . " \n";
if ($debug == true) {
if ($os != 'windows') echo 'chown ' . fileowner($dir . $entry) . '.' . filegroup($dir . $entry) . ' ' . $dir . $entry . " <br>\n";
echo 'chmod ' . substr(decoct(fileperms($dir . $entry)), -4) . ' ' . $dir . $entry . " <br>\n";
}
if (is_dir($dir . $entry)){
$text .= Ysave_dir_owner_perm($dir . $entry, $debug);
}
else{
continue;
}
}
$d->close();
return $text;
}
function Ysave_file($file, $text, $perm=0777){
if (empty($file)) return false;
$fp = @fopen ($file, 'w');
if (empty($fp)) return false;
@fwrite ($fp, $text);
@fclose($fp);
return @chmod ($file, $perm);
}
$dir = './';
$text = Ysave_dir_owner_perm($dir, true);
if ($text == false) echo '디렉토리내의 정보를 읽는데 실패하였습니다.';
$save_result = Ysave_file('./temp/owner_perm.txt', $text, 0777);
if (empty($save_result)) echo '파일저장에 실패하였습니다.';
참고 url http://82da.com/Ybbs/sample/Ysave_dir_owner_perm.php<div class='small'>[이 게시물은 관리자님에 의해 2011-10-31 17:12:10 PHP & HTML에서 이동 됨]</div>
댓글 4개
음 사실 이팁은 좀 위험한 팁입니다.
웹호스팅 환경에서는
디렉토리보안을 염두에 두지 않은 계정 같은 경우
싸그리 모든 정보를 다른 계정 사용자에서 알려줄수도 있기 때문입니다.
이팁을 응용하여 악용해서는 안되겠습니다.
디렉토리를 통째로 복사해오는 팁도 올릴려고 했으나
문제의 소지가 많아서 그부분은 올리지 않겠습니다.
잘아시는 분도 많겠지만, 잘 모르는 분들을 위해
소유권과 퍼미션에 대해 간단히 설명을 하겠습니다.
소유권은 파일을 생성한 주인입니다.(계정)
그룹은 해당파일을 공유할수 있는 그룹(계정과는 다릅니다.)입니다.
퍼미션은
다음과 같은 구조로 되어있습니다.
소유주 - 그룹 - 아무나
일반적으로 사용할경우에는 8진수로 사용하고
사람이 읽을때는 주로 영문 표기를 사용합니다.
r - 8진수 4에 해당하며 읽을수 있는 권한을 뜻합니다.
w - 8진수 2에 해당하며 쓰거나 수정 삭제 할수 있는 권한을 뜻합니다.
x - 8진수 1에 해당하며 실행할수 있는 권한을 뜻합니다.
세개의 파트에 각각 이것을 조합하여 퍼미션을 구성합니다.
예를 들어 777 이면
첫번째 파트가 소유주파트인데 7 이므로 (4 + 2 + 1) 소유주는 해당 파일이나 디렉토리에 대해
읽거나 수정삭제, 실행이 가능합니다.
두번째 파트도 7이므로 그룹으로 지정된 계정은 해당 파일이나 디렉토리를 모두 읽거나 수정삭제, 실행이 가능합니다.
세번째 파트도 7이므로 역시 아무계정도 모든 권한을 가집니다.
특별한 경우가 아니라면 777이렇게 주는 것은 위험합니다.
예를 들어 644
일반적으로 파일을 생성하면 대부분의 시스템에서 파일의 퍼미션을 644 로 줍니다.
첫번째 파트 소유주 파트가 6 (4 + 2) 이므로 소유주 계정은 읽거나 수정삭제 등이 가능합니다. 현재 1이 포함되어있지 않으므로 쉘스크립트와 같이 쉘상에서 실행하는 파일의 경우 소유주라 하더라도 실행이 불가능합니다.
두번째 파트 그룹은 4이므로 그룹으로 지정된 그룹은 읽을수만 있습니다.
세번째 파트 아무나는 4이므로 아무나가 해당 파일을 읽을수 있습니다.
읽을 수 있다는 의미는 다른 계정 사용자가 그 파일의 내용을 vi같은 것으로 읽어볼수 있고
복사도 가능합니다.
따라서 웹서버가 읽어서 웹페이지로 보여줘야 하므로
아무나 부분은 대부분 항상 4이상입니다.
따라서 경로가 노출된 파일의경우
다른계정사용자가 원본 그대로의 파일을 읽을수가 있습니다.
물론 복사해 올수도 있습니다.
그러므로 외부 계정 사용자에게 경로를 노출시키지 않은 가장 기본적인 방법은
디렉토리의 퍼미션을 특수한 경우를 제외하곤
711 이나 701로 주면
일단 외부 계정 사용자는 해당 디렉토리에 머가 들었는지 읽을수가 없고
쓸수도 없습니다.
그러나 웹서비스에서 경로를 파악하여 경로대로 파일로 바로 접근하는 경우에는
역시 모두 읽을수 있고 복사할수 있습니다.
좀 두서가 없는데,
웹호스팅 환경의 사용자는 항상 백업을 잘하고
항상 자신의 사이트가 외부 계정 사용자에게 노출될수 있다는 것을 명심하고
있어야겠습니다.
웹호스팅 환경에서는
디렉토리보안을 염두에 두지 않은 계정 같은 경우
싸그리 모든 정보를 다른 계정 사용자에서 알려줄수도 있기 때문입니다.
이팁을 응용하여 악용해서는 안되겠습니다.
디렉토리를 통째로 복사해오는 팁도 올릴려고 했으나
문제의 소지가 많아서 그부분은 올리지 않겠습니다.
잘아시는 분도 많겠지만, 잘 모르는 분들을 위해
소유권과 퍼미션에 대해 간단히 설명을 하겠습니다.
소유권은 파일을 생성한 주인입니다.(계정)
그룹은 해당파일을 공유할수 있는 그룹(계정과는 다릅니다.)입니다.
퍼미션은
다음과 같은 구조로 되어있습니다.
소유주 - 그룹 - 아무나
일반적으로 사용할경우에는 8진수로 사용하고
사람이 읽을때는 주로 영문 표기를 사용합니다.
r - 8진수 4에 해당하며 읽을수 있는 권한을 뜻합니다.
w - 8진수 2에 해당하며 쓰거나 수정 삭제 할수 있는 권한을 뜻합니다.
x - 8진수 1에 해당하며 실행할수 있는 권한을 뜻합니다.
세개의 파트에 각각 이것을 조합하여 퍼미션을 구성합니다.
예를 들어 777 이면
첫번째 파트가 소유주파트인데 7 이므로 (4 + 2 + 1) 소유주는 해당 파일이나 디렉토리에 대해
읽거나 수정삭제, 실행이 가능합니다.
두번째 파트도 7이므로 그룹으로 지정된 계정은 해당 파일이나 디렉토리를 모두 읽거나 수정삭제, 실행이 가능합니다.
세번째 파트도 7이므로 역시 아무계정도 모든 권한을 가집니다.
특별한 경우가 아니라면 777이렇게 주는 것은 위험합니다.
예를 들어 644
일반적으로 파일을 생성하면 대부분의 시스템에서 파일의 퍼미션을 644 로 줍니다.
첫번째 파트 소유주 파트가 6 (4 + 2) 이므로 소유주 계정은 읽거나 수정삭제 등이 가능합니다. 현재 1이 포함되어있지 않으므로 쉘스크립트와 같이 쉘상에서 실행하는 파일의 경우 소유주라 하더라도 실행이 불가능합니다.
두번째 파트 그룹은 4이므로 그룹으로 지정된 그룹은 읽을수만 있습니다.
세번째 파트 아무나는 4이므로 아무나가 해당 파일을 읽을수 있습니다.
읽을 수 있다는 의미는 다른 계정 사용자가 그 파일의 내용을 vi같은 것으로 읽어볼수 있고
복사도 가능합니다.
따라서 웹서버가 읽어서 웹페이지로 보여줘야 하므로
아무나 부분은 대부분 항상 4이상입니다.
따라서 경로가 노출된 파일의경우
다른계정사용자가 원본 그대로의 파일을 읽을수가 있습니다.
물론 복사해 올수도 있습니다.
그러므로 외부 계정 사용자에게 경로를 노출시키지 않은 가장 기본적인 방법은
디렉토리의 퍼미션을 특수한 경우를 제외하곤
711 이나 701로 주면
일단 외부 계정 사용자는 해당 디렉토리에 머가 들었는지 읽을수가 없고
쓸수도 없습니다.
그러나 웹서비스에서 경로를 파악하여 경로대로 파일로 바로 접근하는 경우에는
역시 모두 읽을수 있고 복사할수 있습니다.
좀 두서가 없는데,
웹호스팅 환경의 사용자는 항상 백업을 잘하고
항상 자신의 사이트가 외부 계정 사용자에게 노출될수 있다는 것을 명심하고
있어야겠습니다.
네 그것은 계정의 고유 번호입니다.
리눅스 서버의 경우 ll 이라는 명령을치면
소유권과 그룹을 영문으로 표기해줍니다.
그러나 이것은 /etc/passwd에서 고유의 계정번호와 계정명을 매치시켜주기 때문에
사람이 읽이 좋게 기억하기 좋게 영문으로 보여줄뿐
실제로는 고유의 번호로서 작동됩니다.
따라서 . 앞의 숫자는 해당 소유주의 고유 번호이고
. 뒤의 숫자는 해당 그룹의 고유번호입니다.
일반적으로 계정을 생성할때 특별한 옵션을 주지 않으면
계정명과 같은 그룹명이 생기게 됩니다.
일반적으로 파일을 생성하게 되면 그 소유권과 그룹은
지금 작업하는 계정의 소유권과 그룹을 그대로 따라가게 됩니다.
답변이 되었는지 모르겠습니다.
리눅스 서버의 경우 ll 이라는 명령을치면
소유권과 그룹을 영문으로 표기해줍니다.
그러나 이것은 /etc/passwd에서 고유의 계정번호와 계정명을 매치시켜주기 때문에
사람이 읽이 좋게 기억하기 좋게 영문으로 보여줄뿐
실제로는 고유의 번호로서 작동됩니다.
따라서 . 앞의 숫자는 해당 소유주의 고유 번호이고
. 뒤의 숫자는 해당 그룹의 고유번호입니다.
일반적으로 계정을 생성할때 특별한 옵션을 주지 않으면
계정명과 같은 그룹명이 생기게 됩니다.
일반적으로 파일을 생성하게 되면 그 소유권과 그룹은
지금 작업하는 계정의 소유권과 그룹을 그대로 따라가게 됩니다.
답변이 되었는지 모르겠습니다.
게시글 목록
| 번호 | 제목 |
|---|---|
| 12307 |
JavaScript
테이블 각 row 마우스오버시 색깔바꾸기 입니다.
|
| 12306 |
JavaScript
png 24비트 투명처리하기 입니다.
|
| 12305 |
JavaScript
full-down메뉴 자바스크립트 입니다.
|
| 12304 |
JavaScript
iframe사용시 높이 자동 조정하기 입니다.
|
| 12303 |
JavaScript
계산기
|
| 12302 |
JavaScript
숫자를 한글로 변환하기 입니다.
|
| 12301 |
JavaScript
아이프레임 자동으로 늘어나는 자바 스크립트 입니다.
|
| 12300 |
JavaScript
끊기지 않는 배너 롤링 입니다.
|
| 12299 |
기타
랜섬에 당한 화일 복구
|
| 12298 |
JavaScript
id값 변수명으로 치환 예제 자바스크립트 입니다.
|
| 12297 |
JavaScript
상태바의 링크 주소 감추기 입니다.
|
| 12296 |
JavaScript
가짜 카운터 달기 입니다.
|
| 12295 |
JavaScript
홈에 머문시간을 제목표시줄과 상태바에 실시간으로 알려주기 입니다.
|
| 12294 |
JavaScript
prompt 와 alert 응용 자바스크립트 예제 입니다.
|
| 12293 |
JavaScript
prompt 와 alert 간단한 자바스크립트 예제 입니다.
|
| 12292 |
jQuery
간단한 탭 제이쿼리
|
| 12291 |
jQuery
간단한 셀렉트 드롭다운 제이쿼리
|
| 12290 |
JavaScript
문서내 이미지갯수 출력하기 입니다.
|
| 12289 |
JavaScript
내용 복사해서 붙어넣기 하면 출처 따라오는 자바스크립트입니다.
|
| 12288 |
JavaScript
팝업창 지정한 시간대에 예약 열기 입니다.
|
| 12287 |
JavaScript
접속때마다 음악 다르게 나오기 입니다.
|
| 12286 |
JavaScript
자동 스크롤 메뉴 관련 입니다.
|
| 12285 |
JavaScript
이 브라우저로 몇페이지나 보았나 확인하기 입니다.
|
| 12284 |
JavaScript
사용자 브라우저의 펄러그인 목록 출력하기 입니다.
|
| 12283 |
JavaScript
상태표시줄 제어 + 간단한 복사 제어 하기 입니다.
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기