SlackList  - Śmietnik - ChrootSsh + logowanie z kluczem


ChrootSsh + logowanie z kluczem

Opis ma na celu pokazanie jak zrobić zamknięte (chrootowane) środowisko dla userów logujących się przez ssh i autoryzacje z kluczem.

ChrootSsh

W sieci jest opisanych parę sposobów,  ja wybrałem patchowanie openssh. Patch lub już zpatchowane źródła openssh są na stronie http://chrootssh.sourceforge.net lub kopia lokalna z linków na dole strony.
 
Już zpatchowane źródełka należy rozpakować. W katalogu ze źródłami wydać polecenie ./configure, ja dla jak największej zgodności z paczka ze slackware użyłem takich opcji:
 
./configure --prefix=/usr \
            --sysconfdir=/etc/ssh \
            --without-pam \
            --with-md5-passwords \
            --with-tcp-wrappers \
            --with-default-path=/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin \
            --with-ipv4-default \
            --with-privsep-path=/var/empty \
            --with-privsep-user=sshd \
            --build=i486


Podsumowanie konfiguracji wygladało tak:
 
OpenSSH has been configured with the following options:
                     User binaries: /usr/bin
                   System binaries: /usr/sbin
               Configuration files: /etc/ssh
                   Askpass program: /usr/libexec/ssh-askpass
                      Manual pages: /usr/man/manX
                          PID file: /var/run
  Privilege separation chroot path: /var/empty
            sshd default user PATH: /usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin
                    Manpage format: doc
                       PAM support: no
                 KerberosV support: no
                 Smartcard support: no
                     S/KEY support: no
              TCP Wrappers support: yes
              MD5 password support: yes
                   libedit support: no
       IP address in $DISPLAY hack: no
           Translate v4 in v6 hack: no
                  BSD Auth support: no
              Random number source: OpenSSL internal ONLY

Następnie wydajemy polecenie make. U mnie pojawiał się taki błąd:
 
openbsd-compat//libopenbsd-compat.a(xcrypt.o)(.text+0x36): In function `xcrypt':
/usr/src/openssh-4.2p1-chroot/openbsd-compat/xcrypt.c:65: undefined reference to `crypt'
collect2: ld returned 1 exit status
make: *** [sshd] Error 1

 
Rozwiązaniem jest zmiana w pliku Makefile, było:  
LIBS=-lresolv -lcrypto -lutil -lz –lnsl
powinno być:
LIBS=-lresolv -lcrypto -lcrypt -lutil -lz –lnsl
 
Teraz można wykonać kompilacje make i zainstalować program make install. Zrobiłem paczkę dla slacka, link jest na dole strony, wiec możesz jej użyć instalując poleceniem installpkg openssh-4.2p1-chroot-i486-1.tgz Nie wiem czy będzie działać u Ciebie ja ją zainstalowałem bez problemu na trzech komputerach. Jeżeli nie będzie działać to zrób przynajmniej ./configure żeby zobaczyć jakich brakuje Ci bibliotek.

Chrootowane srodowisko

Teraz można ubić pracujące sshd i uruchomić nowe. Jeżeli wszystko działa tzn. można się zalogować normalnie po ssh to możesz przygotować środowisko dla chrootowanego usera.
 
Zaznaczenie że user ma pracować w chroocie trzeba zrobic w pliku /etc/passwd dodając za ścieżką do katalogu domowego ./ (kropka i slash) .
filemonek:x:1119:100:Jan Kotek:/home/filemonek/./:/bin/bash
 
Teraz w katalogu domowym należy zrobic odpowiednie katalogi i skopiowac z systemu następujące pliki:
 
./bin:
bash*  ls*  mkdir*  pwd*  rm*

./etc:
group  hosts  passwd  shadow

./lib:
ld-2.3.1.so*        libcrypt.so.1@   libnsl-2.3.1.so*     libresolv-2.3.1.so*  libtermcap.so.2@
ld-linux.so.2@      libc.so.6@       libnsl.so.1@         libresolv.so.2@      libtermcap.so.2.0.8*
libc-2.3.1.so*      libdl-2.3.1.so*  libpthread-0.10.so*  librt-2.3.1.so*      libutil-2.3.1.so*
libcrypt-2.3.1.so*  libdl.so.2@      libpthread.so.0@     librt.so.1@          libutil.so.1@

./usr/bin:
env*  id*  scp*  sftp*  ssh*  tty*

./usr/lib:
libcrypto.so.0@  libcrypto.so.0.9.7*  libz.so.1@  libz.so.1.1.4*


W plikach group passwd  shadow należy zostawić tylko formacje o chrootowanym użytkowniku. Dla wszystkich plików należy zadbać o właściwego właściela i grupę np. w tym przypadku było filemonek:users .
 
W tym momencie można już logować się do chrootowanego środowiska.
 
Logowanie z kluczem
 
W pliku konfiguracyjnym /etc/ssh/sshd_config ustawiłem opcje wymuszające logowanie z kluczem i wyłączające logowanie tylko za pomocą hasła.
 
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/id_rsa_pub
PasswordAuthentication no
 
 Klucze dla usera wygenerowałem pod windowsami za pomocą puttygen.exe (link na dole strony).
 
Wgląda to tak:
 
Generowanie klucza i ustawienie hasła.
generowanie klucza
 
Export klucza prywatnego.
klucz publiczny

Zapisanie klucza publicznego.
klucz prywatny
 
Klucz publiczny powinien być umieszczony w katalogu domowym użytkownika jako .ssh/id_rsa_pub tylko ze zapisany jak wyżej klucz nie bardzo chce działać. Należy go troszkę zmienić. Plik z kluczem musie mieć tylko jedna linijkę, zaczynać się od "ssh-rsa " a kończyć na " rsa-key-tutaj_data". Pomiędzy tymi wpisami trzeba umieścić sam klucz. W edytorze Crimson Editor  wygląda to tak:

Klucz wygenerowny.
klucz
 

Początek klucza i format pliku Unix.
klucz publiczny 1

Koniec klucza.
klucz publiczny 2


Teraz przy logowaniu przy pomocy putty należy w opcji "Connection-SSH-Auth-Private key.." wskazać klucz prywatny. Jeżeli wszystko poszło ok to masz chrootowanego usera logujacego się przy pomocy klucza.

Linki:
Projekt ChrootSsh - http://chrootssh.sourceforge.net
Lokalna kopia źródeł - openssh-4.2p1-chroot.tar.gz
Paczka z chrootssh dla slacka - openssh-4.2p1-chroot-i486-1.tgz
Projekt Putty - http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
Crimson Editor - http://www.crimsoneditor.com


Olek Kwasniewski , Warszawa, 2005-11-16

Grenlandia 2012