>백엔드 개발 >PHP 튜토리얼 >PHP를 이용한 Ftp 사용자의 온라인 관리를 위한 온라인 관리 코드

PHP를 이용한 Ftp 사용자의 온라인 관리를 위한 온라인 관리 코드

WBOY
WBOY원래의
2016-07-29 08:36:261016검색

리더는 온라인 등록과 작품 업로드가 필요한 웹 디자인 공모전과 플래시 제작 공모전을 계획해 달라고 요청했습니다. 저는 FreeBSD Apache+PHP+Mysql FTP를 통해 이 요구 사항을 달성했습니다.
온라인 등록 및 작품 업로드를 실현하는 아이디어는 웹 양식을 사용하여 사용자가 입력한 정보를 수집하고 이를 Mysql 데이터베이스에 저장함과 동시에 사용자의 이름으로 FTP 업로드 계정을 생성하는 것입니다. 등록된 이름을 입력하고 사용자에 해당하는 디렉터리를 생성합니다.
FTP 서버는 기본적으로 시스템 사용자의 사용자 이름과 비밀번호를 사용합니다. FreeBSD는 UNIX 진영에 속하는 운영 체제입니다. Linux처럼 사용자를 생성하기 위한 useradd 및 groupadd가 없으며, Freebsd에서 사용자를 관리자로 생성하는 명령은 pw 명령으로 대체됩니다.
echo ;username> [-g] [groupname] [-s][shelldir][-h 0]
매개변수 g는 사용자 그룹을 지정하고, 매개변수 s는 사용자의 쉘을 지정합니다.
일반 사용자라면 su 명령을 사용해야 합니다.
su root –c 'echo s ][shelldir][-h 0] '
실행 후 시스템에서 관리자 비밀번호를 묻습니다. 관리자 권한으로 이 명령을 실행하려면 비밀번호를 입력하세요.
이 단계를 구현하는 데 있어 가장 어려운 점은 PHP를 통해 위의 시스템 명령을 호출하여 사용자를 생성하는 방법입니다. 이 예제는 PHP에서 popen() 함수를 사용하여 파일을 여는 구문입니다. int입니다. popen(문자열 명령, 문자열 모드), 열리는 파일은 단방향만 가능하고 읽기 또는 쓰기만 가능하며 해당 "문자열 모드"는 'r' 또는 'w'이고 "문자열 명령"입니다. 명령 문자열인 경우 fgets(), fgetss() 및 fputs() 함수를 사용하여 파일에 대해 작업을 수행할 수 있습니다. 이 예에서는 fputs() 함수를 사용하여 파일에 관리자 암호를 입력합니다. 파일을 열 때 오류가 발생하면 false 값이 반환됩니다. 마지막 함수에서는 pclose()를 호출하여 파일을 닫는 것을 기억하세요.
FTP 사용자 그룹을 미리 계획해 봅시다. 먼저 pw groupadd ftpuser를 사용하여 ftpuse 그룹을 생성하고 온라인으로 신청하는 사용자가 이 그룹의 구성원이 되도록 하겠습니다. 보안상의 이유로 FTP 사용자에게 Telnet 권한을 부여해서는 안 되므로 Telnet을 통해 정상적으로 시스템에 로그인할 수 없도록 이들을 위한 쉘을 별도로 생성해야 합니다. 방법은 다음과 같습니다. 먼저 /bin/ftponly 파일을 생성합니다.
#!/ bin/csh
/bin/cat << XX
이 사용자 이름은 FTP 서버에 로그인하는 데만 사용할 수 있습니다.
이 시스템에 텔넷하는 데는 사용할 수 없습니다! XX
sleep 10
이 파일에서 XX ​​사이의 정보는 Telnet을 사용하여 로그인한 사용자에게 표시됩니다. 정보는 10초 동안 표시된 후 자동으로 종료됩니다. 마지막으로 chmod x /bin/ftponly를 사용하여 이 파일에 실행 가능 속성을 부여하는 것을 잊지 마십시오.
그런 다음 /bin/shell 파일에 "/bin/ftponly"를 추가합니다. 후속 명령에서는 pw의 -s 매개변수를 사용하여 이 셸을 FTP 사용자에게 할당할 수 있습니다.
마지막으로, su 명령은 휠 관리 그룹의 사용자 구성원만 사용할 수 있다는 점입니다. PHP가 su 명령을 호출할 때는 휠 그룹의 구성원으로도 실행해야 합니다. 그렇지 않으면 시스템이 실행됩니다. 실행을 거부하고 PHP가 시스템을 실행합니다. 명령의 ID는 Apache 웹 서버가 실행되는 ID입니다. 초기 사용자 이름과 사용자 그룹은 모두 none이므로 먼저 휠 그룹에 사용자 www를 만들어야 합니다. Apache를 사용하려면 Apache 구성 파일 httpd.conf에서 사용자를 www로 변경하십시오. 그룹이 휠인 경우 Apache를 다시 시작하면 새 사용자로 실행할 수 있습니다.
PHP 소스 파일 checkin.php는 아래와 같이 생성할 수 있습니다.

코드를 복사하세요 코드는 다음과 같습니다.


{ $rootpasswd="adminpassword" / /관리자 비밀번호 정의
$creatuser="su --login root -c 'echo ".$userpasswd." | pw useradd ".$username." -s /bin/ftponly -g ftpuser –s /bin/ ftponly -h 0' "; //su 및 pw 명령을 사용하여 사용자를 생성하는 데 사용되는 문자열입니다
$fp=popen($creatuser,"w"); //popen() 함수를 호출하여 실행합니다. string의 명령은 $fp에 대한 텍스트 핸들을 반환합니다.
fputs($fp,$rootpasswd); //$fp 파일에 관리자 비밀번호를 씁니다. 이는 시스템에 비밀번호를 입력하는 것과 같습니다.
pclose( $fp);/ /파일 닫기
$creatdir="su --login root -c 'mkdir /home/".$username."'";//사용자 디렉터리를 생성하는 명령 문자열
$ fp=popen($creatdir ,"w");//사용자 디렉터리를 생성하는 명령을 실행합니다.
fputs($fp,$rootpasswd) //관리자 비밀번호를 입력하세요.
pclose($fp)
$creatdir="su -- login root -c 'mkdir /home/".$username."/public_html'"
$fp=popen($creatdir,"w") //명령 실행 사용자 웹사이트 루트 디렉터리를 생성하려면
fputs( $fp,$rootpasswd); //관리자 비밀번호를 입력하세요.
pclose($fp)
$creatdir="su --login root -c 'chown ".$username." /home/".$ username."'"; //사용자 디렉터리의 소유자를 사용자 자신으로 변경하고, 처음에는 Apache를 실행하는 사용자 www로 변경합니다.
$fp=popen($creatdir,"w"); //명령 실행
fputs($fp,$rootpasswd); //관리자 비밀번호 입력
pclose($fp); > $creatdir="su --login root -c 'chown ".$username." /home/".$username."/public_html'" //웹사이트 루트 디렉터리 소유권 변경
$fp= popen($ creatdir,"w");
fputs($fp,$rootpasswd);
pclose($fp);
echo "축하합니다".$username." 성공했습니다. FTP에 로그인하세요. Telnet 권한이 없습니다.";}
else{?>


적용하세요. FTP 계정의 경우< /title> <br><meta http-equiv="Content-Type" c/html; <BR></head> <br><body bgcolor="# FFFFFF"> <br><div align="center"> <br><p>FTP 계정 신청</p> <br><form method=POST action="<? ; ?> "> <br><테이블 너비="36%" border="0"> <br><tr> <br><td width="40%"> <br> <div align ="right">계정 이름:</div> <br></td> <br><td width="60%"><br><input type="text " name=" 사용자 이름"> <br></td> <br></tr> <br><tr> <br><td width="40%"> <br>< div align=" right">비밀번호:</div> <br></td> <br><td width="60%"><br><input type="password" name= "userpasswd"> <br></tr> <br><tr><td colspan="2"<input type="submit" ="제출" 값="적용"></td> <br></table> <br></div> ?}?> ; <br></body> <br></html> <br> 이상에서는 온라인 관리를 포함하여 Ftp 사용자의 온라인 관리를 구현하기 위해 PHP를 이용한 온라인 관리용 코드를 소개하였습니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되었으면 좋겠습니다. <br> <br> <br></p></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>성명:</span><div>본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.</div></div></div><div class="nphpSytBox"><span>이전 기사:<a class="dBlack" title="Presentationfontcache.exe PHP 웹 페이지가 반환될 때 더 이상 만료된 것으로 나타나지 않습니다." href="https://m.php.cn/ko/faq/321454.html">Presentationfontcache.exe PHP 웹 페이지가 반환될 때 더 이상 만료된 것으로 나타나지 않습니다.</a></span><span>다음 기사:<a class="dBlack" title="Presentationfontcache.exe PHP 웹 페이지가 반환될 때 더 이상 만료된 것으로 나타나지 않습니다." href="https://m.php.cn/ko/faq/321456.html">Presentationfontcache.exe PHP 웹 페이지가 반환될 때 더 이상 만료된 것으로 나타나지 않습니다.</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>관련 기사</h2><em><a href="https://m.php.cn/ko/article.html" class="bBlack"><i>더보기</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/1.html" title="cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법" class="aBlack">cURL을 사용하여 PHP에서 Get 및 Post 요청을 구현하는 방법</a><div class="clear"></div></li><li><b></b><a href="https://m.php.cn/ko/faq/2.html" title="정규식의 모든 표현식 기호(요약)" class="aBlack">정규식의 모든 표현식 기호(요약)</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!</p></div><div class="footermid"><a href="https://m.php.cn/ko/about/us.html">회사 소개</a><a href="https://m.php.cn/ko/about/disclaimer.html">부인 성명</a><a href="https://m.php.cn/ko/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body><!-- Matomo --><script> var _paq = window._paq = window._paq || []; /* tracker methods like "setCustomDimension" should be called before "trackPageView" */ _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://tongji.php.cn/"; _paq.push(['setTrackerUrl', u+'matomo.php']); _paq.push(['setSiteId', '9']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s); })(); </script><!-- End Matomo Code --></html>