ÐeÒªµÄ¹¤¾ßºÍ°²×°:
¡¡¡¡Äa±ØÐe°²×°ÏÂÃaeµÄ¹¤¾ßºÍÈi¼þ:
¡¡¡¡¨CÐ޸ĿÚÁiµÄShell½Å±¾;
¡¡¡¡¨C Sudo*ÃÎÊȨ;
¡¡¡¡¨C Apache or Lighttpd web*þÎñÆ÷;
¡¡¡¡¨C PHP*þÎñ¶Ë³ÌÐo¡£
¡¡¡¡²½Öe1:°²×°¿ÉÒÔÐÞ¸ÄÓû§¿ÚÁiµÄshell½Å±¾
¡¡¡¡¸Ã½Å±¾¿ÉÒÔʵ¼ÊÓÃÓÚÐÞ¸ÄLinuxÓû§µÄ¿ÚÁi(ÒÑÔÚLinuxºÍFreeBSD²aÊÔ)¡£
¡¡¡¡Àý×Ó: shell½Å±¾´uÂe
¡¡¡¡#!/bin/sh # \ exec expect -f ¡°$0¡a ${1+¡±$@¡±} set password [lindex $argv 1] spawn passwd [lindex $argv 0] sleep 1 expect ¡°assword:¡± send ¡°$password\r¡± expect ¡°assword:¡± send ¡°$password\r¡± expect eofÔËÐÐshell½Å±¾(ÏÂÔØÁ´½Ó)£º
¡¡¡¡$ chpasswd username passwordÏÂÔظýű¾,È»ºo¿½±´µ½ÄaµÄweb¸uĿ¼»oÕßweb*þÎñÆ÷µÄÆaËuλÖÃ(Óû§¿É¶Á):
¡¡¡¡$ cp chpasswd /var/www/»oÕß,Èç¹uÄaʹÓÃLighttpd web*þÎñÆ÷:
¡¡¡¡$ cp chpasswd /home/lighttpd²½Öe2:ͨ¹ýsudoÒÔrootÉi*ÝÖ´ÐÐÃuÁi
¡¡¡¡Apache»oLighttpd webþÎñÆ÷½øÈeºǫÔËÐкo»aÂiÉÏʹÓÃÇrootȨÏÞ¡£ÕaÑu¿ÉÒԺܺõÄ*ÀÖ¹¿ÚÁiÐÞ¸Ä,¾ÍÏñpasswdÃuÁiÐeÒªrootȨÏÞ²ÅÄÜÐÞ¸ÄÆaËuÓû§ÕʺŵĿÚÁi¡£
¡¡¡¡Í¨³£, Apache 2ʹÓÃwww-dataÓû§, LighttpdʹÓÃlighttpdÓû§(½ÔΪÆÕͨÓû§,*ÇrootÓû§)¡£Ê¹ÓÃrootÓû§µÇ½,È»ºoÖ´ÐÐÏÂÃaeµÄÃuÁi:
¡¡¡¡# visudoÏÖÔÚÄaµÄwebþÎñÆ÷ÔÊÐiÖ´ÐпÚÁiÐ޸Ľű¾(chpasswd)¡£Èç¹uÄaʹÓÃApache webþÎñÆ÷,Ö´ÐÐÏÂÃaeµÄÃuÁi:
¡¡¡¡www-data ALL=NOPASSWD: /var/www/chpasswd»oÕß,Èç¹uÄaʹÓÃLighttpd web*þÎñÆ÷,Ö´ÐÐÏÂÃaeµÄÃuÁi:
¡¡¡¡httpd ALL=NOPASSWD: /home/lighttpd/chpasswd±£´aeºÍÍ˳oÎļþ¡£
¡¡¡¡²½Öe3.´´½¨Ò»¸o»uÓÚPHPµÄ½Ó¿Ú
¡¡¡¡ÏÖÔÚÄaÐeҪдһ¸ophp½Å±¾¡£ÕaÀiÓÐÒ»¸ophp½Å±¾ÊµÀý¡£Äa¿ÉÒÔ¸u¾ÝÄaµÄÐeÒªÀ´Ð޸ġ£ÖÁÉÙÄaÐeÒªÕýÈ*ÉeÖúõÄshell½Å±¾Î»Öᣴo¿ªphp½Å±¾ºÍÕÒµ½shellscriptÒ»ÐÐ:
¡¡¡¡$shellscript = ¡°sudo /home/lighttpd/chpasswd¡±;ÐÞ¸ÄshellscriptÖ¸Ïoµ½ÕýÈ*µÄλÖá£PHPµÄÔ´´uÂe´ÓÕaÀiÏÂÔØ:
¡¡¡¡²½Öe4:ÔËÐнű¾
¡¡¡¡ÔÚÄaµÄweba¯ÀÀÆ÷µØÖÀ¸ÊaÈeÍøµØÖ£¬Äa½«»a¿´µ½Óû§ÃuºÍ¿ÚÁiÌaʾ:
¡¡¡¡Èç¹u¿ÚÁiÐ޸ijɹ¦,Äa»aµÃµ½µÄÈ*ÈÏÌaʾ:
¡¡¡¡ÓÉÓÚÒ»Ð(C)ÔÒo,Èç¹u¿ÚÁiÐÞ¸Äʧ°Ü,Äa¿ÉÒԲο¼ÏÂÃaeÌaʾ»ñµÃ¸u¶aÏeϸµÄ´iÎoÐÅÏ¢:
¡¡¡¡²½Öe5:°²È«
¡¡¡¡¡oÓÀÔ¶²»ÒªÍ¨¹ýhttpÐÒeÖ±½ÓÔËÐÐÉÏÃaeµÄ½Å±¾.¶øÊÇʹÓÃhttpsÐÒe¡£
¡¡¡¡¡o°Ñ½Å±¾*ÅÈeµ½ÊÜ¿ÚÁi±£»¤µÄĿ¼¡£
¡¡¡¡¡oÓÀÔ¶²»ÒªÐÅÈÎÓû§µÄÊaÈe¡£ÉÏÃaeµÄphp½Å±¾Ö»ÊÇÒ»¸oÀý×Ó¡£ÔÚÏÖʵµÄÉu²u»¾³ÖÐ,ÄaÐeÒª¿¼ÂDzÉÓøuÇ¿´oµÄÓû§ÊaÈeÈÈÏ¡£ÌÖÂÛPHP±a³ÌµÄ°²È«³¬³oÁ˱¾ÎĵÄ*¶Î§¡£Äa¿ÉÒԲο¼Ò»±¾ºÃµÄPHPÊe¼®»oÕßʹÓÃÄaϲ»¶µÄËÑË÷ÒýÇaeËÑË÷Ïa¹ØµÄÍøÕ¾¡£