coffee_cn

博客园 首页 新随笔 联系 订阅 管理

来自:http://blog.chinaunix.net/u/29089/showart_273085.html

2.1. CVS服务器设置

2.1.1. 运行 CVS

  • /etc/services

    ...
    cvspserver 2401/tcp
    cvspserver 2401/udp
    ...
  • 用xinetd运行: /etc/xinetd.d/cvs

    service cvspserver
    {
    socket_type = stream
    protocol = tcp
    wait = no
    user = root
    server = /usr/bin/cvs
    server_args = -f --allow-root=/repos/root1 --allow-root=/repos/root2 pserver
    disable = no
    }

  • 用inetd运行: /etc/inetd.conf

    ...
    cvspserver stream tcp nowait root /usr/bin/cvs cvs -f --allow-root=/repos/project --allow-root=/repos/user pserver
    ...

2.1.2. 添加帐号和设置权限

  • 创建系统帐号

    假设目录 /repos/project 作为多人共享项目的版本控制根目录,需要用组权限控制;/repos/user作为存放个人独占地版本控制根目录。管理员帐号为cvsroot,项目版本控制的公共帐号为 cvsproject,用户版本控制的公共帐号为 cvsuser,相应的用户组为 cvsroot, cvsproject, cvsuser。

    $ groupadd cvsproject
    $ groupadd cvsuser
    $ groupadd cvsroot
    $ useradd -g cvsproject -s /sbin/nologin cvsproject
    $ useradd -g cvsuser -s /sbin/nologin cvsuser
    $ useradd -g cvsroot -G cvsproject,cvsuser cvsroot 1
    $ useradd -g cvsuser -s /sbin/nologin cvs_jiangxin 2
    $ useradd -g cvsuser -s /sbin/nologin cvs_johnson
    1

    设置 cvsroot 属于多个组,这样 cvsroot 用户除了进行系统维护外(如添加新的工程),还可以和其它组用户一样具有管理代码的权限。

    2

    用来和CVS用户帐号一一对应的系统帐号。系统帐号禁止登录,密码设置在相应的 CVS 对应帐号文件中设置。

  • 创建CVS根目录

    $ mkdir -p /repos/project
    $ mkdir -p /repos/user
    $ chown cvsroot:cvsroot /repos/project
    $ chown cvsroot:cvsroot /repos/user
    $ chmod 775 /repos
    $ chmod 2775 /repos/project
    $ chmod 2775 /repos/user
    $ su - cvsroot
    $ cvs -d /repos/project init
    $ cvs -d /repos/user init

    运行完毕 cvs init 之后,在CVS根目录下创建了配置目录CVSROOT,权限如下:

    $ ls -l /repos/project/CVSROOT/

    -r--r--r-- 1 cvsroot cvsroot 493 Jan 21 10:37 checkoutlist
    -r--r--r-- 1 cvsroot cvsroot 696 Jan 21 10:37 checkoutlist,v
    -r--r--r-- 1 cvsroot cvsroot 760 Jan 21 10:37 commitinfo
    -r--r--r-- 1 cvsroot cvsroot 963 Jan 21 10:37 commitinfo,v
    -r--r--r-- 1 cvsroot cvsroot 527 Jan 21 10:37 config
    -r--r--r-- 1 cvsroot cvsroot 730 Jan 21 10:37 config,v
    -r--r--r-- 1 cvsroot cvsroot 753 Jan 21 10:37 cvswrappers
    -r--r--r-- 1 cvsroot cvsroot 956 Jan 21 10:37 cvswrappers,v
    -r--r--r-- 1 cvsroot cvsroot 1025 Jan 21 10:37 editinfo
    -r--r--r-- 1 cvsroot cvsroot 1228 Jan 21 10:37 editinfo,v
    drwxrwxr-x 2 cvsroot cvsroot 4096 Jan 21 10:37 Emptydir
    -rw-rw-rw- 1 cvsroot cvsroot 0 Jan 21 10:37 history
    -r--r--r-- 1 cvsroot cvsroot 1141 Jan 21 10:37 loginfo
    -r--r--r-- 1 cvsroot cvsroot 1344 Jan 21 10:37 loginfo,v
    -r--r--r-- 1 cvsroot cvsroot 1151 Jan 21 10:37 modules
    -r--r--r-- 1 cvsroot cvsroot 1354 Jan 21 10:37 modules,v
    -r--r--r-- 1 cvsroot cvsroot 564 Jan 21 10:37 notify
    -r--r--r-- 1 cvsroot cvsroot 767 Jan 21 10:37 notify,v
    -r--r--r-- 1 cvsroot cvsroot 649 Jan 21 10:37 rcsinfo
    -r--r--r-- 1 cvsroot cvsroot 852 Jan 21 10:37 rcsinfo,v
    -r--r--r-- 1 cvsroot cvsroot 879 Jan 21 10:37 taginfo
    -r--r--r-- 1 cvsroot cvsroot 1082 Jan 21 10:37 taginfo,v
    -rw-rw-rw- 1 cvsroot cvsroot 0 Jan 21 10:37 val-tags
    -r--r--r-- 1 cvsroot cvsroot 1026 Jan 21 10:37 verifymsg
    -r--r--r-- 1 cvsroot cvsroot 1229 Jan 21 10:37 verifymsg,v

    可以看出文件 history, val-tags 的权限是任何人可读写,其它文件的权限是任何帐号只读。

    文件 CVSROOT/val-tags 用来确定是否一个TAG是可用的;文件 CVSROOT/history 用来记录CVS的访问记录。

  • 创建 CVS 用户帐号

    使用系统帐号不安全,而CVS提供了独立于系统的用户帐号管理。

    使用配置文件 CVSROOT/passwd, CVSROOT/passwd, CVSROOT/passwd ,来管理帐号。

    $ cat /repos/project/CVSROOT/passwd
    jiangxinroot:_passwd_here_:cvsroot 1
    jiangxin:_passwd_here_:cvsproject
    johnson:_passwd_here_:cvsproject 2
    anonymous::cvsproject 3

    $ cat /repos/project/CVSROOT/readers
    anonymous 4

    1

    用户帐号 jiangxinroot,具有和系统帐号 cvsroot 同样权限。

    2

    用户帐号 jiangxin, johnson,都具有系统帐号 cvsproject 同样的权限,

    3

    匿名帐号 anonymous 的密码为空。

    4

    readers 文件中出现的用户帐号,只具有只读权限。

  • CVS 用户修改口令

    我写了一个程序,作为用户登录的 shell,允许用户远程 SSH 登录,修改自己的 Unix 系统口令以及 CVS 账号口令,参见:附件。如果您有更好的方法,不吝赐教。

2.1.3. 创建工程

只能以 cvsroot 用户创建工程。因为 cvs 根目录的权限设置为 cvsroot 帐户可写。

  • 在客户端创建工程

    client$ cvs -d :pserver:jiangxinroot@10.0.0.7:/repos/project login
    client$ cvs -d :pserver:jiangxinroot@10.0.0.7:/repos/project import -m "add module test, vendor jiangxin, init_tag start." test jiangxin start

    $ ls -l /repos/project
    drwxrwxr-x 3 cvsroot cvsroot 4096 Jan 21 10:54 CVSROOT
    drwxrwsr-x 2 cvsroot cvsroot 4096 Jan 21 11:00 test 1

    $ chown -R cvsproject:cvsproject test
    $ chmod -R 770 test
    $ chmod -R g+s test 2

    client$ cvs -d :pserver:jiangxin@10.0.0.7:/repos/project co test 3
    client$ cvs -d :pserver:johnson@10.0.0.7:/repos/project co -d test2 test
    1

    设置工程/模块 test 的目录权限,使只有 cvsproject组用户才有读写权限,其他帐号拒绝访问。

    3

    用户帐号 jiangxin, johnson 映射为系统帐号 cvsproject,因此可以访问工程 test。

    2

    之所以为模块 test 设置 g+s,是为了当设置一个用户属于多个时,操作不同工程时,能够保障文件的组id维持不变。否则可能影响其它用户的权限。可以用更简单的命令执行 chmod -R 2770 test 进行设置。

    于是创建了多用户共享的工程 test。

  • 另一种创建工程的方法:在服务器端创建工程

    可以直接在服务器端创建目录,设置权限,即完成工程的创建。当然这样创建的工程只是一个空的工程,需要在客户端为空的工程逐个添加文件和目录。

    $ cat /repos/project/CVSROOT/passwd
    jiangxroot:_passwd_here_:cvsroot
    anonymous:_passwd_here_:cvsuser
    jiangxin:_passwd_here_:cvs_jiangxin
    johnson:_passwd_here_:cvs_johnson

    $ cd /repos/project
    $ mkdir jiangxin; chown -R cvs_jiangxin:cvsuser jiangxin; chmod -R 2700 jiangxin
    $ mkdir johnson; chown -R cvs_johnson:cvsuser johnson; chmod -R 2700 johnson

    于是创建了两个用户独占的工程。

posted on 2008-04-20 22:53  coffee  阅读(335)  评论(0)    收藏  举报