cloudsky (曉舟·軒轅明月)
遠程用戶啟動rlogin訪問你的本地主機,此時做如下安全性檢查:
1. 本地rlogind在本地/etc/passwd文件中尋找遠程用戶名,沒有則拒絕訪問
2. /etc/passwd中存在遠程用戶名,rlogind在/etc/hosts.equiv尋找遠程主機名,找到則允許訪問。
3. /etc/hosts.equiv無遠程主機名,rlogind在$HOME/.rhosts尋找遠程主機名,找到且該項後無用戶名則允許訪問,找到且該項後有用戶名,若遠程用戶名位於其中,則允許訪問。注意這裡的$HOME是與遠程用戶同名的本機用戶的主目錄。
4. 若通過了/etc/passwd的檢查,但沒有通過/etc/hosts.equiv或者$HOME/.rhosts的檢查,遠程用戶給出口令可以登錄本機,但無法使用rcp、rsh等。反之則可以使用rcp或者rsh。
5. /etc/hosts.equiv中的+意味著任意主機,此時與/etc/hosts無關。netterm下rlogin除root外的所有用戶可以成功,solaris下簡單的rlogin hostname同netterm,但是rlogin -l username hostname不成功。這個事實說明netterm下rlogin的時候,指定的參數實際上是遠程主機的當前用戶名。還說明hosts.equiv文件不支持rlogin -l username hostname,不支持root的rlogin。
值得注意的是兩個+號出現在$ HOME/.rhosts中是非常危險的,意味著任意主機任意用戶都可以不用口令登錄到你的用戶上來。.rhosts中的第一個+意味著所有主機,與 /etc/hosts文件無關。.rhosts中的第二個+意味著所有用戶,與/etc/passwd文件無關。若只有一個+,netterm中的 rlogin可以成功,但來自sco root下的rlogin -l jhli hostname不成功,來自sco jhli的rlogin -l jhli hostname和rlogin hostname都成功。說明當.rhosts文件中只有主機名時,不支持rlogin -l username hostname,這點和/etc/hosts.equiv一樣。若+ root,則netterm因無法實現rlogin -l username hostname而失敗(只能實現rlogin hostname),來自sco root下的rlogin -l jhli hostname成功。+ +則都成功。注意,$HOME/.rhosts支持root的rlogin。
當這兩個文件中沒有使用+號代表所有主機時,與/etc/hosts文件有關。這兩個文件中指定的hostname必須是/etc/hosts文件中出現的,而且必須是主機名,IP地址和別名無效。在/etc/hosts文件中別名位於第三列。做主機判斷時與在遠程主機上hostname命令所顯示的東西無關,與遠程主機上的 /etc/hosts定義無關。如果出現與這裡講述不符合的,是因為緩沖沒有得到刷新的緣故,可以通過ping相關名字得到檢驗。此外,若沒有使用+號, rlogin localhost、rlogin 127.0.0.1的效果和rlogin 134.*.*.*、rlogin zhuzhou的效果不一樣,前者的檢查不會通過。當hosts.equiv中定義為localhost時,效果則反過來。
6. rlogin -l username hostname和rlogin hostname的檢查有點細微的差別,首先在/etc/passwd的檢查中是以-l的參數為准的,沒有-l參數才使用遠程主機的當前用戶名,所謂當前用戶名是考慮了su出來的用戶。其次,$HOME也是先以-l參數為准。第三,$HOME/.rhosts文件中的用戶名不是針對-l參數來的,而是針對遠程主機的當前用戶名來的,但是對於這個遠程主機的當前用戶名,並不要求出現在/etc/passwd文件中。這第6條尤其重要,許多不成功的$ HOME/.rhost就是因為對第6條的不了解。
7. $HOME/.rhosts文件的權限問題,chmod 0都沒有影響,不過當時是處理root用戶。對於一般用戶,一定要保證.rhosts文件對於$HOME的屬主是可讀的。一般來說,這個文件最好 chmod 400。對於root,如果不希望某個用戶建立自己的.rhosts或者想替該用戶建立.rhosts後不允許該用戶自己修改,可以通過chown root .rhosts然後chmod 444 .rhosts實現。除了root,如果$HOME/.rhosts文件的屬主和$HOME的屬主不一致,檢查將失敗。
8. $HOME/.rhosts文件中每行只跟一個用戶名,若想多個指定,只好分多行指定用戶名。
9. sco unix下$HOME/.rhosts中若用+代表主機,與其他Unix系統不同,這裡的+沒有任何特殊的意義,所以檢查將失敗。但是用戶名仍然可以用+代表。並且sco unix下若root的.rhosts文件go+w,則檢查失敗。
10. 建議man rhosts看看,各個系統有許多細微的差別。(Linux知識寶庫)