CEX.io

четверг, 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 не исключает побега из созданной тюрьмы.