¿Cómo crear un recurso compartido Samba que se pueda escribir desde Windows sin permisos 777?

33

Tengo una ruta en una máquina Linux (Debian 8) que quiero compartir con Samba 4 en computadoras con Windows (Win7 y 8 en un dominio). En mi smb.confhice lo siguiente:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
guest ok = yes
public = yes

Tengo acceso de lectura perfecto desde Windows. Pero para tener acceso de escritura, debo hacerlo chmod -R 777 /path/to/sharepara poder escribir desde Windows.

Lo que quiero es acceso de escritura desde Windows después de proporcionar las credenciales de Linux del propietario de Linux /path/to/share.

Ya probé:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes

Luego, Windows solicita credenciales, pero no importa lo que ingrese, siempre es denegado.

¿Cuál es la forma correcta de obtener acceso de escritura a los recursos compartidos de Samba desde una computadora con dominio de Windows sin otorgar 777?

Foo Bar
fuente

Respuestas:

49

Recomiendo crear un usuario dedicado para ese recurso compartido y especificarlo en force user(ver documentos) .

Cree un usuario ( shareuserpor ejemplo) y establezca el propietario de todo en la carpeta compartida para ese usuario:

adduser --system shareuser
chown -R shareuser /path/to/share

Luego, agregue force usery configure la máscara de permisos en smb.conf:

[myshare]
path = /path/to/share
writeable = yes
browseable = yes
public = yes
create mask = 0644
directory mask = 0755
force user = shareuser

Tenga en cuenta que guest okes sinónimo de public.

yaegashi
fuente
1
Tuve un problema similar y todas las búsquedas en Google mostraron la manera sucia de simplemente usar 777. Quería 775 para mi carpeta compartida y quería que se crearan archivos usando mi "defaultUser" de Linux, también usé public = yes. La carpeta era 775, crear y dir máscara era 775 pero en Windows no se podía escribir y no pude entender por qué. Agregar force user = defaultUserhizo el trabajo por mí.
firepol
No puedo hacer que esto funcione, cada vez que trato de compartir el directorio, solo aparece una ventana que me dice que necesito dar permiso de escritura a "otros" para poder compartir el directorio.
Mark Kramer
Lo entendí, el problema era la ubicación de smb.conf. La documentación de Google e incluso sambas dijo que el archivo debería estar en, /usr/local/samba/libpero en realidad está en/etc/samba
Mark Kramer
1
@ MarkKramer Es una buena idea seguir los documentos incluidos en su distribución específica de Linux porque muchas distribuciones reorganizan los archivos para que se ajusten al FHS (Estándar de jerarquía del sistema de archivos) de la Fundación Linux. Recomiendo leer y buscar los documentos entregados con su distribución porque google no siempre es la mejor respuesta, por ejemplo, puede obtener información para una versión diferente del software. Atentamente.
RobertL
2

En la configuración del recurso compartido smb.conf, deberá especificar los nombres de los usuarios y / o grupos que pueden escribir en el recurso compartido, utilizando una write list = ...línea.

Ejemplo:

[myshare]
...
write list = my_linux_username

Luego, deberá usar el smbpasswdcomando para configurar una contraseña para autenticarse my_linux_usernamepara Samba:

sudo smbpasswd -a my_linux_username

Este paso es necesario porque las contraseñas estándar del sistema /etc/shadowestán en algoritmos hash que son incompatibles con los algoritmos hash de contraseña utilizados en el protocolo SMB. Cuando un cliente envía un paquete de autenticación SMB, incluye una contraseña hash. Solo se puede comparar con otro hash de contraseña que use el mismo algoritmo.

(Las instrucciones muy antiguas del milenio anterior pueden recomendar deshabilitar el cifrado de contraseñas en Samba y usar ciertos hacks de registro para permitir que Windows emita contraseñas no encriptadas a la red. Este consejo es obsoleto : esos hacks de registro ya no funcionan en las versiones actuales de Windows, y permita que cualquiera que pueda monitorear el tráfico de su red capture su contraseña de manera trivial).


Hay una cosa más que puede tener que hacer del lado del cliente. Cuando su sistema cliente de Windows está unido a un dominio de Active Directory y ha iniciado sesión con una cuenta AD, automáticamente antepone todos los nombres de usuario no calificados con el nombre del dominio AD del usuario, es decir, se autenticará como AD_DOMAIN\your_username, no solo your_username.

Si ha iniciado sesión con una cuenta local (o su sistema cliente no está unido a un dominio AD), Windows puede prefijar automáticamente el nombre de usuario con el nombre de host del cliente a menos que especifique otro nombre de dominio.

Para iniciar sesión con éxito en un servidor Samba independiente desde un cliente Windows independiente, es posible que deba especificar su nombre de usuario como SAMBA_SERVER_HOSTNAME\your_username.

De lo contrario, Samba verá el nombre de usuario como WINDOWS_CLIENT_HOSTNAME\your_username, concluirá que no tiene forma de verificar ningún usuario que pertenezca al dominio nombrado WINDOWS_CLIENT_HOSTNAMEy rechazará el inicio de sesión.

(Las versiones más recientes de Samba pueden tener una verificación incorporada para esta situación específica, y pueden permitirle acceder de todos modos. Pero así es básicamente cómo funciona la autenticación SMB "bajo el capó", y si necesita lidiar con versiones antiguas de Samba , podría ser útil aún).

telcoM
fuente
1

Estaba buscando esto porque tenía prisa y ni siquiera tuve tiempo para concentrarme en crear usuarios y así ...

Solo tenía que sacar los datos de una máquina Debian 9 lo antes posible y esta fue la forma más rápida que pensé, si desea evitar omitir comandos, también puede hacerlo, pero obviamente no se recomienda a menos que esté en un darse prisa .

[mymfolder]
path = /mymfolder
writeable = yes
browseable = yes
public = yes
create mask = 0777
directory mask = 0777
force user = root 
Alpha2k
fuente
Y si sigue esta ruta, puede restringir por host utilizando la opción "hosts allow". Ver: samba.org/samba/docs/server_security.html
ctorx