[網上摘錄,不知道誰是真正的作者]
我的現在情況.
服務器:紅帽子企業4(上已經安裝了oracle)
cvs為:cvsnt-2.5.03.2151-rh9-rpm.tar.gz ,在http://www.march-hare.com/cvspro/,下載的是最新的
版本
我的安裝過程:
確認是否安裝了老版本的cvs,如果有老版本的,就統統刪除
[root@redhat /]# rpm -qa |grep cvs
libbonoboui-2.8.0.99cvs20040929-2
cvs-1.11.17-7.RHEL4
[root@redhat /]# rpm -e cvs-1.11.17-7.RHEL4
[root@redhat /]# rpm -qa | grep cvs
libbonoboui-2.8.0.99cvs20040929-2
將下載的cvs文件解壓
[root@redhat cvs]# tar zxvf cvsnt-2.5.03.2151-rh9-rpm.tar.gz
cvsnt-2.5.03.2151-1.i386.rpm
cvsnt-database-mysql-2.5.03.2151-1.i386.rpm
cvsnt-database-odbc-2.5.03.2151-1.i386.rpm
cvsnt-database-sqlite-2.5.03.2151-1.i386.rpm
cvsnt-protocol-gserver-2.5.03.2151-1.i386.rpm
cvsnt-protocol-sserver-2.5.03.2151-1.i386.rpm
[root@redhat cvs]# ls
cvsnt-2.5.03.2151-1.i386.rpm cvsnt-database-sqlite-2.5.03.2151-1.i386.rpm
cvsnt-2.5.03.2151-rh9-rpm.tar.gz cvsnt-protocol-gserver-2.5.03.2151-1.i386.rpm
cvsnt-database-mysql-2.5.03.2151-1.i386.rpm cvsnt-protocol-sserver-2.5.03.2151-1.i386.rpm
cvsnt-database-odbc-2.5.03.2151-1.i386.rpm
安裝相關的rpm包(之后立刻確認安裝)
[root@redhat cvs]# rpm -ivh cvsnt-2.5.03.2151-1.i386.rpm
Preparing... ########################################### [100%]
?? 1:cvsnt ########################################### [100%]
[root@redhat cvs]# rpm -qa |grep cvs
libbonoboui-2.8.0.99cvs20040929-2
cvsnt-2.5.03.2151-1
[root@redhat src]# cvs -version
Concurrent Versions System (CVSNT) 2.5.03 (Scorpio) Build 2151 (client/server)
建立cvs用戶組
[root@redhat /]# groupadd cvs
以上建立組的語句,不會在/home中多出任何目錄來.
建立以后的存放目錄
[root@redhat /]# mkdir cvs
[root@redhat /]# cd cvs
[root@redhat cvs]# mkdir src
[root@redhat cvs]# cd src
[root@redhat src]# pwd
/cvs/src
[root@redhat src]#
指定cvs組的cvsroot用戶和所屬的目錄
[root@redhat src]# useradd -g cvs -G cvs -d/cvs cvsroot
為cvsroot用戶添加密碼
[root@redhat cvs]# passwd cvsroot
Changing password for user cvsroot.
New UNIX password:
BAD PASSWORD: it does not contain enough DIFFERENT characters
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
改變/cvs的目錄屬性
[root@redhat /]# chmod 775 /cvs
drwxrwxr-x 4 root root 4096 Dec 7 14:14 cvs
[root@redhat cvs]# chmod 775 src
drwxrwxr-x 2 root root 4096 Dec 7 14:06 src
對cvs進行相關的版本確認
[root@redhat /]# cvs version
Concurrent Versions System (CVSNT) 2.5.03 (Scorpio) Build 2151 (client/server)
啟動cvs服務器
[root@redhat /]# more /etc/services|grep cvspserver
cvspserver 2401/tcp # CVS client/server operations
cvspserver 2401/udp # CVS client/server operations
如果上面沒有這個內容就
[root@redhat /]# vi /etc/services
來添加相關的內容
[root@redhat /]# vi /etc/xinetd.d/cvspserver
service cvspserver
{
disable = no
flags = REUSE
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/bin/cvs
server_args = -f --allow-root=/cvs pserver
log_on_failure += USERID
}
shift+wq!
"/etc/xinetd.d/cvspserver" [New] 14L, 225C written
[root@redhat src]# ls /etc/xinetd.d/cvspserver
/etc/xinetd.d/cvspserver
[root@redhat src]# su cvsroot
[cvsroot@redhat src]$ pwd
/cvs/src
[root@redhat /]# service xinetd restart
Stopping xinetd: [ OK ]
Starting xinetd: [ OK ]
[root@redhat /]# netstat -l |grep cvspserver
tcp 0 0 *:cvspserver *:* LISTEN
初始化cvs源碼庫,新建立一個Repository,此操作生成目錄/cvs/CVSROOT(或者/cvs/src/CVSROOT),其下
為一些初始化文件
[root@redhat src]# export CVSROOT=/cvs/src
[root@redhat src]# env | grep CVSROOT
CVSROOT=/cvs/src
[root@redhat src]# cvs -d /cvs/src init
在服務器端初置口令認證
首先,你可能需要 $CVSROOT 和 $CVSROOT/CVSROOT 上設定權限。見 Password authentication security。
在服務器端,需要編輯文件 /etc/inetd.conf 讓 inetd
它在正確的端口上收到一個連接的時候運行 cvs pserver
命令。按照默認,端口號是 2401;當然,如果客戶端用 CVS_AUTH_PORT
重新編譯了就會有一些不同。也可以在 CVSROOT 變量(參閱 Remote repositories)指定或用 CVS_CLIENT_PORT 環境變量(參閱 Environment variables)跨越。
如果你的 inetd
在 /etc/inetd.conf 中允許原始的端口號定義,那么下面的命令就足夠了(所有命令在 inetd.conf 中都是單行):
2401 stream tcp nowait root /usr/local/bin/cvs
cvs -f --allow-root=/usr/cvsroot pserver
(你也可以使用 `-T' 選項來指定一個臨時目錄。)
`--allow-root' 選項指定一個允許的 cvsroot 目錄。試圖使用一個另外的 cvsroot 目錄的客戶將被拒絕連接。如果你希望設置多個允許的 cvsroot 目錄,重復設置這一選項就行了。(不幸的是,許多版本的 inetd
對參數的數量和/或命令長度小有限制。通常解決方法是在 inetd
中運行一個 shell 腳本,然后在腳本中調用 cvs 所需的參數。)
如果你希望 inetd
使用符號服務名稱來代替原始端口號,那么把它放進 /etc/services 里:
cvspserver 2401/tcp
并且在 inetd.conf 中使用 cvspserver
代替 2401
。
如果你的系統用 xinetd
替代 inetd
,步驟有些不同。創建一個叫 /etc/xinetd.d/cvspserver 的文件,包含下列內容:
service cvspserver
{
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/local/bin/cvs
server_args = -f --allow-root=/usr/cvsroot pserver
}
(如果已在 /etc/services 中定義 cvspserver
,可以省略 port
這一行。)
做了上面的修改之后,需要重新啟動你的 inetd
,或者采取其它可以使它重新讀取初始化文件手段。
如果設置這有麻煩,參閱 Connection。
因為客戶端以明文存儲和傳輸口令(幾乎是—請見 Password authentication security),通常使用了一個獨立的 cvsCVS 口令文件,這樣人們訪問倉庫的時候不會危及定期口令的安全。這個文件是 $CVSROOT/CVSROOT/passwd (參閱 Intro administrative files)。除了只用較少的域(cvs 用戶名稱,可有可無的口令和服務器的用戶名稱)以外,它的格式和 Unix 上的 /etc/passwd 相似,采用分號分隔。這里是個有五個表項的例子 passwd 文件:
anonymous:
bach:ULtgRLXo7NRxs
spwang:1sOp854gDF3DY
melissa:tGX1fS8sun6rY:pubcvs
qproj:XR4EZcEs0szik:pubcvs
(口令使用 Unix 標準的 crypt()
函數加密,因此它可以直接從常規 Unix /etc/passwd 文件粘貼過來。)
例子中第一行允許任何 cvs 客戶機使用 anonymous
來訪問,口令可以用任意字符還可以用空口令。(這是一個站點允許匿名進行只讀訪問的典型用法;“只讀(read-only)”部分信息的做法,參看 Read-only access。)
如果他們提供各自的明文口令第二、三行允許對 bach
和 spwang
進行訪問。
如果她提供正確的口令第四行允許對 melissa
訪問,但她的 cvs 操作將實際運行在服務器側的 pubcvs
用戶名下。雖然系統上不須有 melissa
用戶名,但 必須 使用 pubcvs
。
第五行顯示系統用戶標識可以共享:作為 qproj
成功認證的任何客戶實際將按 pubcvs
來運行,和 melissa
所做的一樣。用這種方法你可以在你的倉庫中為每個項目創建一單個共享的系統用戶,并且在 $CVSROOT/CVSROOT/passwd 文件中為每個開發者設置一行。每行的 cvs 用戶名應該不同,而系統用戶名應該相同。用不同的 cvs 用戶名目的是在 cvs 將在其名字下記錄其動作: 當 melissa
提交了項目中的一個修改,檢入被紀錄在項目歷史中的 melissa
名下,而不是 pubcvs
下。而共享一個系統用戶的原因是可以安排倉庫中相關區域的權限,只有那個帳戶有寫權限。
如果系統用戶域存在的時候,全部口令鑒定 cvs 命令按該用戶運行;如果沒有指定系統用戶,cvs 簡單地取 cvs 用戶名作為系統用戶名并且按此戶名運行命令。無論哪種情況,如果系統上沒有這樣的用戶,于是 cvs 操作會失敗(不管客戶機是否提供了正確的口令)。
口令和系統用戶字段都可以省略(如果系統用戶字段省略,那么與口令分隔的冒號也省略)。例如,這將是有效的 $CVSROOT/CVSROOT/passwd 文件:
anonymous::pubcvs
fish:rKa5jzULzmhOo:kfogel
sussman:1sOp854gDF3DY
當口令字段為空,客戶的認證可以用包括空字符串在內的任何口令。但 cvs 用戶名后的分隔冒號必需存在,即使口令為空。
cvs 還可借助于系統認證。認證口令的時候,服務器先檢查 $CVSROOT/CVSROOT/passwd 文件中的用戶。如果找到用戶,就按上面說的方法使用該項進行認證。如果沒有找到,或 cvspasswd 文件不存在,服務器將采用操作系統的用戶認證機制(這種機制可以通過設置 cvsconfig 文件中的 SystemAuth=no
來禁止,參閱 config)。
除非系統中有 PAM(Pluggable Authentication Modules),或者 cvs 服務器端編譯的時候配置 (使用 ./configure --enable-pam
- 參考 INSTALL 中的說明),否則默認的回調(callback)是查找 /etc/passwd 中的口令。在此情況下,將磋商以 PAM 代替。這意味著可以配置 cvs 使用 PAM 提供的各種口令認證方式(可能是 UNIX password,NIS,LDAP,或其他),這取決于 PAM 的全局配置文件(通常在 /etc/pam.conf 或可能是 /etc/pam.d/cvs)。詳細配置 PAM 的方法請參考 PAM 的文檔。
注意,PAM 是 cvs 中使用的實驗特性,鼓勵反饋信息。如果你使用了 PAM 支持,請發郵件到 cvs 的郵件列表(info-cvs@gnu.org
或 bug-cvs@gnu.org
)。
警告:采用 PAM 可以給系統管理員更多的
cvs
認證靈活性,但并不比別的方法有更高的安全性。詳見下。
CVS 在 PAM 配置文件里需要“auth”,“account”和“session”模塊。因此典型的 PAM 配置是在文件 /etc/pam.conf 里模擬標準的 cvs 系統 /etc/passwd 認證:
cvs auth required pam_unix.so
cvs account required pam_unix.so
cvs session required pam_unix.so
對等的 /etc/pam.d/cvs 文件里包括
auth required pam_unix.so
account required pam_unix.so
session required pam_unix.so
一些系統要求給出模塊的完整路徑,因此 pam_unix.so (Linux) 改為類似 /usr/lib/security/$ISA/pam_unix.so.1 (Sun Solaris)。參考 cvs 源碼發布子目錄 contrib/pam 中更多的配置例子。
PAM 中指出的服務名“cvs”是默認配置中的服務名,也可以在編譯前使用 ./configure --with-hardcoded-pam-service-name=<pam-service-name>
重新設置。 cvs 也可以被設置成調用其他的名字 ./configure --without-hardcoded-pam-service-name
,但這個特性只有你有權控制 cvs 用什么名字時才有效。
要知道,在使用系統認證時會有安全漏洞:cvs 操作時是使用系統中用戶的正規注冊口令,而該口令網絡傳輸中是采用明碼方式。見 Password authentication security。這點對使用 PAM 認證會有更多的問題,因為系統口令的源頭是某些像 LDAP 的中心服務,而 LDAP 它還被用于認證別的服務。
另一方面,PAM 使得定期地修改口令非常容易。如果對全部活動給用戶一個口令系統的選項,用戶經常定期改變他們的口令。
在非 PAM 的配置中,口令是保存在 CVSROOT/passwd 文件里面,因為只有管理員用戶(或有等同的權限)才有此文件的修改訪問權限,所以想用定期改變口令會很困難。可以采用設計的網頁程序或 set-uid 程序來更新文件,或者是提交請求讓管理員進行手動修改來更新。第一種情況下,必須記住去定期更新各自的口令可能是很困難的。第二種情況下,手工的本性將是只有絕對必要時才會去修改口令。
注意,PAM 管理員應避免在 cvs 證明/授權(authentication/authorization)中采用配置一次性口令 OTP。如果用 OTP,管理員最好考慮其他的 Client/Server 訪問方式。參閱 Remote repositories 獲得其他方法的列表。
現在,cvspasswd 文件里加入口令的唯一方法是從別處粘貼而來。也許有一天,會有一條命令 cvs passwd
。
不像其他在 $CVSROOT/CVSROOT 目錄下的文件,可以在不是通過 cvs來編輯 passwd 的地方進行編輯。這是因為使 passwd 文件檢出為人們的工作副本可能的安全風險。如果你的確需要將 $CVSROOT/CVSROOT 中的 passwd 檢出,參看 checkoutlist。
posted on 2006-06-16 16:38
kelven 閱讀(1830)
評論(1) 編輯 收藏 所屬分類:
其它