Jam*_*mie 18 ubuntu active-directory samba cifs pam
我正在使用 Ubuntu 10.04 服务器。
Jam*_*mie 27
[编辑] 我已经测试了Ubuntu 10.04 Server (21/May/2010)的完整版本。
我已将驻留在 Windows 网络上的Ubuntu 10.04 Server LTS配置为使用活动目录对登录进行身份验证,然后挂载 Windows 共享以用作主目录。
这是我从 Ubuntu 的初始安装开始所做的。
获取更新
# sudo apt-get update && sudo apt-get upgrade
安装 SSH 服务器 ( sshd)
# sudo apt-get install openssh-server
有些人会争辩说,您应该通过禁用 root 登录来“锁定 sshd”。我想如果你足够聪明来破解一个 ssh 会话以获得 root 密码,你可能不会因为PermitRootLogin no在/etc/ssh/sshd_config文件中添加而受到阻碍。如果您偏执或不完全相信,请编辑文件或进行以下操作:
# (grep PermitRootLogin /etc/ssh/sshd_config && sudo sed -ri 's/PermitRootLogin ).+/\1no/' /etc/ssh/sshd_conifg) || echo "PermitRootLogin not found. Add it manually."
安装所需的包
# sudo apt-get install winbind samba smbfs smbclient ntp krb5-user
做一些基本的网络清理工作,为即将到来的特定包配置做准备。
确定活动目录服务器(对于 samba)的 Windows 域名、DNS 服务器名称和 IP 地址。为方便起见,我为 windows 域和 DNS 服务器设置了环境变量。对我来说是(我的 AD IP 地址是 192.168.20.11):
# WINDOMAIN=mydomain.local && WINDNS=srv1.$WINDOMAIN && WINDNS_IP=192.168.20.11
如果您想弄清楚您的域和 DNS 服务器是什么(我是承包商并且不了解网络),请查看此有用的参考资料。
我们需要在新网络上命名 Linux 机器,这是通过编辑主机文件来完成的(将 DNS 替换为 Windows DNS 的 FQDN):
# sudo sed -ri "s/^(127\.0\.[01]\.1[ \t]).*/\1$(hostname).$WINDOMAIN localhost $(hostname)/" /etc/hosts
我们还应该告诉即将安装的服务在哪里可以找到领导者:某些网络将具有 netbios 名称查找服务,但为了以防万一,请在您的/etc/hosts文件中添加一个显式条目,在我的配置中,我在第三个 (3) 中添加了该条目线:
# sudo sed -ri "3 i $WINDNS_IP $WINDNS" /etc/hosts
Windows 和 Linux 机器的身份验证和文件共享过程需要让它们的时钟一致。使用 NTP 服务执行此操作,在 Ubuntu 的服务器版本上,NTP 服务已安装并配置为一(1) 个 NTP 服务器。在 Ubuntu 之前添加你的(或完全替换它)。我加入的网络也有提供 NTP 服务的 DNS 服务器。
# sudo sed -ri "s/^(server[ \t]+)(.+)/\1$WINDNS\n\1\2/" /etc/ntp.conf
重新启动 NTP 守护进程:
# sudo /etc/init.d/ntp restart
Kerberos 配置。
此处遵循的说明不应按字面理解:当您编辑文件时,MYDOMAIN.LOCAL和的值srv1.mydomain.local需要替换为适合您的网络的值,但请注意在使用 UPPERCASE 的地方需要 UPPERCASE。
如果在apt-get installKerberos期间您有洞察力来正确回答“默认域”问题,那么对您来说很好,否则您将不得不执行以下操作。
编辑(之前安装在上面)/etc/krb5.conf文件。
找到该[libdefaults]部分并更改键值对:
[libdefaults]
default_realm = MYDOMAIN.LOCAL
将以下内容添加到[realms]文件的部分:
MYDOMAIN.LOCAL = {
kdc = srv1.mydomain.local
admin_server = srv1.mydomain.local
default_domain = MYDOMAIN.LOCAL
}
将以下内容添加到[domain_realm]文件的部分:
.mydomain.local = MYDOMAIN.LOCAL
mydomain.local = MYDOMAIN.LOCAL
此时的一个很好的测试是查看您的 AD 控制器是否会向您发出 kerberos 票证。这不是必需的,但它会让你们中的一些人头晕目眩:
# kinit <some_windows_domain_user>
然后查看票证:
# klist
您将看到有关票证缓存以及到期和续订的信息。一旦头晕消退,您也可以释放/销毁票证:
# kdestroy
配置桑巴。
根据以下内容:
有时无法使用 CIFS 或其他网络文件系统选择更好。如果需要为增加安全性的Kerberos(KRB5 / SPNEGO)认证的支持,那么Samba的smbclient的或smbfs的,必须用来代替CIFS
唉,cifs(基于内核版本2.6.32.9)支持在内核的Ubuntu 10.04是1.61版本,根据内核文档,从 1.54 版开始就存在实验性 kerberos 实现。
所以你来了。我不知道是否cifs可行,所以我为您提供了 samba 配置:
替换/etc/samba/smb.conf(请记住,我使用的是干净的 Ubuntu 发行版,所以我不担心破坏任何东西):
[global]
security = ads
realm = MYDOMAIN.LOCAL
password server = 192.168.20.11
workgroup = MYDOMAIN
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
template homedir = /home/%U
template shell = /bin/bash
client use spnego = yes
client ntlmv2 auth = yes
encrypt passwords = yes
winbind use default domain = yes
restrict anonymous = 2
启动和停止各种服务。
# sudo /etc/init.d/winbind stop
# sudo service smbd restart
# sudo /etc/init.d/winbind start
设置身份验证。
编辑/etc/nsswitch.conf. 我能够运行以下命令来获取我需要
# sed -ri 's/(compat)/\1 winbind/' /etc/nsswitch.conf
的内容:这是我的/etc/nsswitch.conf文件的内容:
passwd: compat winbind
group: compat winbind
shadow: compat winbind
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
启动和停止各种服务。
# sudo /etc/init.d/winbind stop
# sudo service smbd restart
# sudo /etc/init.d/winbind start
将计算机加入域。我不相信这是必要的。特别是因为smb.conf文件 ( security = ads)中的安全选项。也许有人可以对此进行权衡...
# sudo net ads join -U any_domain_user_account
您可能会收到错误消息DNS update failed!,但您将加入域。如果您收到无法找到服务器的错误消息,则需要修改您的 DNS 记录。在 Ubuntu 安装期间,名称服务器通常会指向您的网关:大多数路由器都会提供 DNS 服务。Windows 服务器管理的最佳实践是 ADC 也应该运行 DNS。在我的情况下,我/etc/resolve.conf看起来像这样:
nameserver 192.168.20.11
nameserver 8.8.8.8
这8.8.8.8是一个谷歌 DNS,一个相当可靠的备份,以防 Windows 出现故障。
此时我可以登录(可能在重新启动后),主目录不存在,但我可以登录。
登录时挂载 CIFS
下一步对我来说很重要;我不想负责备份每个人的工作目录,而且 Ubuntu 运行的机器在可靠性方面值得怀疑。通过执行以下操作,用户可以自动登录并查看他们的 Windows 用户目录。
下载pam_mount模块:
# sudo apt-get install libpam-mount
我希望挂载点指向传统/home/<user>位置:这部分由/etc/samba/smb.conf文件 ( template homedir = /home/%U)配置。但我需要它来钻取共享并指向他们自己的 Windows 目录。这是通过编辑/etc/security/pam_mount.conf.xml文件来完成的(尽管这是有意的,但 XML不是人类可读的):
添加以下内容/etc/security/pam_mount.conf.xml并进行更改以适应:
<volume
user="*"
server="srv1.mydomain.local"
path="UserShares"
mountpoint="home"
fstype="cifs"
/>
<cifsmount>mount -t cifs //%(SERVER)/%(VOLUME)/%(USER) %(MNTPT)/%(USER) -o "user=%(USER),uid=%(USERUID),gid=%(USERGID)%(before=\",\" OPTIONS)"</cifsmount>
由于我愚蠢的挂载点,我也不得不添加这一行:
<umount>umount %(MNTPT)/%(USER)</umount>
这样就可以自动创建用户目录(用于挂载点)找到该行并使其如此:
<mkmountpoint enable="1" remove="false" />
这remove="false"一点非常重要:如果它设置为 true,则pam_mount.so尝试删除目录挂载点,如果用户多次登录则无法删除。在这种情况下,您最终会在系统上安装大量杂散安装。
pam_mount.so仍然没有像承诺的那样交付。在它的当前形式中,挂载不断堆积并且没有创建主目录。在此处和 10.04 服务器的先前 Beta 2 版本之间的某个地方,它可以正常工作。我无法重新创建这个。
在创建目录的同时,我依赖pam_mkhomedir.so,并在pam_mount.so要容纳的行之前立即插入一行。
我还没有解决多重安装问题。但在pam_mount.so修复之前,这就是我的/etc/pam.d/common-session文件中的内容:
session [default=1] pam_permit.so
session requisite pam_deny.so
session required pam_permit.so
session required pam_unix.so
session optional pam_winbind.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session optional pam_mount.so
Run Code Online (Sandbox Code Playgroud)就是这样。它对我有用,我希望你觉得它有用。
考虑了许多资源,所以我可以解决这个问题。这是一个简短的列表(其中许多链接指向我自己的关于该主题的问题):
| 归档时间: |
|
| 查看次数: |
37097 次 |
| 最近记录: |