...
LDAP + Host 控管 on Debian Lenny
本教学使用环境 debian 5 lenny。本文功能:让你用 LDAP 认证搭配 host (主机)控管,设定你的 user 哪些机器可以登入,哪些机器不可以登入。
请在测试机器上实作成此教学再去应用,因为设定过程失败或错误的话,是会造成你连 root 都登不进系统的,那我也无解。
红字为指令,或需要你输入的地方。蓝字部份为设定档内容。
(1).建立 ldap server
首先请按此篇教学建立起 ldap server
(2).下载 ldap 管理工具
LDAP Admin 官方网站
参照下图的设定连入你的 ldap server
(3).删除 root 帐号
我们必须针对 root 帐号 增加一个 objectClass 为 account 才能有 host 这个栏位让我们填入要指定登入的主机。
如上图所示,目前的 objectClass 没有 account 这东西,我曾试着加过,但加不进去,加了会报如下图的错误

只知它大概的意思是和 inetOrgPerson 这东西去冲到,目前我尚没有能力完美的解决这个问题,只能用较逊的解法来解,就是把 root 帐号删掉重新手动建一个。(关于完美解法请直接跳到第 (6). 步骤看吧! 换句话说,如果你需要使用到PDC和 Windows 网域功能的话,请略过第 3、4、5的步骤,直接进入第6步骤)
接下来你就自己把 root 帐号给删了吧,对它点滑鼠右键就能删。
↑注意:这个动作会使的你 root 不能帮其它的电脑加入Windows网域,除非你不需使用 Windows网域的功能,删前请三思,若你要反悔其实也有补救方法,请下指令:
smbldap-userdel root
smbldap-useradd -a root
smbldap-passwd root
然后用 Ldap Admin 去将root 的 uidNumber 和 gidNumber 都改为 0,若你还有设定检查 host 值登入的话,别忘了在
host 那栏填上 * 号,否则 root 会无法登入任何一台主机。
(4).建立 root 帐号
对着 ou=people 点滑鼠右键,选 New→ Entry...
参照上图的设定:1.请先在左方加入那三个项目。 2.在右方填入资枓,黑体字和我用红框框起来的是必填项目。 3.最后再点左上角的 Rdn,选跟我一样(必须设为 uid=root)。
PS: root 帐号必备这三个 objectClass: account, posixAccount, shadowAccount否则 root 会出错。而一般的 user 只要这两个 objectClass:account, posixAccount 再设密码后即可登入。特别说明的是 account 这个项目也不一定是必备,准确的说是因为我们需要 host 这个栏位,所以才会需要它,但经完美解法后, inetOrgPerson 这个项目也能有 host 这栏位,因此就可用其取代 account 这个项目了。 (objectClass 中文意思较难懂,我是用比较俗的叫法把它叫成项目了,我随便取的啦。)
(5).设立 root 密码


如果你是按我的教学一路做下来的话,那么这里请选择 MD5 加密。
改完后,你试着让 root 用新密码登入看能否成功,若不能用新密码登入成功,请回头检查哪里做错了,确定能用新密码登入 root 后,再接着往下做,因为接下来的设定,没设好的话,会造成连 root 都无法登入。
(6).增加 host 栏位完美解法
因为 inetOrgPerson 和 account 这两个 objectClass 项目相冲突,两个没办法同时用只能择其一。 account 里只有一个栏位 "host" 是我们需要用到的用来指定能登入的主机,而 inetOrgPerson 里却有许多栏位是 outlook/雷鸟 通讯录所会用到的栏位(无法舍弃它啊~~~),所以解法是在 inetOrgPerson 里增加一个 host 栏位。(这个栏位是我用比较通俗的叫法啦!依 LDAP 文件所示正式名称系叫做 attribute (属性)。)
编辑 inetOrgPerson.schema 档
vim /etc/ldap/schema/inetorgperson.schema
移到档案的最后,找到如下内容:
|
objectclass ( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' DESC 'RFC2798: Internet Organizational Person' SUP organizationalPerson STRUCTURAL MAY ( audio $ businessCategory $ carLicense $ departmentNumber $ displayName $ employeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddress $ initials $ jpegPhoto $ labeledURI $ mail $ manager $ mobile $ o $ pager $ photo $ roomNumber $ secretary $ uid $ userCertificate $ x500uniqueIdentifier $ preferredLanguage $ userSMIMECertificate $ userPKCS12 ) ) |
在最后加上一个 $ host 的值,如下方红字所示。 (忘了说,修改此档前请先自行备份,免得你改坏了不能用...别忘了ldap的设定档都很龟毛的)
|
objectclass ( 2.16.840.1.113730.3.2.2 NAME 'inetOrgPerson' DESC 'RFC2798: Internet Organizational Person' SUP organizationalPerson STRUCTURAL MAY ( audio $ businessCategory $ carLicense $ departmentNumber $ displayName $ employeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddress $ initials $ jpegPhoto $ labeledURI $ mail $ manager $ mobile $ o $ pager $ photo $ roomNumber $ secretary $ uid $ userCertificate $ x500uniqueIdentifier $ preferredLanguage $ userSMIMECertificate $ userPKCS12 $ host ) ) |
PS:如果你有做 LDAP server 的 mirror 的话,那么 mirro 的两个 server 都得做这个修改的动作,增加 host 栏位。
(7).修改 pam_ldap.conf
vim /etc/pam_ldap.conf
找到此行 pam_check_host_attr yes
将此行前面的 # 号拿掉
PS1: Fedora/centOS 此参数则位于 /etc/ldap.conf 此档内
PS2: Fedora/centOS 一定要在 /etc/hosts 内加入自己本机的 hostname 对映,此检查 host 的机制才能正常运作。
(8).修改 common-account 档
vim /etc/pam.d/common-account
account sufficient pam_ldap.so
↑这行必需要改为下面这样才行
account required pam_ldap.so
注意:第 (6). 和 (7).的步骤在 ldap 的 server 端与 client 端都要做,这样它才能检查 host 这栏位决定是否放行。
补充说明:
sufficient → 指出要认证成功,必须满足此模组的要求,假定之前出现的、required 类型的模组全都执行成功。如果组态档中已经没有其它模组可执行,控制流程将会传回进行呼叫的应用程式。如果 sufficient 类型的模组执行失败,则会继续进行认证,并不会因而拒绝存取。
required → 指出要认证成功,此模组必须执行成功。除非此类模组全都被呼叫过了,否则控制流程不会传回发出请求的应用程式。
(9).重开机,试试 root 能否登入。
若不能登入你就完蛋啦!! 别问我解法,我也不会解。我只有重灌一解。
(10).建其它 user 帐号
若你只是要建单纯的 samba 帐号的话,而不让它能够登入主机 (含 tty 和 ssh 登入),请用下指令的方式来建会快些。
PS: tty 登入指的是坐在 linux 主机前面打帐号登入。
请下指令
建 user 帐号 ( -a 为建立 windows 使用者帐号 -m 建家目录)
smbldap-useradd -a -m user1
设定密码
smbldap-passwd user1
用以上方法新增出来的帐号是没有 host 栏位可用的。(因为 account 这个 objectclass 项目加不进来)
若是要让该帐号有 host 栏位的话,得在Ldap Admin这个工具里自己手动加一个全新的帐号,像第 (4). 步骤那样增加一个帐号。
经完美解法后,透过上面两行指令建出来的帐号,就内含 host 这栏位了。

在用指令新增完帐号后,到 Ldap Admin去看就可看到刚加的帐号,对其点右键→ Edit Entry...
记得点选上方红框的按钮来切换栏位的多少,右方就可见已内含 host 栏位了,不必再新增了。若你没看到 host 此栏位的话,记得把 Ldap Admin 整个关掉再重开。
须注意的是新建帐号的 host 栏位都是空白的,这栏位若留白,那么它就不能 ssh 或 tty 登入任何一台主机。
但是此新建帐号 samba 的功能还是能正常使用的。
(11). Samba 权限控管
Samba 的资料夹分享,可设定哪些帐号或群组可写入这个资料夹,但这个设定是设在每台 samba 主机上的 smb.con 此档内。
vim /etc/samba/smb.conf
以下是分享资料夹的权限设定参考,经测试 valid users 这参数在 debian lenny 上是有效的。
| [Share] comment = Share path = /mnt/share browseable = Yes read only = No guest ok = Yes #write list = username1, username2 (有些版本得用 write list 这参数才有效) #valid users = username1, username2 (有些版本得用 valid users 这参数才有效) #write list = @Administrators (属于 Administrators 群组的人可以写入,其它人则是唯读) #valid users = @Administrators (请自行测试哪个写法才能用) |
LDAP系列文章:
(1).LDAP + Samba PDC + PAM/NSS on Debian Lenny
(2).LDAP client + Samba BDC + PAM + NSS on Debian Lenny
(4).LDAP + Host 控管 on Debian Lenny
(5).LDAP client + SMB + NSS + PAM on Fedora
(6).LDAP 与通讯录
目前没有评论. 我要发表评论