Páginas

viernes, 3 de julio de 2015

Montar almacenamieto USB FreeBSD

El soporte para dispositivos de almacenamiento USB esta integrado en el kernel GENERIC.

Utilice dmesg para confirmar que la unidad aparece en el buffer de mensajes del sistema:


Para que el dispositivo sea mountable como un usuario normal, hacer al usuario miembro del grupo operator utilizando pw.
# pw usermod carles -G operator

Lo siguiente es asegurarse que operator está habilitado para leer y escribir en el dispositivo
# ee /etc/devfs.rules
[localrules=5]
add path 'da*' mode 0660 group operator

# pkg install fusefs-ntfs

Habilitar la regla en /etc/rc.conf
# ee /etc/rc.config
devfs_system_ruleset="localrules"

Indicar al sistema que permita a usuarios regulares montar sistemas de archivos agregando a /etc/sysctl.config
# ee /etc/sysctl.conf
vfs.usermount=1

# sysctl vfs.usermount=1
vfs.usermount: 0 -> 1

Crear un directorio y hacer que pertenezca user group primario del usuario.
# mkdir /mnt/carles
# chown carles:carles /mnt/carles
# ls -ld /mnt/carles/
drwxr-xr-x  2 carles  carles  512 Jul  3 03:24 /mnt/carles/

Suponiendo que el dispositivo USB esta conectado, aparece como /dev/da0 y formateado con el sistema de archivos FAT32, montamos como usuario normal (read write).
$ mount_msdosfs -o rw /dev/da0 /mnt/carles/


Antes de desconectarlo puede desmontar el dispositivo:
# umount /mnt/carles

En caso de dispositivo de almacenamiento USB formateado con el sistema de archivos NTFS
# pkg install fusefs-ntfs
# kldload fuse
# mkdir /mnt/ntfs
# chown carles:carles /mnt/ntfs
$ ntfs-3g -o rw /dev/da0s1 /mnt/ntfs

Cargar el modulo con el sistema, agregar al archivo /boot/loader.conf
# ee /boot/loader.conf
fuse_load="YES"

Unix es genial!.

martes, 21 de abril de 2015

Openvpn raspberry pi 2

Nivel avanzado.

Fuente:

Eric Jodoin (Sans) http://www.sans.org/
Eric Jodoin tutorial (formato pdf) http://www.sans.org/reading-room/whitepapers/hsoffice/soho-remote-access-vpn-easy-pie-raspberry-pi-34427
How to Lauren Orsini Parte una y Parte dos:
http://readwrite.com/2014/04/10/raspberry-pi-vpn-tutorial-server-secure-web-browsing
http://readwrite.com/2014/04/11/building-a-raspberry-pi-vpn-part-two-creating-an-encrypted-client-side

Construir un servidor que cifra sus datos web de miradas indiscretas.

Portátil Dell Inspiron 1525 OpenBSD KDE 3.5 Intel SSD 40GB sata II. Me encanta!


VPN en Raspberry Pi 2 con Openvpn.

Wifi gratis y sin cifrar se encuentran en todas partes, aunque no es buena idea comprobar su cuenta bancaria a menos que no le importe que alguien esté husmeando. Como evitarlo ? una VPN (red privada virtual). Extiende su propia red privada en lugares públicos, de manera que si utiliza la conexión Wifi del establecimiento en que está, su navegación permanece encriptada y segura.

Lo más económico para mantener sus datos seguros es abstenerse de utilizar acceso Wifi, poco prático, aunque sí podemos construir nuestro propia VPN en casa, ejecutarla en un dispositivo del tamaño de un teléfono móvil, de muy bajo costo y consumo, Raspberry Pi 2.

Que necesita:
Tener instalado Raspbian
Una IP estática para la Raspberry Pi o un servicio DDNS (yo utilizo freedns.afraid.org). Utiliza su propia configuración, por tanto no necesita la utilidad ddclient. Es gratis, funciona perfecto desde 2007 y en la actualidad cuenta con mas de 2,500,000 de miembros.

Nota: Para mantener nuestro subdominio activo en freedns.afraid.org, debemos autentificarnos por lo menos una vez en 6 meses. Aunque es posible reactivarlo pasado este período de tiempo.

Configurar ddns freedns.afraid:
Es un DDNS gratis basado en servidores FreeBSD.
Primero se realiza el registro y a continuacion desde la entrada Subdomains, se crea un subdominio.
Ahora, desde la pestaña Dynamic DNS,  podrá actualizar automáticamente cada 5 minutos utilizando cron :
2 dynamic update candidates! (A and AAAA records).

Al clicar sobre quick cron example ver
á algo como esto:

El texto que aparece seleccionado (al final de la página), lo pegaremos llamando la tabla de tareas crontab, revisada por cron (un administrador regular de procesos en segundo plano (demonio) que ejecuta guiones a intervalos regulares (por ejemplo, cada minuto, día, semana o mes):
pi@server $ sudo /etc/crontab -e


Guardar y cerrar.

Consideraciones si utiliza no-ip: 
1. Abrir puerto 8245 en la Raspberry Pi (iptables)
2. no-ip no necesita de ddclient. Utiliza un tar.gz descargable desde su cuenta de usuario - noip-duc-linux.tar.gz. Las instrucciones de Instalación se encuentra en el archivo README.FIRST

Necesita tener habilitado SSH para conectar a la Raspberry Pi desde otro ordenador.
Redirigir puerto 1194 (UDP) a la IP interna de la Raspberry Pi (NAT en su router, port mapping).
Configurar servicio DDNS en el router de acceso a Internet.
Redirigir puerto 22 a la IP de su Raspberry Pi, para realizar conexión remota a la Raspberry Pi.

Si precisa de ddclient:
ddclient asume que está conectado directamente a Internet. Como su Raspberry Pi está dentro de su red interna, tiene que editar el archivo ddclient manualmente y reemplazar use=if, if=eth0 por use=web, if=myip.dnsdynamic.org

# cat /etc/ddclient.conf
##############
daemon=300
protocol=dyndns2
use=web, if=myip.dnsdynamic.org
server=freedns.afraid.org
login=username@gmail.com
password=' '
MyPiVPN.dnsdynamic.com
##############

Re-ejecutar ddclient:
# sudo pkg-reconfigure ddclient

Conectar con la Raspberry Pi via SSH desde otro pc y cambie su contraseña y/o nombre de usuario


Vamos a actualizar la Raspberry Pi con estos comandos:

pi@server ~ $ sudo apt-get update && sudo apt-get upgrade


Instalar OpenVPN

pi@server ~ $ sudo apt-get install openvpn

No quiere que cualquiera que encuentre la direccion del servidor VPN se pueda conectar. Vamos a crear una llave para el servidor utilizando Easy RSA, metodo de cifrado incluido en OpenVPN.

Obtener permisos de superusuario
pi@server ~ $ sudo -s
root@server:/home/pi#

Copiar el directorio 2.0 a /etc/openvpn/easy-rsa de manera recursiva

# cp -R /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa

Editar el archivo vars:
# cd /etc/openvpn/easy-rsa
# nano vars



Es el momento de construir el certificado CA y Root CA certificado, autofirmado:

En criptográfica, una autoridad de certificación (CA) es una entidad que emite certificados digitales. El certificado digital certifica la posesión de una clave pública.

# source ./vars

# ./clean-all

# ./build-ca

El nombre del servidor es server:
root@server:/etc/openvpn/easy-rsa# ./build-key-server server

Una vez tecleado Intro aparecen algunas lineas y sus valores por defecto, preste atencion a:

Common Name server (o el que usted tecleo con anterioridad)

A challenge password? debe dejarlo en blanco

Sign the certificate? y

1 out of 1 certificate requests certified, commint? y

...
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/usr/local/etc/openvpn/easy-ra/pki/ca.crt
...

Acabada la contruccion del servidor, es el momento de crear las claves para los clientes, una por cada dispositivo:

# ./build-key-pass NombreUsuario

Donde NombreUsuario es:
client1, client2, client3, client4, client5, client6, client7, client8, client9

De nuevo más intrucciones

Enter PEM pass phrase Ingrese una contrasena que recuerde

A challenge password? Deje en blanco

Sign the certificate? y

# cd keys

El cifrado des3, un algoritmo de cifrado complejo que se aplica tres veces para cada bloque de datos. OpenSSl un metodo estandar para la crreacion de una conexion segura. Es necesario realizar este paso para cada cliente que configure:

# openssl rsa -in client1.key -des3 -out client1.3des.key

He utilizado el mismo password anterior y las dos veces siguientes.

Enter pass phrase for cliente1.key:
writing RSA key
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

Ahora vamos a generar el intercambio de claves Diffie-Hellman. Un intercambio que permite a dos entidades sin conocimiento previo de una, claves secretas a la otra. El cifrado es de 1024-bit que es el valor por defecto, (este valor se establece en el archivo vars, se puede cambiar a 2048-bit).

# cd /etc/openvpn/easy-rsa/
# ./build-dh

Finalmente, vamos a implementar OpenVPN build-in para la proteccion de ataques DoS (Denegacion de Servicio), generando la llave estatica HMAC con el comando siguiente:

# openvpn --genkey --secret keys/ta.key

Falta generar el archivo de configuracion de OpenVPN donde le diremos a OpenVPN, que direccion IP y puerto utilice, donde va a estar conectado, tipo de conexion, etc., utilizando el archivo de configuración de Lauren Orsini y que puede descargar del enlace siguiente. Copie y guárdelo en su servidor local, no tiene formato y funciona perfectamente:

https://gist.github.com/laurenorsini/9925434

Archivo server.conf

# nano /etc/openvpn/server.conf

Hay que activar el reenvio de paquetes IPv4 en el archivo /etc/sysctl.conf descomentando la linea:

net.ipv4.ip_forward=1

Aplicar los cambios sin reiniciar:

# sysctl -p

Raspbian integra un firewall que bloquea las conexiones entrantes de fuentes desconocidas e inesperadas. Queremos seguir protegidos pero necesitamos una regla que permita el tráfico que genera OpenVPN y que recuerde (después de un reinicio) que la conexión OpenVPN siempre esta permitida utilizando un script que se ejecuta en el arranque:

# nano /etc/firewall-openvpn-rules.sh
#!/bin/sh
ipt=/sbin/iptables
#La RPi proporcionará NAT entre OpenVPN cliente subred (10.8.0.0/24) y la soho (small office
#home office) subnet 192.168.1.0/24.
$ipt -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source 192.168.1.130
#utilizado por no-ip (ver README.FIRST)
$ipt -A INPUT -p tcp --dport 8245 -j ACCEPT
#permitir conexiones remotas via SSH.
$ipt -A INPUT -p tcp --dport 22 -j ACCEPT
$ipt -A INPUT -p udp --dport 22 -j ACCEPT
#################

# chmod root /etc/firewall-openvpn-rules.sh
# chmod 0700 /etc/firewall-openvpn-rules.sh
# cd /etc
# sh ./firewall-openvpn-rules.sh
$ sudo iptables -L -n -v


o lo que es lo mismo:



/sbin/iptables -L -n -v

La direccion 10.8.0.0 es la predeterminada de Raspberry Pi para los clientes conectados a la VPN. eth0 es el puerto Ethernet. El archivo creado no tiene permisos de ejecucion y por seguridad solo sera ejecutado por su propietario root.


IP fija y pre-up script firewall:
# cat /etc/network/interfaces
auto lo

iface lo inet loopback
iface eth0 inet static
address 192.168.1.130
netmask 255.255.255.0
gateway 192.168.1.1
pre-up /etc/firewall-openvpn-rules.sh
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Ya tiene un servidor VPN (OpenVPN) completamente funcional que puede utilizar para conectarse de una manera segura a su red domestica y acceder a archivos compartidos almacenados en su red.

Falta decir a los clientes donde encontrar el servidor, como conectar, etc. Hemos creado diferentes claves de cliente para cada uno de los dispositivos que desea conceder acceso VPN. Para no generar un nuevo archivo de configuracion para cada cliente a partir de cero, vamos a utilizar un ingenioso guion escrito por ERIC JDOIN del instituto SANS. Lo que hara este script, es generar un archivo para cada cliente por nosotros.

Lo primero es crear un archivo de texto en el que los ajustes por defecto se pueden leer, se llamará default.txt y está localizado dentro de keys:

No se confunda yo siempre utilizo minúsculas, por tanto el nombre del archivo al que se hace refencia en el script MakeOpenVPN.sh "default.txt" deberá cambiarlo:

DEFAULT="Default.txt" por
DEFAULT="default.txt"

# nano /etc/openvpn/easy-rsa/keys/default.txt
##########
client
dev tun
proto udp
remote IPPUBLICA 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ns-cert-type server
key-direction 1
cipher AES-128-CBC
comp-lzo
verb 1
mute 20
#############

su ip pública es información privada que no debería compartir. Si usted no tiene IP pública debera utilizar un servicio de sistema dinámico de nombres de dominio (DDNS) y ejecutar dhclient, (si utilza no-ip no necesita ddclient), en raspberry pi para actualizar su registro DDNS de forma automática.

Un script escrito por Eric Jodoin corriendo desde un archivo shell ejecutable, automatiza las tareas incluidas en este caso. Puede descargarlo desde este enlace proporcionado por Lauren Orsini:

https://gist.github.com/laurenorsini/10013430

# nano /etc/openvpn/easy-rsa/keys/MakeOVPN.sh
copiar, pegar y guardar

Haciendo el script ejecutable solo para root:
# cd /etc/openvpn/easy-rsa/keys/
# chmod 700 MakeOVPN.sh

Por último, ejecute el script:
# ./MakeOVPN.sh

A medida que el script se ejecuta le preguntará el nombre de los clientes existentes para los que generó claves con anterioridad. Si todo ha ido bien debería aparecer una línea como esta:

Done! client1.ovpn Successfully Created.

Repita este paso para cada cliente existente.

Ahora conecte a la raspberry pi, copie los archivos clientes al directorio /home/pi/ y luego transfiera estos archivos a su ordenador vía scp.

# cd /etc/openvpn/easy-rsa/keys
# mkdir /home/pi/openvpn-keys
# cp *.ovpn /home/pi/openvpn-keys/
# ls /home/pi/openvpn-keys/
client1.ovpn  client2.ovpn  client3.ovpn  client4.ovpn



Finalmente envíe un archivo *.ovpn a cada cliente para conectarse a la VPN (OpenVPN).

Android utiliza OpenVPN Connect, los binarios se instalan a traves de OpenVPN Installer:





Un cliente Ipad se conecta utlizando OpenVPNConnect

Conectar remota SSH desde Android con la app ConnectBot:

Unix es genial!.

martes, 31 de marzo de 2015

Configurar repositorios FreeBSD 10

Vamos a copiar el DVD bsdstudy en formato iso en el disco duro:

# cd /usr/home/carles/bsdplk/
# dd if=/dev/cd0 of=bsdstudydvd.iso bs=4k

Montar imagen ISO:
# mdconfig -a -t vnode -f /home/bsdplk/ISO/bsdadvdstudy.iso
md0
# mount_cd9660 /dev/`mdconfig -f /home/bsdplk/ISO/bsdadvdstudy.iso` /mnt


Crear repositorio local FreeBSD 10.1 host

# mkdir /usr/local/etc/pkg/repos
# cd /usr/local/etc/pkg/repos
# cat FreeBSD.conf
FreeBSD:{
  enabled:NO
}
EOF

# cat /usr/local/etc/pkg/repos/example.conf
example:{
  url: file:///mnt/F10.1/packages_bsdcg/freebsd:10:x86:32
}

Configurar un repos para descargar paquetes del servidor FreeBSD:


Instalar fuentes del kernel FreeBSD 10.0

# fetch ftp://ftp6.freebsd.org/pub/FreeBSD/releases/amd64/10.0-RELEASE/src.txz
# tar -C / -xzvf src.txz

Después de desmontar el directorio, puede destruir el dispositivo creado por mdconfig; El nombre del dispositivo impreso inmediatamente después de ejecutar el comando mdconfig, ej. md0, md1, md2.
# mdconfig -d -u 0

Unix es genial!.

lunes, 23 de marzo de 2015

Qemu configurar red FreeBSD

Nivel : avanzado

Diseño de la red : 4 Máquinas virtuales corriento sobre QEMU y FreeBSD 10.1 como host. Instalar los cuatro sistemas operativos basados en BSD (NetBSD, FreeBSD, OpenBSD, DragonFly), permitirles la salida a Internet para adquirir los conocimientos necesarios y acceder al examen de Certificación BSDA.

Referencia:
http://virtuallyhyper.com/2013/02/running-vms-on-freebsd-using-qemu-with-vde/
http://bsdwiki.reedmedia.net/wiki/networking_qemu_virtual_bsd_systems.html
http://www.area536.com/projects/freebsd-as-a-kvm-guest-using-virtio/
http://en.wikibooks.org/wiki/QEMU/Networking
http://www.bsdcertification.org/

BSDCG Videos Jim Brown. Como instalar so host + qemu + VM

La instalación del host + fvwm-crystal + qemu + aqemu + los so invitados tiene este aspecto.:





Interfaz de red TUN/TAP:

En este modo, la máquina virtual QEMU abre un dispositivo TUN o TAP preasignados en el host y utiliza esa interfaz para transferir los datos al sistema operativo invitado.

El puente (bridge) se crea en el sistema host (FreeBSD 10.1)

Cargar módulos:

# kldload aio
# kldload if_bridge
# kldload if_tap

Realizar comprobación:

# kldstat > modulos; awk '{ print $5 }' modulos
 Size     Name
 kernel
 if_tap.ko
 if_bridge.ko
 bridgestp.ko
 aio.ko
...

Crear las interfaces

# ifconfig bridge0 create up
# ifconfig tap0 create
# ifconfig tap1 create
# ifconfig tap2 create
# ifconfig tap3 create
# ifconfig tap4 create

Agregar los grifos al puente. Parámetros para agregar dispositivos de derivación al puente.

# ifconfig bridge0 addm tap0 addm tap1 addm tap2 addm tap3 addm tap4 up

Antes de utilizar los dispositivos de derivación en QEMU dos sysctl requieren ajustes. El primero permite a cualquier programa de usuario y Qemu los es, utilizar el dispositivo de grifo (tap). El segundo marca la interfaz como up:

# sysctl net.link.tap.user_open=1
# sysctl net.link.tap.up_on_open=1

Para que permanezcan los cambios después de un reinicio

# echo 'if_bridge_load="YES"' >>/boot/loader.conf
# echo 'if_tap_load="YES"' >>/boot/loader.conf
# echo 'aio_load="YES"' >>/boot/loader.conf

# echo 'cloned_interfaces="tap0 tap1 tap2 tap3 tap4 bridge0"' >>/etc/rc.conf
# echo 'ifconfig_bridge0="addm tap0 addm tap1 addm tap2 addm tap3 addm tap4 up"' >>/etc/rc.conf

# echo 'net.link.tap.user_open=1' >>/etc/sysctl.conf
# echo 'net.link.tap.up_on_open=1' >>/etc/sysctl.conf

# ifconfig -a

Tenemos que cambiar el modo de conexión de interfaz de red de la máquina virtual para que pueda utilizar la interfaz TUN/TAP.

Parámetros de conexión para DragonFly VM:


Parámetros de conexión para FreeBSD VM:


Parámetros de conexión para NetBSD VM:


Parámetros de conexión para OpenBSD VM:


Iniciar nbsd (NetBSD) desde el terminal:
# qemu -monitor stdio -m 512 -localtime -hda /usr/.aqemu/nbsd_HDA.img -boot once=c,menu=off -net nic,vlan=0,macaddr=00:ee:ae:c6:9b:50,model=e1000 -net user,vlan=0 -name "nbsd"


Método "VDE" (Ethernet Virtual Distribuido):

Modo de usuario en red - En este modo, la máquina virtual QEMU inicia automáticamente un servidor DHCP interno en una dirección de red interna 10.0.2.2/24. Una red  interna para huéspedes que no es visible desde el entorno de acogida (host). Si el sistema operativo invitado está configurado para DHCP, el cliente obtendrá una dirección IP de este servidor DHCP interno.

FreeBSD 9.2 - 10.0.2.15/24
NetBSD 6.0 - 10.0.2.20
OpenBSD 5.6 - 10.0.2.25
DragonFly - 10.0.2.30

Utilizando el método "VDE" (Ethernet Virtual Distribuido):

El backend de red VDE utiliza la infraestructura Ethernet Distributed Virtual para clientes de la red. Desde la página VDE:

VDE interruptor Al igual que un conmutador Ethernet física, un interruptor VDE tiene varios puertos virtuales en máquinas virtuales, aplicaciones, interfaces virtuales, herramientas de conectividad y - por qué no? - Otro interruptor VDE puede virtualmente enchufado.

# cd /usr/ports/net/vde2
# sudo make install

Ver las opciones de configuración:

# make showconfig
===> The following configuration options are available for vde2-2.3.2_1:
     PYTHON=on: Python bindings or support
===> Use 'make config' to modify these settings
# make install clean

# Cargar módulos necesarios:
# kldload if_bridge
# kldload if_tap

Activar módulos al inicio del sistema:
# echo if_bridge_load="YES">>/boot/loader.conf
# echo if_tap_load="YES">>/boot/loader.conf

Después de instalar debemos crear una interfaz tap para actuar como un enlace ascendente para nuestro VDE-switch. En primer lugar vamos a crear el puente:

# ifconfig bridge0 create

Crear las interfaces tap:

# ifconfig tap0 create
# ifconfig tap1 create

Ahora vamos a tender un puente sobre nuestra interfaz física con la interfaz tap:

# ifconfig bridge0 addm tap0 up

Para que los cambios permanezcan después de un reinicio:
# echo 'cloned_interfaces="tap0 bridge0"'>>/etc/rc.conf
# echo 'ifconfig_bridge0="addm tap0 up"'>>/etc/rc.conf

# ifconfig bridge0

Si vamos a conectar con el dispositivo tap con usuarios habituales, vamos a permitir que esos usuarios se conecten al dispositivo tap:
# sysctl net.link.tap.user_open=1
net.link.tap.user_open: 0 -> 1
# sysctl net.link.tap.up_on_open=1
net.link.tap.up_on_open: 0 -> 1

Establecer los permisos del dispositivo tap:
# chown carles /dev/tap0
# chmod 660 /dev/tap0

Agregar lo siguiente al fichero /etc/devfs.conf
own tap0 root:carles
perm tap0 660

Vamos a crear una VDE-Switch y añadir los tap como uplink (enlace ascendente)
# vde_switch -d -s /tmp/vdel -M /tmp/mgmtl -tap tap0 -m 660 -g carles --mgmtmode 660 --mgmtgroup carles

root@fbsd:~ # vde_switch -d -s /tmp/vdel -M /tmp/mgmtl -tap tap0 -m 660 -g carles --mgmtmode 660 --mgmtgroup carles
root@fbsd:~ # unixterm /tmp/mgmtl
VDE switch V.2.3.2
(C) Virtual Square Team (coord. R. Davoli) 2005,2006,2007 - GPLv2

vde$ ds/showinfo
0000 DATA END WITH '.'
ctl dir /tmp/vdel
std mode 0660
.
1000 Success

vde$ port/allprint
0000 DATA END WITH '.'
.
1000 Success

vde$ vlan/allprint
0000 DATA END WITH '.'
VLAN 0000
.
1000 Success

vde$ logout
9999 END OF SESSION root@fbsd:~ #


Tarjeta de red Qemu para todos los so invitados:


Iniciar los diferentes sistemas operativos instalados en la VM (Qemu) para configurar la red y comprobar que tienen conexión a Internet:

nbsd:
obsd:


dfly:

fbsd:
Cerrar Qemu

Unix es genial!.

miércoles, 4 de marzo de 2015

Samba compartir archivos en un grupo de trabajo


Version recomendada 4.0 porque la 4.1 no contiene el modulo pam_smbpass disponible en el paquete samba4.

Autor : Ivan Voras

Configuracion inicial

La configuracion de Samba se realiza en un simple archivo de configuracion,
/usr/local/etc/smb4.conf cuyas opciones estan documentadas en smb4.conf(5) main paginas.

[global]
workgroup = MIOFICINA
server string = Servidor Trabajo
dos charset = cp852
unix charset = UTF-8
security = user
encrypt passwords = yes
socket options = TCP_NODELAY SO_RCVBUF=262144
SO_SNDBUF=262144
use sendfile = yes
use mmap = yes
unix extensions = no
wide links = yes
[homes]
comment = Home Directories
browseable = no
writeable = yes
directory mask = 0770
create mask = 0660
[public]
comment = Public
path = /srv/public
public = no
writeable = yes
write list = @wheel
directory mask = 0770
create mask = 0660

La estructura es similar a ficheros .INI de Windows.

Entre las secciones de configuracion globales:

- workgroup - el nombre de Windows (entorno de red)
- server string - descripcion que se muestra en el explorador de Windows
- dos charset - conjunto de caracteres utilizado por las aplicaciones no unicode en el lado cliente
- unix charset - conjunto de caracteres se utilizaran en el Servidor para almacenar nombre de archivos
- security - user es la utilizada en versiones de escritorio de Windows xp, 7.
- encrypt passwords - obliga a los clientes a transmitir solo contrasenas cifradas.
- socket options - define opciones de socket de red; desactiva algoritmo Nagle's y establece tamanos de bufer grande.
- use sendmail, use nmap - activa algunas optimizaciones genericas en el acceso a archivos y servicios
- unix extensions, wide links - extensiones unix sólo son útiles para los clientes Unix, no Windows.

Otra seccion especial es homes, establece el modo en que tradicionalmente los directorios home Unix seran automaticamente compartidos con samba y puede contener cualquier opciones de configuracion disponible para configurar comparticiones.

- comment - descripcion visible en el explorador de Windows
- browseable - los directorios de inicio que estaran visible en el explorador de Windows
- writeable - cualquier usuario bajo cualquier circunstancia podran escribir a este recurso compartidos
- directory mask - al crear nuevos directorios seran propiedad del usuario que los crea y su grupo de Unix se establecera en el grupo predeterminado de este usuario, pero los permisos de archivo de Unix se estableceran en la mascara de numero octal tradicional dada en esta directiva.
- create mask - similar a directory mask pero para archivos ordinarios.

La seccion public la configuraremos como un recurso compartido accesible a todos los usuarios del sistema grup "wheel" y la colocaremos en el directorio /srv/publico. Las opciones adicionales son:

- path - el directorio que sera compartido
- public - accesible sin contrasena
- write list - lista de usuarios o grupos (nombres de grupo con el prefijo @), que podran escribir en este recurso compartido (los usuarios tienen que tener los adecuados
permisos dentro del propio directorio).

Despues de creado el archivo smb4.conf, Samba tiene que ser activado agregando la siguiente linea al archivo /etc/rc.conf

samba_server_enable="YES"

Sincronizando usuarios

Samba tiene que asignar usuarios que los clientes Windows utilizan para los usuarios del sistema. En otras palabras, cada usuario Windows necesita ser usuario del sistema Unix
 para que coincidan. Los sistemas Unix y Windows almacenan las contrasenas en formatos totalmente incompatibles. Para resolverlo hay que mantener manualmente los usuarios FreeBSD
 y Sincronizar con una base de datos de usuarios Samba especifica mediante la utilidad sbmpasswd (una combinacion de adduser, deleuser, etc). Es una solucion simple recomendada
 para pequenas instalaciones con varios usuarios que rara vez cambian sus contrasenas. Hay que tener en cuenta que primero tendra que agregar un usuario FreeBSD y luego un
 usuario Samba con el mismo nombre con:

 "smbpasswd -a"

 Una segunda manera de hacer lo mismo es replicar las dos bases de datos de contrasenas. En este escenario, tanto la base de datos de usuarios FreeBSD como la de Samba existen en el mismo
 tiempo, pero las contrasenas son copiadas de uno a otro segun sea necesario. Agregar la linea siguiente:

 pam password change = yes

 a la seccion global de smb4.conf para permitir a los usuarios cambiar la contrasena de Windows, que Samba propagara a la base de datos de los usuarios del sistema FreeBSD.
 En el otro sentido (cambiar la contrasena del ususario del sistema y propagarla a la base de datos de los usuarios Samba se puede activar anadiendo la siguiente linea
 al archivo /etc/pam.d/system:

 auth optional
 /usr/local/lib/pam_smbpass.so migrate

 y la linea siguiente al archivo /etc/pam.d/passwd

 passwd required
 /usr/local/lib/pam_smbpass.so nullok use_authtok try_first_pass

 Esto permitirá a los usuarios a cambiar tanto su contraseña FreeBSD y Samba contraseña en
al mismo tiempo mediante la utilidad "passwd" , así como migrate (copia) su FreeBSD
contraseña para la base de datos Samba la próxima vez que inicien sesión.
Tenga en cuenta que usted todavía necesita para mantener la pertenencia a grupos fuera de Samba, en el /etc/group, y que los usuarios todavía tienen que ser creado con el argumento

smbpasswd -a

en la base de datos de Samba.

La ultima manera es tener la base de datos de usuario principal sólo en Samba, y utilizar el Winbind facilitado por Samba para que aquellos usuarios a disposición del sistema a través de los mecanismos PAM y NSS. De esta manera que, no es necesario crear o mantener usuarios y grupos FreeBSD, sólo los usuarios y grupos de samba, y FreeBSD los trata como si fueran usuarios locales del sistema .

Permisos de archivo

Listas ACL de estilo de Windows pueden introducirse añadiendo la opción de montaje " nfsv4acls " al sistema de archivos deseado, y permitiendo que el "zfsacl" VFS plugin smb4.conf, la entrada fstab debería tener este aspecto:

/dev/da0p2 / ufs rw,nfsv4acls 1 1

Las entradas adicionales para la seccion global en el archivo nfs4.conf son:

vfs objects = zfsacl
map acl inherit = Yes
inherit permissions = Yes
inherit acls = Yes
store dos attributes = Yes

Unix es genial!.