domingo, 13 de junio de 2010

Crear o Eliminar un usuario en MySQL

CREAR UN USUARIO
---------------------


Existen 3 métodos pero aquí describiré los 2 mejores o principales, según mi criterio:

1.Con la sentencia GRANT

Utilizando la sentencia GRANT podemos crear un usuario a la par que otorgarle uno o varios privilegios sobre los objetos de una base de datos, o la base de datos completa.
Al encontrarse una sentencia de tipo GRANT, el motor de MySQL revisa si el usuario existe previamente para el contexto que estamos asignándole permisos, y si dicho usuario no está presente en el sistema, lo crea.
No entraré en detalles sobre todas las opciones que nos permite ejecutar la sentencia GRANT, sino solo en las que se refieren a la creación del usuario.
Pongamos un ejemplo, queremos crear el usuario adolfo para la base de datos test:

- Nos conectamos con un usuario que tenga privilegios, root, como propietario de la base de datos, los tiene.

$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17
Server version: 5.0.67 Source distribution


Nos conectamos utilizando -u para indicarle el usuario y si quisieramos indicarle un password, deberiamos poner -p (sin añadirle la contraseña), en este caso la cuenta root, al ser una máquina de desarrollo, está desprotegida.

- Lanzamos la sentencia GRANT, indicando los permisos que otorgamos, la base de datos y los objetos de la misma sobre los que estamos asignando privilegios, el nombre del usuario y el password:

mysql> GRANT SELECT, INSERT ON test.* TO 'hugo'@'localhost' IDENTIFIED BY 'escribir_pass';

En este ejemplo permitimos al usuario hugo que seleccione (SELECT) e inserte (INSERT) en todos los objetos (*) de la base de datos test, además indicamos que el contexto sea la máquina local de la base de datos (localhost), lo que impedirá que el usuario se conecte desde otras máquinas, y finalmente asignamos un password mediante IDENTIFIED BY.

Si quisieramos que el usuario no tuviera un password, deberemos omitir la cláusula IDENTIFIED BY.
En el caso de que el modo SQL del servidor estuviera en NO_AUTO_CREATE_USER, la creación de usuarios no estaría permitida a no ser que tuvieran asignado un password no vacío.

- Una vez hecho esto, podremos conectarnos con nuestro usuario y realizar las acciones para las que hemos asignado permisos:

$ mysql -u hugo -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 19
Server version: 5.0.67 Source distribution
mysql> use test;
Database changed
mysql> select * from equipos;
+-------------------+------------+
| nombre | pais |
+-------------------+------------+
| Boca Juniors | Argentina |
| Real Madrid | España |
| Manchester United | Inglaterra |
+-------------------+------------+
3 rows in set (0,03 sec)


Más detalles sobre la sentencia GRANT y los privilegios disponibles en la documentación de mysql.

2.La sentencia CREATE USER

A partir de la versión MySQL 5.0.2 existe la posibilidad de crear usuarios sin necesidad de asignarles privilegios, utilizando la sentencia CREATE USER.

Por ejemplo, para crear el usuario fernando:

$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 20
Server version: 5.0.67 Source distribution
mysql> CREATE USER 'carlos'@'localhost' IDENTIFIED BY 'pass_carlos';
Query OK, 0 rows affected (0,00 sec)


Al igual que con la sentencia GRANT, el contexto 'localhost' define que el usuario solamente se puede conectar desde el servidor de MySQL, y el IDENTIFIED BY define el password del usuario, se puede omitir, para un usuario sin password, siempre que el modo SQL no sea NO_AUTO_CREATE_USER.

Conexión con el usuario, utilizando la opción -p:

$ mysql -u carlos -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 22
Server version: 5.0.67 Source distribution


Los privilegios necesarios para ejecutar la sentencia CREATE USER son CREATE USER o bien INSERT en la base de datos mysql.
El usuario recién creado no tiene privilegio alguno, por lo que deberemos asignarle permisos utilizando sentencias GRANT (esta vez sin la cláusula IDENTIFIED BY).

Más detalles sobre esta sentencia en la documentación de mysql.

ELIMINAR UN USUARIO
------------------------


Ejecutamos 2 lineas estando como root. Con la primera instrucción le quitamos todos los privilegios al usuario sobre la base de datos, y con la segunda instrucción lo eliminamos.
Por ejemplo, teniendo creado el usuario hugo, y ligado a la base de datos test:

mysql>revoke all on test.* from hugo@localhost;
mysql>drop user hugo@localhost;


Más detalles sobre esta sentencia en la documentación de mysql.


OTORGAR PRIVILEGIOS

--------------------
Si queremos otorgarle TODOS los permisos sobre una base de datos a un usuario existente, hacemos lo siguiente:

mysql> GRANT ALL ON nombre_base_datos.* TO 'usuario_base_datos'@'%';

En este caso el ámbito del usuario es %, por lo cual es accesible desde equipos remotos. Si deseamos que el acceso a la base de datos con el usuario sea en forma local reemplazamos % por localhost.

viernes, 11 de junio de 2010

Desactivar Magic Quotes en PHP (php.ini)

“Comillas Mágicas” es un mecanismo de seguridad de PHP que escapa de manera automática comillas dobles y sencillas y barras invertidas con barras invertidas para evitar técnicas de inyección SQL.

Este sistema nació para evitar que los novatos escriban código inseguro pero ha terminado convirtiéndose en una característica tan molesta que actualmentesuele venir deshabilitada por defecto. Incluso los desarrolladores de PHP desaconsejan su uso.

El problema principal se presenta cuando ejecutamos nuestros scripts en diferentes servidores que pueden tener activado o no este mecanismo, y sobre todo si no tenemos acceso a la configuración del sistema como es el caso de los servidores de hosting compartidos.

PHP tiene dos funciones que escapan y desescapan cadenas que son addslashes() y stripslahes(). Si hemos escrito nuestro script en una máquina con Magic Quotes deshabilitadas, lo lógico es que escapemos nosotros mismos las variables con addslashes. Ese mismo código en un servidor con Magic Quotes activado nos daría este resultado:

$_POST['poblacion'] = "L\'alcudia";
echo addslashes($_POST['poblacion']); //escribiría "L\\\'alcudia".
Por otra parte, si no hubiésemos utilizado addslashes() confiando en Magic Quotes, en un servidor sin este mecanismo nos permitiría hacer un INSERT en una base de datos sin escapar las comillas, lo que normalmente causaría error, o algo mucho peor como una inyección SQL.

En primer lugar debemos deshabilitar esta característica en la configuración de PHP editando php.ini.

magic_quotes_gpc = Off En segundo lugar escribiremos una función para recoger las variables de formulario y las escape en caso necesario inluyéndola en nuestro script con un require(). Para detectar el estado de la configuración de Magic Quotes utilizaremos la función get_magic_quotes_gpc(). Un ejemplo podría ser:

function getFormVars($request_vars)
{
$form_vars = array();
while (list($key, $value) = each($request_vars)){
if (!get_magic_quotes_gpc()){
$var_text = addslashes($value);
}else{
$var_text = $value;
}
$form_vars[$key] = $var_text;
}
return $form_vars;
}
A esta función le pasaremos como argumento $_POST, $_GET, $COOKIE o $_REQUEST y devolverá una matriz asociativa con las variables escapadas convenientemente.

Fuente: http://www.s3v-i.net

lunes, 7 de junio de 2010

Instalación y Configuración de Apache, PHP y MySQL en Fedora Linux.

Instalar apache, php, mysql y phpmyadmin.
---------------------------------------------------

Como primer medida, aunque es opcional, hay que actualizar todo nuestro sistema. Entonces, debes ejecutar el siguiente comando por consola (shell), siempre en modo root:

#yum update


Una vez que se terminó de actualizar nuestro linux, debes proceder a la instalación del servidor apache, php y el servidor mysql en sus últimas versiones, con el comando:

#yum install httpd php php-gd mysql-server php-mysql phpMyAdmin


Iniciando los servicios:
-------------------------------

Una vez instalados podes ponerlos a trabajar el Apache y MySQL, ejecutando los comandos:

# service httpd restart

# service mysqld start

Si deseas que cada vez que la computadora o servidor inicia o bootea, querés que los servicios del Apache y del MySQL se inicien automáticamente, existen 2 formas:

1: Ir a los servicios, mediante el menú principal del X Server y tildar o marcar los servicios httpd y mysql para activarlos.

2: Escribir en la consola (es el camino que yo uso):

chkconfig --levels 235 httpd on
chkconfig --levels 235 mysqld on

o bien:

chkconfig –level on

Y luego, por ejemplo, para añadirlo al nivel de arranque número 5:

chkconfig –level 5 mysqld on

chkconfig –level 5 httpd on

Y para añadirlo al los niveles 3 y 5

chkconfig –level 35 mysqld on

chkconfig –level 35 httpd on

Y para quitarlos del nivel 5:

chkconfig –level 5 mysqld off

chkconfig –level 5 httpd off


Configuración de Apache.
-----------------------------

En Fedora no es necesario tocar nada, mas creo oportuno mencionar que los archivos de configuración están en /etc/httpd/conf/httpd.conf.

Para tener en cuenta en el Apache:
.Si queremos que los archivos de nuestro sitio web esten ubicados en una carpeta distinta a la carpeta por defecto, debemos modificar en el httpd.conf las lineas:

DocumentRoot "ruta_absoluta_de_la_carpeta_que_contiene_ël_o_los_sitios"



.Si queremos lograr que nuestro archivo index, o principal, o home, como quieras llamarlo, sea index.html o index.php, modificamos la linea:

DirectoryIndex index.php index.html


.Si queremos modificar la codificación de caracteres por defecto que manejaran nuestros sitios, ya que por defecto es UTF-8, debemos modificar la linea:

AddDefaultCharset ISO-8859-1

No me extenderé más con esto, pero son muchas las directivas que podemos modificar para cambiar el comportamiento de nuestro servidor Apache.

Configurando un password para el usuario root de mysql
-------------------------------------------------------------

Como ya está instalado nuestro servidor MySQL, debemos ingresar a él por primera vez y establecerle una contraseña. Esto es lo más recomendable para hacer ya que sin una contraseña quedamos muy vulnerables con nuestras bases de datos y su acceso contra un ataque o hack.

Entonces, por consola ejecutamos:

~ $ mysql -u root

Nos imprimirá lo siguiente:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.54-log Linux mysql-5.0.54

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

De esta manera ingresamos a MySQL, elegimos la base de datos llamada mysql:

mysql> USE mysql;

Y con la siguiente instrucción podemos establecer nuestra contraseña para el usuario root:

mysql> UPDATE user SET password=password(‘rootpass’) WHERE user=’root’;

Luego escribimos para salir del modo mysql:

mysql> quit


Nota: Se usa password(‘dato’) para aplicar encriptación determinista sobre un dato. Se podría, aunque por motivos de seguridad no es recomendable, setear password como cualquier campo ordinario.

Por favor, debes estar seguro que de ahora en más recordaras la clave que estableciste o mejor escribela en un lugar seguro.
Más adelante publicaré como recuperar la contraseña de root de mysql si la olvidamos o la perdemos, pero por ahora no la extravíes!

Configurando phpMyAdmin
-------------------------------

Está bueno poder acceder al phpMyAdmin mediante nuestro navegador para poder administrar rápidamente nuestras bases de datos. Entonces escribimos en nuestra consola, siempre en modo root:

nano /etc/phpMyAdmin/config.inc.php


Buscar esta linea:

$cfg['Servers'][$i]['user']= ‘’;
$cfg['Servers'][$i]['password']= ‘’

Y cambiar por:
Citar
$cfg['Servers'][$i]['user']= ‘root’;
$cfg['Servers'][$i]['password']= ‘passroot’

Donde passroot debe sustituirse por la clave que corresponda.

Guardar los cambios (Contrl +X, luego “Y” seguido de ENTER) y reiniciar apache con el comando:

# service httpd restart

Probando Apache-PHP.
---------------------------
Y listo, todo configurado y ya podemos hacer una prueba para saber que todo funciona correctamente:
Nos ubicamos en la carpeta que será la raiz de nuestro sitio web. Es la carpeta que quedó especificada en la instrucción DocumentRoot del httpd.conf, por ejemplo /var/www/html/ que es la ruta por defecto.
Y en la consola tecleamos lo siguiente para crear el archivo script.php:

cat >> /var/www/html/script.php

Una vez dentro del archivo que estamos creando, escribir:
phpinfo();
?>

###Presionar Control+d para salir####

Probando php-mysql
-----------------------

Para testear el funcionamiento del servidor mysql, hacemos algo parecido y en la consola tecleamos:

cat >> /var/www/html/script2.php

Dentro del archivo, escribir:

function connect ()
{
//sustituir passroot por el password de root en mysql.
$con=mysql_connect('localhost','root','passroot');

if (!$con)
{
$msj='No conecta a mysql ';
}

else
{
$msj='Conecta ';

$db=mysql_selectdb('mysql');

if (!$db)
{
$msj=$msj.'pero no logra seleccionar la base de datos';
}
else
{
$msj=$msj.'y consigue seleccionar la base de datos' ;
}
}

return $msj;
}

$var=connect();
print $var;
?>

Probando phpmyadmin
-------------------------
Y para probar el acceso al PHPMyAdmin teclear en la barra de direcciones de nuestro navegador web:

http://localhost/phpmyadmin

Testing final de PHP y MySQL
----------------------------

Llego el momento tan esperado!!! A probar todo!!!!
En nuestro navegador:

Para probar que funcione el php, en la barra de direccionemos tecleamos:

http://localhost/script.php

Entonces se debe visualizar en detalle toda la configuración de nuestro servicio PHP.

Para probar que funcione mysql, en la barra de direccionemos tecleamos:

http://localhost/script2.php

Entonces se debe visualizar si se estableció la conexión a nuestra base de datos, o no.

Espero que este tutorial les haya servido. Por favor dejenmé su comentario para saber si se entendió, si tuvieron dificultades para configurar, etc.

Instalar Firefox 3.6 en Fedora Linux 12 "Constantine"

Para instalar esta nueva versión de Firefox agregaremos el repositorio de Remi donde ya actualizó sus paquetes a la 3.6.

#rpm -Uvh http://rpms.famillecollet.com/remi-release-12.rpm

Si están aún en Fedora 11 ejecutan simplemente cambian el 12 por 11:

#rpm -Uvh http://rpms.famillecollet.com/remi-release-11.rpm

Una vez instalado el repositorio procedemos a instalar o actualizar Firefox con la ayuda de yum agregando la opción “–enablerepo=remi” para habilitar el repositorio
ya que por defecto no lo está.

Para instalar tenes que ejecutar el siguiente comando por la consola en modo root (su -):

#yum --enablerepo=remi install firefox

Para actualizar, ejecutá lo siguiente por consola (shell):

#yum --enablerepo=remi update firefox

Esperen a que se descargue el nuevo paquete y ya tendrán su Firefox actualizado a 3.6, y listo.

viernes, 4 de junio de 2010

Resetear la contraseña de root en Fedora.

En las siguientes líneas trataré de contarles cómo recuperar la contraseña de "root" en la distribución de linux Fedora.


1. tenemos que arrancar en el “grub”. De no tener otros sistemas operativos, el sistema
operativo no muestra el “grub” y el usuario debe apretar F8.
Una vez arrancado el “grub” aparecerá una pantalla así:



Donde tenemos que apretar la tecla ‘e’ que es para editar el comando antes de bootear.

2. como ya apretamos la tecla ‘e’, tiene que aparecer una pantalla así:



3. tenemos que volver a apretar la tecla ‘e’ para editar el comando.



4. A este comando le agregamos la palabra single al final, quedando:




5. luego le damos enter y volvemos a esta pantalla:



desde aqui tenemos que apretar la tecla b para botear de este comando.

luego cuando termina de cargar tiene que aparecer una pantalla así:



6. ahora tenemos que escribir “passwd” (sin las comillas) y le damos enter.

7. bueno ahora tenemos que escribir la nueva contraseña que queremos para el usuario "root", luego te va a pedir confimar dicha clave.



Quedara una pantalla asi:



Ahora que la contraseña esta actualizada nos queda tan solo un paso más.

8. para finalizar tenemos que escribir el comando "shutdown -r now" (sin las comillas), que es para reiniciar la maquina.

Fuente: http://www.taringa.net