Strony

wtorek, 16 października 2012

SSH Keys - ssh: Exited: String too long


W celu wygenerowania pary kluczy do autoryzacji w usłudze ssh zainstalowałem OpenSSH keygen:
openssh-keygen - 5.8p2-2 - OpenSSH keygen.

Po wygenerowaniu pary kluczy przekopiowałem klucz publiczny na zdalny serwer
Niestety próba połączenia zwróciła błąd:
ssh -i /root/.ssh/id_rsa  root@remotehost
ssh: Exited: String too long

Rozwiązanie:
Klucze trzeba wygenerowac za pomocą dostępnego w OpenWRT dropbearkey

localhost
dropbearkey -t rsa -f /root/.ssh/id_rsa
dropbearkey -y -f /root/.ssh/id_rsa | grep ssh-rsa > /root/.ssh/id_rsa.pub
scp /root/.ssh/id_rsa.pub root@remotehost:/root

Remotehost
cat /root/id_rsa.pub >> /etc/dropbear/authorized_keys
chmod 600 /etc/dropbear/authorized_keys

localhost
ssh -i /root/.ssh/id_rsa root@remotehost

BusyBox v1.15.3 (2011-11-11 18:03:51 CET) built-in shell (ash)
Enter 'help' for a list of built-in commands.

2011-11-12 - r28934
  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 Backfire (10.03.x, latest version. Always.) -------
  * 1/3 shot Kahlua    In a shot glass, layer Kahlua
  * 1/3 shot Bailey's  on the bottom, then Bailey's,
  * 1/3 shot Vodka     then Vodka.
 ----------( by obsy, http://eko.one.pl/ )----------
Booted from internal flash
root@remotehost:~$


Do czego można to wykorzystać?
Np. Backup
tar czf - /overlay | ssh -i /root/.ssh/id_rsa root@backupserver "cat > /mnt/backupdir/backup-host1-$(date +%Y-%m-%d-%s).tgz"

wtorek, 15 maja 2012

Backup and Restore ACL NTFS with SetACL

Przeniesienie uprawnień NTFS (DACL) pomiędzy zasobami:


Backup uprawnień NTFS z server1
SetACL.exe -on "\\server1\c$\test" -ot file -actn list -lst "f:sddl;w:d,o,g" -rec cont -bckp "d:\tmp\acl-ntfs.txt"

Edytuj plik "acl-ntfs.txt"
Zmień ścieżki UNC z "\\?\UNC\server1\c$\test" na "\\?\UNC\server2\c$\test"


Restore uprawnień NTFS na server2
SetACL.exe -on "\\server2\c$\test" -ot file -actn restore -bckp "d:\tmp\acl-ntfs.txt" -log "log.txt"

Jeśli chcesz wykonać backup i restore uprawnień na zasobie sieciowym (SACL) to w sekcji -lst trzeba dodać "s", czyli:
-lst "f:sddl;w:d,s,o,g"
 
Strona projektu:
http://sourceforge.net/projects/setacl/
http://helgeklein.com/

Źródła:
http://bog.no/index.php/artikler/2-how-to-backup-ntfs-acl

sobota, 19 listopada 2011

OpenWRT (Backfire) + lighttpd + PHP5 + AUTH + SSL

Instalacja i konfiguracja lighttpd i php z autoryzacją typu digest (htdigest)

UPDATE: 2013-01-15

W skrócie:
Konfiguracja lighttpd wraz z php5, autoryzacją na poziomie serwera www oraz przekierowaniem wybranych katalogów z http na https, a po co ? A po to, żeby bezpiecznie się autoryzować.
Sprzęt:
TP-LINK TL-WR1043ND, alternatywny firmware ze strony http://eko.one.pl, OpenWrt Backfire 10.03.1-RC6 r28934 2011-11-12, skonfigurowany extroot 2GB

1. Instalacja i konfiguracja lighthttp
2. Instalacja i konfiguracja php
3. Włączenie https w lighttpd
4. Autoryzacja w lighttpd
5. Redirect z http na https
6. Firewall
7. Literatura



1. Instalacja i konfiguracja lighthttp
Instalujemy serwer
opkg update
opkg install lighttpd
Modyfikujemy plik konfiguracyjny
#/etc/lighttpd/lighttpd.conf
server.document-root = "/www"
Startujemy serwer i sprawdzamy czy działa
/etc/init.d/lighttpd start
Następnie stopujemy serwer WWW
/etc/init.d/lighttpd stop

2. Instalacja i konfiguracja php
Instalujemy php i moduł do lighttpd
opkg update
opkg install lighttpd-mod-cgi
opkg install php5-cgi
Aby interpreter php pracował poprawnie w pliku konfiguracyjnym /etc/php.ini zmienna doc_root powinna być skonfigurowana identycznie jak zmienna server.document-root w konfiguracji lighttpd
#/etc/php.ini
doc_root = "/www"
Konfiguracja lighttpd
#/etc/lighttpd/lighttpd.conf
server.modules = (
...
        "mod_cgi",
...
)
cgi.assign = ( ".php"  => "/usr/bin/php-cgi" )
index-file.names = ( "index.html", "default.html", "index.htm", "default.htm", "index.php")
Tworzymy plik php i sprawdzamy czy działa
echo "<#? PHP phpinfo(); ?#>" >> /www/index.php
# - usuń to - blogger parsuje kod

Aby interpretować skrypty sh dodajemy:
cgi.assign = ( ".sh"  => "/bin/sh" )

3. Włączenie https w lighttpd
Instalujemy openssl i generujemy certyfikat typu self-sign
opkg update
opkg install openssl-util
cd /etc/lighttpd/
openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
chown root:root server.pem
chmod 400 server.pem

Włączenie SSL można wykonać ją na 2 sposoby:

a. Za pomocą poniższej konfiguracji lighthttp przełączy się w tryb SSL-only, oznacza to, że będzie nasłuchiwał tylko i wyłącznie na porcie 443.
#/etc/lighttpd/lighttpd.conf
ssl.engine = "enable"
ssl.pemfile = "/etc/lighttpd/server.pem"

W dokumentacji jest napisane, ze prawdopodobnie trzeba będzie również zmienić server.port na 443, nic podobnego, w OpenWRT (lighttpd/1.4.28 (ssl)) serwer automatycznie zabindował się do portu 443

b. Aby włączyć SSL obok normalnego HTTP czyli równolegle serwować tą samą stronę po http i https,  należy dodać socket do konfiga.
$SERVER["socket"] == ":443" {
     ssl.engine                  = "enable"
     ssl.pemfile                 = "/etc/lighttpd/server.pem"
 }
4. Autoryzacja w lighttpd
Instalacja modułu AUTH
opkg update
opkg install lighttpd-mod-auth

Włączamy moduł auth
#/etc/lighttpd/lighttpd.conf
server.modules = (
...
        "mod_auth",
...
)

## debugging
# 0 for off, 1 for 'auth-ok' messages, 2 for verbose debugging
auth.debug = 2

# definiujemy metodę autoryzacji

auth.backend = "htdigest"

# wskazujemy plik z loginami i haslami
auth.backend.htdigest.userfile = "/etc/lighttpd/lighttpd-htdigest.user"

#definiujemy gdzie obowiązuje autoryzacja: czyli katalog download, użytkownicy muszą zostać autoryzowani metodą digest, lecz zostaną wpuszczeni tylko ci, którzy należą do strefy "download area"
auth.require = ("/download/" =>
  (
     "method"  => "digest",
     "realm"   => "download area",
     "require" => "valid-user"
  )
)

Tworzymy prosty skrypt dodający użytkowników do pliku o nazwie htdigest.sh
#!/bin/sh
user=$1
realm=$2
pass=$3
hash=`echo -n "$user:$realm:$pass" | md5sum | cut -b -32`
echo "$user:$realm:$hash"

#nadajemy prawa do wykonywania
chmod 755 htdigest.sh

#przykład użycia:
#./htdigest.sh[space]'login'[space]'realm'[space]'password'
./htdigest.sh 'piotr' 'download area' 'password' >>/etc/lighttpd/lighttpd-htdigest.user
5. Redirect z http na https
Instalacja modu REDIRECT
opkg update
opkg install lighttpd-mod-redirect
Włączamy moduł redirect i ustawiamy, aby podczas próby wejścia do katalogu download nastąpiło przekierowanie na ten sam adres lecz po protokole https
#/etc/lighttpd/lighttpd.conf
server.modules = (
...
       "mod_redirect",
...
)

#poniższy kod sprawi, że zostaniemy przekierowani z  adresu http://serwerip/download/ na https://serwerip/download/

$SERVER["socket"] == ":80" {
        $HTTP["url"] =~ "^/download/*" {
                $HTTP["host"] =~ "(.*)" {
                        url.redirect = ( "^/(.*)" => "https://%1/$1" )
                }
        }
}

Jeśli chcemy przekierować wszystko z portu 80 na 443
$SERVER["socket"] == ":80" {
    $HTTP["host"] =~ "(.*)" {
        url.redirect = ( "^/(.*)" => "https://%1/$1" )
    }
}

6. Firewall
Na koniec wypuszczenie serwera w eter, odblokowanie portu 443 lub/i 80 na firewallu na interfejsie WAN
#/etc/config/firewall

config rule
        option src              wan
        option proto            tcp
        option dest_port        443
        option target           ACCEPT

config rule
        option src              wan
        option proto            tcp
        option dest_port        80
        option target           ACCEPT


/etc/init.d/firewall restart

7. Literatura
http://eko.one.pl/?p=openwrt-php
http://eko.one.pl/?p=openwrt-http
http://redmine.lighttpd.net/wiki/lighttpd/Docs:SSL
http://redmine.lighttpd.net/wiki/lighttpd/HowToSimpleSSL
http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModAuth
http://redmine.lighttpd.net/wiki/lighttpd/HowToAuthenticationFromMultipleFiles
https://wiki.archlinux.org/index.php/Lighttpd_for_SSL_and_non-SSL
http://redmine.lighttpd.net/wiki/lighttpd/TutorialLighttpdAndPHP
http://redmine.lighttpd.net/wiki/lighttpd/HowToRedirectHttpToHttps
http://redmine.lighttpd.net/wiki/lighttpd/HowToRedirectWww

czwartek, 17 listopada 2011

OpenWRT (Backfire) + lighttpd + php5 + DokuWiki

Po podstawowej konfiguracji lighttpd + php5 pobrałem stabilną wersję DokuWiki (www.dokuwiki.org)
cd /tmp
wget http://www.splitbrain.org/_media/projects/dokuwiki/dokuwiki-2011-05-25a.tgz
gzip -d dokuwiki-2011-05-25a.tgz
tar -xvf dokuwiki-2011-05-25a.tar
mv dokuwiki-2011-05-25a /home/lighttpd/ssl/html/
Przy próbie instalacji aplikacji
http://server/dokuwiki/install.php
otrzymałem błąd:
The installer found some problems, indicated below. You can not continue until you have fixed them.

    * PHP function session_start is not available. Maybe your hosting provider disabled it for some reason?
    * PHP function utf8_encode is not available. Maybe your hosting provider disabled it for some reason?
    * PHP function utf8_decode is not available. Maybe your hosting provider disabled it for some reason?

Rozwiązaniem było doinstalowanie modułów php:
opkg update
opkg install php5-mod-session
opkg install php5-mod-xml

Nie ma potrzeby ingerencji w plik konfiguracyjny /etc/php.ini
ponieważ po instalacji w lokalizacji /etc/php5/ tworzą się odpowiednie pliki konfiguracyjne .ini
root@server:~$ cat /etc/php5/session.ini
extension=session.so

wtorek, 11 października 2011

VBScript - skrypty AD

1. Wyszukiwanie użytkownika w AD i listowanie jego atrybutów.

'SearchforaUserAccountinActiveDirectory

FilePath=".\samAccountName.txt"'Sciezkadoplikuzdanymiwejściowymi (np. JanKowalski)
SetobjFSO=CreateObject("Scripting.FileSystemObject")
SetobjFile=objFSO.OpenTextFile(FilePath,1)

DoUntilobjFile.AtEndOfStream
    strsamAccountName=objFile.ReadLine()

SetobjConnection=CreateObject("ADODB.Connection")
objConnection.Open"Provider=ADsDSOObject;"

SetobjCommand=CreateObject("ADODB.Command")
objCommand.ActiveConnection=objConnection

objCommand.CommandText=_
"<[*]LDAP://dc=domain,dc=com,dc=pl>;(&(objectCategory=User)"&_
"(samAccountName="&strsamAccountName&"));adspath;subtree"


SetobjRecordSet=objCommand.Execute

IfobjRecordset.RecordCount=0Then
    'WScript.Echo"sAMAccountName:" & strsamAccountName & "doesnotexist."
Else  
    WhileNotobjRecordset.EOF
        SetobjUser=GetObject(objRecordset.Fields(0).Value)
        WScript.EchoobjRecordset.RecordCount & "|" & objUser.samAccountName & "|" & objUser.mail
        objRecordSet.MoveNext
    Wend
EndIf
objConnection.Close
Loop
[*] - usuń te znaki (Blogger filtruje publikowane treści)

wtorek, 6 września 2011

AdFind - przykłady

Command line Active Directory query tool. Mixture of ldapsearch, search.vbs, ldp, dsquery, and dsget tools with a ton of other cool features thrown in for good measure.

http://www.joeware.net/freetools/tools/adfind/

1. Wyświetla wszystkich użytkowników w grupie "GroupName", rekurencyjnie (odczytuje zawartość innych grup zawierających się w grupie "GroupName").

"-samdc" - rozwiązuje min parametr userAccountControl do postaci: "546 [DISABLED(2)\;PWD_NOT_REQ(32)\;NORMAL_USER(512)]".

"-csvdelim ; " - rozdziela dane średnikiem ";" (standardowo to przecinek ","), ten parametr umożliwi poprawną obróbkę danych, szczególnie ważne gdy exportujemy równieź dn, którego zawartość posiada przecinki: "OU=Groups,DC=domain,DC=com" 
adfind -b "DC=domain,DC=com" -s subtree -f "(&(objectclass=user)(memberOf=CN=GroupName,OU=Groups,DC=domain,DC=com))" -samdc -csv -csvdelim ; sAMAccountName userAccountControl displayName givenName sn description title employeeNumber department departmentNumber company streetAddress l st postalCode physicalDeliveryOffice co telephoneNumber mobile mail manager
CDN..

środa, 20 lipca 2011

WSUS Offline Update - zawsze świeże poprawki

WSUS Offline Update - http://www.wsusoffline.net/
To bardzo przydatne narzędzie, które pozwoli na pobranie wszystkich niezbędnych poprawek dla systemów Microsoft, zapisanie ich w pliku ISO, oraz w trybie offline (bez dostępu do Internetu) zainstalowanie ich na naszej maszynie.
Oprogramowanie udostępnia GUI za pomocą, którego możemy wybrać interesujący nas system Windows oraz pakiet MS Office do którego chcemy pobrać dodatki, a także utworzyć pliki ISO z poprawkami.



Z powyższego GUI skorzystamy za każdym razem jeśli będziemy chcieli  dokonać aktualizacji.

Microsoft publikuje poprawki do swoich systemów w drugi wtorek każdego miesiąca.
Jeśli chcemy mieć zawsze świeże poprawki, możemy zautomatyzować cały proces pobierania i tworzenia plików ISO za pomocą skryptu.

Skrypt pobiera poprawki:
Poprawki do systemów operacyjny Microsoft:
  • Windows XP PL x86
  • Windows 2003 EN x86
  • Windows 2003 EN x64
  • Windows 2008 x86
  • Windows 2008 x64
  • Windows Vista x86
  • Windows Vista x64
  • Windows 2008 R2
  • Windows 7 x86
  • Windows 7 x64
Poprawki do pakietu Microsoft Office
  • MS Office XP,  2003, 2007, 2010 PL

@echo off

call d:\Download\wsusoffline\cmd\DownloadUpdates.cmd wxp plk /includedotnet /verify /exitonerror
call d:\Download\wsusoffline\cmd\DownloadUpdates.cmd w2k3 enu /includedotnet /verify /exitonerror
call d:\Download\wsusoffline\cmd\DownloadUpdates.cmd w2k3-x64 enu /includedotnet /verify /exitonerror
call d:\Download\wsusoffline\cmd\DownloadUpdates.cmd w60 glb /includedotnet /verify /exitonerror
call d:\Download\wsusoffline\cmd\DownloadUpdates.cmd w60-x64 glb /includedotnet /verify /exitonerror
call d:\Download\wsusoffline\cmd\DownloadUpdates.cmd w61 glb /includedotnet /verify /exitonerror
call d:\Download\wsusoffline\cmd\DownloadUpdates.cmd w61-x64 glb /includedotnet /verify /exitonerror
call d:\Download\wsusoffline\cmd\DownloadUpdates.cmd ofc glb /includedotnet /verify /exitonerror
call d:\Download\wsusoffline\cmd\DownloadUpdates.cmd o2k3 plk /includedotnet /verify /exitonerror
call d:\Download\wsusoffline\cmd\DownloadUpdates.cmd o2k7 plk /includedotnet /verify /exitonerror

call d:\Download\wsusoffline\cmd\CreateISOImage.cmd wxp plk
call d:\Download\wsusoffline\cmd\CreateISOImage.cmd w2k3 enu
call d:\Download\wsusoffline\cmd\CreateISOImage.cmd w2k3-x64 enu
call d:\Download\wsusoffline\cmd\CreateISOImage.cmd w60 glb
call d:\Download\wsusoffline\cmd\CreateISOImage.cmd w60-x64 glb
call d:\Download\wsusoffline\cmd\CreateISOImage.cmd w61 glb
call d:\Download\wsusoffline\cmd\CreateISOImage.cmd w61-x64 glb
call d:\Download\wsusoffline\cmd\CreateISOImage.cmd ofc plk
Skrypt konfigurujemy tak, aby uruchamiał się cyklicznie: w moim przypadku druga środa każdego miesiąca o 4:00 rano.


Po zakończeniu pobierania poprawek, tworzone są obrazy ISO z poprawkami dla konkretnych systemów i pakietów office w katalogu wsusoffline\iso\