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