Gestiune centralizată

Idei și discuții

  • Less is more.
  • Prefer text over binary.
    • Wiki, repository
    • File-based wikis
  • Centralize, backup and secure.
    • Computer clusters
    • iSCSI (Internet Small Computer System Interface), FiberChannel
  • Allow interconnection and interoperability.
    • LDAP (Lightweight Directory Access Protocol)
    • RADIUS (Remote Authentication Dial-In User Service)
  • Use versioning.
    • Gitolite - authorization layer on top of Git
  • Allow access from anywhere on any device.

Demo

Prefer text over binary

  • Obiective:
    • Configurarea un blog/site bazat pe jekyll pe swarm.
    • Publicarea conținutului unui repository printr-un hook Git.

* Pe swarm

  • # Creați directorul ~/git-repos/ și, dacă nu există, directorul ~/public_html/.
    1. Accesați directorul ~/git-repos/ și creați, în cadrul acestui director, repository-ul workshop-blog.git. Folosiți comanda:
      git init --bare workshop-blog.git
    2. Accesați directorul ~/public_html/ și creați, în cadrul acestui director, subdirectorul workshop-blog/:
      mkdir public_html
      cd public_html
      mkdir workshop-blog
      • Aici va fi publicat conținutul blog-ului.
      • Accesați, din browser, URL-ul http://swarm.cs.pub.ro/~<username-de-pe-swarm>/workshop-blog/, unde <username-de-pe-swarm> este numele vostru de utilizator de pe swarm.
    3. Creați fișierul ~/git-repos/workshop-blog.git/hooks/post-receive cu conținutul de mai jos (dacă fișierul există, suprascrieți-i conținutul; fișierul post-receive.sample nu are o legătură directă cu post-receive):
      post-receive
      #!/bin/bash
       
      #
      # Jekyll post-receive hook
      # Publish information from repository (GIT_REPO) to public web folder (PUBLIC_WWW).
      # 
      # https://github.com/mojombo/jekyll/
      # https://github.com/mojombo/jekyll/wiki/Deployment
      #
       
      GIT_REPO=$HOME/git-repos/workshop-blog.git
      TMP_GIT_CLONE=/tmp/$USER-workshop-blog-clone
      PUBLIC_WWW=$HOME/public_html/workshop-blog
       
      GIT=/usr/bin/git
      JEKYLL=/var/lib/gems/1.8/bin/jekyll
       
      $GIT clone $GIT_REPO $TMP_GIT_CLONE
      $JEKYLL --no-auto --base-url /~$USER/workshop-blog --url http://swarm.cs.pub.ro/~$USER/workshop-blog $TMP_GIT_CLONE $PUBLIC_WWW
      rm -fr $TMP_GIT_CLONE
      • Acordați drept de execuție hook-ului din fișierul post-receive:
        chmod a+x ~/git-repos/workshop-blog.git/hooks/post-receive
  • Pe sistemul local
    1. Creați un repository workshop-blog.git:
      git init workshop-blog.git
      git config --global user.name "Prenume Nume"
      git config --global user.email "email@nomail.me"
      git config --global color.ui auto
      • Substituiți “Prenume Nume” si “email@nomail.me” cu datele proprii.
    2. Descărcați această arhivă, decomprimați fișierul arhivă și copiați conținutul acestuia (NU și directorul start-jekyll, DOAR conținutul său) în directorul creat (workshop-blog.git).
      • În urma copierii directorul trebuie să aibă o structură similară celei de aici.
    3. Actualizați informațiile din fișierele adăugate pentru a referi username-ul și URL-ul propriu blog-ului vostru.
      • Pentru a verifica dacă ați modificat peste tot, folosiți comanda:
        grep -nriH razvan .
    4. În subdirectorul _posts/ al repository-ului creați fișierul 2014-06-18-first-post.markdown cu un conținut similar celui de mai jos:
      2014-06-18-first-post.markdown
      ---
      layout: post
      date: 2014-06-18
      title: Wednesday, June 18, 2014
      ---
       
      * I never make mistakes.
      * I thought I did once.
      * But I was wrong.
    5. Verificați că vă aflați în repository (folosiți comanda pwd). Adăugați conținutul în repository:
      git add .
      git commit -m 'Add Jekyll basic structure files'
      • Folosiți cele două comenzi de mai sus (cu alt argument la opțiunea -m) ori de câte ori faceți alte commit-uri.
    6. Adăugați, ca remote, repository-ul de pe swarm:
      git remote add origin <username-de-pe-swarm>@swarm.cs.pub.ro:git-repos/workshop-blog.git
    7. Faceți push la informații, forțând, astfel, rularea hook-ului post-receive și a publicării informațiilor:
      git push origin master
      • Ori de câte ori vreți să propagați schimbările efectuate în repository, folosiți această comandă.
  • Verificați publicarea informațiilor prin accesarea, din browser, a URL-ului http://swarm.cs.pub.ro/~<username-de-pe-swarm>/workshop-blog/.

Centralize, backup and secure

  • Obiective
    • Dorim să instalăm un server NFS in containerul LXC.
    • Urmărim să partajăm directoare cu colegii prin NFS.

* NFS Folosiți contul de root pentru instalare, configurare și folosire NFS. *# Instalați serverul de NFS:<code bash> apt-get install nfs-kernel-server nfs-common rpcbind </code> *# Creați un director export} pe care să îl partajați prin NFS. *#* Pentru a partaja, adăugați linia de mai jos în fișierul exports}:<code> /home/student/export *(rw,sync,no_subtree_check) </code> *#* După editare, marcați export-ul:<code bash> exportfs -ra </code> *#* Pentru a vizualiza export-urile folosiți comanda<code bash> exportfs </code> *#* Dacă apar probleme pe parcurs, reporniți serverul NFS<code bash> /etc/init.d/nfs-kernel-server restart </code> *# Creați două directoare left} și right} în care montați share-urile colegilor din stânga și dreapta<code bash> mount <IP-left>:/home/student/export/ /home/student/left/ mount <IP-right>:/home/student/export/ /home/student/right/ </code> unde ip-left} este adresa IP a colegului din stânga, iar ip-right} adresa IP a colegului din dreapta. *#* Folosiți comanda<code bash> ip a s </code> pentru a afla adresa IP proprie pe care să o comunici colegilor. *#* Este vorba de adresa interfeței eth0}. *#* Verificați conectivitatea folosind:<code bash> ping <IP-stanga> ping <IP-dreapta> </code> * Verificați că puteți crea, edita și șterge fișiere din directoarele montate, iar aceste modificări sunt vizibile și pentru colegii voștri. === Allow interconnection and interoperability === * Obiective Dorim să exemplificăm folosirea ldapsearch pentru interogarea de informații LDAP. Dorim să activăm autentificarea prin LDAP pentru pagina de wiki configurată în sesiunea de eficiență. Urmărim să configurăm containerul LXC să realizeze autentificarea prin LDAP. * Pentru aceasta trebuie configurat sistemul de login (prin intermediul PAM) să folosească LDAP. * LDAP Folosiți, pe swarm, comenzi de interogare LDAP:

ldapsearch -LLL -x # toate informațiile disponibile
ldapsearch -LLL -x uid # UID-urile utilizatorilor
ldapsearch -LLL -x uid=razvan # informații despre utilizatorul cu UID-ul razvan
ldapsearch -LLL -x sn=M* # informații despre utilizatori ai căror nume începe cu litera M
ldapsearch -LLL -x '(&(givenName=*a)(sn=M*))' # idem + ai căror prenume se termina cu litera a

Pe instanța DokuWiki configurată în sesiunea de eficiență, configurați acces LDAP. # Adăugați, în ~/public_html/dokuwiki/conf/local.php, conținutul de mai jos:

$conf['authtype'] = 'ldap';
$conf['auth']['ldap']['port'] = '636';
$conf['auth']['ldap']['server'] = 'ldaps://swarm.cs.pub.ro';
$conf['auth']['ldap']['usertree'] = 'ou=People,dc=swarm,dc=cs,dc=pub,dc=ro';
$conf['auth']['ldap']['grouptree'] = 'dc=swarm,dc=cs,dc=pub,dc=ro';
$conf['auth']['ldap']['userfilter'] = '(&(uid=%{user})(objectClass=posixAccount))';
$conf['auth']['ldap']['groupfilter'] = '(&(objectClass=posixGroup)(|(gidNumber=%{gid})(memberUID=%{user})))';
$conf['auth']['ldap']['version'] = '3';

# Verificați ca vă puteți autentifica pe dokuwiki folosind username-ul și parola de pe swarm. Autentificare Unix prin LDAP. * Toate comenzile următoare trebuie rulate în containerul LXC. Pentru conectare puteți folosi comanda de mai jos:<code bash> ssh -l root -p 4<id-container>22 houdini.grid.pub.ro </code> # Instalați bibliotecile LDAP și aplicațiile de tip client:

apt-get install ldap-utils

# Configurați în containerul LXC serverul de LDAP de pe swarm ca server implicit folosit de clienții LDAP. Editați fișierul ldap.conf} pentru a avea următorul conținut (nu uitați de set-paste} în Vim):<code bash> # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. BASE dc=swarm,dc=cs,dc=pub,dc=ro URI ldaps:swarm.cs.pub.ro #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never TLS_REQCERT never </code> #* Verificați funcționarea conexiunii la serverul LDAP, folosind comanda ldapsearch}:<code bash post-receive> ldapsearch -x -LLL uid=<username-de-pe-swarm> </code> #* username-de-pe-swarm} este numele vostru de utilizator de pe swarm.cs.pub.ro}. # Pentru configurarea NSS (Name Service Switch), trebuie instalat și configurat pachetul libnss-ldap}. Instalați pachetul libnss-ldap} și opțiunile:<code bash> apt-get install libnss-ldap LDAP server URI: ldaps:swarm.cs.pub.ro Distinguished name of the search base: dc=swarm,dc=cs,dc=pub,dc=ro LDAP version to use: 3 Does the LDAP database require login?: No Special LDAP privileges for root?: Yes Make the configuration file readable/writable by its owner only?: No LDAP account for root: cn=admin,dc=swarm,dc=cs,dc=pub,dc=ro LDAP account password: TODO LDAP administrative account: cn=admin,dc=swarm,dc=cs,dc=pub,dc=ro LDAP administrative password: TODO </code> #* Vă spune Bogdan răspunsul la todo}. # Verificați că ați configurat corespunzător prin rularea comenzii<code bash> cat /etc/libnss-ldap.conf | grep -v '^#' | grep -v '^$' </code> și obținerea rezultatului<code> base dc=swarm,dc=cs,dc=pub,dc=ro uri ldaps:swarm.cs.pub.ro/ ldap_version 3 rootbinddn cn=admin,dc=swarm,dc=cs,dc=pub,dc=ro </code> # Configurați în nsswitch.conf} intrările passwd}, group} și shadow}:<code bash> passwd: compat ldap group: compat ldap shadow: compat ldap </code> # Reporniți daemonul nscd}:<code bash> /etc/init.d/nscd restart </code> #* Verificați configurarea prin rularea comenzilor:<code bash> getent passwd <username-de-pe-swarm> id <username-de-pe-swarm> apt-get install finger finger <username-de-pe-swarm> </code> unde username-de-pe-swarm} este numele vostru de utilizator de pe swarm.cs.pub.ro}. Toate aceste comenzi ar trebui sa întoarcă informații despre user-ul vostru de pe swarm. # Pentru autentificarea utilizatorilor prin LDAP trebuie configurat corespunzător pam}. L-ați configurat (în cadrul pachetului libpam-ldap} la instalarea pachetului libnss-ldap}. Verificați configurarea sa prin rularea comenzii<code bash> cat /etc/pam_ldap.conf | grep -v '^#' | grep -v '^$' </code> care trebuie să dea rezultatul<code> base dc=swarm,dc=cs,dc=pub,dc=ro uri ldaps:swarm.cs.pub.ro/ ldap_version 3 rootbinddn cn=admin,dc=swarm,dc=cs,dc=pub,dc=ro pam_password crypt </code> # Verificați configurarea corespunzătoare a fișierelor } (account-required}) și common-auth} (auth-required}) (e vorba de prezența pam_ldap.so}):<code bash> root@rsw-sysadmin-00:~# cat /etc/pam.d/common-account | grep -v '^#' | grep -v '^$' account [success=2 new_authtok_reqd=done default=ignore] pam_unix.so account [success=1 default=ignore] pam_ldap.so account requisite pam_deny.so account required pam_permit.so root@rsw-sysadmin-00:~# cat /etc/pam.d/common-auth | grep -v '^#' | grep -v '^$' auth [success=2 default=ignore] pam_unix.so nullok_secure auth [success=1 default=ignore] pam_ldap.so use_first_pass auth requisite pam_deny.so auth required pam_permit.so </code> # Ca root activați modulul PAM mkhomedir} pentru crearea home-ului utilizatorului la autentificare. Adăugați ca root, la finele fișierului common-session}, linia:<code> session required pam_mkhomedir.so skel=/etc/skel/ umask=0022 </code> # Schimbați utilizatorul în utilizatorul de pe swarm.cs.pub.ro}:<code> su - <username-de-pe-swarm> </code> Observați crearea directorului home pentru utilizator. # Adăugați cheia publică SSH de pe sistemul din laborator în contul utilizatorului nou creat. #* Copiați cheia publică în fișierul authorized_keys} din home-ul utilizatorului. Verificați conectarea prin SSH de pe sistemul din laborator:<code> ssh -l <username-de-pe-swarm> -p 4<id-container>22 houdini.cs.pub.ro </code>

sesiuni/sysadmin/centralizare.txt · Last modified: 2014/07/09 18:47 by razvan