15 de noviembre de 2013

Como clonar y compactar un disco virtual .vdi de VirtualBox

Desde que descubrí la forma de clonar discos ejecutables en VirtualBox, cuando doy de baja algún disco duro, en vez de hacer una backup tradicional hago un clon .vdi ejecutable en VirtualBox.
Una vez hecho el clon es muy recomendable quitar todo los ficheros que no usemos o no queramos conservar y compactarlo para ahorrarnos una gran cantidad de valiosos gigas conservando plenamente la funcionalidad de nuestro clon.

Ya describí una forma de compactar discos duros .vdi pero esta me parece algo mejor ya que trabaja directamente sobre el fichero clonado .vdi.

Protocolo:

1) Hacemos una imagen del disco a copiar:

# dd if=/dev/discoacopiar of=imagendeldisco.img

N.B.: El disco duro a clonar no debe estar montado, de modo que hay que arrancar el ordenador con un live usb: ubuntu, xubuntu o clonezilla ... También hay que tener en cuenta donde almacenar la imagendeldisco.img, se puede conectar y montar un HD externo usb y entonces ejecutar el comando dd anterior con if=(dev del disco a clonar) of=(/ruta del HD-USB/imagendeldisco.img).

2) Convertimos el archivo imagen a formato vdi:

# VBoxManage convertfromraw -format VDI imagendeldisco.img imagendeldisco.vdi

N.B.: Una vez terminado el paso anterior podemos reiniciar el sistema y arrancar desde el S.O. de la maquina. Debe estar instalado VirtualBox. Hay que contar con suficiente espacio de disco ya que no se borra imagendeldisco.img; y suelen ser ficheros de muchos gigas.

3) Ahora configuramos una máquina virtual linux con VirtualBox y arrancamos imagendeldisco.vdi trabajando ahora dentro de la máquina virtual.

4) Llenamos el disco duro virtual con ceros:

# dd if=/dev/zero of=fillfile bs=1M

Esto llena todo el espacio disponible del disco duro con un fichero repleto de ceros.


Tener mucho cuidado de no poner ningún otro disco como destino en of= ya que lo llenareis de ceros!!!! aunque estáis dentro de la maquina virtual y no podéis acceder al sistema real de discos duros de la del ordenador.

5) Borrar el archivo fillfile:

# rm fillfile

Esto liberará todo espacio del disco duro que llenamos con los ceros en el paso anterior.

6) Apagamos la máquina virtual:

# halt

7) Una vez fuera de la maquina virtual, desde el sistema anfitrión, compactamos el fichero del disco duro de la maquina virtual imagendeldisco.vdi

# VBoxManage modifyhd imagendeldisco.vdi --compact


8) Una vez terminado el proceso ya tenéis vuestro disco duro virtual imagendeldisco.vdi compactado y totalmente funcional en VirtualBox.

Ref:
http://blog.markloiseau.com/2010/10/how-to-compact-a-virtualbox-ubuntu-guests-vdi-file/

-(oo)-
----------------------------------------------------------------
La paradoja temporal de las máquinas virtuales.
Con este procedimiento ya tengo una pequeña colección de maquinas virtuales fruto de instalaciones y actualizaciones pasadas de linux en mi microservidor micra.
Y es posible ejecutarlas todas a la vez!!! en forma de maquinas virtuales, provocando una paradoja temporal, ya que tengo toda la evolución en el tiempo de mi servidor micra funcionando en la misma red y al mismo tiempo!!!.
Esto me ha sido especialmente útil para copiar datos de antiguas instalaciones a las nuevas y regresarlas al futuro.
--------------------------------------------------------------
Update (25/12/2018):
Se puede clonar el disco y crear el fichero .vdi en un solo paso mediante el siguiente comando:

# dd if=/dev/sda | VBoxManage convertfromraw stdin file.vdi num.de.bites  

[/dev/sda]: es el disco a clonar
[file.vdi]: ruta y nombre del fichero destino .vdi
[num. de bites]: bites del disco .vdi; es igual que el tamaño del disco a clonar, para obtenerlo se puede hacer con: # fdisk -l /dev/sda

De este modo es mas rápido crear el fichero .vdi y no es necesario espacio para los dos ficheros .img y .vdi.
--------------------------------------------------------------

1 de noviembre de 2013

Proyecto acuArduino: Sensor de Temperatura DS18B20 y ARDUINO UNO

Para ir haciendo cosas con arduino voy ha monitorizar un acuario tropical de 80L donde viven plácidamente peces cebra, balck tetras, ciclido ramirez, escalaraes, alguna gamba, un ancistrus y un khuli. Intentaré no electrocutarlos.


Lo primero interesante es monitorizar la temperatura del agua. Para ello usaré el sensor de temperatura DS18B20 en una sonda de acero inoxidable waterproof que es ideal para medir la temperatura del acuario.
El cable rojo corresponde a +5V, negro a GND y amarillo a Datos.
La sonda que compre tenia el cable verde en vez de amarillo.

El montaje con la placa de prototipado que he usado es el siguiente (ver nota al final del post):


Y el esquema electrónico que se ve mas claro (ver nota al final del post):


Ahora solo falta conectar arduino a nuestro ordenador por el serial y enviarle el script de control:
Para controlar el DS18B20 necesitamos un par de librerias:

onewire.h      http://playground.arduino.cc/Learning/OneWire
DallasTemperature.h   http://milesburton.com/Dallas_Temperature_Control_Library

Hay que utilizar las ultimas versiones de estas librerías para evitar errores de compilación.

Un sketch básico para arduino que lee el DS18B20 y envía los resultados por el serial se puede encontrar en: http://milesburton.com/Dallas_Temperature_Control_Library

Y funciona !!




Imagen del sketch para arduino y los datos medidos de temperatura con la sonda DS18B20 y enviados por el puerto serie.

Notas del autor: Para la sonda de temperatura DS18B20 el fabricante recomienda usar una resistencia de 4.7 K, pese a que he usado una de 1k y ha funcionado sin problemas, considero recomendable atender las recomdaciones y utilizar una resistencia de 4.7K; yo actualmente es la que utilizo.

2 de octubre de 2013

ArduiPong

Hace tiempo que tenia ganas de probar ARDUINO y empezara a encender y apagar artilugios desde el
ordenata.

Para comenzar e ir aprendiendo como usar y programar Arduino y usar los componentes básicos como leds, pulsadores, buzzers, etc. me voy a hacer una versión totalmente desmejorada del clásico Pong de Atari.



Y aquí la moderna retroversión con Arduino UNO, 7 leds, una resistencia de 330 ohm, un buzzer, y un montón de cables conectores ...



De momento solo es el código de avance de la pelota. La idea es ir ampliando con mas componentes como pulsadores para dos jugadores, tanteo, etc ... Just for Fun...and Learn.

Aquí tenéis el código de ArduiPong para Arduino que enciende de forma secuencial la cadena de leds y emite un sonido en los extremos:

/*
ArduiPong by www.misnotaslinux.blogspot.com
un clasico en su minima expresion. bypp 2013
 */
 
//-- Variables --------------------------------------
int ret = 50;
int ret2 = 25;

//--- Setup -----------------------------------------
void setup() {                
  // Digital 6-12 pines para LEDs y pin 5 buzzer
  for(int n = 5; n < 13; n++) {
    pinMode(n, OUTPUT);     
  } 
  
}

//--- Loop forever -----------------------------------
void loop() {
  for(int n = 6; n < 12; n++) {
    digitalWrite(n, HIGH);
    delay(ret);
    digitalWrite(n, LOW);
    delay(ret);
  }
  
  // Buzzer1
  analogWrite(5,100); //emite sonido
  delay(ret2); //espera
  digitalWrite(5, LOW); //deja de emitir
       
   for(int n = 12; n > 6; n--) {
    digitalWrite(n, HIGH);
    delay(ret);
    digitalWrite(n, LOW);
    delay(ret);
  }



  // Buzzer2
  analogWrite(5,65); //emite sonido
  delay(ret2); //espera
  digitalWrite(5, LOW); //deja de emitir
       
}


19 de septiembre de 2013

Cambiando los parámetros del índice FullText de MySQL

Por defecto el índice FULLTEXT de MySQL indexa palabras de 4 letras.
Esto se queda algo corto, ya que no indexará palabras como CSS, DNA, PHP ó SQL !!!

Para arreglarlo podemos hacer que el indice FULLTEXT indexe palabras igual o mayores de 3 letras,
del siguiente modo:

1) Editar el archivo: /etc/mysql/my.cnf

2) Añadir las lineas:

[mysqld]
ft_min_word_len=3
[myisamchk]
ft_min_word_len=3


3) Reiniciar el servidor MySQL:
# service mysql restart

4) Borrar el indice FULTEXT
mysql> ALTER TABLE tablename DROP INDEX indexname

4) Crear nuevo indice FULLTEXT
mysql> CREATE FULLTEXT INDEX indexname ON tablename (col_name, ...)


...y CSS y SQL ya están indexadas en los indices FullText.

Ref.:
http://dev.mysql.com/doc/refman/5.1/en/fulltext-fine-tuning.html

17 de septiembre de 2013

BASH: Pasar de Segundos a Horas Minutos y Segundos

Veamos este BashScript de ejemplo para pasar de SEGUNDOS a HORAS:MINUTOS:SEGUNDOS

#!/bin/bash
segundos=1000
hms=`date -d "1970-01-01 $segundos sec" +"%H:%M:%S"`
echo "$segundos segundos son $hms H:M:S"
exit 0

..y problema resuelto en 00:00:01 horas, minutos y segundos.

BASH: Comparar fechas de archivos

Útil para Bash Scripts que operen con fechas de modificación de archivos:

#!/bin/bash

tiempo=$((60*60*6)) # 6 horas, si quieres seis días: 
                    # tiempo=$((60*60*24*6))

fichero=`stat -c %Y mi_fichero` # Fecha y hora en segundos de ultima actualizacion
ahora=`date +%s` # Fecha y hora actual en segundos

diferencia=$((${ahora} - ${fichero})) # Calculamos la diferencia

if [ ${diferencia} -gt ${tiempo} ]; then
  echo "Hace mas de ${tiempo} segundos que se actualizó"
else
  echo "Tan solo hace ${diferencia} segundos que se actualizó"
fi

13 de septiembre de 2013

Python: Argumentos de un script python

Ejemplo un script de python con 4 argumentos:

script-python.py a1 a2 a3 a4

Es el script de python hay que importa la lierir sys:

import sys

Número de argumentos:   len(sys.argv)

Acceso a cada argumento
    sys.argv[0]   es igual al nombre del archivo script
    sys.argv[1]   es igual a a1
    sys.argv[2]   es igual a a2
    sys.argv[3]   es igual a a3
    sys.argv[4]   es igual a a4

Para comprobar si hay algún argumento:

    if len(sys.argv) >= 2:
        print "Ok, hay argumento "
    else:
        print "Debes indicar un argumento"
        sys.exit()

Python: comprobar la existencia de un fichero

#!/usr/bin/python
import os
try:
    os.stat("ruta del fichero")
    print "Fichero SI existe"
except:
    print "El fichero NO existe"

Python: concatenar variables

En Python al concatenar variables que no sean de tipo string, dará error.

Por ejemplo ...

$python
Python 2.7.4 (default, Apr 19 2013, 18:28:01)
[GCC 4.7.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1000
>>> b = "www.misnotaslinux.blogspot.com"
>>> c = a + b
Traceback (most recent call last):
  File "", line 1, in
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Hacerlo pasando las variables int a str antes de concatenar:

>>> a = 1000
>>> b = "www.misnotaslinux.blogspot.com"
>>> c = str(a) + b
>>> print c
1000www.misnotaslinux.blogspot.com
>>>

8 de septiembre de 2013

Separador de miles en Bash

Usar printf.

Aqui un par de links que lo explica:
http://www.rokerias.com/2013/06/imprimir-separador-de-miles-en-bash.html
http://linux.about.com/library/cmd/blcmdl3_printf.htm

jQuery: un toolkit de JavaScript

Un objetivo que tengo es aplicar JavaScript a página web www.pedeefes.com para aumentar su interactividad y capacidad de respuesta con los usuarios.

Como es habitual en el actual mundo web, los temas de diseño son críticos y para optimizar el tiempo empleado y el resultado obtenido hay que acudir a frameworks o toolkits que hagan mas productiva la tarea de programación .


Uno de los que mas desarrollo y expansión esta teniendo es jQuery.

Mas que un framework se trata de un toolkit que hace mucho mas llevadera la programación de efectos gráficos e interactividad con el usuario basado en JavaScript.

Su lema: Escribir menos, hacer mas, realmente se cumple.
Aunque finalmente siempre es necesario escribir algo de código en JavaScript, el trabajo duro lo realiza jQuery con una sintaxis sencilla y una enorme potencia.

La curva de aprendizaje es rápida y se puede comenzar sin saber nada de JavaScript o mejor dicho, ir aprendiendo los fundamentos de JavaScript al mismo tiempo.

También es necesario tener conocimientos de HTML, CSS y DOM para sacar el máximo partido a jQuery.

En cuanto a bibliografia os remito a www.pedeefes.com donde podréis encontrar numerosos pedeefes sobre jquery, javascript, html, css3, y muchas muchas cosas mas.

23 de agosto de 2013

Cambiar el UUID de un disco virtual .vdi de Virtual Box

Cuando hago una copia de un disco virtual e intento arrancarla en una nueva máquina virtual con Virtual Box, aparece un error diciendo que el UUID del disco ya existe.

Para solucionar esto podemos cambiar la UUID del disco virtual .vdi copiado con el siguiete comando desde MS-DOS:


C:\Program Files\Oracle\VirtualBox>VBoxManage.exe internalcommands sethduuid "C:\HDfile.vdi"
UUID changed to: 1727a910-2037-4d8d-866b-ae6d52c5a6cd

y problema resuelto.

Python: ejecutando comandos linux

Para ejecutar comandos de Linux desde Python podemos usar los módulos os y commands.

Con os se ejecuta el comando ls y retorna un bit de ejecución, no el resultado del comando:

import os
out = os.system("ls")



Si necesitamos el resultado del comando linux ejecutado usar commands:

import commands
out = commands.getoutput("ls")

18 de agosto de 2013

Colorizando Scripts en Php CLI ... y en Bash

Salida en color para script en php cli:

#!/usr/bin/php
echo "\033[31m Texto en color rojo \033[0m\n";
die;

\033[0m : vuelve el color de la consola al color por defecto, importante!! ya que si no se pone cambias el color de la consola al salir del script.

el número XX de los códigos \033[XXm determinal el color y formato del texto según esta tabla:
Style           Foreground      Background
1st Digit       2nd Digit       3rd Digit
0 - Reset       30 - Black      40 - Black
1 - FG Bright   31 - Red        41 - Red
2 - Unknown     32 - Green      42 - Green
3 - Unknown     33 - Yellow     43 - Yellow
4 - Underline   34 - Blue       44 - Blue
5 - BG Bright   35 - Magenta    45 - Magenta
6 - Unknown     36 - Cyan       46 - Cyan
7 - Reverse     37 - White      47 - White

Pudiendo combinarlos, por ejemplo: fondo blanco, texto negro: \033[30;47m


Y ya que estamos ...esto es aplicable para Colorizar Bash Scripts:

#!/bin/bash
echo -en "\033[31m Texto en color rojo \033[0m\n"
echo -en "\033[30;47m Negro sobre Blanco \033[0m\n"


Para añadir un poco de color a nuestras vidas en CommandLine !!!

Ref.:
http://ubuntulife.wordpress.com/2011/04/10/los-codigos-de-color-en-bash/
http://praxis.edoceo.com/howto/bash


13 de agosto de 2013

Eliminando los banners del sevidor apache2

Editar el archivo:


# nano /etc/apache2/conf.d/security

y descomentar solo las lineas:


ServerTokens Minimal
ServerSignature Off
TraceEnable Off


y reiniciar apache2

# service apache2 restart


Ahora ya no aparecerán banners con información del servidor apache2 ni del sistema operativo de la máquina al producirse algún error.

Ref.:
http://www.securityartwork.es/2012/02/22/bastionado-de-un-servidor-web-apache-i/ 

12 de agosto de 2013

Python: letra ñ de UTF-8 a LATIN-1

En un script en Python con codificación UTF-8, necesito la letra 'ñ' con codificación Latin-1 ...

¿Como paso la letra ñ de UTF-8 a Latin-1?

#!/usr/bin/python
# -*- encoding: utf-8 -*-

enieUtf8 = 'ñ'
enieLat1 = 'ñ'.decode("utf-8").encode("latin1","ignore")


Por supuesto que la letra 'ñ' del script se puede sustituir por cualquier otro caracter o variable para su recodificación en Latin-1.

11 de agosto de 2013

Cambiar directorio de MySQL y apparmor

En la entrada de misnotaslinux:
Bases de datos MySQL distribuidas en memoria USB
describía una técnica muy sencilla, que había utilizado con éxito para cambiar los directorios de trabajo de las bases de datos de MySQL, pudiendo alojarlos en memorias USB u otras unidades de disco.

Al intentar esto en mi nanoservidor domo, con Xubuntu 13.04: NO ha funcionado.

La razón es que Xubuntu tiene activado apparmor, que es un sistema de seguridad que bloquea el uso irregular de directorios extraños.

Al intentar cambiar el directorio de trabajo de MySQL a otra unidad, direccionándolo mediante un enlace, appArmor no lo permite.

Apparmor esta en SuSe y Ubuntu.

Protocolo:

# cp -a /var/lib/mysql /mnt/otraunidad
# mv /var/lib/mysql /var/lib/mysql.bck
# ln -s /mnt/otraunidad/mysql mysql
# service restart mysql

... esto no funciona a no ser que inactivemos appArmor para mysqld.

Solución 01:
# aptitude install apparmor-utils
# aa-complain /usr/sbin/mysqld
# service apparmor restart
# service mysql restart

.. y ahora funciona mysql usando como directorio de trabajo /mnt/otraunidad/mysql

Con aa-complain hemos cambiado el protocolo de appArmor para mysqld y no lo bloquea sino que solo logea cuando ve algún comportamiento sospechoso como usar una directorio de trabajo diferente.

Solución 02:
Cambiar el perfil apparmor para mysqld:

# nano /etc/apparmor.d/usr.sbin.mysqld

añadimos las siguientes reglas para la nueva localización de la carpeta de MySQL:

  /mnt/otraunidad/mysql/ r,
 /mnt/otraunidad/mysql/** rwk,

# service apparmor restart
# service mysql restart

Esta solución es mas elegante ya que no desactivas las medidas de seguridad de appArmor para MySQL.

Ref:
Cambiar ruta de MySQL con apparmor: http://www.ubuntu-es.org/node/113525#.UgbW6dJ7LzY

8 de agosto de 2013

Python: Encoding UTF8

Si en los scripts Python utilizas acentos, eñes u otros caacteres no ASCII me aparecen el error:

SyntaxError: Non-ASCII character '\xc3' in file ./yourPytonScript.py  line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details


Para solucionarlo hay que indicar el encoding al principio del script python

#!/usr/bin/python
# -*- encoding: utf-8 -*-
...

Ref.:

3 de agosto de 2013

Python: fecha y hora actual

#!/usr/bin/python
import datetime
now = datetime.datetime.now()
print now

Result:
2013-08-03 01:32:27.711721


Para formatear la salida de la fecha:

import time
datetime.datetime.now().strftime('%d/%m/%Y')

Ref.:
http://www.pythonforbeginners.com/basics/python-datetime-time-examples/
http://www.tutorialspoint.com/python/time_strftime.htm

1 de agosto de 2013

Python: Conectar con MySQL

Para conectar desde Python con bases MySQL se puede hacer con MySQLdb.

Para instalar MySQLdb en Debian:
# aptitude install python-mysqldb

Scrip Python para conectar con MySQL:
#!/usr/bin/python

#1)Cargar el modulo en el script python:
import MySQLdb

#2)Conectar con la base de datos:
db = MySQLdb.connect("host","Usuario","Password","BasedeDatos" )

#3)Preparar el objeto-cursor:
cursor = db.cursor()

#4)Ejecutar la consulta SQL y obtener resultados:
try:
    cursor.execute("ConsultaSQL")
    results = cursor.fetchall()
except:
    print "Error de Conexión"


#5)Presentar datos obtenidos de la base de datos:
print "Datos Obtenidos"
for registro in results:
    print registro[0],"-",registro[1]


#6)Cerrar conexión con la base de datos:

db.close()

Ref.:
http://www.tutorialspoint.com/python/python_database_access.htm

Python: Funciones






Definición de la función:
def nombrefuncion (argumento1, argumento2):
      '''Aqui puede ir el docstring, que es info sobre la función'''
      y = argumento1 + argumento2
      return y

return indica el valor de retorno de la función.

Ejecución de la función:
nombrefuncion (argumento1, argumento2)

Ref.:
https://sites.google.com/site/cursodepython/primer-clase/argumentos-de-funciones

28 de julio de 2013

Nuevo nanoServer Domo

Después de 4 años de funcionamiento intenso e ininterrumpido, solo puedo felicitar al pequeño micra, que se ha portado y sigue comportándose de forma excelente.
http://misnotaslinux.blogspot.com.es/2009/11/micra-server.html

Pero la tecnología y mis exigencias avanzan y ha llegado el momento de buscarle un hermano mayor al pequeño micra, dentro de la gama de nanoPc, de bajo consumo, silenciosos, ... para encenderlo y olvidarte de él.

De las maquinas actuales de esta categoría que he revisado me he quedado con el: Foxconn Netbox NT-A3500


Comercializado en España por VANT con el nombre de Domo3:


Sus características son:

ModeloF354T
Referencia81DOM3F354T
Memoria RAM4GB DDR3
ChipsetAMD Fusion (A45FCH)
Disco duro1TB SATA2 2.5”
FormatoMini-ITX
Dimensiones190 x 25 x 135 mm
ProcesadorAMD E350 1,6GHz
GráficosRadeon HD6310
Unidad ópticaNo
OtrosMultilector flash MMC/SD/MS
Sonido7.1 canales a través de S/PDIF. Altavoz interno
RedGigabit
WIFI802.11b/g/n
VGAMediante adaptador incluido
DVISI
HDMISI
PS/2NO
USB 2.04
USB 3.02
BluetoothNO
SerieNO
ParaleloNO
Audio frontalMIC y EAR frontales
Audio traseroS/PDIF
Sistema operativoUbuntu Linux 12.04.1 preinstalado, configurado y con aplicaciones extra instaladas
Garantía2 años
OtrosSopote VESA


El procesador AMD E350 es de 64 bits, de doble núcleo, con virtualización AMD-V y lanzado al mercado en 2011.





http://www.cpu-world.com/CPUs/Bobcat/AMD-E%20Series%20E-350%20-%20EME350GBB22GT.html

Como ventajas respecto a micra, desde luego la potencia y capacidad de almacenamiento con HD 2,3 SATA, 4 USB 2.0, 3 USB 3.0, ... y como punto negativo a priori que no es fanless, aunque hay que ver el ruido que hace y su durabilidad con un uso continuado.

Mi idea es instalar Linux, un sistema debian o basado en debian: Ubuntu, Xubuntu ó Lubuntu.

Quiero que sea servidor doméstico: ssh, samba, MySQL, Web, Virtualbox, ... y también un servidor multimedia, media center - SmartTV.

Para ello configurare dos modos de trabajo, que se pueda pasar de uno a otro según necesidades.
- Modo Server: sin entorno gráfico, (default).
- Modo HTPC: con entorno gráfico.

Con Domo ya tengo entretenimiento para este verano, ... y espero que para unos cuanto años.
pd: micra seguirá activo y pero que muy muy activo.

25 de julio de 2013

Proteger Carpetas y Ficheros en Linux y en Samba

En mundo de los permisos en Linux es enormemente potente, pero hay que dedicarle un rato para comprenderlo y sacar el máximo provecho.

Pongamos que queremos proteger unas carpetas personales de la mirada de otros usuarios, de modo que estas carpetas y los ficheros que contienen solo puedan ser vistas por el usuario.

Por defecto los permisos en Linux son:

Carpetas: 777 = rwx rwx rwx
Ficheros: 666 = rw- rw- rw-
Con la máscara 022

Lo que hace:
Carpetas: 777 - 022 = 755 = rwx r-x r-x
Ficheros: 666 - 022 = 644 = rw- r-- r--

De modo que por defecto Linux crea carpetas y ficheros que únicamente son modificables por el usuario pero que pueden ser vistos y copiados por todos los usuarios.
Esto es un problema cuando hay información sensible que se quiere proteger.

Para impedir que los directorios y ficehros sean visibles por otros usuarios tenemos que cambiar los permisos de las carpetas y los ficheros a:

Carpetas: 700 = rwx --- ---
Ficheros: 600 = rw- --- ---

Si ya tenemos una carpeta llamada "mycarpeta" y queremos cambiar los permisos de todo su contenido podemos hacerlo:

# chmod -R go-rwx mycarpeta

Para cambiar los permisos de las carpetas y ficheros que se crean por defecto en un usuario hay que modificar los ficheros .bashrc y .profile de su directorio personal y añadir:

umask 077

de este modo hemos cambiado la mascara que se aplica a los permisos por defecto que tiene linux para las las nuevas carpetas y ficheros que cree este usuario. Los permisos quedarian:

Carpetas: 777 - 077 = 700 = rwx --- ---
Ficheros: 666 - 077 = 600 = rw- --- ---

Los directorios y ficheros solo seran visibles y modificables por el usuario y el root.

Nota: para recargar el fichero .bashrc, hacer:
$ su usuario.

Si otro usuario intentara listar el directorio ...

$ ls mycarpeta
ls: no se puede abrir el directorio mycarpeta: Permiso denegado

En samba:
para poner una mascar en los archivo de los usuarios que accedan por samba, hay que modificar el fichero /etc/samba/smb.conf del siguiente modo:

[mycarpeta]
 create mask = 0700

Ref:
http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m1/permisos_de_archivos_y_carpetas.html

http://www.lasticenelaula.es/portal/index.php/linux-mint/679-cambiando-los-permisos-a-archivos-y-carpetas-en-linux-mint-y-ubuntu

http://blog.manuelviera.es/2012/06/entendiendo-umask/

http://www.ite.educacion.es/formacion/materiales/85/cd/linux/m4/gestin_de_usuarios_grupos_y_permisos_de_samba.html

Resumen de los permisos:
Cód Binario   Permisos efectivos
0       0 0 0       - - -
1       0 0 1       - - x
2       0 1 0       - w -
3       0 1 1       - w x
4       1 0 0       r - -
5       1 0 1       r - x
6       1 1 0       r w -
7       1 1 1       r w x

25 de junio de 2013

Proteger un directorio web con contraseña con apache2

En un servidor web con apache2 necesitamos proteger el acceso a una carpeta con password,
¿como hacerlo?

Protocolo:

1) Creamos el directorio:
# mkdir /var/www/pub

2) Creamos fichero del passwords en el directorio /etc/apache2/:
# cd /etc/apache2
# htpasswd -c .htpasswd usuario

3) Modificamos el fichero /etc/apache2/sites-available/default creando una sección Directory con el nombre de la carpeta y la siguiente configuración:

# nano  /etc/apache2/sites-available/default

     Options -Indexes MultiViews FollowSymLinks
     AllowOverride All
     Order deny,allow
     Allow from All

4) Creamos el fichero /var/www/pub/.htaccess
# nano /var/www/pub/.htaccess

AuthName "Directorio privado"
AuthType Basic
AuthUserFile /etc/.htpasswd
require valid-user

5) Reiniciamos apache2
# service apache2 restart

Al intentar acceder a este directorio desde el navegador web, aparecerá una pantalla que nos pedira el user y password para acceder.