Precisamos descobrir por que os usuários do domínio do Windows estão sendo solicitados por uma senha ao acessar o servidor samba. Eles podem ver o servidor no Microsoft Windows Network, mas eles não podem ver a lista de compartilhamento, porque quando eles clicam no nome do servidor, eles recebem um diálogo de senha.
O diálogo é o problema. Isso não deve aparecer. Eu vou oferecer isso em caso de ajuda: Um login de domínio não é válido. Novamente, eu não preciso disso para funcionar, mas um usuário com uma senha samba local configurada não pode autenticar (setup com smbpasswd
).
Em um ponto, eu removi uma parte extra do smb.conf e reiniciei os serviços nmb,smb,winbind
e ele começou a funcionar. Não me lembro de fazer outras alterações. Mais tarde, fiz uma reinicialização para ver se era estável e não permiti que o usuário visualizasse os compartilhamentos desde então.
Na verdade, estava funcionando por um tempo, permitindo que as pessoas visualizassem os compartilhamentos e até mesmo os deixasse em pastas (conforme autorizado pelo grupo de segurança do Active Directory), conforme planejado.
Minha configuração é a seguinte:
link
Desativei temporariamente o firewall. Depois de corrigido, incluí regras de firewall e usei alguns comandos deste guia: link
Esta é a minha configuração principal com validação realizada por testparm
:
# testparm
Load smb config files from /etc/samba/smb.conf
Processing section "[public]"
Processing section "[accounting]"
Processing section "[developer]"
Loaded services file OK.
Server role: ROLE_DOMAIN_MEMBER
Press enter to see a dump of your service definitions
[global]
workgroup = MYWORKGROUP
realm = MYWORKGROUP.COM
server string = Samba4 Server
security = ADS
kerberos method = dedicated keytab
winbind enum users = Yes
winbind enum groups = Yes
winbind use default domain = Yes
winbind nss info = rfc2307
idmap config MYWORKGROUP:range = 500-40000
idmap config MYWORKGROUP:schema_mode = rfc2307
idmap config MYWORKGROUP:backend = ad
idmap config *:range = 70001-80000
idmap config * : backend = tdb
[public]
path = /mnt/public
force group = domain users
read only = No
[accounting]
path = /mnt/accounting
valid users = accounting
force group = accounting
read only = No
[developer]
path = /mnt/developer
force group = developer
read only = No
/etc/krb5.conf
# cat krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = MYWORKGROUP.COM
dns_lookup_realm = true
dns_lookup_kdc = true
ticket_lifetime = 24h
forwardable = yes
[appdefaults]
pam = {
debug = false
ticket_lifetime = 36000
renew_lifetime = 36000
forwardable = true
krb4_convert = false
}
Winbind com sufixo após os arquivos (observe que alguns sistemas usam compactos em vez de arquivos):
# egrep winbind nsswitch.conf
passwd: files winbind
shadow: files winbind
group: files winbind
Eu não vi nenhum recurso de segurança do SELinux Samba que precisava estar ativado:
# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_use_samba --> off
# getsebool -a | grep smb
allow_smbd_anon_write --> off
Embora eu tenha que iniciar nmbd
em um script, pois o script de início de serviço está gerando um erro ( bind failed on pipe socket /var/run/samba/nmbd/unexpected: Address already in use
) nessa plataforma. Ele funcionou em um ponto quando eu simplesmente comecei usando o comando: nmbd
(duas mensagens aparecem em log.nmbd: nmbd ...started
, standard input is not a socket, assuming -D option
). Então, aqui está o meu script de reinicialização:
# cat smb-restart
service nmb restart
nmbd
service smb restart
service winbind restart
ps -eaf|egrep "mbd|winbind"
Tudo parece estar em execução:
# ps -eaf|egrep "mbd|winbind"
root 25057 1 0 12:38 ? 00:00:00 nmbd
root 25071 1 0 12:38 ? 00:00:00 smbd
root 25087 1 0 12:38 ? 00:00:00 winbindd
root 25091 25087 0 12:38 ? 00:00:00 winbindd
root 25092 25071 0 12:38 ? 00:00:00 smbd
root 25512 25087 0 12:45 ? 00:00:00 winbindd
root 25513 25087 0 12:45 ? 00:00:00 winbindd
root 25514 25087 0 12:45 ? 00:00:00 winbindd
root 25579 25087 0 12:45 ? 00:00:00 winbindd
Não tenho certeza se isso é necessário, mas adicionei comandos pam winbind aqui:
# cat /etc/pam.d/system-auth-ac
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth sufficient pam_fprintd.so
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 500 quiet
auth sufficient pam_krb5.so use_first_pass
auth sufficient pam_winbind.so use_first_pass
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account sufficient pam_winbind.so use_first_pass
account required pam_permit.so
password requisite pam_cracklib.so try_first_pass retry=3 type=
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password sufficient pam_krb5.so use_authok
password sufficient pam_winbind.so use_first_pass
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
session optional pam_krb5.so
session optional pam_winbind.so use_first_pass
Eu entrei no domínio com sucesso e vejo usuários e grupos de domínio por meio de wbinfo -u
e wbinfo -g
.
Eu posso listar e renovar o principal de serviço com kinit [email protected]
e klist
.
Acho que o winbind está bem carregado:
# ldconfig -v | grep winbind
libnss_winbind.so.2 -> libnss_winbind.so.2
# locate libnss_winbind
/lib64/libnss_winbind.so
/lib64/libnss_winbind.so.2
/usr/lib64/libnss_winbind.so
# locate libnss_wins
/lib64/libnss_wins.so
/lib64/libnss_wins.so.2
/usr/lib64/libnss_wins.so
Eu tenho um usuário chamado jcalfee, mas o comando id
não consegue encontrá-los:
# wbinfo -u|egrep jcalfee
jcalfee
# id jcalfee
id: jcalfee: No such user
No entanto, posso usar chgrp
usando um grupo de domínio.
chgrp "domain users" /mnt/public
Meu arquivo host contém uma linha como essa, fui obrigado a colocar o nome totalmente resolvido do smb-host primeiro na linha 127.0.0.1:
127.0.0.1 smb-host.domain.com samba-host localhost ....
É assim que eu configuro um novo diretório de compartilhamento no SELinux, isso tem funcionado:
function mkdir_samba_share {
path=${1?directory path}
set -o xtrace
mkdir -p "$path"
semanage fcontext -a -t samba_share_t "$path(/.*)?"
restorecon -R "$path"
chmod 770 -R "$path"
chgrp "domain users" "$path"
ls -ldZ "$path"
set +o xtrace
}
Eu adicionei um keytab (isso irá avisar se o seu smb.conf não contiver um método kerberos global).
net ads keytab create -U Administrator%password