パスワードを忘れた? アカウント作成
455277 journal

hoagの日記: cvsd インストールめも

日記 by hoag

cvs を chroot で動かすためのパッケージである cvsd の設定めも。ドキュメントはこのページの documentation とか FAQ 、 または other info からリンクされている Secure CVS Pserver Mini-HOWTO 辺り。

[口上]
cvs を chroot の中で動かす cvsd を使ってみる。アクセスは pserver 形式となる。
メリットは
・内部のディレクトリ構成と外部に公開するディレクトリパスを分離できる
・一般ユーザ権限で動く
・inetd と違って、ずっとメモリ内に常駐するので、起動が速い(多分)

デメリットは
・inetd と違って、ずっとメモリ内に常駐するので、その分メモリ食い。
・tcpd の様なアクセス制限は無い。(必要なら iptables する)
辺りか。

本当に公開するなら、パスワードを流さない様に ssh アクセスとすべきだろう。
が、今回は範囲外。

[前提]
目的は、設定ファイルの管理。
ディレクトリ構成は conf の下にディレクトリを適宜作成する
テスト用に conf/home/stub.txt を使用する
ユーザは以下の 2 ユーザ
anonymous/***      読み込みのみ
vc/***               読み書き
パスワードは適宜

リポジトリへのパスは /cvsroot とする。

つまり、アクセス形式は
$ cvs -d :pserver:user@host.domain:/cvsroot login
の、様になる。

以下、workdirectory は適当な、空の作業ディレクトリ。

[README にあるクイックリファレンス]
/usr/share/doc/cvsd にある

# addgroup --system cvsd       (or groupadd)
# adduser --system --ingroup cvsd --home /var/lib/cvsd \
          --shell /bin/false --gecos 'cvs pserver daemon' cvsd
# cvsd-buildroot /var/lib/cvsd
# cvs -d /var/lib/cvsd/myrepos init
# cvsd-passwd /var/lib/cvsd/myrepos +anonymous
# touch /var/lib/cvsd/myrepos/CVSROOT/writers
edit /var/lib/cvsd/myrepos/CVSROOT/config
  add "SystemAuth=no"
  add "PamAuth=no"      (on systems that have this option)
  add "LockDir=/tmp/myrepos"
# mkdir /var/lib/cvsd/tmp/myrepos
# chown cvsd:cvsd /var/lib/cvsd/tmp/myrepos
edit /etc/cvsd/cvsd.conf
  set "RootJail /var/lib/cvsd"
  set "Repos /myrepos"
途中まではパッケージの postinst がやってくれる。

[インストール]
# apt-get install cvsd
postinstall で入力項目があるが、空のまま進める。
Repositories to serve:
Starting cvs pserver chroot wrapper: cvsdcvsd: /etc/cvsd/cvsd.conf: contains no 'Repos' statements
リポジトリを指定しなかったので、cvsd.conf に Repos が記述されない。
そのため、cvsd が起動エラーになる。
が、/var/lib/cvsd に chroot の環境は作成されている。

[リポジトリを作る]
# cd /var/lib/cvsd/
# mkdir cvsroot
# cvs -d /var/lib/cvsd/cvsroot init

[ユーザを作る]
# cvsd-passwd /var/lib/cvsd/cvsroot +anonymous
Enter new password:

作成したユーザは以下
anonymous
vc

[CVS の設定]
# cd workdirectory
# cvs -d /var/lib/cvsd/cvsroot co .
# vi CVSROOT/config
# cvs -d /var/lib/cvsd/cvsroot diff
cvs diff: Diffing .
cvs diff: Diffing CVSROOT
Index: CVSROOT/config
===================================================================
RCS file: /var/lib/cvsd/cvsroot/CVSROOT/config,v
retrieving revision 1.1
diff -r1.1 config
2c2,3
< #SystemAuth=no
---
> SystemAuth=no
> PamAuth=no
18c19
< #LockDir=/var/lock/cvs
---
> LockDir=/tmp/cvsroot

# cvs -d /var/lib/cvsd/cvsroot commit

[CVS の設定(ロックディレクトリの作成)]
# cd /var/lib/cvsd/tmp/
# mkdir cvsroot
# chown cvsd:cvsd cvsroot

[cvsd.conf の修正]
$ diff -u /etc/cvsd/cvsd.conf cvsd.conf
@@ -92,5 +92,6 @@
+Repos /cvsroot

[cvsd の起動]
# cp cvsd.conf /etc/cvsd/cvsd.conf
# /etc/init.d/cvsd start
$ netstat -nl
tcp6       0      0 :::2401                 :::*                    LISTEN

IPv4 で LISTEN してない?

[readonly ユーザ(anonymous/***)のテスト]
$ touch ~/.cvspass
$ cvs -d :pserver:anonymous@localhost:/cvsroot login
Logging in to :pserver:anonymous@localhost:2401/cvsroot
CVS password:
$ cat ~/.cvspass
/1 :pserver:anonymous@localhost:2401/cvsroot Ah<Ze
$ cd workdirectory
$ cvs -d :pserver:anonymous@localhost:/cvsroot co .

CVSROOT が checkout される

[writable ユーザ(vc/***)のテスト]
$ cvs -d :pserver:vc@localhost:/cvsroot login
$ cat ~/.cvspass
/1 :pserver:vc@localhost:2401/cvsroot A<h

$ cd workdirectory
$ mkdir home
$ touch home/stub.txt
$ cvs -d :pserver:vc@localhost:/cvsroot import -m '' conf vtag rtab
cvs import: cannot make path to /cvsroot/conf: Permission denied
cvs import: Importing /cvsroot/conf/home
cvs import: ERROR: cannot mkdir /cvsroot/conf/home -- not added: No such file or directory

No conflicts created by this import

cvs コマンドが cvsd ユーザ権限で動くので、Permission を許可してやる。
chown でなく、chmod を使う方法もあるだろう。
$ su
# cd /var/lib/cvsd
# chown -R cvsd:cvsd cvsroot
$ cvs -d :pserver:vc@localhost:/cvsroot import -m '' conf vtag rtab
但し、cvsd 管理下の全ユーザで書き込みができてしまう。

[CVS によるアクセス制限]
writers を作成する。書き込みを許可するユーザはまだ空。

と、その前に
# mkdir /tmp/cvsroot
/var/lib/cvsd/cvsroot/CVSROOT の config の LockDir セクションの記述と合わせる。
競合は発生しないので一時的に /tmp に作ってごまかす。
/tmp の中は次のブート時に消されるしね。

# cd workdirectory
# cvs -d /var/lib/cvsd/cvsroot co .
# cd CVSROOT
# touch writers
# cvs -d /var/lib/cvsd/cvsroot add writers
# cvs -d /var/lib/cvsd/cvsroot commit -m ''

$ cd workdirectory
$ cvs -d :pserver:anonymous@localhost:/cvsroot co .
$ cd conf/home
$ vi stub.txt
$ cvs -d :pserver:anonymous@localhost:/cvsroot
diff
cvs diff: Diffing .
Index: stub.txt
===================================================================
RCS file: /cvsroot/conf/home/stub.txt,v
retrieving revision 1.2
diff -r1.2 stub.txt
1c1
< anon
---
> anon 2
$ cvs -d :pserver:anonymous@localhost:/cvsroot commit -m ''
cvs commit: Examining .
cvs [server aborted]: "commit" requires write access to the repository

[CVS によるアクセス許可]
writers に書き込みを許可するユーザを列挙する
# cd workdirectory
# cvs -d /var/lib/cvsd/cvsroot co .
# cd CVSROOT
# vi writers
# cvs -d /var/lib/cvsd/cvsroot diff
cvs diff: Diffing .
Index: writers
===================================================================
RCS file: /var/lib/cvsd/cvsroot/CVSROOT/writers,v
retrieving revision 1.1
diff -r1.1 writers
0a1,2
> vc
>
# cvs -d /var/lib/cvsd/cvsroot commit -m '' writers

$ cd workdirectory
$ cvs -d :pserver:vc@localhost:/cvsroot co conf
$ cd conf/home
$ vi stub.txt
$ cvs -d :pserver:vc@localhost:/cvsroot diff
cvs diff: Diffing .
Index: stub.txt
===================================================================
RCS file: /cvsroot/conf/home/stub.txt,v
retrieving revision 1.2
diff -r1.2 stub.txt
1c1
< anon
---
> vc
$ cvs -d :pserver:vc@localhost:/cvsroot commit -m '' stub.txt
/cvsroot/conf/home/stub.txt,v  <--  stub.txt
new revision: 1.3; previous revision: 1.2

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs

読み込み中...