- 为了方便管理,可为 cvs 专门建立现存于操作系统中的一个组和其中的若干用户。后面还需要建立只属于 cvs 服务的 virtual 用户,并将他们映射到已建立的系统用户上。通过设置文件与目录的不同权限,则可以对 cvs 服务的 virtual 用户进行不同访问权限的控制。
- 由于 cvs 服务并不是采用 standalone模式始终在后台运行并监听端口,而是由 inetd或 xinetd守护进程来代劳。所以需要配置 /etc/services文件,将 cvs 服务的端口号(通常为2401)与服务名称关联起来,并配置 inetd.conf或在 /etc/xinetd.d/目录下生成相应的服务描述文件,指明 inetd或 xinetd以什么方式和参数来启动 cvs 程序,以及使用
--allow-root=/path/to/your/repository/
来指明
cvs 服务需保存的所有
repository。配置完成后需要重新启动
inetd或
xinetd,使其读入
cvs 新的配置。
下面是各配置文件中相关的内容:# /etc/services cvspserver 2401/tcp cvspserver 2401/udp # /etc/inetd.conf cvspserver stream tcp nowait root /usr/local/bin/cvs cvs --allow-root=/usr/local/newrepository pserver # /etc/xinetd.d/cvspserver service cvspserver { socket_type = stream wait = no user = root env = HOME= server = /usr/bin/cvs server_args = --allow-root=/cvsroot/program --allow-root=/cvsroot/linuxconf --allow-root=/cvsroot/official --allow-root=/cvsroot/pub pserver }
- 根据 --allow-root=/path/to/your/repositary/中指定的路径,生成相应的目录作为 repository,然后使用 cvs init对每一个 repository初始化:
cvs -d /path/to/your/repository init
- 对 repository初始化后,会在其目录下生成 CVSROOT子目录。然后,在 CVSROOT目录中创建 passwd文件,设置使用 cvs 的 virtual用户名、密码,及其所映射的操作系统用户:
foo:blah-blah:cvsroot goo:blah-blah:cvsroot
这里即将 cvs 的 virtual用户 foo 和 goo 映射为操作系统用户 cvsroot 。而 blah-blah 部分对应的是由下面的 Perl 脚本加密后生成的密码:
#!/usr/bin/perl # Run me like this: crypt.pl "username" srand (time()); my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ? 65 : 97))"; my $salt = sprintf ("%c%c", eval $randletter, eval $randletter); my $plaintext = shift; my $crypttext = crypt ($plaintext, $salt); print "${crypttext}\n";
- 在 CVSROOT目录中修改文件 cvswrappers与 cvsignore。cvswrappers文件的目的是告诉 cvs 哪些文件是二进制文件,从而需要禁用 keyword expansion与 line-ending conversion 。而 cvsignore文件列出了哪些文件是需要忽略不参予 cvs 管理的,诸如 *.~ 、*.bak 等文件。下面分别给出这两个文件的内容:
# cvswrappers *.gif -k ‘b‘ *.jpg -k ‘b‘ *.JPG -k ‘b‘ *.dvi -k ‘b‘ *.pdf -k ‘b‘ *.doc -k ‘b‘ *.eps -k ‘b‘ *.caj -k ‘b‘ *.ps -k ‘b‘ *.exe -k ‘b‘ *.com -k ‘b‘ *.png -k ‘b‘ *.bmp -k ‘b‘ *.PNG -k ‘b‘ *.BMP -k ‘b‘ *.dia -k ‘b‘ *.fig -k ‘b‘ *.FIG -k ‘b‘ *.mat -k ‘b‘ *.MAT -k ‘b‘ *.a -k ‘b‘ #cvsignore _region_.tex *.log *.efmt _region_.prv *.out *.snm *.aux *.nav *.toc *.bbl *.blg *.mpo *.mpx *.tmp tmpgraph.tex relax.* #*# *.bak *.BAK *~ *.asv *.d semantic.cache
注意: 修改完 passwd、 cvswrappers、 cvsignore文件后,需将其权限设为 444 。
- 实质上,上述方法设置user passwd已经不再适用了。正确的做法是,应该将被映设的系统用户信息条目从/etc/passwd中添加到/var/lib/cvsd/etc/passwd中。否则,就会出现”cvsd: no such system user”的错误。同时,应该该用户添加到cvsd组中,否则用户将没有权限访问repository。(事实证明,这么做也不行,只能将cvs虚拟用户映到cvsd上)
- 最后,对生成的 repository及其所有子目录设置相应的用户与组权限。权限的设置可以通过设置文件与目录的操作系统级权限,也可以在 CVSROOT下建立 readers或 writers文件,来控制 cvs virtual用户的访问权限。这两个文件中均是 cvs 虚拟用户名的列表,每行写一个用户名,且在文件末尾留一空白行。写在 readers文件中的用户只有 read-only权限,写在 writers中的用户同时拥有读写权限。若在 CVSROOT下存在 writers文件,则凡是未列入该文件的用户都只有 read-only权限。
时间: 2024-10-20 23:13:34