home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / mysql / scripts / mysql_secure_installation < prev    next >
Text File  |  2008-04-17  |  7KB  |  323 lines

  1. #!/bin/sh
  2.  
  3. # Copyright (C) 2002 MySQL AB and Jeremy Cole
  4. # This program is free software; you can redistribute it and/or modify
  5. # it under the terms of the GNU General Public License as published by
  6. # the Free Software Foundation; version 2 of the License.
  7. # This program is distributed in the hope that it will be useful,
  8. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10. # GNU General Public License for more details.
  11. # You should have received a copy of the GNU General Public License
  12. # along with this program; if not, write to the Free Software
  13. # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  14.  
  15. config=".my.cnf.$$"
  16. command=".mysql.$$"
  17.  
  18. trap "interrupt" 2
  19.  
  20. rootpass=""
  21. echo_n=
  22. echo_c=
  23.  
  24. set_echo_compat() {
  25.     case `echo "testing\c"`,`echo -n testing` in
  26.     *c*,-n*) echo_n=   echo_c=     ;;
  27.     *c*,*)   echo_n=-n echo_c=     ;;
  28.     *)       echo_n=   echo_c='\c' ;;
  29.     esac
  30. }
  31.  
  32. prepare() {
  33.     touch $config $command
  34.     chmod 600 $config $command
  35. }
  36.  
  37. do_query() {
  38.     echo $1 >$command
  39.     mysql --defaults-file=$config <$command
  40.     return $?
  41. }
  42.  
  43. make_config() {
  44.     echo "# mysql_secure_installation config file" >$config
  45.     echo "[mysql]" >>$config
  46.     echo "user=root" >>$config
  47.     echo "password=$rootpass" >>$config
  48. }
  49.  
  50. get_root_password() {
  51.     status=1
  52.     while [ $status -eq 1 ]; do
  53.     stty -echo
  54.     echo $echo_n "Enter current password for root (enter for none): $echo_c"
  55.     read password
  56.     echo
  57.     stty echo
  58.     if [ "x$password" = "x" ]; then
  59.         hadpass=0
  60.     else
  61.         hadpass=1
  62.     fi
  63.     rootpass=$password
  64.     make_config
  65.     do_query ""
  66.     status=$?
  67.     done
  68.     echo "OK, successfully used password, moving on..."
  69.     echo
  70. }
  71.  
  72. set_root_password() {
  73.     stty -echo
  74.     echo $echo_n "New password: $echo_c"
  75.     read password1
  76.     echo
  77.     echo $echo_n "Re-enter new password: $echo_c"
  78.     read password2
  79.     echo
  80.     stty echo
  81.  
  82.     if [ "$password1" != "$password2" ]; then
  83.     echo "Sorry, passwords do not match."
  84.     echo
  85.     return 1
  86.     fi
  87.  
  88.     if [ "$password1" = "" ]; then
  89.     echo "Sorry, you can't use an empty password here."
  90.     echo
  91.     return 1
  92.     fi
  93.  
  94.     do_query "UPDATE mysql.user SET Password=PASSWORD('$password1') WHERE User='root';"
  95.     if [ $? -eq 0 ]; then
  96.     echo "Password updated successfully!"
  97.     echo "Reloading privilege tables.."
  98.     if ! reload_privilege_tables; then
  99.         exit 1
  100.     fi
  101.     echo
  102.     rootpass=$password1
  103.     make_config
  104.     else
  105.     echo "Password update failed!"
  106.     exit 1
  107.     fi
  108.  
  109.     return 0
  110. }
  111.  
  112. remove_anonymous_users() {
  113.     do_query "DELETE FROM mysql.user WHERE User='';"
  114.     if [ $? -eq 0 ]; then
  115.     echo " ... Success!"
  116.     else
  117.     echo " ... Failed!"
  118.     exit 1
  119.     fi
  120.  
  121.     return 0
  122. }
  123.  
  124. remove_remote_root() {
  125.     do_query "DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';"
  126.     if [ $? -eq 0 ]; then
  127.     echo " ... Success!"
  128.     else
  129.     echo " ... Failed!"
  130.     fi
  131. }
  132.  
  133. remove_test_database() {
  134.     echo " - Dropping test database..."
  135.     do_query "DROP DATABASE test;"
  136.     if [ $? -eq 0 ]; then
  137.     echo " ... Success!"
  138.     else
  139.     echo " ... Failed!  Not critical, keep moving..."
  140.     fi
  141.  
  142.     echo " - Removing privileges on test database..."
  143.     do_query "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'"
  144.     if [ $? -eq 0 ]; then
  145.     echo " ... Success!"
  146.     else
  147.     echo " ... Failed!  Not critical, keep moving..."
  148.     fi
  149.  
  150.     return 0
  151. }
  152.  
  153. reload_privilege_tables() {
  154.     do_query "FLUSH PRIVILEGES;"
  155.     if [ $? -eq 0 ]; then
  156.     echo " ... Success!"
  157.     return 0
  158.     else
  159.     echo " ... Failed!"
  160.     return 1
  161.     fi
  162. }
  163.  
  164. interrupt() {
  165.     echo
  166.     echo "Aborting!"
  167.     echo
  168.     cleanup
  169.     stty echo
  170.     exit 1
  171. }
  172.  
  173. cleanup() {
  174.     echo "Cleaning up..."
  175.     rm -f $config $command
  176. }
  177.  
  178.  
  179. # The actual script starts here
  180.  
  181. prepare
  182. set_echo_compat
  183.  
  184. echo
  185. echo
  186. echo
  187. echo
  188. echo "NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL"
  189. echo "      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!"
  190. echo
  191. echo
  192.  
  193. echo "In order to log into MySQL to secure it, we'll need the current"
  194. echo "password for the root user.  If you've just installed MySQL, and"
  195. echo "you haven't set the root password yet, the password will be blank,"
  196. echo "so you should just press enter here."
  197. echo
  198.  
  199. get_root_password
  200.  
  201.  
  202. #
  203. # Set the root password
  204. #
  205.  
  206. echo "Setting the root password ensures that nobody can log into the MySQL"
  207. echo "root user without the proper authorisation."
  208. echo
  209.  
  210. if [ $hadpass -eq 0 ]; then
  211.     echo $echo_n "Set root password? [Y/n] $echo_c"
  212. else
  213.     echo "You already have a root password set, so you can safely answer 'n'."
  214.     echo
  215.     echo $echo_n "Change the root password? [Y/n] $echo_c"
  216. fi
  217.  
  218. read reply
  219. if [ "$reply" = "n" ]; then
  220.     echo " ... skipping."
  221. else
  222.     status=1
  223.     while [ $status -eq 1 ]; do
  224.     set_root_password
  225.     status=$?
  226.     done
  227. fi
  228. echo
  229.  
  230.  
  231. #
  232. # Remove anonymous users
  233. #
  234.  
  235. echo "By default, a MySQL installation has an anonymous user, allowing anyone"
  236. echo "to log into MySQL without having to have a user account created for"
  237. echo "them.  This is intended only for testing, and to make the installation"
  238. echo "go a bit smoother.  You should remove them before moving into a"
  239. echo "production environment."
  240. echo
  241.  
  242. echo $echo_n "Remove anonymous users? [Y/n] $echo_c"
  243.  
  244. read reply
  245. if [ "$reply" = "n" ]; then
  246.     echo " ... skipping."
  247. else
  248.     remove_anonymous_users
  249. fi
  250. echo
  251.  
  252.  
  253. #
  254. # Disallow remote root login
  255. #
  256.  
  257. echo "Normally, root should only be allowed to connect from 'localhost'.  This"
  258. echo "ensures that someone cannot guess at the root password from the network."
  259. echo
  260.  
  261. echo $echo_n "Disallow root login remotely? [Y/n] $echo_c"
  262. read reply
  263. if [ "$reply" = "n" ]; then
  264.     echo " ... skipping."
  265. else
  266.     remove_remote_root
  267. fi
  268. echo
  269.  
  270.  
  271. #
  272. # Remove test database
  273. #
  274.  
  275. echo "By default, MySQL comes with a database named 'test' that anyone can"
  276. echo "access.  This is also intended only for testing, and should be removed"
  277. echo "before moving into a production environment."
  278. echo
  279.  
  280. echo $echo_n "Remove test database and access to it? [Y/n] $echo_c"
  281. read reply
  282. if [ "$reply" = "n" ]; then
  283.     echo " ... skipping."
  284. else
  285.     remove_test_database
  286. fi
  287. echo
  288.  
  289.  
  290. #
  291. # Reload privilege tables
  292. #
  293.  
  294. echo "Reloading the privilege tables will ensure that all changes made so far"
  295. echo "will take effect immediately."
  296. echo
  297.  
  298. echo $echo_n "Reload privilege tables now? [Y/n] $echo_c"
  299. read reply
  300. if [ "$reply" = "n" ]; then
  301.     echo " ... skipping."
  302. else
  303.     reload_privilege_tables
  304. fi
  305. echo
  306.  
  307. cleanup
  308.  
  309. echo
  310. echo
  311. echo
  312. echo "All done!  If you've completed all of the above steps, your MySQL"
  313. echo "installation should now be secure."
  314. echo
  315. echo "Thanks for using MySQL!"
  316. echo
  317. echo
  318.  
  319.  
  320.