河南 劉景云
當本地賬戶需要執(zhí)行擁有Root 權限的命令時,可以通過Sudo 方式來實現(xiàn),使其無需知曉Root 賬戶的密碼,就可以執(zhí)行相關的命令。其原理是利用“/etc/sudoers”配置文件中預先定義的命令,主機和運行身份信息,來實現(xiàn)權限的提升行為。Sudo的權限級別包括用戶級別、組級別和命令級別。
在本地配置Sudo 規(guī)則來實現(xiàn)OpenLDAP 賬戶的權限切換操作時,必須先連接到OpenLDAP 服務器,執(zhí)行“authconfig--enablemkhomedir--disableldaptls--enableldap--enableldapauth -emableforcelegacy-disablesssd -disablessdauth -enablelocauthorize--ldapserver=ldap://x.x.x.x -ldapbasedn="d c=Manager,dc=ldp,dc=com"--enableshadow --update”命令,來完成連接操作。
“x.x.x.x”為OpenLDAP 服務器地址,“l(fā)dp”為OpenLdap域名。假設登錄用戶為“user1”,執(zhí) 行“sudo/user/sbin/useradd newuser”命令來檢測當前用戶是否具有新建用戶Sudo 權限,如果失敗,說明不具備管理員權限。為允許提權操作,可配置合適的Sudo 權限規(guī)則。
當在OpenLDAP 服務器上集中配置Sudo 權限時,需要配置Sudo Schema 規(guī)則。
默認情況下,在OpenLDAP中的Schema 并沒有包含Sudo所需的數(shù)據(jù)架構,因此必須導入所需的Schema 文件。以Root 賬戶登錄OpenLDAP 服務器,執(zhí)行“rpm -ql sudo-1.x.x |frep -i schema 命令,來顯示服務器自身軟件包所生成的Schema 文件。例如,進入“usr/share/doc/sudo-x.x.x/”目錄,執(zhí)行“/bin/cp -f schema.OpenLDAP/etc/openldap/schema/sudo.schema”命令,將所需的自帶Sudo Schema文件復制到Schema 存儲路徑。執(zhí)行“restorecon/etc/openldap/schema/sudo.schema”命令,來恢復該文件的安全上下文屬性,避免出現(xiàn)無法訪問的情況。
執(zhí)行“mkdir~/sudo”命令,在家目錄下創(chuàng)建名為“sodu”的目錄,使用VIM 命令在其下創(chuàng)建名為“sudoSchema.conf”的 文件,在其中輸入“include/etc/openldap/schema/sudo.schema”行,通過配置文件引入上述Sudo Schema 文件。執(zhí)行“slapcat -f~/sudo/suduSchema.con -F/tmp/ -n0 -s "cn=[0]sudo,cn=schema,cn=config">~/sudo/sudo.ldif”,“sed-i "s/{0sudo/g~/sodu/sudo.ldif}"”,“head -n-8~/sudo/sudu-config.ldif”命令,通過Schema 來產(chǎn)生LDIF 文件。
LDFI 是存儲LDAP 配置信息以及目錄內容的標準文件文件格式,這些信息需要按照LDAP 中的Schema 規(guī)范進行導入和導出,以及數(shù)據(jù)文件的添加、刪除和更名等操作。執(zhí)行“l(fā)dapadd -Y EXTERNAL -H ladpi:/// -f~/sodu/sudo-config.ldif”命令,通過OpenLDAP 自帶的命令將上述LDFI 文件導入到目錄樹中。執(zhí)行“l(fā)s/etc/openldap/slapd.d/cn=config/cn=schema”命令,來查看OpenLDAP 數(shù)據(jù)庫目錄中由Schema 所產(chǎn)生的文件信息。
在OpenLDAP 目錄樹結構中,默認情況下并沒有指定Sudo 規(guī)則。這 樣OpenLDAP 會先在目錄樹中查找“cn=defaults”的條目,如果存在,那么所有的sudoOption 屬性都會被解析為全局默認值。當客戶端用戶執(zhí)行Sudo 權限查詢時,可能會執(zhí)行多次操作,例如,會先解析全局配置,之后會查詢與其匹配的賬戶或組,來獲取Sudo 權限配置信息。如果都失敗,就會查詢所有包含用戶組的條目,并檢測其是否存在這些組中。
sudoOption 屬性包括很多項目,如sudoCommand(允許執(zhí)行的命令)、sudoHost(允許在哪些主機上執(zhí)行上述命令)、soduNotAfter(sudo 規(guī)則匹配起始時間)、soduNotNefore(規(guī)則匹配結束時間)等。
對于Sudoers 權限配置信息來說,是保存在“ousudoers”的組織單元中的。執(zhí)行“cat < 例如,輸入“dn:cn=%glygrp,ou=sudoers,dc=ld p,dc=com”,“objectClass:sudorole”,“cn:%glygrp”,“sudoUser:%glygrp”,“soduHost:ALL”,“sudoRunASUser:glyuser”,“ sudoOption :!authentication”,“sudoCommand:/bash/chmod”,“sudoCommand:/bash/chown”,“sudoCommand:/ bash/ chmod ”,“sudoCommand:/usr/sbin/useradd”,“sudoCommand:/bin/fsck*”,“sudoCommand:/usr/bin/chattr”,“sudoCommand:/”,“sudoCommand:/usr/sbin/passwd”,“sudoOrder:0”等行來定義名為“l(fā)gygrp”的組,可切換到名為“glyusr”的賬戶中,不需輸入密碼,只能執(zhí)行指定的命令。 當然,這里僅僅是簡單的例子,您可以根據(jù)實際情況來定義更加復雜的規(guī)則。定義好Sudo 規(guī)則后,接下來就需要將OpenLDAP 中的用戶添加到預設的組中。例如執(zhí)行“cat < 例如,輸入“dn:cn=glygrp,ou=groups,dc=ldp,dc=com”,“objectClass:posixGroup”,“cn:glygrp”,“gidNumber:11008”,“dn:uid=orauser,ou=yhdy,dc=l dp,dc=com”,“objectclass:account”,“objectclass:posixAccount ”,“objectclass:shadow Account”,“cn:orauser”,“uid:orauser”,“uidMunber:22009”,“gidNumber:11008”,“userPassword:xxx”,“homeDirectory:/ home/orauser ”,“l(fā)oginShell:/bin/bash”,“EOF”行。之后按照提示輸入OpenLDAP 管理員密碼,將名為“orauser”的用戶指派到上述Sudo 規(guī)則中定義的名為“glygrp”的組中。 其中的“yhdy”為預先在OpenLDAP 目錄樹中定義好的OU,用來存儲用戶信息,“xxx”為該用戶的密碼,其中的組和用戶的ID 均為假設。執(zhí)行“l(fā)dapsearch -x -LLL uid=orauser”命令,可以在OpenLDAP 目錄樹中查看名為“orauser”賬戶的信息。當然,如果覺得使用OpenLDAP 自帶命令比較繁瑣,也可以使用phpLDAPadmin、LDAP Admin等圖形化工具執(zhí)行創(chuàng)建所需的OU,定義Sudo 規(guī)則及查看目錄樹詳細信息等操作。 當在服務器端定義好Sudo 規(guī)則后,在客戶端也需要進行對應的調整才可以發(fā)揮作用。這里客戶端使用的是Redhat6.x 版本,執(zhí)行“rpm -qi sudo | grep -i version”命令,來檢測其是否支持Sudo規(guī)則。執(zhí)行“sudo-V”命令,查看Sudo 版本信息。一般現(xiàn)在的系統(tǒng)基本都支持LDAP Sudo 規(guī)則。如果Sudo 版本過低要進行升級。 執(zhí)行“authconfig--enablemkhomedir--disableldaptls--enableldap--enableldapauth -emableforcelegacy-disablesssd -disablessdauth -enablelocauthorize--ldapserver=ldap://x.x.x.x -ldapbasedn="dc=Manager,dc=ldp,dc=com"--enableshadow --update”命令,將客戶端加入到OpenLDAP 服務器中。 執(zhí)行“vim/etc/nsswitch.conf”命令,對“nsswitch.conf”配置文件進行編輯,輸入“sudoers:ldap files”行,作用是先從OpenLDAP 服務器端獲取Sudo 規(guī)則并加以應用,如果獲取失敗,再從本地獲取Sudo 權限配置參數(shù)。執(zhí)行“vim/etc/sudo-ldap.conf”命令,輸入“SUDOERS_BASE ou=sudoers,dc=ldp,dc=com”,從OpenLDAP 服務器獲取Sudo 權限信 息。這樣,客戶端就可以使用預設的OpenLDAP 用戶進行登錄,并從OpenLDAP 服務器上獲取的Sudo 權限來執(zhí)行各種操作。 對于OpenLDAP 用戶來說,密碼的安全是極為重要的。密碼的安全策略包括很多內容,例如密碼的使用周期、密碼的歷史、密碼的復雜度和密碼認證的次數(shù)等。本地的密碼管理策略的各種屬性信息實際上定義在“/etc/login.defs”文件中,并將“/etc/skel”目錄下的環(huán)境參數(shù)信息附加到用戶屬性中。 在“/etc/login.defs”文件中包含密碼的有效期、更改天數(shù)、密碼最小長度和密碼失效警告天數(shù)等信息。當用戶修改密碼時,按照該文件定義的規(guī)范進行。當然,管理員可以利用PAM 模塊對密碼策略進行修改。例如執(zhí)行“vim/etc/pam.d/systemauth”命令,打開“systemauth”,添加“password requisite pam_cracklib.so minlen=9 ucredit=-3 lcredit=-2 dcredit=-3 ocredit=-1”行。這樣,當用戶修改密碼時,密碼的長度最好為9 位,其中必須包含3個大寫字母,2 個小寫字母,3個數(shù)字及1 個特殊字符。 執(zhí)行“cat < 執(zhí)行“ cat < 例如輸入:dn:cn=defau lt,ou=passpolicy,dc=ldp,dc=com 設置默認的密碼策略。 按照順序依次設置密碼過期前警告時間、密碼失敗后恢復時間、密碼過期后不能登錄的時間、開啟密碼歷史記錄功能等。注意,當賬戶密碼被鎖定后,是不能自動解鎖的,必須由管理員解鎖。實際上,OpenLDAP 的賬戶密碼策略具有很強的靈活性,允許針對特定的組或賬戶來配置合適的密碼策略。 執(zhí)行“cat < 其中的“policy1”為預先定義好的OU,讓指定的用戶“user1”遵循為“kaifabu”的組設置的密碼策略,而不必使用默認的密碼策略。 除了允許用戶使用“passwd”命令來修改密碼外,為提高系統(tǒng)安全性,最好在用戶初次登錄時設置密碼。 為了讓客戶端使用上述密碼策略,可以在客戶機上執(zhí)行: 讓客戶端可以識別OpenLDAP 服務器端的密碼策略信息。 執(zhí)行“service nslcd restart”命令,重啟nslcd服務,根據(jù)預設的配置和OpenLDAP 服務器進行交互來獲取請求條目??蛻舳藞?zhí)行“yum install openldapclients nss-pam-ldapd -y”命令,之后等客戶端登錄時,按預設的密碼策略執(zhí)行配置。 為了便于OpenLDAP 管理員了解用戶密碼變動信息,可以利用OpenLDAP 提供的密碼審計功能來實現(xiàn)。例如在OpenLDAP 服務器上執(zhí)行“cat < 開啟OpenLDAP 密碼審計功能。 OpenLDAP 配置文件可以通過修改配置文件或數(shù)據(jù)庫的方式實現(xiàn),后者的優(yōu)點是可以實現(xiàn)動態(tài)配置,而且不必重啟Slapd 服務,這里采用后者來實現(xiàn)。 這樣,當客戶端登錄時,就需要遵循預設的密碼規(guī)則。當用戶輸入錯誤的密碼次數(shù)查過預設值后,就會被鎖定,管理員可以執(zhí)行“cat< 將“user1”賬戶中密碼屬性中的“pwdAcount LockedTime”標記刪除,就可以解除其鎖定狀態(tài)。 如果是密碼過期,可以執(zhí)行“cat < 將“user1”賬戶的密碼刪除,之后重新為其添加面膜即可,“xxx”為具體的面密碼。這里均以“user1”賬戶為例進行說明。將用戶指定Sudo 權限規(guī)則
在客戶端使用Sudo 規(guī)則
配置本地密碼安全策略
在OpenLDAP 上配置密碼策略
在客戶端應用密碼策略
使用密碼變動審計功能
——穩(wěn)就業(yè)、惠民生,“數(shù)”讀十年成績單