我正在使用 Ubuntu 10.04 Server。
答案1
[编辑] 我已经测试了这个完整版Ubuntu 10.04 服务器(2010 年 5 月 21 日)。
我已经配置了我的Ubuntu 10.04 服务器 LTS驻留在 Windows 网络上,使用活动目录对登录进行身份验证,然后安装 Windows 共享作为主目录。
以下是我从初始安装 Ubuntu 开始所做的事情。
- 下载并安装Ubuntu 服务器 10.04 LTS
获取更新
# 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
进行一些基本的网络清理,为即将进行的特定包配置做好准备。
确定您的 Windows 域名、DNS 服务器名称和 Active Directory 服务器的 IP 地址(用于 Samba)。为了方便起见,我为 Windows 域和 DNS 服务器设置了环境变量。对我来说,它是(我的 AD IP 地址是 192.168.20.11):
# WINDOMAIN=mydomain.local && WINDNS=srv1.$WINDOMAIN && WINDNS_IP=192.168.20.11
如果你想弄清楚你的域名和 DNS 服务器是什么(我是承包商,不了解网络),请查看这个有用的参考。
我们需要在新网络上为 Linux 机器命名,这可以通过编辑主机文件来完成(用 Windows DNS 的 FQDN 替换 DNS):
# 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 服务器之前添加您的服务器(或完全替换它)。我加入的网络也有 DNS 服务器提供 NTP 服务。
# 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
替换为适合您网络的值,但请注意,使用大写字母时需要使用大写字母。
如果在使用apt-get install
Kerberos 期间您能够洞察并正确回答“默认域”问题,那么,您就大功告成了,否则,您必须执行以下操作。编辑(上面安装的)
/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
配置samba。
根据以下内容: 有时无法使用 CIFS,或者其他网络文件系统选择更好。如果需要 kerberos (krb5/SPNEGO) 身份验证支持来增加安全性,则必须使用 Samba 的 smbclient 或 smbfs,而不是 cifs
唉,cifs
ubuntu 10.04(基于内核版本 2.6.32.9)的内核支持版本为 1.61,而根据内核文档,实验性的 kerberos 实现自版本 1.54 以来就已存在。
所以就是这样。我不知道它是否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 DNS 出现故障,这是一个相当可靠的备份。
此时我可以登录(也许重新启动后),主目录不存在,但我可以登录。
登录时安装 CIFS
下一步对我来说是关键;我不想承担备份每个人的工作目录的责任,而 Ubuntu 所运行的机器在可靠性方面也值得怀疑。通过执行以下操作,用户可以登录并查看他们的 Windows 用户目录自动地。下载
pam_mount
模块:
# sudo apt-get install libpam-mount
我希望挂载点位于传统位置:此部分由文件 ( )/home/<user>
配置。但我需要它钻取共享并指向自己的 windows 目录。这是通过编辑文件(尽管它的意图是 XML)来实现的/etc/samba/smb.conf
template homedir = /home/%U
/etc/security/pam_mount.conf.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
就是这样。它对我有用,我希望你觉得它有用。
我考虑了许多资源,以便弄清楚这一点。下面是一个简短的列表(其中许多链接指向我自己关于这个主题的问题):