Author Archive

Intelegerea UMASK intr-un sistem UNIX based

UMASKCel mai pe scurt putem spune ca UMASK se ocupa de alocarea permisiunilor pentu fisiere si foldere intr-un sistem de operare UNIX based, bazandu-se pe o setare implicita data de administratorul sistemului.

Inainte de toate trebuie stabilit ca in cadrul fisierelor si folderelor permisiunile se aloca dupa regula:

4 – read

2 – write

1 – execute

In mod implicit UMASK-ul este setat la modul permisiv, adica 022 pentru root si 002 pentru userii obisnuiti, iar el poate fi modifica editant /etc/profile sau ~./bashrc.

UMASK 022, folosit pentru root, inseamna ca folderele create vor avea permisiuni de 755, iar fisierele de 644, mai precis ownerul poate scrie si modifica datele, dar restul userilor le pot doar vizualiza.

UMASK 002, folosit pentru userii obisnuiti din sistem, uinseamna ca folderele vor avea permisiuni de 775, iar fisierele de 664, mai precis ownerul poate scrie si modifica datele, grupul din care face parte userul, poate si el, iar ceilalti pot doar sa le vizualizeze.

 

 

 

Calcularea UMASK se face dupa urmatoarele reguli:

0 – Read Write Execute

1 – Read Write

2 – Read Execute

3 – Read

4 – Write Execute

5 – Write

6 – Execute

7 – No Permissions

Asadar:

022 – Owner: RWX, Group: RX, Others: RX

002 – Owner: RWX, Group: RWX, Others: RX

077 – Owner: RWD, Group: No permissions, Others: No permissions

026 – Owner: RWX, Group: RX, Others: X

027 – Owner: RWX, Group: RX, Others: No permissions

Active Directory HTTP authentication folosind authnz_ldap cu Apache2

In multe cazuri este necesara autentificarea cu Active Directory la nivel de Apache2, in special cand discutam de un numar mare de utilizatori care acceseaza un portal web din locatii diferite si mai ales atunci cand vrem ca accesul sa fie cat mai restrans la persoanele dintr-o companie pe care de altfel sa nu ii incarcam cu un user si o parola pentru fiecare resursa existenta.

Astfel, configurarea consta in prima faza in adaugarea unei linii in fisierul: /etc/ldap/ldap.conf care sa arate asa:

REFERRALS off

si prin care specificam sa nu fie restrictionate referintele la un server printr-un site in special cand interogarile vin prin web pentru ca autentificarea cu Active Direcotry sa fie posibila si prin web.

Mai departe am trecut la partea de configurare a autentificarii prin Active Directory si in interiorul <Directory /var/www/>    </Directory>  am adaugat urmatoarele linii:

AuthBasicProvider ldap
AuthType Basic
AuthName „Restricted Zone”
AuthLDAPURL „ldap://nume_server_dc.tld:389/DC=nume_server_dc,DC=tld?sAMAccountName?sub?(objectClass=user)” NONE
AuthLDAPBindDN „user_creat_in_ad@DOMENIU”
AuthLDAPBindPassword „parola_userului_creat_in_ad”
require ldap-attribute objectClass=user

Detalii despre fiecare linie se gasesc aici: http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html

Daca toate datele introduse au fost corecte, in mod normal autentificarea trebuie sa se efectueze fara probleme din web. Inainte de testare trebuie restartat Apache2.

/etc/init.d/apache2 restart

Mai departe am dorit ca doar cei din exteriorul retelei sa aiba restrictia de a introduce user si parola, iar cei din interiorul retelei, sau cei care au adresele IP specificate de mine sa nu aiba aceasta problema. Atunci am mai adaugat inainte de AuthBasicProvider ldap linia:

order deny allow

iar dupa require ldap-attribute objectClass=user am adaugat liniile prin care am specificat adresele IP care sa aiba acces fara autentificare HTTP:

satisfy any

deny from all

allow from 172.16.16.1/24

allow from 1.2.3.4

unde 172.16.16.1/24 reprezinta o clasa de adrese IP care se pot aloca unei retele interne, iar 1.2.3.4 reprezinta un IP extern sau intern.

Exportul unui Query SQL in fisier CSV folosind MySQL

export_mysql_csvDaca dorim sa facem exportul unei interogari din SQL in format .csv trebuie sa folosim o comanda prin care sa ne conectam la baza de date, sa rulam selectul si apoi acel select sa returneze informatiile direct intr-un fisier CSV.

mysql -u USER -pPAROLA -h hostname numele_bazei_de_date -B -e „COMANDA SELECT;” | sed ‘s/\t/”,”/g;s/^/”/;s/$/”/;s/\n//g’ > nume_fisier.csv

sFTP server cu Debian si chRoot jail pentru useri

sftpServerul sFTP functioneaza prin SSH, mai precis pe portul 22. Intamplarea a facut sa am nevoie de un astfel de server, unde bine-nteles ca nu era suficient un simplu FTP intrucat era nevoie ca transferul sa se faca in mod securizat.

By default cand instalezi un sistem de operare, te poti autentifica cu userii locali si prin sFTP insa apare problema ca un user poate vizualiza toate folderele serverului, lucru care nu ne-ar conveni sub nici o forma. Astfel, vom apela la metoda chroot jail pentru userii creati. Autentificarea cu toate ca se face pe portul 22 (SSH) userilor nu le vom da drept de conectare SSH, doar sFTP.

Primul pas este sa creem un grup unde toti userii v vor fi adaugat. Il voi numi sftpusers:

groupadd sftpusers

Apoi vom crea un user ‘john’ care va avea home folder /incoming si shell-ul /sbin/nologin pentru a-i interzice logarea prin SSH.

useradd -g sftpusers -d /incoming -s /sbin/nologin john

Acum ii alocam o parola userului john:

passwd john

Userul il putem verifica in /etc/passwd

cat /etc/passwd

Acum trebuie sa facem cateva modificari in fisierul /etc/ssh/sshd_config. Asadar, inlocuim linia:
#Subsystem sftp /usr/libexec/openssh/sftp-server

cu

Subsystem sftp internal-sftp

Dupa ce am facut aceasta modificare, mai trebuie sa adaugam tot in acest fisier cateva linii care spun ca vom face chroot doar pentru userii folderul sftp.
Match Group sftpusers
ChrootDirectory /sftp/%u
ForceCommand internal-sftp
Match Group sftpusers – indica faptul ca urmatoarele linii se aplica doar utilizatorilor din grupul sftpusers.

ChrootDirectory /sftp/%u – indica locul in care userii vor avea chroot dupa autentificare

ForceCommand internal-sftp – este o comanda care forteaza executia internal-sftpsi ignora alte comenzi mentionate in ~/.ssh/rc

Urmeaza sa creem directorul sftp.

mkdir /sftp

,iar in interiorul acestui folder vom crea un alt folder care va purta numele fiecarui utilizator creat. In cazul nostru:

mkdir /sftp/john

Acum /sftp/john este echivalentul „/” pentru userul john. Ca sa izolam utilizatorii, sa nu poata vedea ce alti urtilizatori mai exista sau ce foldere mai contine /sftp, vom crea in interiorul folderului /sftp/john un director numit: incoming, prin care vom pune in valoare chroot-ul.

mkdir /sftp/john/incoming

Mai trebuie sa punem permisiuni relevante user:sftpusers pe acest folder „incoming”:

chown john:sftpusers /sftp/john/incoming

Ultimul pas este sa restartam serviciul SSH executand comanda:

/etc/init.d/ssh restart

urmand apoi sa testam in FileZilla conexiunea pe sFTP.

Rularea VirtualHosts ca useri separati (pool-uri separate) in Apache cu php5-FPM si Ubuntu/Debian

phpapcIn acest tutorial voi prezenta modul de rulare a php-ului cu FastCGI si a VirtualHosturilor folosind pool-uri separate cu useri separati.

Pentru ca este un server pe care vor rula si baze de date, eu am instalat si MySQL. Asadar:

apt-get install mysql-server mysql-client

unde se urmeaza procedura instalarii alocand parola pentru contul root la MySQL.

Acum incepe instalarea propriu-zisa pentru apache, php5, mysql si php5-fpm.

apt-get install apache2-mpm-worker
apt-get install libapache2-mod-fastcgi php5-fpm php5 php5-mysql

, iar dupa finalizarea instalarii trebuie dat enable la modulele instalate; actions, fastcgi si alias.

a2enmod actions fastcgi alias

Inainte de a incepe configurarile trebuie precizat ca voi rula un VirtualHost folsind grupul web si userul web_test evident ca parte din acest grup. Prima data creez grupul si userul si apoi voi trece la partea de configurare:

groupadd web
useradd -s /bin/false -d /home/web_test -m -g web web_test

Acum mai treuie sa modificam in VirtualHost unde adaugam urmatoarele linii intre <VirtualHost> si </VirtualHost>:

<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9001 -pass-header Authorization
</IfModule>

astfel incat sa arate in felul urmator:

<VirtualHost *:80>
ServerName web_test

DocumentRoot /home/web_test
DirectoryIndex index.php index.html

ErrorLog „/var/log/apache2/web_test_error_log”
CustomLog „/var/log/apache2/web_test_access_log” combined

<Directory „/home/web_test/”>
AllowOverride All
</Directory>

<IfModule mod_fastcgi.c>
AddHandler php5-fcgi .php
Action php5-fcgi /php5-fcgi
Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9001 -pass-header Authorization
</IfModule>
ServerSignature Off
</VirtualHost>

De asemenea trebuie configurat php-fpm:

vim /etc/php5/fpm/pool.d/web_test.conf

unde am adaugat:

[web_test]
listen = 127.0.0.1:9001
user = web_test
group = web
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 4
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 200
listen.backlog = -1
pm.status_path = /status
request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes
env[HOSTNAME] = $HOSTNAME
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

Aici se observa ca fastCGi face diferenta intre useri folosind hostnameul si portul pe care asculta, deci fiecare pool care ruleaza ca user separat trebuie sa aiba si un port diferit. Testarea se face ruland phpinfo(); si accesandu-l din browser. In cazul meu nu a functionat corect pentru ca nu gasea fisierul php5-fcgi asa ca a trebuit sa il creez manual ruland:

touch /usr/lib/cgi-bin/php5-fcgi

Testarea:

O putem face fie din phpinfo, sau ruland whoami.

Pentru phpinfo: vim /home/web_test/www/info.php unde adaugam:

<?php phpinfo(); ?>

Pentru whoami: vim /home/web_test/www/whoami.php unde adaugam:

<?php
echo exec('whoami');
?>

Optional am instalat si php-apc ca si accelerator al aplicatiilor care ruleaza cu php.

Clonarea unei baza de date MySQL

Daca vrem sa clonam o baza de date mult mai rapid decat metoda dump in fisier .sql apoi creem baza de date si facem restoreul datelor din fisierul .sql, putem proceda in felul urmator.

Prima data trebuie sa creem o baza de date (blank) unde va fi put continutul din baza de date din care vrem sa facem clonarea.

mysql -u user -p

CREATE DATABASE baza_de_date_noua;

Alocam privilegii userului de pe baza de date existenta pentru ca el sa poata scrie pe baza de date noua. (asta in conditiile in care vrem sa folosim acelasi user penru conectarea la baza de date).

GRANT ALL PRIVILEGES ON baza_de_date_noua.* TO ‘user_name’@’localhost’;

Iar acum urmeaza clonarea propriu-zisa:

mysqldump -u user -pPAROLA baza_de_date_existenta | mysql -u user -pPAROLA baza_de_date_noua

Upgradeul de la Apache 2.2.x la 2.4.x in Ubuntu

In Ubuntu 13.04, upgradeul de la versiunea de Apache 2.2.x la 2.4.x nu se face foarte corect si asta datorita faptului ca trebuie intervenit manual in setarile VirtualHost-urilor. Asadar, in versiunea de Apache 2.4.x s-ar putea sa intampinati erori de tipul „Forbidden” in momentul in care accesati hosturi care in versiunea anterioara functionau fara nici un fel de problema, iar in loguri eroarea care apare arata cam asa:

AH01630: client denied by server configuration:

Aceasta eroare se datoreaza liniei „Allow from All” din VirtualHost care nu mai este inteleasa de Apache 2.4.x si trebuie inlocuita  cu „Require all granted” odata cu trecerea de la vechea versiune de Apache la cea noua.

De asemenea pe acest link: http://httpd.apache.org/docs/2.4/upgrading.html apar si diferentele care trebuiesc efectuate in setari odata cu trecerea la noua versiune.

apache24

Apache si eroarea: Permission denied: make_sock: could not bind to address 0.0.0.0:80

Sunt cazuri cand restartam Apache si acesta nu vrea sa mai porneasca afisand mesajul de eroare:

Permission denied: make_sock: could not bind to address 0.0.0.0:80

Acesta eroare este cauzata de blocarea portului 80 datorita faptului ca Apache nu a fost oprit corect de catre sistem.

Pentru rezolvarea problemei putem folosi comanda:

fuser -k -n tcp 80
apoi rulam din nou comanda pentru repornirea apache:
/etc/init.d/apache2 restart

Autentificare pe un server folosind cheie SSH

imagesPentru adaugarea unei chei SSH pe un server trebuie urmati cativa pasi pentru copierea cheii publice de pe masina locala pe serverul pe care se va face conectarea remote.

Primul pas este sa generam cheia.

ssh-keygen -t rsa

Cheia a fost generata in folderul .ssh folosind fisierele id_rsa.pub pentru cheie publica si id_rsa pentru cheia privata.

Acum ramane sa copiem cheia publica pe masina sau pe masinile pe care se face conectarea:

ssh-copy-id -i ~/.SSH/id_rsa.pub user@remote_host

Se introduce parola de la userul cu care s-a facut conectarea, iar apoi cheia a fost copiata. Acum se poate incerca conectarea astfel:

ssh user@remote_host

si daca cheia a fost corect instalata ar trebui sa nu mai fie nevoie de parola la logarea prin SSH.

Ubuntu 12.04 cu Apache2, php5 si MariaDB (Inlocuire MySQL cu MariaDB)

Mariadb-seal-shaded-browntext-altMariaDB, o alternativa la MySQL care, spun dezvoltatorii, este una chiar mai rapida si mai performanta decat cea a rivalului sau prezentant de altfel si cateva features aici: https://kb.askmonty.org/en/mariadb-versus-mysql-features/

Instalarea in Ubuntu, mai ales pe serverele pe care exista deja MySQL instalat, nu este complicata exceptand faptul ca trebuie adaugate manual repositorurile de pe care se face instalarea intrucat se pare ca acesta nu este inclus in binarele celor de la Ubuntu. Astfel:

Primul pas este instalarea managerului de repositories:

sudo apt-get install python-software-properties

apoi importam cheia GnuPG pentru a putea adauga repositoryul:

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db

Adaugam acum efectiv repository-ul:
sudo add-apt-repository 'deb http://ftp.osuosl.org/pub/mariadb/repo/10.0/ubuntu precise main'

apt-get update

, iar la final instalam MariaDB:

apt-get install mariadb-server

Acest pas vom observa ca va sterge din sistem MySQL.
The following packages will be REMOVED:
  mysql-client-5.5 mysql-client-core-5.5 mysql-server mysql-server-5.5 mysql-server-core-5.5

Acum urmeaza instalarea pachetului phpmyadmin, bine-nteles presupunand ca avem deja instalat apache2 (in caz contrar apt-get install apache2).

apt-get install phpmyadmin

care din pacate nu este suficient pentru ca acesta sa si functioneze, deoarece deodata cu MySQL se pare ca s-au mai dezinstalat si alte dependinte. 
Le reinstalam folosind:

apt-get install php5-mysql libapache2-mod-php5

Acestea fiind zise, urmeaza testarea din browser:

http://ip_hostname/phpmyadmin

 
srv StandDuPp
Articole recente