Нам нужно выяснить, почему пользователям домена 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
для двух токенов аутентификации должны появиться. Если нет, отправьте ответ. Я видел множество возможных неисправностей, но давайте исключим их одну за другой.