Pequeno servidor de escritório e tradução de UID

1

Eu quero configurar um pequeno servidor para o escritório, de modo que os usuários possam armazenar seus próprios arquivos, o que também tem diretórios separados configurados para grupos para compartilhar arquivos. Eu também tenho usuários e clientes que gostariam de montar pela internet. Eu quero ser capaz de especificar o acesso e as permissões para diretórios individuais para eles também. Alguns podem estar usando o Windoze.

Eu originalmente tentei configurar uma LAN com o CIFS. No servidor eu configuro contas para mim (simon) e outro usuário criado como convidado. Eu instalei o system-config-samba. Eu configurei compartilhamentos usando a Ferramenta de Configuração do Servidor Samba, que permite que os usuários sejam adicionados junto com as senhas usadas em suas credenciais. Isto é como o /etc/samba/smb.conf parecia:

# Sample configuration file for the Samba suite for Debian GNU/Linux.
#
#
# This is the main Samba configuration file. You should read the
# smb.conf(5) manual page in order to understand the options listed
# here. Samba has a huge number of configurable options most of which 
# are not shown in this example
#
# Some options that are often worth tuning have been included as
# commented-out examples in this file.
#  - When such options are commented with ";", the proposed setting
#    differs from the default Samba behaviour
#  - When commented with "#", the proposed setting is the default
#    behaviour of Samba but the option is considered important
#    enough to be mentioned here
#
# NOTE: Whenever you modify this file you should run the command
# "testparm" to check that you have not made any basic syntactic 
# errors. 

#======================= Global Settings =======================

[global]

## Browsing/Identification ###

# Change this to the workgroup/NT-domain name your Samba server will part of
    workgroup = gannet

# server string is the equivalent of the NT Description field
    server string = %h server (Samba, Ubuntu)

# Windows Internet Name Serving Support Section:
# WINS Support - Tells the NMBD component of Samba to enable its WINS Server
#   wins support = no

# WINS Server - Tells the NMBD components of Samba to be a WINS Client
# Note: Samba can be either a WINS Server, or a WINS Client, but NOT both
;   wins server = w.x.y.z

# This will prevent nmbd to search for NetBIOS names through DNS.
    dns proxy = no

#### Networking ####

# The specific set of interfaces / networks to bind to
# This can be either the interface name or an IP address/netmask;
# interface names are normally preferred
;   interfaces = 127.0.0.0/8 eth0

# Only bind to the named interfaces and/or networks; you must use the
# 'interfaces' option above to use this.
# It is recommended that you enable this feature if your Samba machine is
# not protected by a firewall or is a firewall itself.  However, this
# option cannot handle dynamic or non-broadcast interfaces correctly.
;   bind interfaces only = yes



#### Debugging/Accounting ####

# This tells Samba to use a separate log file for each machine
# that connects
    log file = /var/log/samba/log.%m

# Cap the size of the individual log files (in KiB).
    max log size = 1000

# If you want Samba to only log through syslog then set the following
# parameter to 'yes'.
#   syslog only = no

# We want Samba to log a minimum amount of information to syslog. Everything
# should go to /var/log/samba/log.{smbd,nmbd} instead. If you want to log
# through syslog you should set the following parameter to something higher.
    syslog = 0

# Do something sensible when Samba crashes: mail the admin a backtrace
    panic action = /usr/share/samba/panic-action %d


####### Authentication #######

# Server role. Defines in which mode Samba will operate. Possible
# values are "standalone server", "member server", "classic primary
# domain controller", "classic backup domain controller", "active
# directory domain controller". 
#
# Most people will want "standalone sever" or "member server".
# Running as "active directory domain controller" will require first
# running "samba-tool domain provision" to wipe databases and create a
# new domain.
    server role = standalone server

# If you are using encrypted passwords, Samba will need to know what
# password database type you are using.  
;   passdb backend = tdbsam

    obey pam restrictions = yes

# This boolean parameter controls whether Samba attempts to sync the Unix
# password with the SMB password when the encrypted SMB password in the
# passdb is changed.
    unix password sync = yes

# For Unix password sync to work on a Debian GNU/Linux system, the following
# parameters must be set (thanks to Ian Kahan <<[email protected]> for
# sending the correct chat script for the passwd program in Debian Sarge).
    passwd program = /usr/bin/passwd %u
    passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .

# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# 'passwd program'. The default is 'no'.
    pam password change = yes

# This option controls how unsuccessful authentication attempts are mapped
# to anonymous connections
    map to guest = bad user

########## Domains ###########

#
# The following settings only takes effect if 'server role = primary
# classic domain controller', 'server role = backup domain controller'
# or 'domain logons' is set 
#

# It specifies the location of the user's
# profile directory from the client point of view) The following
# required a [profiles] share to be setup on the samba server (see
# below)
;   logon path = \%N\profiles\%U
# Another common choice is storing the profile in the user's home directory
# (this is Samba's default)
#   logon path = \%N\%U\profile

# The following setting only takes effect if 'domain logons' is set
# It specifies the location of a user's home directory (from the client
# point of view)
;   logon drive = H:
#   logon home = \%N\%U

# The following setting only takes effect if 'domain logons' is set
# It specifies the script to run during logon. The script must be stored
# in the [netlogon] share
# NOTE: Must be store in 'DOS' file format convention
;   logon script = logon.cmd

# This allows Unix users to be created on the domain controller via the SAMR
# RPC pipe.  The example command creates a user account with a disabled Unix
# password; please adapt to your needs
; add user script = /usr/sbin/adduser --quiet --disabled-password --gecos "" %u

# This allows machine accounts to be created on the domain controller via the 
# SAMR RPC pipe.  
# The following assumes a "machines" group exists on the system
; add machine script  = /usr/sbin/useradd -g machines -c "%u machine account" -d /var/lib/samba -s /bin/false %u

# This allows Unix groups to be created on the domain controller via the SAMR
# RPC pipe.  
; add group script = /usr/sbin/addgroup --force-badname %g

############ Misc ############

# Using the following line enables you to customise your configuration
# on a per machine basis. The %m gets replaced with the netbios name
# of the machine that is connecting
;   include = /home/samba/etc/smb.conf.%m

# Some defaults for winbind (make sure you're not using the ranges
# for something else.)
;   idmap uid = 10000-20000
;   idmap gid = 10000-20000
;   template shell = /bin/bash

# Setup usershare options to enable non-root users to share folders
# with the net usershare command.

# Maximum number of usershare. 0 (default) means that usershare is disabled.
;   usershare max shares = 100

# Allow users who've been granted usershare privileges to create
# public shares, not just authenticated ones
    usershare allow guests = yes
    username map = /etc/samba/smbusers
    security = user
;   encrypt passwords = yes
;   guest ok = no
;   guest account = nobody

#======================= Share Definitions =======================

# Un-comment the following (and tweak the other settings below to suit)
# to enable the default home directory shares. This will share each
# user's home directory as \server\username
;[homes]
;   comment = Home Directories
;   browseable = no

# By default, the home directories are exported read-only. Change the
# next parameter to 'no' if you want to be able to write to them.
;   read only = yes

# File creation mask is set to 0700 for security reasons. If you want to
# create files with group=rw permissions, set next parameter to 0775.
;   create mask = 0700

# Directory creation mask is set to 0700 for security reasons. If you want to
# create dirs. with group=rw permissions, set next parameter to 0775.
;   directory mask = 0700

# By default, \server\username shares can be connected to by anyone
# with access to the samba server.
# Un-comment the following parameter to make sure that only "username"
# can connect to \server\username
# This might need tweaking when using external authentication schemes
;   valid users = %S

# Un-comment the following and create the netlogon directory for Domain Logons
# (you need to configure Samba to act as a domain controller too.)
;[netlogon]
;   comment = Network Logon Service
;   path = /home/samba/netlogon
;   guest ok = yes
;   read only = yes

# Un-comment the following and create the profiles directory to store
# users profiles (see the "logon path" option above)
# (you need to configure Samba to act as a domain controller too.)
# The path below should be writable by all users so that their
# profile directory may be created the first time they log on
;[profiles]
;   comment = Users profiles
;   path = /home/samba/profiles
;   guest ok = no
;   browseable = no
;   create mask = 0600
;   directory mask = 0700

[printers]
    comment = All Printers
    browseable = no
    path = /var/spool/samba
    printable = yes
;   guest ok = no
;   read only = yes
    create mask = 0700

# Windows clients look for this share name as a source of downloadable
# printer drivers
[Simon]
    comment = Simon Fanshawe Personal Files
    path = /home/simon
    writeable = yes
;   browseable = yes
    valid users = simon

[Gannet]
    comment = Gannet Limited Files
    path = /home/gannet
    writeable = yes
;   browseable = yes
    valid users = simon

[Library]
    comment = Files for general access.
    path = /home/library
    writeable = yes
;   browseable = yes
    valid users = guest, simon

[Backup&Archives]
    comment = Files for general access.
    path = /home/backup&archives
    writeable = yes
;   browseable = yes
    valid users = simon

[Shared]
    comment = General drive for sharing files.
    path = /home/shared
    writeable = yes
;   browseable = yes
    guest ok = yes

As máquinas clientes tinham todas as montagens para todos os usuários configuradas em / etc / fstab. Aqui está como o arquivo da minha máquina principal parecia:

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=fed8d5b9-ef42-4798-a4ea-b94dc5e4c9c6 /               ext4    errors=remount-ro 0       1
# swap was on /dev/sda5 during installation
UUID=599e172b-03b4-473e-b61b-2a907884f830 none            swap    sw              0       0
# Samba shares added by SGF 23-06-2016.  Important that users & groups exist on the server and that UIDs are the same on server & client.
# Shared directories need to be installed in home directory on the server a well as mount points in the client.  Directory owners and
# permissions are as set up on the server which is why UIDs & GIDs need to match.
//gannet8.local/Shared  /home/simon/Shared  cifs    auto,user,rw,credentials=/home/simon/.sysaccess
//gannet8.local/Shared  /home/visitor/Shared    cifs    auto,user,rw,credentials=/home/guest/.sysaccess
//gannet8.local/Library /home/simon/Library cifs    auto,user,rw,credentials=/home/simon/.sysaccess
//gannet8.local/Library /home/visitor/Library   cifs    auto,user,ro,credentials=/home/guest/.sysaccess
//gannet8.local/Gannet  /home/simon/Gannet  cifs    auto,user,rw,credentials=/home/simon/.sysaccess
//gannet8.local/Simon   /home/simon/Home    cifs    auto,user,rw,credentials=/home/simon/.sysaccess

Eu queria adicionar mais usuários ao sistema, mas imediatamente tive problemas porque a maioria dos usuários tem um UID maioritariamente 1000 ou perto de suas máquinas locais. Quando tentei mudar os UIDs em máquinas locais para aqueles no servidor, ainda não consegui fazê-lo funcionar, pois os arquivos no diretório compartilhado tinham propriedades e permissões definidas pelos clientes, o que impedia o acesso de outras pessoas.

Existe uma maneira simples de configurar o servidor de forma que os UIDs e os GIDs sejam configurados no servidor, mas apareçam corretos para o usuário (ou seja, traduzidos para 1000 etc.) nas montagens em suas próprias máquinas. Tudo o que eu estou depois é ter autenticação feita no servidor de tal forma que eu possa controlar o acesso e as permissões para diretórios individuais. Eu tentei olhar para o OpenLDAP na documentação do Ubuntu, mas depois de cinco minutos minha cabeça explodiu.

Deve haver uma maneira simples de fazer isso. Eu estou usando o Mint no momento, mas pode migrar para versões mainstream do Ubuntu, pelo menos no servidor. Fico feliz em trabalhar com linha de comando e arquivos de texto, desde que não seja muito complicado. Eu ficaria feliz em perseverar com o OpenLDAP se esse for o caminho a ser seguido.

    
por Gannet 27.06.2017 / 21:53

1 resposta

0

Quando você monta a pasta do servidor no cliente pela rede, há 2 perguntas que você precisa fazer:

  • Qual UID / GID deve ter arquivos do ponto de vista do SERVIDOR
  • Qual UID / GID deve ter arquivos do ponto de vista do CLIENTE

Use ls -lh na pasta para verificar o proprietário do arquivo e seu grupo. Observe que o Linux traduz o UID para o usuário, se possível, ou simplesmente o exibe como número, se não puder.

A menos que você esteja usando algum Banco de Dados de Contas compartilhado como LDAP (OpenLDAP ou Windows Active Directory) e conecte seu Linux a ele usando o PAM, você tem diferentes bancos de dados de usuários no cliente e servidor, cada um com seu próprio usuário. mapeamento de senha-UID ( /etc/passwd file e sua sombra com senha). O cliente pode ter o usuário "joe" com o UID 1000 e o servidor pode ter o usuário "joe" com o UID 2000 e "mary" com o UID 1000.

Existem várias maneiras de resolvê-lo com o Samba.

Use as extensões do Unix .

São extensões do protocolo SMB que permitem que servidor informe o UID ao cliente . Então, quando você se conectar ao servidor prividing user=joe server:

  • traduz o joe para o UID usando seu próprio banco de dados
  • faz chover qualquer arquivo criado com ele
  • informa ao cliente seu UID e o cliente o mapeia para algum usuário local.

Funciona perfeito, mas você precisa sincronizar seu UIDS no cliente e servidor , o que pode ser difícil de fazer manualmente (use o OpenLDAP com o pam_ldap, se você realmente quiser).

Eu acredito que este é o seu problema!

A pior coisa acontece quando o servidor reporta algum uid e não há nenhum usuário com tal uid no cliente. Então, em vez do nome do usuário, você vê o número.

Faça o cliente escolher qual usuário usar

Quando você monta seu compartilhamento com uid= e desabilita a configuração de extensões unix unix extensions = no no servidor smb.conf .

  • O servidor usa o usuário da autenticação ( user= de credenciais)
  • O cliente usa uid= .

Você nem precisa ter os mesmos usuários no cliente e no servidor, mas é conveniente que eles sejam iguais. Mas eles podem ter UIDS diferentes.

Então, aqui está o que você deve fazer para adicionar um novo usuário:

No servidor

  • unix extensions = no na seção global em smb.conf
  • useradd -m joe
  • smbpasswd -a joe (digite a senha e lembre-se)

No cliente

  • useradd -m joe && mkdir /home/joe/Home && chown joe /home/joe/Home
  • Em /etc/fstab

//gannet8.local/joe /home/joe/Home cifs auto,user,rw,uid=joe,gid=joe,user=joe,password=PASS_HERE

Você deve ser capaz de criar quantos usuários desejar, mas depois de 10 a 15 deles você deve pensar no OpenLDAP ou no Active Directory (se tiver muitos clientes Windows).

Ler link

Especialmente na seção "PROPRIEDADE E AUTORIZAÇÃO DE ARQUIVOS E DIRETÓRIOS"

    
por 30.06.2017 / 04:24