Roboczy przepis na podstawienie anon-cvs w chroocie

Krzysztof G. Baranowski kgb w manjak.knm.org.pl
Czw, 27 Sie 1998, 12:02:52 CEST


Czesc,

oto przepis na postawienie anon-cvs w chroocie (tak jak obiecalem
kloczkowi). Wysylam to tutaj, bo moze sie komus przydac.

Potrzebne rzeczy: wrapper, rsync (z samba.anu.edu.au/rsync/)
i cvs-1.10.

1) Najpierw dopisujemy wrappera do /etc/inetd.conf. Oczywiscie
   wrapper musi zostac odpalony jako root.
2401    stream  tcp     nowait  root    /usr/bin/pserver pserver

[wiecej o samym wrapperze na koncu]

2) Nastepnie organizujemy sobie srodowisko dla chroot (u mnie
   jest to katalog /anon-cvs)

# mkdir anon-cvs
# cd anon-cvs
# mkdir bin dev lib etc cvsroot

[teraz omowie zawartosc kolejnych katalogow]

--- 

ls bin/
-rwxr-xr-x   1 root     root       302732 Aug 26 20:08 bash*
-rwxr-xr-x   1 root     root       479748 Aug 26 20:07 cvs*
-rwxr-xr-x   1 root     root        29980 Aug 26 20:09 ls*
-rwxr-xr-x   1 root     root        10124 Aug 26 23:12 rm*

[ w zasadzie potrzebny jest jedynie cvs, ale pozostale
  przydaja sie do sprawdzania chroota od wewnatrz ;-) ]

---

ls dev/
crw-rw-rw-   1 root     root       1,   3 May  5 22:32 null

[ /dev/null jest obowiazkowy, bez tego nie ruszy ]

--- 

ls lib/
-rwxr-xr-x   1 root     root       159488 Aug 26 20:08 ld-linux.so.2*
-rwxr-xr-x   1 root     root      3063916 Aug 26 20:08 libc.so.6*
-rwxr-xr-x   1 root     root       181993 Aug 26 20:08 libcrypt.so.1*
-rwxr-xr-x   1 root     root        37146 Aug 26 20:13 libdl.so.2*
-rwxr-xr-x   1 root     root       111285 Aug 27 11:02 libnss_compat-2.0.7.so*
-rwxr-xr-x   1 root     root       111285 Aug 27 11:02 libnss_compat.so.1*
-rwxr-xr-x   1 root     root       177175 Aug 27 11:02 libnss_files-2.0.7.so*
-rwxr-xr-x   1 root     root       177175 Aug 27 11:02 libnss_files.so.1*
-rwxr-xr-x   1 root     root        12252 Aug 26 20:09 libtermcap.so.2*

[ noł komennts ]

---

ls etc/
-rw-r--r--   1 root     root          441 Aug 27 11:10 group
-rw-r--r--   1 root     root          928 Aug 27 11:10 passwd

[ tylko dwa pliki, nie trzeba tam klasc zadnych hasel, jednakze
  pliki powinny zawierac wpisy dla: root i uzytkownika zwyklego
  pod ktorego uidem bedzie chodzil CVS, u mnie wpisy wygladaja tak:

passwd:

root:x:0:0:Root:/root:/bin/false
nobody:x:66:66:Nobody:/:/bin/false

group;

root::0:root
nobody::66:nobody

---

cvsroot/

[ tutaj trzeba sie troche pogimnastykowac, ja zwroce uwage na kilka
  rzeczy - // moje komentarze, prosze zwarac uwage na ownerow plikow
  i permsy ]

[root w manjak cvsroot]# ls -l
total 2
drwxrwxr-x   2 root     root         1024 Aug 27 11:10 CVSROOT/
drwxrwxr-x   2 66       66           1024 Aug 26 23:31 nlfs/

// katalog CVSROOT/ owner: root.root prawa: 775

[root w manjak cvsroot]# ls -l CVSROOT/
total 35
-r--r--r--   1 root     root          493 Aug 13 12:09 checkoutlist
-r--r--r--   1 root     root          682 Aug 13 12:09 checkoutlist,v
-r--r--r--   1 root     root          760 Aug 13 12:09 commitinfo
-r--r--r--   1 root     root          947 Aug 13 12:09 commitinfo,v
-rw-r--r--   1 root     root            0 Aug 27 11:07 config
-r--r--r--   1 root     root          764 Aug 13 12:09 cvswrappers
-r--r--r--   1 root     root          952 Aug 13 12:09 cvswrappers,v
-r--r--r--   1 root     root         1025 Aug 13 12:09 editinfo
-r--r--r--   1 root     root         1210 Aug 13 12:09 editinfo,v
-rw-rw-rw-   1 root     root         9038 Aug 26 23:31 history
-r--r--r--   1 root     root         1039 Aug 13 12:09 loginfo
-r--r--r--   1 root     root         1223 Aug 13 12:09 loginfo,v
-r--r--r--   1 root     root         1151 Aug 13 12:09 modules
-r--r--r--   1 root     root         1335 Aug 13 12:09 modules,v
-r--r--r--   1 root     root          564 Aug 13 12:09 notify
-r--r--r--   1 root     root          747 Aug 13 12:09 notify,v
-rw-r--r--   1 root     root           21 Aug 27 11:10 passwd
-r--r--r--   1 root     root          649 Aug 13 12:09 rcsinfo
-r--r--r--   1 root     root          833 Aug 13 12:09 rcsinfo,v
-r--r--r--   1 root     root          879 Aug 13 12:09 taginfo
-r--r--r--   1 root     root         1063 Aug 13 12:09 taginfo,v

// wazne sa trzy pliki
// a) 'passwd' zawierajacy wpisy typu:
// 	nobody:RIb3PEI96
// zakodowane haslo trzeba wklepac recznie (przedtem trzeba sobie
// je wygenerowac). wazne jest zeby uzytkownik wpisany tutaj
// byll obecny w /etc/passwd,group  (chrootowym), czyli tutaj
// nobody, tam nobody, jesli chcesz zmienic nazwe  nobody na 
// cvs np., to tam (passwd,group) musisz tez zmienic nobody na cvs/
// w przeciwnym razie nie bedzie dzialac
// b) 'history' (uzytkownik nierootowy w chroot, czyli w naszym
// przypadku nobody musie miec prawa zapisu do tego pliku
// c) 'readers'
// oznaczajacy, ze uzytkownik posiada tylko prawa odczytu z
// repository, umieszczamy tam nazwe usera, czyli nobody
// info dot. tego pliku mowi:   (Don't forget the newline after the
// last user.)

katalog nlfs/ zawiera juz przykladowy projekt. ownerem kazdego
projektu musi byc user nierootowy w chroocie, czyli u nas 
nobody (uid/gid = 66). User ten musi miec prawa zapisu do katalogu
(tam tworzone sa locki przez CVS). WAZNE: trzymamy tam kopie
oryginalnego repository (w zadnym wypadku oryginal).

ls -l /nlfs
drwxrwxr-x   2 66       66           1024 Aug 26 23:31 nlfs/
-r--r--r--   1 66       66            931 Aug 13 12:11 Makefile,v
-r--r--r--   1 66       66           2509 Aug 25 12:10 dir.c,v
-r--r--r--   1 66       66           1835 Aug 25 12:10 ialloc.c,v
-r--r--r--   1 66       66           5925 Aug 25 12:10 inode.c,v
-r--r--r--   1 66       66           3830 Aug 25 12:10 mknlfs.c,v
-r--r--r--   1 66       66           1465 Aug 13 12:11 nlfs.h,v

Thats all folks. Aaaa, oto listing przykladowej sesji

$ cvs  -d :pserver:nobody w manjak:/cvsroot login
(Logging in to nobody w manjak)
CVS password:
$ cvs  -d :pserver:nobody w manjak:/cvsroot co nlfs
cvs server: Updating nlfs
U nlfs/Makefile
U nlfs/dir.c
U nlfs/ialloc.c
U nlfs/inode.c
U nlfs/mknlfs.c
U nlfs/nlfs.h
[teraz wprowadzilem male zmiany w jednym pliku]
$ cvs  -d :pserver:nobody w manjak:/cvsroot commit -m "zmiana" dir.c
cvs [server aborted]: "commit" requires write access to the repository

Wniosek: calosc jest relatywnie bezpieczna i nie naraza oryginalnego
repository :-)

Kris
-- 
Krzysztof G. Baranowski - Prezes Klubu Nieszkodliwych Manjaków
"Smith & Wesson - The original point and click interface..."
http://www.knm.org.pl/              <prezes w manjak.knm.org.pl>



Więcej informacji o liście dyskusyjnej pld-devel-pl