뉴21이나 기타 웹호스팅 서비스를 받는 경우...
telnet 으로 접속하여 불필요한 디렉토리를 삭제하려는데, Permission deny 되어 삭제되지 않는 경우가 있다.
# ls -al -rw-r--r-- 1 nobody nobody 4833825 May 16 2002 Dr.stein.mp3 |
이런식으로 내 계정(ex. johndou)이 아닌 nobody가 파일의 사용 권한을 가지고 있는 경우인데...
nobody 나 apache 같은 계정은 웹데몬이 사용하는데 엄연히 다른 유저이므로 r-- 로 되어 있을 때에는 nobody 이외에는 건드릴 수 없다.
rwx 로 권한을 풀어주어야만 내가 지우든 고치든 할 수 있다.
그렇다고 커맨드라인에
# chmod 777 *
처럼 해도 내 소유가 아니라 nobody의 소유이기 때문에 퍼미션을 내 맘대로 바꿀 수도 없다.
이럴 때, 대부분 관리자에게 전자우편을 보내어 삭제해 달라고 요청한다. (하지만, 귀찮다)
이럴 땐, 간단히 1회용 PHP 스크립트를 그 폴더에 만들어서 문제를 해결하고... 사용이 끝난 뒤에는 지워버리자.
# vi pm777.php php <? shell_exec('chmod 777 *'); ?> :qw |
PHP의 shell_exec()함수를 이용해 퍼미션을 -rwxrwxrwx 로 바꾸도록 명령(chmod 777 *)작성하였다.
물론, 특정 파일의 퍼미션만(chmod 777 filename)을 변경할 수도 있고, 하위 디렉토리까지(chmod -R 777 *) 다 바꿔버릴 수도 있으나, 귀찮아서 다 바꿔버렸다...
이 파일을 그냥 실행하는게 아니라... 인터넷 익스플로러를 이용해 실행한다.
http://test.com/bbs/data/test/pm777.php
처럼 주소창의 위 파일의 위치를 입력해 실행시킨다.
# ls -al -rwxrwxrwx 1 nobody nobody 4833825 May 16 2002 Dr.stein.mp3 |
와 같이 퍼미션이 변경되어 있을 것이다.
# rm -rf Dr.stein.mp3 |
하면, 깔끔하게 지워지게 되는 것은 물론이고...
원리인즉슨, PHP가 실행될때는 웹데몬(아파치 등) 계정 권한으로 실행된다. 즉, nobody 의 권한으로 위의 스크립트가 실행되기 때문에, nobody 소유의 파일들의 권한을 바꿔줄 수 있는 것이다.
알면 좀 덜 귀찮다...
모르면, 업체에게 삭제 요청을 해야겠지만... ^^
:맥노턴.macnorton.