Назад | Перейти на главную страницу

Сервер-член домена samba4: пользователи не могут видеть список общих ресурсов, вместо этого им предлагается ввести пароль samba

Нам нужно выяснить, почему пользователям домена Windows предлагается ввести пароль при доступе к серверу Samba. Они могут видеть сервер в сети Microsoft Windows Network, но они не могут видеть список общих ресурсов, потому что, когда они щелкают имя сервера, они получают диалог пароля.

Диалог - это проблема. Этого не должно быть. Я предлагаю это в случае, если это поможет: логин в домене недействителен. Опять же, мне это не нужно для работы, но пользователь с настроенным локальным паролем samba также не может пройти аутентификацию (настройка с smbpasswd).

В какой-то момент я удалил лишнюю долю в smb.conf и перезапустил службы. nmb,smb,winbind и он начал работать. Других изменений я не припомню. Позже я перезагрузился, чтобы убедиться, что он стабилен, и с тех пор он не разрешал пользователю просматривать общие ресурсы.

Он действительно работал какое-то время, он позволял людям видеть общие ресурсы и даже позволял им находиться в этих папках (как разрешено с помощью группы безопасности Active Directory), как было задумано.

Моя установка следующая: https://wiki.samba.org/index.php/Samba4/Domain_Member

Я временно отключил брандмауэр. После исправления я включил правила брандмауэра и использовал некоторые команды из этого руководства: http://wiki.centos.org/HowTos/SetUpSamba

Это моя основная конфигурация с проверкой, выполненной 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 с суффиксом после файлов (обратите внимание, что в некоторых системах вместо файлов используется компактный):

# egrep winbind nsswitch.conf
passwd:     files winbind
shadow:     files winbind
group:      files winbind

Я не видел никаких функций безопасности SELinux Samba, которые необходимо было включить:

# 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

Хотя мне нужно начинать nmbd в сценарии, поскольку сценарий запуска службы выдает ошибку (bind failed on pipe socket /var/run/samba/nmbd/unexpected: Address already in use) на этой платформе. Это сработало в какой-то момент, когда я просто запустил его с помощью команды: nmbd (в log.nmbd появляются два сообщения: nmbd ...started, standard input is not a socket, assuming -D option). Итак, вот мой сценарий перезапуска:

# cat smb-restart 
service nmb restart
nmbd
service smb restart
service winbind restart
ps -eaf|egrep "mbd|winbind"

Кажется, все работает:

# 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

Не уверен, требуется ли это, но я добавил здесь команды pam winbind:

# 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

Я успешно присоединился к домену и могу видеть пользователей и группы домена через wbinfo -u и wbinfo -g.

Я могу перечислить и обновить принципала службы с помощью kinit Administrator@MYWORKGROUP.COM и klist.

Думаю, winbind загружается нормально:

# 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

У меня есть пользователь jcalfee, но id команда не может их найти:

# wbinfo -u|egrep jcalfee
jcalfee
# id jcalfee
id: jcalfee: No such user

Однако я могу chgrp используя доменную группу.

chgrp "domain users" /mnt/public

Мой файл хоста содержит такую ​​строку, мне нужно было сначала поместить полностью разрешенное имя smb-host в строку 127.0.0.1:

127.0.0.1   smb-host.domain.com samba-host localhost ....

Вот как я настраиваю новый общий каталог в SELinux, это работает:

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
}

Я добавил keytab (это будет предупреждать, если ваш smb.conf не содержит глобального метода kerberos).

net ads keytab create -U Administrator%password

Несомненно, это своего рода сбой механизма аутентификации. Я полагаю, вам подходит Kerberos?

kinit administrator@MYWORKGROUP.COM

и

kinit some_valid_user@MYWORKGROUP.COM

Потом проверьте

klist

для двух токенов аутентификации должны появиться. Если нет, отправьте ответ. Я видел множество возможных неисправностей, но давайте исключим их одну за другой.