hello!!又是小弟我...會完成這篇筆記主要是wlhfor大大提了一個
問題,剛好利用之前弄好的LDAP server,所以就稍微實作了一下
sudo先把sudo的schema加到LDAP中,以ldap1為例 :
[root@ldap1 ~]# cp /usr/share/doc/sudo-1.7.4p5/schema.OpenLDAP /etc/openldap/schema/sudo.schema
修改slapd.conf[root@ldap1 ~]# vim /etc/openldap/slapd.conf
#新增設定
include /etc/openldap/schema/sudo.schema##################################################
# database definitions
##################################################
index sudoUser eq[root@ldap1 ~]# rm -rf /etc/openldap/slapd.d/*
[root@ldap1 ~]# slapdtest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
[root@ldap1 ~]# service slapd restart
完成後到phpLDAPadmin上的schema去搜尋是否有出現『sudoRole』這個objectClass。
接下來建立一個ou (或者也可以使用現有的) ,名稱為Sudoers,底下的子記錄就是用來建立sudo的規則,下面使用ldif檔來示範。
[root@ldap1 ~]# vim sudoers.ldif
#ou=Sudoers,dc=split,dc=com,dc=tw
dn: ou=Sudoers,dc=split,dc=com,dc=tw
objectclass: organizationalUnit
objectclass: top
ou: Sudoers
#cn=%d30,ou=Sudoers,dc=split,dc=com,dc=tw
dn: cn=%d30,ou=Sudoers,dc=split,dc=com,dc=tw
cn: %d30
objectclass: sudoRole
objectclass: top
sudocommand: ALL
sudohost: ALL
sudouser: %d30
依照 /etc/sudoers的內容說明就是 :
群組(sudouser) 來源主機(sudohost) 可切換的身份(預設) 可用指令(sudocommand)
%d30 ALL = (root) ALL
匯入LDIF檔[root@ldap1 ~]# ldapmodify -D "cn=admin,dc=split,dc=com,dc=tw" -W -x -a -f sudoers.ldif
然後把niko這個帳號加入至d30群組中,以便稍後用來測試。 (詳細操作小弟就不說了)
Client設定sudo要能夠支持LDAP似乎要sudo-1.7.4p5-13以上版本,CentOS 6.3預設的版本為sudo-1.7.4p5-11,所以先使用『yum update sudo』來升級版本,之後在 /etc下會有個sudo-ldap.conf的檔案。sorry~這裡小弟突然鬼打牆,經測試後,CentOS6.3預設帶的sudo(sudo-1.7.4p5-11.el6.x86_64)就能夠支援LDAP了,所以這裡可以不用特別去更新,如果沒有/etc/sudo-ldap.conf這個檔再去更新也不遲!!!
設定sudo-ldap.conf[root@client ~]# vim /etc/sudo-ldap.conf
#新增內容
uri ldap://ldap1.split.com.tw ldap://ldap2.split.com.twsudoers_base ou=Sudoers,dc=split,dc=com,dc=tw設定nsswitch.conf[root@client ~]# vim /etc/nsswitch.conf
#新增內容
sudoers: ldap設定好後小弟我是直接reboot,然後niko這個帳號就可使用sudo了,當然還有其它沒有加入d30群組的帳號來做測試。
sudo問題 :一般在local上,sudo的expire time預設是5分鐘,第一次使用sudo時要輸入密碼,如果5分鐘內沒有執行過sudo,則再一次執行時會重新要求密碼。
修改expire time的方式為 :[root@client ~]# vim /etc/sudoers
#新增
Defaults env_reset , timestamp_timeout=X # X的單位為分鐘
或者可單獨指定帳號
Defaults : niko timestamp_timeout=1# timestamp_timeout=0,表示每次執行sudo都要輸入密碼
# timestamp_timeout=-1,表示執行sudo時不用輸入密碼
如果使用LDAP就無法用上面的方法來設定,目前還沒找到修改expire time的方法。
接著問題來了,就以niko這個已經加入d30 group的帳號來說一下...
在home server的NFS中已經有設定root_squash這個參數,但是如果niko在client主機上輸入sudo su - xxx,那不就....囧
所以,小弟另外限制了su,也就是d30可以su,非d30的成員只可su到非root的其它用戶,並且root要su到其它用戶也必須要輸入用戶的密碼。
su[root@client ~]# vim /etc/pam.d/su
#%PAM-1.0
#新增
auth [ignore=1 default=ignore] pam_wheel.so group=su use_uid debug
auth required pam_listfile.so item=user sense=deny onerr=succeed file=/etc/sudeny#auth sufficient pam_rootok.so #註解
[root@client ~]# vim /etc/sudeny
#新增
root[root@clinet ~]# chmod 440 /etc/sudeny
設定好後不需要重新開機,立即生效。(資料來源 :
http://www.suse.url.tw/sles10/ http://hi.baidu.com/nashczh/item/7d2623ed1591aa3c87d9dee8 )