Pesquisa de site

Samba 4 com Active Directory em instalação baseada em CentOS 7 rpm com suporte a compartilhamento


Nesta página

  1. Prepare o servidor CentOS 7
  2. Instale o Samba 4 no CentOS 7
  3. Configuração do Samba 4
  4. Criando o compartilhamento Samba com suporte Windows ACL
  5. Criando um compartilhamento Samba

No último tutorial, mostrei como configurar o Samba no Centos 7 compilando o Samba a partir do código-fonte, pois o pacote fornecido pela RedHat não oferece suporte ao Active Directory. Percebi que existe um repositório chamado Wing que fornece o samba4 rpm com suporte AD. Neste tutorial, usarei este repositório para instalação do Samba. Também mostrarei como criar um compartilhamento de samba.

Neste tutorial, usarei um servidor CentOS 7 com uma instalação mínima como base com o SELinux ativado.

Prepare o servidor CentOS 7

Verifique o status do SELinux.

[ ~]# sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   enforcing
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      28
[ ~]#
 

Faça uma entrada no arquivo de host com o endereço IP do servidor seguido pelo nome de host completo (fqdn) e, em seguida, a parte local do nome de host.

[ ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.190   samba4.sunil.cc samba4
[ ~]#
      

Instale o repositório Epel CentOS.

[ ~]# yum install epel-release -y

Instale os pacotes básicos.

[ ~]# yum install vim wget authconfig krb5-workstation -y
    

Agora instale o repositório de asa.

[ ~]# cd /etc/yum.repos.d/
[ yum.repos.d]# wget http://wing-net.ddo.jp/wing/7/EL7.wing.repo
[' /etc/yum.repos.d/EL7.wing.repo
[ yum.repos.d]# yum clean all
Loaded plugins: fastestmirror
Cleaning repos: base extras updates wing wing-source
Cleaning up everything
Cleaning up list of fastest mirrors
[ yum.repos.d]#
   

Instale o Samba 4 no CentOS 7

Instalando os pacotes Samba4 do repositório wing com o yum.

[ yum.repos.d]# yum install -y samba45 samba45-winbind-clients samba45-winbind samba45-client\
samba45-dc samba45-pidl samba45-python samba45-winbind-krb5-locator perl-Parse-Yapp\
perl-Test-Base python2-crypto samba45-common-tools
    

Remova esses arquivos.

 
[ ~]# rm -rf /etc/krb5.conf
[ ~]# rm -rf /etc/samba/smb.conf
    

Configuração do Samba 4

Agora faremos o provisionamento do domínio.

[ ~]# samba-tool domain provision --use-rfc2307 --interactive
 Realm [SUNIL.CC]:
 Domain [SUNIL]:
 Server Role (dc, member, standalone) [dc]:
 DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]:
 DNS forwarder IP address (write 'none' to disable forwarding) [4.2.2.1]:
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=sunil,DC=cc
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=sunil,DC=cc
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role:           active directory domain controller
Hostname:              samba4
NetBIOS Domain:        SUNIL
DNS Domain:            sunil.cc
DOMAIN SID:            S-1-5-21-1578983437-3114190590-2362936743
[ etc]#
    

Verifique se as portas estão abertas no firewall.

[ etc]#firewall-cmd --add-port=53/tcp --permanent;firewall-cmd --add-port=53/udp --permanent;firewall-cmd --add-port=88/tcp --permanent;firewall-cmd --add-port=88/udp --permanent; \
firewall-cmd --add-port=135/tcp --permanent;firewall-cmd --add-port=137-138/udp --permanent;firewall-cmd --add-port=139/tcp --permanent; \
firewall-cmd --add-port=389/tcp --permanent;firewall-cmd --add-port=389/udp --permanent;firewall-cmd --add-port=445/tcp --permanent; \
firewall-cmd --add-port=464/tcp --permanent;firewall-cmd --add-port=464/udp --permanent;firewall-cmd --add-port=636/tcp --permanent; \
firewall-cmd --add-port=1024-3500/tcp --permanent;firewall-cmd --add-port=3268-3269/tcp --permanent
[ ~]# firewall-cmd --reload

O pacote não fornece o script de inicialização, vamos adicioná-lo agora.

[ ~]# cat  /etc/systemd/system/samba.service
[Unit]
Description= Samba 4 Active Directory
After=syslog.target
After=network.target

[Service]
Type=forking
PIDFile=/var/run/samba.pid
ExecStart=/usr/sbin/samba

[Install]
WantedBy=multi-user.target
[ ~]#
[ ~]# systemctl enable samba
Created symlink from /etc/systemd/system/multi-user.target.wants/samba.service to /etc/systemd/system/samba.service.
[ ~]# systemctl restart samba

Todas as outras etapas são semelhantes ao meu artigo anterior

para configurar hosts Windows e Linux, consulte-o

Instalação do controlador de domínio Samba4 a partir da fonte

Criando o compartilhamento Samba com suporte Windows ACL

Precisamos configurar a ACL estendida para samba4. Adicione o seguinte no arquivo smb.conf em global.

[ ~]# cat /etc/samba/smb.conf
# Global parameters
[global]
        ------------
		-------------
        vfs objects = acl_xattr
        map acl inherit = yes
        store dos attributes = yes
		------------
		-------------

[ ~]#

Agora reinicie o serviço Samba.

[ ~]# systemctl restart samba

Somente usuários e grupos com o privilégio SeDiskOperatorPrivilege concedido podem configurar permissões de compartilhamento.

[ ~]# net rpc rights grant "SUNIL\Domain Admins" SeDiskOperatorPrivilege -U "USER\administrator"
Enter USER\administrator's password:
Successfully granted rights.
[ ~]#

Antes de criarmos o compartilhamento, precisamos garantir que o servidor samba4 se autentique consigo mesmo.

Não podemos fazer o método usual, pois não funciona, pois o pacote existente da asa entrará em conflito com os pacotes fornecidos pela RedHat, não podemos usar o sssd aqui. Estaremos usando o winbind para fazer isso funcionar.

Por favor, use o método abaixo. Isso é necessário para criar o compartilhamento de samba com permissões específicas

Instale o pacote abaixo.

[ ~]#yum -y install authconfig-gtk*

Execute o comando.

[ yum.repos.d]# authconfig-tui

selecione o winbind, siga os próximos passos.

Você não poderá digitar a senha, basta pressionar ok.

Em seguida, comente as linhas em /etc/samba/smb.conf e reinicie o serviço samba.

Sua configuração deve ficar assim:

[ ~]# cat /etc/samba/smb.conf
# Global parameters
[global]
#--authconfig--start-line--

# Generated by authconfig on 2017/05/26 17:23:04
# DO NOT EDIT THIS SECTION (delimited by --start-line--/--end-line--)
# Any modification may be deleted or altered by authconfig in future

#   workgroup = SUNIL
#   password server = samba4.sunil.cc
#   realm = SUNIL.CC
#   security = ads
#   idmap config * : range = 16777216-33554431
#   template shell = /sbin/nologin
#  kerberos method = secrets only
#   winbind use default domain = false
#   winbind offline logon = false

#--authconfig--end-line--
        netbios name = SAMBA4
        realm = SUNIL.CC
        workgroup = SUNIL
        dns forwarder = 4.2.2.1
        server role = active directory domain controller
        idmap_ldb:use rfc2307 = yes
        vfs objects = acl_xattr
        map acl inherit = yes
        store dos attributes = yes

[netlogon]
        path = /var/lib/samba/sysvol/sunil.cc/scripts
        read only = No

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No
[ ~]#
[ ~]# systemctl restart samba

Verifique se podemos preencher os usuários e grupos:

[ ~]# wbinfo -u
SUNIL\administrator
SUNIL\sambauser
SUNIL\testuser
SUNIL\krbtgt
SUNIL\guest
[ ~]# wbinfo -g
SUNIL\cert publishers
SUNIL\ras and ias servers
SUNIL\allowed rodc password replication group
SUNIL\denied rodc password replication group
SUNIL\dnsadmins
SUNIL\enterprise read-only domain controllers
SUNIL\domain admins
SUNIL\domain users
SUNIL\domain guests
SUNIL\domain computers
SUNIL\domain controllers
SUNIL\schema admins
SUNIL\enterprise admins
SUNIL\group policy creator owners
SUNIL\read-only domain controllers
SUNIL\dnsupdateproxy
[ ~]#

Modifique as linhas em nsswitch.conf:

[ ~]# cat /etc/nsswitch.conf
----------
---------
passwd:     files winbind
shadow:     files winbind
group:      files winbind
hosts:      files dns wins
services:   files winbind
netgroup:   files winbind

---------
----------

Agora verifique se conseguimos obter o nome de usuário usando o comando id:

[ ~]# id testuser
uid=3000019(SUNIL\testuser) gid=100(users) groups=100(users),3000019(SUNIL\testuser),3000009(BUILTIN\users)
[ ~]#

Criando um compartilhamento Samba

Estarei criando dois compartilhamentos, um acessível apenas pelo testuser e o outro compartilhamento acessível por todos os usuários no grupo de usuários do domínio.

O compartilhamento acessível pelo testuser será chamado de testshare.

O compartilhamento acessível a todos os usuários será chamado de compartilhamento comum.

[ ~]# mkdir /testshare
[ ~]# mkdir /commonshare
[ ~]# chmod 770 /testshare
[ ~]# chmod 770 /commonshare
[ ~]# chown -R root:testuser /testshare
[ ~]# chown -R root:"Domain Users" /commonshare

Agora adicione as entradas em smb.conf

[ ~]# cat /etc/samba/smb.conf
# Global parameters
[global]
        netbios name = SAMBA4
        realm = SUNIL.CC
        workgroup = SUNIL
        dns forwarder = 4.2.2.1
        server role = active directory domain controller
        idmap_ldb:use rfc2307 = yes
        vfs objects = acl_xattr
        map acl inherit = yes
        store dos attributes = yes

[netlogon]
        path = /var/lib/samba/sysvol/sunil.cc/scripts
        read only = No

[sysvol]
        path = /var/lib/samba/sysvol
        read only = No
[TestShare]
        comment = Test share accessible by testuser
        path = /testshare
        valid users = SUNIL\testuser
        writable = yes
        read only = no
        force create mode = 0660
        create mask = 0770
        directory mask = 0770
        force directory mode = 0770
        access based share enum = yes
        hide unreadable = yes
[CommonShare]
         comment = Accessible by all the users
          path = /commonshare
          valid users = "@SUNIL\Domain Users"
          writable = yes
        read only = no
        force create mode = 0660
        create mask = 0777
        directory mask = 0777
        force directory mode = 0770
        access based share enum = yes
        hide unreadable = yes
[ ~]#

Reinicie o serviço samba.

[ ~]# systemctl restart samba

Acesse o compartilhamento do samba como usuário de teste.

Aqui você verá que tanto o testshare quanto o commonshare estão visíveis.

Testado criando arquivos e pastas em testshare.

[ /]# cd /testshare/
[ testshare]# ls -l
total 8
-rwxrwx---+ 1 SUNIL\testuser users 0 May 27 22:56 1.txt
drwxrwx---+ 2 SUNIL\testuser users 6 May 27 22:56 test
[ testshare]#

Agora estou logando como um usuário diferente, apenas o commonshare está visível:

Criando arquivos em compartilhamento comum.

[ commonshare]# ls -l
total 8
drwxrwxrwx+ 2 SUNIL\testuser  users 6 May 27 23:02 test
drwxrwxrwx+ 2 SUNIL\sambauser users 6 May 27 23:07 test2
[ commonshare]#

É assim que criamos compartilhamentos no Samba 4.