Hace poco me consultaron si se podía limitar el espacio de una carpeta
Samba (samba share) sin tener control de usuarios es decir hay una
carpeta por usuario que esta a su vez es 'mapeada' a su estación de
trabajo (que corre windows) pero todos los usuarios usan el mismo
usuario y el mismo password para acceder cada una de sus carpetas. La
pregunta me dejo cabezón, yo nunca trabaje con Samba pero se que debe de
haber forma de hacer esto. Por ahora me dispuse a crear un script que le
ayudara.
El script lee un archivo de texto separado por comas el cual tiene dos
columnas una para el nombre del usuario y la cantidad de Megabytes que
se le va a asignar a cada usuario. Usando el comando dd el script crear
archivos que son formateados como EXT3 y seguidamente los monta. El
archivo de texto plano luce así:
cat /tmp/usuarios.txt
maria.perez,5
arnaldo.hernandez,5
gustavo.flores,10
jesus.boss,5
marta.hernandez,5
wilkneman.pascoski,5
tatiana.siu,5
alexandra.delarosa,5
Aparte de crear, formatear y montar estos archivos el script también
crea la configuración base que se le va a anexar a al smb.conf con el
siguiente formato para cada usuario:
[alexandra.delarosa]
comment = alexandra.delarosa with 5MB
path = /mnt/smb_discs/alexandra.delarosa
read only = no
browseable = yes
guest ok = yes
[arnaldo.hernandez]
comment = arnaldo.hernandez with 5MB
path = /mnt/smb_discs/arnaldo.hernandez
read only = no
browseable = yes
guest ok = yes
[gustavo.flores]
comment = gustavo.flores with 10MB
path = /mnt/smb_discs/gustavo.flores
read only = no
browseable = yes
guest ok = yes
Luego seria cuestión de retocar el /etc/Samba/smb.conf y reiniciar
el servicio, re-mapear esto Samba share a los usuarios y listo.
Aquí esta el script
LISTAUSUARIOS=`cat /tmp/usuarios.txt|sort`
RUTA_DISCOS="/smb_disks/smb_drives"
MOUNT_SMB="/mnt/smb_discs"
TMPSAMBACONF="/tmp/samba.virt.conf"
echo > $TMPSAMBACONF
mkdir -p `echo $RUTA_DISCOS`
for X in $LISTAUSUARIOS
do echo $X | awk -F , '{print "asignando " $2 "MB a usuario "$1}'
USUARIO=`echo $X | awk -F , '{print $1}'`
PRE_ESPACIO=`echo $X | awk -F , '{print $2}'`
let ESPACIO=`echo $PRE_ESPACIO`*1024
dd if=/dev/zero of=$RUTA_DISCOS/$USUARIO.img bs=1024
count=$ESPACIO
/sbin/mke2fs -L $USUARIO -j $RUTA_DISCOS/$USUARIO.img
mkdir -p $MOUNT_SMB/$USUARIO
mount -t ext3 $RUTA_DISCOS/$USUARIO.img -o loop $MOUNT_SMB/$USUARIO
echo "[$USUARIO]
comment = `echo $USUARIO" with "$PRE_ESPACIO"MB"`
path = /mnt/smb_discs/$USUARIO
read only = no
browseable = yes
guest ok = yes " >> $TMPSAMBACONF
done
echo "espacio usado en $RUTA_DISCOS: "
du -smh $RUTA_DISCOS/*.img
du -smh $RUTA_DISCOS/
mount -l | grep $MOUNT_SMB
echo "CHECK $TMPSAMBACONF AND ADD IT TO YOUR /etc/samba/smb.conf"
Como mencione anteriormente, yo nunca he trabajado con Samba en
ambiente de producción yo practique o jugué un poco con Samba hace unos
5 años. este script no incluye configuraciones para estos Samba shares
que proporcionen algo de seguridad. Si alguien tiene sugerencias pueden
dejarlas en los comentarios.
Si experimentas problemas con el tamaño de estos discos virtuales no
dudes en darle un vistazo a este articulo: El limite para 32-bits es
de2147483647.