我们需要弄清楚为什么 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
两个身份验证令牌应该会出现。如果没有,请回复答案。我已经看到了很多可能的错误,但让我们逐一排除它们。