samba4 域成员服务器:用户无法看到共享列表,而是提示他们输入 samba 密码

samba4 域成员服务器:用户无法看到共享列表,而是提示他们输入 samba 密码

我们需要弄清楚为什么 Windows 域用户在访问 Samba 服务器时会被提示输入密码。他们可以在 Microsoft Windows 网络下看到服务器,但看不到共享列表,因为当他们单击服务器名称时,会出现一个密码对话框。

对话框就是问题所在。它不应该出现。我提供这个以防万一有帮助:域登录无效。同样,我不需要这个来工作,但配置了本地 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 (注意,有些系统使用 compact 而不是 files):

# 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 [email protected]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

答案1

毫无疑问,这是某种身份验证机制故障。我猜 Kerberos 对你有用吧?

kinit [email protected]

kinit [email protected]

之后检查

klist

两个身份验证令牌应该会出现。如果没有,请回复答案。我已经看到了很多可能的错误,但让我们逐一排除它们。

相关内容