初始化步骤:
1.建立仓库目录,锁目录
2.建立仓库
3.修改CVSROOT/config中Lockdir为新建立的锁目录
4.建立cvsadm用户以及组
5.建立cvsdevel用户以及组,最后不需要.ssh/authorized_keys2文件,也不允许远程/本地登陆
6.所有cvs用户均无本地登陆权限,仅能够使用cvs命令(ssh通道),通过修改/etc/passwd的shell段实现
所有cvs用户都应该是cvsdevel组成员
7.修改仓库目录,CVSROOT,锁目录,CVSROOT/history,val-tags的权限
a.参考“基本知识”10设置权限
chown -R cvs-adm.cvs-devel <BASE>
chmod 750 <BASE>
chmod 750 <BASE>/CVSROOT
chmod 640 <BASE>/CVSROOT/*
chmod 770 <BASE>/CVSROOT/Emptydir
chmod 660 <BASE>/CVSROOT/{history,val-tags}
chown -R cvs-adm.cvs-devel /cvs-locks
chmod -R 770 /cvs-locks
b.项目(模块)目录有管理员建立
c.注意给项目(模块)目录,锁目录添加sgid标志,chmod g+s xxx,这样任何用户建立的目录/文件均属于该组,才能实现项目组策略
8.添加新用户
9.根据项目设置权限
a.添加新的项目对应unix组
b.添加用户到该组,添加用户到cvsdevel组
c.项目目录属于cvsadm.新的组
d.修改项目目录属性为770, chmod 770 项目目录
d.注意给目录添加sgid标志,chmod g+s xxx,这样任何用户建立的目录/文件均属于该组,才能实现项目组策略
10.goto 8
新用户步骤:
1.添加用户adduser
2.产生key
3.上传key到server,注意修改key的格式(putty->openssh)
4.$HOME/.ssh目录权限以及authorized_keys2文件权限
chmod 700 .ssh
chmod 600 authorized_keys2
否则ssh的key认证登陆不成功(??不知道原因)
5.设置用户的umask,0022->0007,这样该用户建立的文件/目录对组用户有写权限,结合目录的sgid实现项目组策略
6.验证ssh的key认证登陆
6.修改/etc/passwd文件,用户shell为cvsonly脚本
要求:
权限分配不能影响正常的cvs操作(add,import,checkout,update,tag,branch,del对应的项目代码)
cvsadm对CVSROOT有读写权限,对其他所有项目有读权限
cvsdevel对CVSROOT仅有读权限,对其他所有项目没有任何权限
项目成员对CVSROOT仅有读权限,对本项目有读写权限,对其他所有项目没有任何权限
项目组策略:
项目目录仅对对应项目unix组用户开放读写权限,其他用户无任何权限,项目权限仅控制到组,不控制单独用户
基本知识:
1.保护cvs管理文件,只有管理员/管理员组才能有修改权限(CVSROOT)
2.保护模块/子模块有正确的用户访问
3.cvs的单独仓库文件(.v)不能单独的设置权限,使用unix的groups权限控制目录权限
4.使用LoclDir选项(CVSROOT/config文件中)设置特别的lockdir,避免所以用户有CVSROOT修改权限,
这个目录一定不要放在CVS的仓库root目录下,避免被cvs当做一个模块了!
通过local协议修改CVSROOT/config文件中行如下:LockDir=/cvs-locks
5.建立一个administrative的group(例如cvs-adm),只有这个组的成员才有权限写CVSROOT目录中的文件内容
同时注意,如果有多个cvs仓库/projects,,每个仓库/projects都建立唯一一个管理员组
Note: The description we make here works under OpenBSD. On other Unix flavours (for instance on GNU/Linux with ext2fs), it may be necessary to use the setgid bit on the directories, since directories are created with the group of the running process instead of the one of the parent directory. But pay attention to the fact that different Unices handle setgid bits differently. On GNU/Linux, we have had to set the setgid bit on every directory of the repository, to force the creation of sub-directories with the same group as their parent directory. In case of doubt, one should test that the properties described here are indeed present on a particular Unix flavour.
6.建立一个标准开发人员组(cvs-devel),每个其他组的开发人员也必须是这个组的成员,该组对lockdir和
CVSROOT/history,CVSROOT/val-tags文件有写权限,对大部分的仓库资源有读权限,并且仅这个组的成员
才有CVS root目录的读权利
7.为了控制每个仓库模块的写权限,应该建立其他的组以及联系组相关成员,并给组写权限
8.unix系统中other权限位永远没有写权限
9.unix系统中owner权限位总是有写权限
10.设置权限例子:
chown -R cvs-adm.cvs-devel <BASE>
chmod 750 <BASE>
chmod 750 <BASE>/CVSROOT
chmod 640 <BASE>/CVSROOT/*
chmod 770 <BASE>/CVSROOT/Emptydir
chmod 660 <BASE>/CVSROOT/{history,val-tags}
chown -R cvs-adm.cvs-devel /cvs-locks
chmod -R 770 /cvs-locks
11.建立新模块的问题
由于仅有cvs-adm有cvs的root目录的写权限,其他用户无法import新的"top-level"模块,需要管理员组成员
帮助建立该modules目录,并设置好相应的组权限允许用于check-in文件,这样以后该组用户就可以正常的使
用add,import命令了
12.ssh的public key访问方式
由于其他用户不能运行任何shell命令(仅cvs server命令),需要管理员帮助上传起public key文件到服务器
的用户HOME/.ssh目录下
13. .ssh目录权限
.ssh 700
authorized_keys2 600