Gestione dei servizi nei server Linux Servizi e Demoni ● ● ● ● ● ● Nei server Linux ogni attività è gestita da un programma Ogni programma dispone, al minimo, di 3 possibilità di comunicazione (stdin, stdout, stderr) Ci sono programmi che dialogano direttamente con un utente in modo non grafico (stdin=tastiera, stdout e stderr=video) Ci sono programmi che usano l'interfaccia grafica Ci sono programmi che non dialogano direttamente con l'utente (demoni) Nella gestione dei servizi di rete viene fatto largo uso dei demoni Schema di servizio di rete ● ● ● ● Il demone crea un socket e ci si mette in ascolto. Il socket è una struttura di comunicazione che viene connessa ad una porta IP Alla ricezione di un pacchetto di connessione il demone si duplica (fork): una parte rimane in ascolto per ulteriori connessioni, l'altra gestisce le connessioni sul socket ereditato. Esiste un programma che può ascoltare su molti socket e, dopo la duplicazione, lanciare un programma od un altro a seconda del socket su cui è stato collegato, connettendo stdin, stderr e stdout di questo programma con il socket. Inetd ● ● Il programma che agisce lanciando vari programmi è detto inetd ed è controllato dal file di configurazione /etc/inetd.conf Nel file di configurazione ogni riga corrisponde alle seguente serie di informazioni: – Servizio (nome della porta come in /etc/services) – Tipo di socket ( stream o datagram ) – Protocollo ( TCP o UDP ) – Flags ( wait o nowait ) – Utente ( quale utente sembrarà aver lanciato il programma ) – Programma ( pathname completo ) – Argomenti del programma (di solito al massimo 5 ) Attivazione e disattivazione in inetd ● ● La cosa più semplice da fare è disattivare un servizio attivo: – Commentare la riga relativa in /etc/inetd.conf – Trovare il numero del processo inetd usando il comando ps afuxwww | grep inetd (il numero del processo è il primo numero che appare sulla riga) – Eseguire il comando kill -1 xxx dove xxx è il numero del processo appena trovato Per riattivare il servizio: – Levare il commento in /etc/inetd.conf – Trovare il numero del processo inetd con il comando appena visto – Eseguire il comando kill come appena visto Demoni ● ● Inetd è il metodo più comodo per attivare molti servizi: ad esempio è utilizzato per: – Ftp – Pop – Imap – Swat Inetd è lento per cui alcuni servizi non lo utilizzano: – Http / Https – Ssh / scp – Samba – Sendmail Configurazione di avvio con inetd ● ftp ftp ● stream tcp nowait root /usr/sbin/tcpd in.ftpd pop pop3 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/popper -s ● imap imap stream tcp nowait root /usr/sbin/tcpd imapd ● swat swat stream tcp nowait.400 root /usr/sbin/swat swat tcpd è un programma che filtra l'accesso consentendo o meno l'instaurarsi della connessione Http / Https ● I file di configurazione stanno di solito in /etc/http ● Il file di gran lunga più importante è /etc/httpd/httpd.conf ● ● ● L'installazione crea un file con dei default ragionevoli. Tale file contiene anche delle spiegazioni sul come modificarlo Nelle diapositive seguenti verranno illustrate alcune sezioni del file di configurazione Anche il server https viene configurato a partire dallo stesso file, con l'aggiunta di riferimenti ai necessari certificati crittografici. Httpd - nomi dei file (1) ● ● Nella prima parte del file di configurazione sono indicati dei nomi di vari file necessari al funzionamento: – File aggiuntivi di configurazione – File dove registrare informazioni quali il PID del processo Non è normalmente necessario modificare tali valori – ● Salvo la root directory del server stesso Si noti, proprio all' inizio, la selta se demone o lanciato da inetd Httpd – Nomi dei file (2) ### Section 1: Global Environment # ServerType is either inetd, or standalone. ServerType standalone # ServerRoot: The top of the directory tree under which the server's # configuration, error, and log files are kept. ServerRoot "/opt/web" # The LockFile directive sets the path to the lockfile LockFile /var/lock/subsys/httpd/httpd.accept.lock # PidFile: The file in which the server should record its process # identification number when it starts. PidFile /var/run/httpd.pid Httpd – Nomi dei file (3) # ScoreBoardFile: File used to store internal server process # information. ScoreBoardFile /var/run/httpd.scoreboard # In the standard configuration, the server will process httpd.conf # (this# file, specified by the -f command line option), srm.conf, # and access.conf in that order. The latter two files are now # distributed empty, as it is recommended that all directives be # kept in a single file for simplicity. #ResourceConfig conf/srm.conf #AccessConfig conf/access.conf Httpd – Prestazioni (1) ● ● Nella sezione seguente vi sono i dati che influenzano le prestazioni del server. – Quanti processi sono in attesa di connessioni (il lancio di un nuovo processo può essere 'lento' per cui avere dei processi pronti aumenta le prestazioni – Limite massimo al numero di processi attivi per evitare di appesantire troppo il server – Limite di richieste gestite da una connessione persistente – Timeout Normalmente non vi è necessità di variare i numeri: se il server tende a non rispndere si può aumentare il numero di processi in attesa. Httpd – Prestazioni (2) # Server-pool size regulation. Rather than making you guess # how many server processes you need, Apache dynamically adapts # to the load it sees ... MinSpareServers 1 MaxSpareServers 1 # Number of servers to start initially StartServers 1 # Limit on total number of servers running, i.e., limit on the # number the system with it as it spirals down... MaxClients 150 # MaxRequestsPerChild: the number of requests each child process is # allowed to process before the child dies. MaxRequestsPerChild 0 Httpd – Prestazioni (3) # Timeout: The number of seconds before receives and sends time out. Timeout 300 # KeepAlive: Whether or not to allow persistent connections # (more than one request per connection). # Set to "Off" to deactivate. KeepAlive On # MaxKeepAliveRequests: The maximum number of requests to allow # during a persistent connection. # Set to 0 to allow an unlimited amount. MaxKeepAliveRequests 100 # KeepAliveTimeout: Number of seconds to wait for the next request # from the same client on the same connection. KeepAliveTimeout 15 Httpd – Connessioni (1) ● ● Quando si usa httpd come un server allora occorre indicare – la porta su cui ascolta (normalmente la porta 80) – L'indirizzo od il nome del server (nel caso che seguiremo viene utilizzato un asterisco che rimande alla configurazione dei server virtuali, tecnica con la quale si possono disporre di più siti all'interno dello stesso computer. – Se si utilizza il nome del server allora questo deve essere risolubile da un DNS il quale fornisce il numero corrispondente. Fatta, al più, la prima installazione questi dati non necessitano ulteriori modifiche. Di solito l'installazione stessa inserisce dei dati di default già corretti. Httpd – Connessioni (2) # Listen: Allows you to bind Apache to specific IP addresses and/or # ports, in addition to the default. #Listen 3000 #Listen 12.34.56.78:80 # BindAddress: You can support virtual hosts with this option. # This directive is used to tell the server which IP address to # listen to. It can either contain "*", an IP address, # or a fully qualified Internet domain name. # See also the <VirtualHost> and Listen directives. #BindAddress * Httpd – Moduli (1) ● ● Apache permette di inserire moduli per gestire le più varie necessità: – Autenticazioni – Scripting basato su PERL o PHP – Connessioni con database per avere pagine dinamiche – SSI (server side include come le setensioni di frontpage) La sezione relativa ai moduli viene riportata qui di seguito ma non va toccata se non da persone esperte. L'installazione crea già le liste corrette evitando mali di testa Httpd – Moduli (2) # The following Modules are loaded when the according package has # been installed on your system. The Variables are defined in # /sbin/init.d/apache and control which modules are dynamically # loaded ... <IfDefine PERL> LoadModule perl_module /usr/lib/apache/libperl.so </IfDefine> <IfDefine SSL> LoadModule ssl_module /usr/lib/apache/libssl.so LoadModule sxnet_module /usr/lib/apache/mod_sxnet.so </IfDefine> ... Httpd – Server principale (1) ● ● ● Per semplificare la gestione dei siti Apache usa la configurazione di un primo 'host' in modo da permettere poi la configurazione degli host virtuali per differenza. Per questa ragione la configurazione del server principale è particolarmente completa: comunque molte cose non richiedono cambiamenti anche se è utile comprenderle Nelle diapositive che seguiranno sono contenute le varie impostazioni Httpd – Server principale (2) # The directives in this section set up the values used by the # 'main' server, which responds to any requests that aren't handled # by a <VirtualHost> definition. These values also provide defaults # for any <VirtualHost> containers you may define later in the file. # All of these directives may appear inside <VirtualHost> # containers, in which case these default settings will be # overridden for the virtual host being defined. # If your ServerType directive (set earlier in the 'Global # Environment'section) is set to "inetd", the next few directives # don't have any effect since their settings are defined by the # inetd configuration. Skip ahead to the ServerAdmin directive. # Port: The port to which the standalone server listens. Port 80 Questo valore non viene praticamente mai toccato Httpd – Server principale (3) # SSL Support When we also provide SSL we have to listen to the # standard HTTP port (see above) and to the HTTPS port <IfDefine SSL> Listen 80 Questo valore non viene praticamente mai toccato Listen 443 Questo valore non viene praticamente mai toccato </IfDefine> # User/Group: The name (or #number) of the user/group to run httpd User wwwrun Questo valore non viene praticamente mai toccato Group nogroup Questo valore non viene praticamente mai toccato # Your address, where problems with the server should # be e-mailed. # It appears on some server-made pages, such as error documents. #ServerAdmin [email protected] Questo valore dev'essere impostato all' indirizzo di mail dell'amministratore Httpd – Server principale (4) # ServerName allows you to set a host name which is sent back to # clients for your server if it's different than the one the program # would get (i.e., use "www" instead of the host's real name). # Note: You cannot just invent host names and hope they work. The # name you define here must be a valid DNS name for your host. If # you don't understand this, ask your network administrator. # If your host doesn't have a registered DNS name, enter its IP # address here. ServerName www.it-admin.it Questo valore dev'essere impostato # DocumentRoot: The directory out of which you will serve your # documents. By default, all requests are taken from this directory, # but symbolic links may be used to point to other locations. DocumentRoot "/opt/web/gio/it-admin-root" Httpd – Server principale (5) # Each directory to which Apache has access, can be configured with # respect to which services and features are allowed and/or disabled # in that directory (and its subdirectories). # First, we configure the "default" to be a very restrictive set of # permissions. <Directory "/opt/web/gio/it-admin-root"> Questo valore dev'essere impostato e corrispondere alla directory che viene usata realmente Options Indexes -FollowSymLinks +Includes MultiViews AllowOverride None Order allow,deny Allow from all <IfModule mod_dav.c> DAV Off </IfModule> Httpd – Server principale (6) Questi sono esempi di che tipo di impostazioni utilizzare # Enable server side includes (SSI) for the index.html pages, as # some of the content is created dynamically. Of course this should # be disabled when setting up a productive server. <Files /opt/web/gio/it-admin-root/index.htm*> Options -FollowSymLinks +Includes +MultiViews </Files> # Protect the php3 test page, so it cannot be viewed from an outside <Files test.php3> Order deny,allow deny from all allow from localhost </Files> </Directory> Httpd – Server principale (7) Questo è l'esempio di una directory secondaria utilizzata poi da un host virtuale <Directory "/opt/web/gio/itsecurity"> Options Indexes FollowSymLinks AllowOverride None Order allow,deny Allow from all AuthType Basic AuthName ExpertLanUse AuthUserFile /etc/httpd/passwd AuthGroupFile /etc/httpd/group require user anton berta karl </Directory> Httpd – Server principale (8) Questo è l'esempio di come modulare l'accesso alle pagine # AccessFileName: The name of the file to look for in each directory # for access control information. AccessFileName .htaccess # The following lines prevent .htaccess files from being viewed by # Web clients. Since .htaccess files often contain authorization # information, access is disallowed for security reasons. <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> Httpd – Server principale (9) # ErrorLog: The location of the error log file. # If you do not specify an ErrorLog directive within a <VirtualHost> # container, error messages relating to that virtual host will be # logged here. ErrorLog /var/log/httpd/error_log Va eventualmente modificata per adattarla alla struttura del server # LogLevel: Control the number of messages logged to the error_log. # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn Httpd – Server principale (10) Normalmente questi valori non vanno modificati # The following directives define some format nicknames for use with # a CustomLog directive (see below). LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent} i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %b" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent # The location and format of the access logfile # (Common Logfile Format). CustomLog /var/log/httpd/access_log common #CustomLog /var/log/httpd/referer_log referer #CustomLog /var/log/httpd/agent_log agent #CustomLog /var/log/httpd/access_log combined Httpd – Server principale (11) Questi sono esempi di che tipo di impostazioni vengono utilizzate per gli alias (qui viene mostrato come raggruppare le icone in una directory specifica, fuori dalla root-directory, allo scopo di aumentare la protezione. Può essere necessario modificare il nome della directory. <IfModule mod_alias.c> # Note that if you include a trailing / on fakename then the server # will require it to be present in the URL. # aliased in this example, only "/icons/".. Alias /icons/ "/usr/local/httpd/icons/" <Directory "/usr/local/httpd/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory>... So "/icons" isn't Httpd – Server principale (12) Questo è un esempio di come viene 'spostata' la directory dei cgibin che è sempre una directory da proteggere con cura. Vedremo come questa directory venga spostata anche negli host virtuali # ScriptAlias: This controls which directories contain server # scripts. ScriptAliases are essentially the same as Aliases, except # that documents in the realname directory are treated as # applications and run by the server when requested rather than as documents sent to the client. # The same rules about trailing "/" apply to ScriptAlias directives # as to Alias. ScriptAlias /cgi-bin/ "/opt/web/apache/cgi-bin/" Httpd – Host virtuali (1) ● ● ● Gli host virtuali permettono di usare un solo server per più siti, tra di loro non legati Nell'esempio si vede come sono descritti solo alcuni valori, rimanendo gli altri identici a quelli del host principale appena visto. Ovviamente tutti i valori debbono essere inseriti a cura della persona che effettua la configurazione: l'esempio riportato è basato su un server reale e può essere utilizzato come guida per ulteriori configurazioni Httpd – Host virtuali (2) <VirtualHost 10.0.0.32:80> ServerAdmin [email protected] DocumentRoot /opt/web/gio/www-it-administrator-it ScriptAlias /cgi-bin/ "/opt/web/gio/it-administrator-cgi-bin/" ServerName www.it-administrator.it ServerPath /www.it-administrator.it ErrorLog /var/log/httpd/apache/it-administrator-error_log CustomLog /var/log/httpd/apache/it-administrator-access_log common </VirtualHost> Httpd – Impostazioni ssl (1) ● ● ● Con SSL (Secure Socket Layer) si intende il protocollo che permette il funzionamento dei server sicuri, quelli, per intenderci, nella quale l'URL incomincia per https: Nella sezione generale non vi sono valori che richiedono modifiche, se non in casi particolari. Si può decidere di spostare il file di log o quello relativo ai mutex in una posizione più comoda Httpd – Impostazioni ssl (2) <IfDefine SSL> AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl </IfDefine> <IfModule mod_ssl.c> # Pass Phrase Dialog: # Configure the pass phrase gathering process. SSLPassPhraseDialog exec:/etc/httpd/ciccio # Inter-Process Session Cache: # Configure the SSL Session Cache: First either `none' # and, second the expiring timeout (in seconds). SSLSessionCache SSLSessionCacheTimeout none 300 Httpd – Impostazioni ssl (3) # Semaphore: # Configure the path to the mutual explusion semaphore the # SSL engine uses internally for inter-process synchronization. SSLMutex file:/var/run/ssl_mutex # Pseudo Random Number Generator (PRNG): # Configure one or more sources to seed the PRNG of the # SSL library. The seed data should be of good random quality. SSLRandomSeed startup builtin SSLRandomSeed connect builtin #SSLRandomSeed startup file:/dev/random 512 #SSLRandomSeed startup file:/dev/urandom 512 #SSLRandomSeed connect file:/dev/random 512 #SSLRandomSeed connect file:/dev/urandom 512 Httpd – Impostazioni ssl (4) # Logging: # The home of the dedicated SSL protocol logfile. Errors are # additionally duplicated in the general error log file. # this somewhere where it cannot be used for symlink attacks on # a real server (i.e. somewhere where only root can write). # Log levels are (ascending order: higher ones include lower # ones): none, error, warn, info, trace, debug. SSLLog /var/log/httpd/ssl_engine_log SSLLogLevel debug </IfModule> Put Httpd – Host virtuali ssl (1) ● ● ● Anche per gli host virtuali vale il principio che il primo stabilisce dei valori che, se non modificati, valgono per tutti. La cosa più importante è generare la coppia di chiavi e poi usare la chiave pubblica per ottenere il certificato da utilizzare nello scambio di dati. Questo è comunque argomento del modulo 5. Tutte le impostazioni dei file vanno verirficate anche se molte sono già corrette. Httpd – Host virtuali ssl (2) <IfDefine SSL> ## SSL Virtual Host Context NameVirtualHost 10.0.0.32:443 <VirtualHost 10.0.0.32:443> DocumentRoot "/opt/web/gio/10.0.0.32" ServerAdmin [email protected] ServerName nemo.it-admin.it ServerPath /10.0.0.32 ScriptAlias /cgi-bin/ "/opt/web/gio/10.0.0.32/cgi-bin/" ErrorLog /var/log/httpd/apache/10.0.0.32-error_log CustomLog /var/log/httpd/apache/10.0.0.32-access_log common TransferLog /var/log/httpd/apache/10.0.0.32-access_log Httpd – Host virtuali ssl (3) SSLEngine on SSLCipherSuite ALL:!ADH:!EXP56:RC4+RSA:+HIGH:+MEDIUM:+LOW:!SSLv2:+EXP:+eNULL # Server Certificate: SSLCertificateFile /etc/httpd/ssl.crt/server.2002.crt # Server Private Key: SSLCertificateKeyFile /etc/httpd/ssl.key/server.2002.key # Server Certificate Chain: #SSLCertificateChainFile /etc/httpd/ssl.crt/ca.crt # Certificate Authority (CA): #SSLCACertificatePath /etc/httpd/ssl.crt # Certificate Revocation Lists (CRL): #SSLCARevocationPath /etc/httpd/ssl.crl #SSLCARevocationFile /etc/httpd/ssl.crl/ca-bundle.crl Httpd – Host virtuali ssl (4) # Client Authentication (Type): SSLVerifyClient none # With SSLRequire you can do per-directory access control based # on arbitrary complex boolean expressions containing server # variable checks and other lookup directives. #<Location /> #SSLRequire ( %{SSL_CIPHER} !~ m/^(EXP|NULL)-/ \ # and %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ # and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} \ # and %{TIME_WDAY} >= 1 and %{TIME_WDAY} <= 5 \ # and %{TIME_HOUR} >= 8 and %{TIME_HOUR} <= 20 # or %{REMOTE_ADDR} =~ m/^192\.76\.162\.[0-9]+$/ #</Location> ) \ Httpd – Host virtuali ssl (5) # SSL Engine Options:Set various options for the SSL engine. #SSLOptions +FakeBasicAuth +ExportCertData +CompatEnvVars +StrictRequire <Files ~ "\.(cgi|shtml|phtml|php3?)$"> SSLOptions +StdEnvVars </Files> <Directory "/usr/local/httpd/cgi-bin"> SSLOptions +StdEnvVars </Directory> # SSL Protocol Adjustments: SetEnvIf User-Agent ".*MSIE.*" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 </VirtualHost> Httpd – Host virtuali ssl (6) <VirtualHost 10.0.0.32:443> ServerAdmin [email protected] DocumentRoot /opt/web/gio/docenti-it-admin ServerName docenti.it-admin.it ServerPath /docenti.it-admin.it ScriptAlias /cgi-bin/ "/opt/web/gio/docenti-it-admin-cgi-bin/" ErrorLog /var/log/httpd/docenti.it-admin-it-error_log CustomLog /var/log/httpd/docenti.it-admin-it-access_log common TransferLog /var/log/httpd/access_log SSLEngine on SSLCertificateFile /etc/httpd/ssl.crt/server.crt SSLCertificateKeyFile /etc/httpd/ssl.key/server.key SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown </VirtualHost> Sendmail – configurazione ● ● ● Il programma di gestione della posta non è semplice da configurare ma, per fortuna, viene configurato automaticamente all'atto della installazione del server. Eventuali modifiche, solo per esperti, possono essere fatte modificando il file sendmail.cf che può risiedere in /etc oppure in /etc/mail Una più semplice configurazione può essere fatta nel file aliases in modo da redirigere la posta in ingresso su altri server o differenti utenti Sendmail – Attivazione e disattivazione ● ● ● Come molti servizi anche sendmail viene lanciato automaticamente all' avvio del sistema operativo. Per attivare o disattivare questo servizio di solito si utilizza il comando /etc/init.d/mta seguito dalle parole start o stop Alle volte il comando sta in /sbin oppure si chiama sendmail Samba - Configurazione ● ● ● ● ● Il programma samba permette ad un server Linux (o Unix o mac os X) di agire come un server Windows. Essendo molto flessibile le opzioni di confugurazione sono molteplici per cui saranno presentate solo quelle principali. Installazione quasi di default con Linux. Configurazione semplice: sia testo che web Opzioni globali ed opzioni di share Samba - opzioni globali ● ● ● ● ● ● ● Nome del server Gruppo di lavoro Crittografia Livello di browsing Server di dominio Wins server Usare dominio Windows [global] workgroup = MGENG guest account = nobody keep alive = 30 os level = 99 kernel oplocks = false security = user encrypt passwords = yes Samba - crittografia ● ● ● Serve per le 'nuove' versioni di Windows – Da NT e 98 Comandi per disabilitarli nella registry dei sistemi windows – Ma è meglio non farlo Comandi per gestire (smbpasswd) – Smbpasswd -a utente Samba - livello di browsing ● ● ● ● Tipo di imbustamento di SMB: in TCP/IP o in Ethernet Tutti i PC tendenzialmente cercano di divenire master browser Al cambio del master browser succede il finimondo Samba configurato per vincere: sui client o anche sui server – os level = 99 Samba - usare i domini windows ● ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; Configurare Samba per usare la validazione di NT Uncomment the following, if you want to use an existing NT-Server to authenticate users security = server password server = 192.168.1.10 Uncomment this, if you want to integrate your server into an existing net e.g. with NT-WS to prevent nettraffic local master = no If you want Samba to act as a wins server, please set to yes wins support = no If you want Samba to use an existing wins server,uncomment wins server = 192.168.1.1 Do you wan't samba to act as a logon-server for your windows clients, logon script =%U.bat domain logons = yes domain master = yes [netlogon] path = /netlogon Samba - utenti ● Disabilitare le shell per limitare le possibilità di accesso – ● La conversione di più utenti in uno solo con smbuser – ● Dove serve avere uno stesso schema di condivisione Utente guest – ● In /etc/passwd la shell dev'essere /bin/false Per le condivisioni generiche in lettura Home directory utenti – Usa le home di Linux [homes] comment = Cartelle degli utenti read only = No create mask = 0640 directory mask = 0750 browseable = No Samba - accessi ● Validazione con user – ● Validazione con Host – ● Si possono inserire limitazioni basate sull'indirizzo IP (o sul nome) Permessi sui file creati – ● Sul client va inserito user e password Quando più utenti debbono operare sugli stessi file Mangle case / Preserve case – Linux è case-sensitive, Windows no [Deposito] path=/salva comment = Salvataggi browseable = yes read only = no create mode = 0777