piątek, 19 września 2014

Apache + Tomcat + Cartyfikaty SSL (+ ew Alfresco) + htaccess = łatwo

Mamy już zainstalowane Alfresco (w tym przypadku wersja 5 Community Edition + system operacyjny CentOS 7), więc nie będę zagłębiał się w szczegóły instalacji i jego wstępnej konfiguracji. Na chwile obecną chcemy to ustawić, żeby wyglądało po ludzku i dodatkowo to zabezpieczyć, oraz nie męczyć się z zawiłościami konfiguracyjnymi certyfikatów i zabezpieczenia katalogów w Tomcat.
W pierwszej kolejności wywalamy zawartość katalogu /opt/alfresco/tomcat/webapps/ROOT i tworzymy tam plik index.jsp o następującej zawartości:

<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>Page Redirection</title>
</head>
<body>
<center>
<h1>Page Redirection</h1>
</center>
<%
   // New location to be redirected
      String site = new String("https://alfresco.domain.com");
     response.setStatus(response.SC_MOVED_TEMPORARILY);
    response.setHeader("Location", site);.
%>
</body>
</html>


Co przekieruje nam każde zapytanie z głównego katalogu Tomcata na wskazaną przez nas lokalizację.

Następnie instalujemy apache i konfigurujemy https i mod_jk.so, które pełni role łącznika pomiędzy Apachem a Tomcatem

To instalujemy z paczki:
yum install httpd httpd-devel mod_ssl gcc

A to musimy teraz ściągnąć i skompilować - tomcat connectors:
wget http://ftp.ps.pl/pub/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.40-src.tar.gz

rozpakowywujemy:
tar xzf tomcat-connectors-1.2.40-src.tar.gz
cd tomcat-connectors-1.2.40-src
cd native


i kompilujemy (warto sprawdzic wcześniej lokalizacje pliku apxs):
./configure --with-apxs=/usr/bin/apxs
make
cd apache-2.0


Kopiujemy skompilowany moduł do odpowiedniej lokalizacji:
cp mod_jk.so /etc/httpd/modules/

Następnie konfigurujemy Apache tak, żeby nasza instalacja Alfresco działała w bezpiecznym połączeniu. Musimy dodać następujące wpisy do /etc/htps/conf.d/ssl.conf:

LoadModule    jk_module  /etc/httpd/modules/mod_jk.so
JkWorkersFile /opt/alfresco/tomcat/conf/workers.properties
JkLogFile     /var/log/httpd/mod_jk.log
JkLogLevel    info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
LoadModule auth_basic_module modules/mod_auth_basic.so


<VirtualHost alfresco.domain.com:443>

    ServerName alfresco.domain.com
    SSLEngine on
    SSLCertificateFile /etc/httpd/ssl/certyfikat.cert
    SSLCertificateKeyFile /etc/httpd/ssl/certyfikat.key
    SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown downgrade-1.0 force-response-1.0
              #   JkOptions indicate to send SSL KEY SIZE,
                  JkOptions +ForwardKeySize -ForwardDirectories

                   JkMount /* tomcat
                   JkMount / tomcat

                   <Location "/share">
                       Order allow,deny
                       Allow from all
                       AuthType Basic
                       AuthName "Restricted Files"
                       AuthUserFile /opt/alfresco/tomcat/webapps/share/users
                       Require user some_user
                     </Location>.

                   JkMount /share/* tomcat
                   JkMount /share tomcat

                   <Location "/alfresco">
                       Order allow,deny
                       Allow from all
                       AuthType Basic
                       AuthName "Restricted Files"
                       AuthUserFile /opt/alfresco/tomcat/webapps/alfresco/users
                       Require user some_user
                     </Location>.

                   JkMount /alfresco tomcat
                   JkMount /alfresco/* tomcat

</VirtualHost>




Tworzymy plik workera dla Tomcata(trzeba zwrócić uwagę na port czy wpisujemy odpowiedni):
/opt/alfresco/tomcat.conf/worker.properties:

worker.list=tomcat
worker.tomcat.port=8009
worker.tomcat.host=localhost
worker.tomcat.type=ajp13
worker.tomcat.lbfactor=1


Tworzymy pliki users w lokalizacjach:
/opt/alfresco/tomcat/webapps/share/
/opt/alfresco/tomcat/webapps/alfresco/


A jego zawartość powinna wyglądać:
some_user:haslo_htpasswd

Restartujemy Apache:
service https restart
 
Teraz za pomocą ulubionej przeglądarki sprawdzamy, czy nasza konfiguracja działa tak jak potrzeba i jak chcieliśmy. W ten sposób mamy działającego Tomcat`a na warunkach Apache. Możemy teraz np. dodatkowo ustawić firewalla i przepuścić ruch tylko dla portów 80 i 443 i całkowicie odciąć od świata porty Tomcat`a.

piątek, 12 września 2014

Problem z sshd - no such device

Siedzimy sobie grzebiemy w pliku sshd_config np zezwalamy nowemu userowi korzystać z dobrodziejstw logowania się przez demona sshd. Zapisujemy plik wydajemy polecenie:

/etc/init.d/sshd restart

Demon niby wstaje , ale ......... ssh nie działa. Patrzymy w logi a tam widzimy:

server sshd[11115]: fatal: daemon() failed: No such device

Sprawdzamy plik konfiguracyjny, cuda nie widy ...... ciągle nic.

Po małym rekonesansie w sieci znajdujemy winowajcę. Jest nim /dev/null.
Zeby naprawic problem wystarczy go skasowac i na nowo wygenerować:

rm /dev/null
mknod /dev/null c 1 3

sprawdżmy jeszcze czy plik ma odpowiednie prawa:

ls -l /dev/null
crw-rw-rw-. 1 root root 1, 3 Sep 11 13:54 /dev/null

to jest ok. Następnie restartujemy demona SSHD.

/etc/init.d/ssdh restart

Sprawdzamy czy proces sie odpalił np:

ps auxf | grep sshd

I jeśli mamy go na liście to problem z głowy.

wtorek, 9 września 2014

Jak wykonać polecenie w danym dniu tygodnie bez zaprzęgania Crona

Czasem zdarza się taka potrzeba, że przydało by się naszemu skryptowi działającemu w cronie, żeby bez dodatkowych skryptów zewnętrznych i następnych wpisów w crontabie zrobił coś dodatkowo np. we wtorek. Może przydać się przy np. skryptach backupowych, bądź innych wynalazkach. Poniżej mały skrypcik, który w środę będzie zmieniał nazwę pliku:

#!/bin/sh
TUE=`date | cut -c 1-3`
DATE=`date +%F`
DZIEN=`echo "Tue"`
    if
              [ "$TUE" == "$DZIEN" ]; then
              mv test.txt test_$DATE.txt
        exit 0;
    else
        echo "dzis nie Tue"
    fi