CEX.io

среда, 9 февраля 2011 г.

Создание SSH туннеля

пример:

перебросить локальный порт 2000 на удаленный порт 25
ssh -f -L [bind_address:]2000:local.org:25 -nNT user@remote.org

пояснения:
-f                              - перейти в фон после запуска
local.org                  - локальный сервер
user@remote.org    - удаленный сервер с которым соединяемся
[bind_address:]       - необязательный параметр (по умолч.: localhost)
-L 2000                    - локальный порт для начала туннеля
:25                           - удаленный порт для конечной точки туннеля
-N                            - не выполнять удаленных команд
-n                             - связать стандартное устройство ввода с /dev/null
-T                             - не создавать псевдо tty на удаленной системе

пример:

перебросить удаленный порт 2000 на локальный порт 25
ssh -f -R [bind_address:]2000:local.org:25 -nNT user@remote.org

пояснения:
[bind_address:]      - необязательный параметр (по умолч.: localhost)
-R 2000                  - удаленный порт 2000

добавить в sshd_config:
GatewayPorts clientspecified

Использование Bourne shell (bash) как CGI скрипта

Пример скрипта:

остается только скопировать это
в файл http://server.org/cgi-bin/test.sh
и установить права доступа: chmod 755 test.sh

Переменные окружения доступные внутри CGI скрипта:

http://tldp.org/LDP/abs/html/networkprogramming.html

понедельник, 7 февраля 2011 г.

Настройка доступа SSH через SSHD демона

Настройки сервера:

1. Настраиваем /etc/openssh/sshd_config
    DSAAuthentication yes
    PasswordAuthentication no                                                     
    PermitEmptyPasswords no

2. Генерируем пару ключей и устанавливаем пароль
    ssh-keygen -b 1024 -t dsa -C "home machine"
    
    пароль можно поменять:
    ssh-keygen -p [-N новый_пароль] [-f keyfile]

    файлы готовы:
    публичный ключ: (нужно добавить в ~/.ssh/authorized_keys)
   ~/.ssh/id_dsa.pub
   
    установим права доступа
    chmod 600 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub ~/.ssh/authorized_keys
 
    добавляем публичный ключ к списку
    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

    приватный ключ: (должен храниться в безопасном месте)
    ~/.ssh/id_dsa
   
    переместим его на удаленную машину-клиент
    выполним на клиентской машине:
    scp user@host.org:~/.ssh/id_dsa ~/.ssh/

3. Перезапускаем сервис
    service sshd restart

Настройки клиента:

-вручную
1. добавляем ключи
    ssh-add ~/.ssh/id_dsa
    [вводим пароль]

2. соединяемся
    ssh user@mysite.com

-автоматизация+псевдоним(alias)
1. создаем фал vi ~/.ssh/config

2. прописываем параметры
    Host myhost
    User usr
    Port 2222
    HostName host.org
    IdentityFile ~/.ssh/id_dsa

3. соединяемся
    ssh myhost

воскресенье, 6 февраля 2011 г.

Документация по Git

Достаточно подробная документация по Git: http://progit.org/book/ru/
Опыт работы: http://habrahabr.ru/blogs/Git/60347/

Настройка сервера:

1. подключаемся к серверу
    ssh myserver.com

2. переходим в нужный каталог
    cd /var/git && mkdir myapp.git && cd myapp.git
    git --bare init

3. выходим
    exit

Настройка клиента:

1. получаем локальную копию
    git clone git@myserver.com:/var/git/myapp.git

2. добавляем файлы
    git add .

3. сохраняем в локальном репозитории
    git commit -a -m "Initial commit"

4. отправляем изменения на удаленный репозиторий
    git push origin master

добавление списка игнорирования(svn+git)

1. создаем файл
    vi .svnignore

2. добавляем список
    .git
    .gitignore

3. установим свойство
    svn propset svn:ignore -F .svnignore .

4. проверим
    svn propget svn:ignore .

5. добавим файл в репозиторий
    svn add .svnignore

6. отправляем в репозиторий
    svn commit -m "added .svnignore"

четверг, 27 января 2011 г.

Монтирование файловой системы в Linux

1. перемонтирование корневой файловой системы в Linux
    mount -n -o rw,remount /

2. монтирование windows/samba сетевых папок
    добавляем в fstab:
    mkdir -p  /mnt/Download
    //myhost/Download /mnt/Download cifs auto,credentials=/home/usr/.credentials,rw,uid=1000,_netdev,user,iocharset=utf8,codepage=866,noexec,nosuid 0 0
 
    содержимое файла: /home/usr/.credentials
    username=myusername
    password=mypasswd

вторник, 18 января 2011 г.

appweb-3.2.3-3

Найдена ошибка в исходном коде этой версии: appweb-3.2.3-3
Ошибка проявляется при использовании Redirect с любым кодом и адресом. Сервис аварийно завершается.

[http_pipeline.patch]
--- appweb3_2/src/http/pipeline.c.orig    2011-01-05 11:19:35.105182966 +0600
+++ appweb3_2/src/http/pipeline.c    2011-01-05 11:20:20.145183017 +0600
@@ -48,12 +48,12 @@
      */
     alias = req->alias = maGetAlias(host, req->url);
     mprAssert(alias);
+    location = req->location = maLookupBestLocation(req->host, req->url);
+    mprAssert(location);
     if (alias->redirectCode) {
         maRedirect(conn, alias->redirectCode, alias->uri);
         return;
     }
-    location = req->location = maLookupBestLocation(req->host, req->url);
-    mprAssert(location);
     req->auth = location->auth;
     resp->extension = getExtension(conn);
[http_pipeline.patch]

Linux chroot

Практический пример размещения приложения/сервиса в chroot окружении.

# определим загружаемые библиотеки
cd /[path_to_nginx]/
ldd nginx
    libcrypt.so.1 => /lib/libcrypt.so.1 (0xb7eb1000)
    libdl.so.2 => /lib/libdl.so.2 (0xb7eac000)
    ...
    libexpat.so.0 => /lib/libexpat.so.0 (0xb775b000)

# копируем все библиотеки в /jail
mkdir -p /jail/lib/ && cd  /jail/lib/
cp /lib/libcrypt.so.1 .
cp /lib/libdl.so.2 .
 ...
cp /lib/libexpat.so.0 .

# копируем все необходимые файлы используемые приложением
cd /[path_to_nginx]/
strace ./nginx 2>&1 | grep open
   open("/etc/ld.so.cache", O_RDONLY)      = 4
   open("/usr/lib/libxml2.so.2", O_RDONLY) = 4
   ...
   open("/usr/local/nginx/conf/nginx.conf", O_RDONLY|O_LARGEFILE)=4

# внутри jail структура каталогов должна повторять текущее положение
mkdir -p /jail/etc/ && cd /jail/etc/ && cp /etc/ld.so.cache .
mkdir -p /jail/usr/lib/ && cd /jail/usr/lib/ && cp /usr/lib/libxml2.so.2 .
...
mkdir -p /jail/usr/local/nginx/conf/ && cd /jail/usr/local/nginx/conf/ &&
cp /usr/local/nginx/conf/nginx.conf .

#создаем null устройство
mkdir -p /jail/dev/
mknod /jail/dev/null c 1 3
chmod 666 /jail/dev/null

#- если нужны другие устройства (для других сервисов)
#JAILPATH=/jail
#mknod -m 666 $JAILPATH/dev/urandom c 1 9
#mknod -m 666 $JAILPATH/dev/null c 1 3
#mknod -m 666 $JAILPATH/dev/zero c 1 5
#mknod -m 666 $JAILPATH/dev/tty c 5 0

# запускаем nginx в jail (тюрьме)
chroot /jail/ /sbin/nginx

PS:
    Помещение приложения в jail не исключает побега из созданной тюрьмы.