четверг, 7 мая 2009 г.

Gmailfs. Монтируем Gmail как сетевой диск.

Продолжаю играться с виртуальными файловыми системами, построенными на основе fuse (Filesystem in Userspace) - файловой системы в пространстве пользователя. Здесь (SSHFS -монтирование удаленных систем через SSH) я уже писал о sshfs - утилите, позволяющей монтировать разделы удаленного компьютера с помощью fuse. Также существуют еще fuseftp, для монтирования ftp разделов, fusesmb монтирования сетевых директорий Windows, ntfs-3g для монтирования ntfs разделов с возможностью записи, о которых я, надеюсь, напишу позже. Вообще, для желающих создать свою виртуальную файловую систему есть статья Разработка собственной файловой системы с помощью FUSE.


В свою очередь, Gmailfs - это виртуальная файловая система позволяющая пользователям монтировать и использовать дисковое пространство, предоставляемое им с почтовым ящиком от Gmail. На данный момент это приблизительно 3 Гигабайта в ваше личное пользование. Конечно, скорость работы меньше чем с локальными разделами. Главным же преимуществом есть возможность доступа с любой точки земного шара, имеющей выход в Интернет.

Установка.

Здесь я рассматриваю установку программы в Debian Etch. Все должно работать и в последних версиях (Edgy и Feisty) Ubuntu/Kubuntu. С Dapper были некоторые проблемы, решение описано здесь.
Бинарные пакеты для других популярных дистрибутивов тоже существуют. Проверьте с помощью менеджера пакетов вашей системы.
Для работы программы в системе должен быть установлен Python версии 2.3 или позже. Также ядро должно быть собрано с поддержкой fuse. В последних версиях ядра он включен по умолчанию. Если в ядро вашего дистрибутива этот модуль не включен, соберите и установите его как описано здесь.

Собственно установка:

$ sudo apt-get install gmailfs

Проверяем, загружен ли модуль fuse (у меня не был):

$ lsmod | grep fuse

Если команда выдает что-нибудь наподобие:

fuse 48944 0

все замечательно, следующий шаг можно пропустить, иначе
подгружаем модуль fuse:

$ sudo modprobe fuse

Модуль должен подгрузиться. Можете проверить опять.

Теперь можно приступить и к знакомой работе, связанной с монтированием.

Монтирование.

Создаем точку монтирования:

$ sudo mkdir -p /mnt/gmail

Монтировать как всегда можно вручную (после перезагрузки все теряется) и прописав опции монтирования в файле /etc/fstab. Все зависит от частоты перезагрузки вашего компьютера и частоты пользования данной утилитой. Рассмотрим оба варианта.

Монтирование вручную:

Наберите в терминале следующее:
$ sudo mount -t gmailfs none /mnt/gmail -o username=account_name@gmail.com,password=password,fsname=xxx
Ignored option :rw

Вставьте соответственно имя своего аккаунта и пароль. Также введите что-нибудь пооригинальней в пункте fsname (вроде пароля).

Для проверки скопируйте файл в созданную директорию и проверьте ее содержимое (только под пользователем root).

$su
#cd /mnt/gmail/
#mc (копируем файлы в папку /mnt/gmail)
#ls
1.png 2.png 3.png 4.png

Закончив работу, отмонтируем:

#umount /mnt/gmail

Монтируем с записью в /etc/fstab/:

Открываем упомянутый файл:

$ sudo nano /etc/fstab

и вносим в него опции монтирования:

/usr/share/pycentral/gmailfs/site-packages/gmailfs.py /mnt/gmail gmailfs username=account_name@gmail.com,password=password,fsname=xxx

Сохраняем изменения и монтируем:

$sudo mount /mnt/gmail

Виртуальная файловая система смонтирована и готова к работе.

В качестве альтернативы все данные (имя, пароль и fsname) можно занести в файл /etc/gmailfs/gmailfs.conf и после этого монтировать без них.

Теперь несколько слов о проблемах:

1. При копировании файла на gmail-disc на ящик приходит 3 письма с такими заголовками:
"v=3 r=1137456558 q=__g__gmail__h__ "

Я эту проблему решил с помощью настройки фильтров на аккаунте gmail и в почтовой программе. В качестве параметра для фильтрования можно задать величину q=__g__123123__h__, где 123123 ваш fsname.


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

serhiy@debian:/mnt$ ls -l
итого 6
?--------- ? ? ? ? ? gmail

Пока не знаю как с этим бороться. Добавление пользователя в группу fuse не помогло. Может, кто-нибудь сталкивался?

Монтировать нужно от имени обычного пользователя, а размонтировать с помощью sudo:

serhiy@debian:/mnt$ mount /mnt/gmail/
serhiy@debian:/mnt$ cd gmail/
serhiy@debian:/mnt/gmail$ ls
1.png 2.png 3.png 4.png IMG_0001.JPG
serhiy@debian:/mnt/gmail$ umount /mnt/gmail
serhiy@debian:/mnt/gmail$ cd ..
serhiy@debian:/mnt$ umount /mnt/gmail
umount: /mnt/gmail mount disagrees with the fstab
serhiy@debian:/mnt$ sudo umount /mnt/gmail/
serhiy@debian:/mnt$
Может это выглядит и не очень красиво, но зато работать можно от имени обычного пользователя. В целом, меня все устраивает.

Linux. Мониторинг системы.

Данная статья написана в основном для новичков в Linux. Большинство информации, представленной здесь, может быть найдено в страницах man. Если Вы опытный пользователь Linux - большинство из написанного здесь Вам должно быть знакомо. Так что можете спокойно переходить к другим статьям или же, если хотите проверить свои знания - можете просмотреть мельком. Но а в случае если Вы являетесь новичком в Linux, если Вам нудно читать страницы man и хочется узнать обо все этом побыстрей - эта статья для Вас.


Команда: top

Это одна из чаще всего используемых комманд раздела мониторинга системы. Команда top предоставляет информацию о запущенных процессах, включая данные об использовании процессом CPU и памяти, пользователях, запустивших процесс и их pid (Process ID), а также о времени, прошедшем с момента запуска процесса. Данные все время обновляются с определенной частотой (по умолчанию 3 сек). Изменить частоту можно нажав клавишу "s" - ввести нужное число - Enter.

Вывод команды top показан ниже:

$ top - 12:39:28 up 2:20, 1 user, load average: 0.09, 0.14, 0.09
Tasks: 131 total, 1 running, 130 sleeping, 0 stopped, 0 zombie
Cpu(s): 1.7% us, 0.5% sy, 0.0% ni, 97.5% id, 0.0% wa, 0.2% hi, 0.2% si
Mem: 1028144k total, 911324k used, 116820k free, 28604k buffers
Swap: 530104k total, 20268k used, 509836k free, 396324k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5144 root 16 0 119m 63m 6452 S 1 6.3 3:07.04 Xorg
7867 serhiy 16 0 102m 18m 13m S 1 1.9 0:01.15 konsole
6379 serhiy 15 0 162m 35m 24m S 1 3.5 0:25.17 ktorrent
3666 root 15 0 0 0 0 S 0 0.0 0:00.82 kjournald
5393 serhiy 15 0 162m 33m 18m S 0 3.3 0:13.74 stardict
7885 serhiy 16 0 10700 1300 952 R 0 0.1 0:00.49 top
1 root 16 0 2640 564 476 S 0 0.1 0:00.89 init
2 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/0
3 root 34 19 0 0 0 S 0 0.0 0:00.00 ksoftirqd/0
4 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/0
5 root RT 0 0 0 0 S 0 0.0 0:00.00 migration/1
6 root 34 19 0 0 0 S 0 0.0 0:00.00 ksoftirqd/1
7 root RT 0 0 0 0 S 0 0.0 0:00.00 watchdog/1
8 root 10 -5 0 0 0 S 0 0.0 0:00.06 events/0
9 root 10 -5 0 0 0 S 0 0.0 0:00.00 events/1
10 root 10 -5 0 0 0 S 0 0.0 0:00.00 khelper

Вы можете модифицировать вид выводимой информации. Так, нажав "i" можно отключить вывод неработающих процессов. Повторное нажатие "i" вернет все в прежнее положение. "M" - отсортирует по количеству используемой памяти, а "P" - по использованию процессора.
Приведенные опции вводились при запущенной команде top. В дополнение к этому, существуют опции, которые можно вводить при запуске команды. Например, с помощью "u" можно задать вывод только процессов, принадлежащих определенному пользователю:
$ top -u serhiy
top - 12:56:54 up 2:37, 1 user, load average: 0.08, 0.10, 0.09
Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.7% us, 0.2% sy, 0.0% ni, 98.8% id, 0.0% wa, 0.2% hi, 0.2% si
Mem: 1028144k total, 972308k used, 55836k free, 33260k buffers
Swap: 530104k total, 20268k used, 509836k free, 445252k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6379 serhiy 15 0 162m 35m 25m S 1 3.6 0:30.55 ktorrent
5393 serhiy 15 0 162m 33m 18m S 0 3.3 0:15.96 stardict
7867 serhiy 15 0 102m 18m 13m S 0 1.9 0:03.91 konsole
8109 serhiy 16 0 10696 1304 952 R 0 0.1 0:00.24 top
5210 serhiy 17 0 7584 1896 1188 S 0 0.2 0:00.09 startkde
5260 serhiy 16 0 20144 852 492 S 0 0.1 0:00.00 ssh-agent
5263 serhiy 16 0 10084 696 528 S 0 0.1 0:00.00 dbus-launch
5264 serhiy 17 0 8448 888 744 S 0 0.1 0:00.00 dbus-daemon
5296 serhiy 18 0 74596 5720 2120 S 0 0.6 0:00.27 kdeinit

С помощью опции "k" можно убить процесс, а "r" (renice) изменит его приоритет (колонка PR в выводе команды top).
Для того, чтобы выйти из программы, нужно нажать клавишу "q".

Для более подробной информации о системных процессах следует обратиться к псевдофайловой системе /proc. Здесь информация о процессах представлена в виде файлов.
Будьте осторожны, поскольку это не обычные файлы, а лишь текущее состояние устройства, эти файлы редактировать НЕЛЬЗЯ!

Команда: ps

'ps' отображает список запущенных процессов.

$ ps
PID TTY TIME CMD
11065 pts/2 00:00:00 bash
11082 pts/2 00:00:00 ps

По умолчанию информация дается только о процессах, ассоциированных с данным терминалом. Выводятся идентификатор процесса, идентификатор терминала, истраченное к данному моменту время ЦП и имя команды. Если нужна иная информация, следует пользоваться опциями. Следует заметить, что данная команда может работать как в стандартном виде записи опций (-опция), так и в режиме BSD (знака "-" между командой и опцией нет).

Так, чтобы просмотреть информацию о всех запущенных в системе процессах можно воспользоваться как

ps -e
ps -ef
ps -eF
ps -ely

так и

ps ax
ps axu

Обычно используется команда ps axu. Она выдает практически всю информацию о системе.

serhiy@kubuntu:~$ ps axu
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2640 564 ? S 10:19 0:00 init [2]
root 2 0.0 0.0 0 0 ? S 10:19 0:00 [migration/0]
root 3 0.0 0.0 0 0 ? SN 10:19 0:00 [ksoftirqd/0]
root 4 0.0 0.0 0 0 ? S 10:19 0:00 [watchdog/0]
................................................
Вывод команды очень большой. Поэтому я привел лишь начало. Если же нужна информация о запущенных Вами процессах - воспользуйтесь.
ps cxu
или
ps cx
В первом случае информация будет выведена в более подробном виде. Обычно данную программу запускают для того, чтобы узнать PID (первая колонка) команды, с последующим ее уничтожением с помощью команды kill -9.

Команда: free

'free' показывает информацию о памяти компьютера, включающей в себя физическую память (RAM), swap, разделяемую память и буферы, используемые ядром. Вся информация выдается в килобайтах.
$ free
total used free shared buffers cached
Mem: 1028144 1020468 7676 0 16316 379828
-/+ buffers/cache: 624324 403820
Swap: 530104 21644 508460

В строке Mem: показано использование физической памяти, в строке Swap: — использование пространства подкачки, а в строке -/+ buffers/cache: — объем физической памяти, выделенный в настоящее время для буферов системы. Команда free выводит лишь единоразово информацию о задействованной памяти. Для того, чтобы просматривать показатели каждые n секунд, нужно воспользоваться опцией -s n, где n - число в секундах. Но это может быть неудобно. Строки пробегают по экрану и человеку тяжело уловить разницу. Поэтому следует воспользоваться командой watch:
$watch free
Вы можете менять задержку между обновлениями (по умолчанию 2 сек.) с помощью параметра -n или сделать так, чтобы любые отличия результатов выделялись, указав параметр -d, как показано в следующей команде:
$watch -n 1 -d free
Команда: du

'du' используется для того, чтобы узнать размер директории
$ du
Без дополнительных опций команда du выдает список директорий, находящихся в текущей директории, и их размеры. Последняя строка показывает общий размер текущей директории. По умолчанию информация отображается в килобайтах. Во многих случаях это может быть неудобно. Поэтому воспользуемся некоторыми дополнительными опциями.
$ du -h /home/serhiy/pic/
4,0M /home/serhiy/pic/from_sky
1,1M /home/serhiy/pic/smoke
11M /home/serhiy/pic/mini_world
16M /home/serhiy/pic/

В приведенном примере видно, что папка pic в домашней директории пользователя serhiy содержит три вложенных папки, размерами 4.0, 1.1, и 11 мегабайт. Размер всей папки - 16 Мб. Опция -h задает отображение в более удобном виде.
$ du -ah

du -ah /home/serhiy/pic/
148K /home/serhiy/pic/from_sky/1.jpg
144K /home/serhiy/pic/from_sky/2.jpg
168K /home/serhiy/pic/from_sky/3.jpg
100K /home/serhiy/pic/from_sky/4.jpg
..............................

136K /home/serhiy/pic/mini_world/mini_world_84.jpg
152K /home/serhiy/pic/mini_world/mini_world_85.jpg
11M /home/serhiy/pic/mini_world
16M /home/serhiy/pic/
С помощью опции -a можно задать вывод размера каждого файла. Информация о полном размере вложенных папок также выводится.
$ du -mc /home/serhiy/pic/ | grep total
16 total
Здесь опция -m задает, чтобы размер выводился в мегабайтах, а -c добавляет дополнительную строку, показывающую полный размер директории (total). Таким образом мы можем воспользоваться командой grep, чтобы оставить лишь информацию о размере директории /home/serhiy/pic/. Это будет полезно, если директория содержит много вложенных поддиректорий и файлов, а Вам нужно знать лишь ее полный размер. Хотя это можно сделать и проще:
$ du -s /home/serhiy/pic/
16028 /home/serhiy/pic/

Если же Вам нужно узнать размер директории без входящих в нее директорий, воспользуйтесь опцией -S.
$ du -Sh /home/serhiy/pic/
4,0M /home/serhiy/pic/from_sky
1,1M /home/serhiy/pic/smoke
11M /home/serhiy/pic/mini_world
4,0K /home/serhiy/pic/

Как видно, директория pic/ содержит три поддиректории и ничего больше. Поэтому ее размер 4,0K.
Еще один пример из серии исключений:
$ du -h --exclude=*.jpg /home/serhiy/pic/
4,0K /home/serhiy/pic/from_sky
4,0K /home/serhiy/pic/smoke
4,0K /home/serhiy/pic/mini_world
16K /home/serhiy/pic/

Опция --exclude=*.jpg - исключает из отображения полной иформации о размере директории /home/serhiy/pic/ и ее поддиректории файлы, имеющие в своем названии .jpg. Поскольку в указанной директории и поддиректориях находятся лишь изображения в формате .jpg, все папки занимают 4,0K. Вместо .jpg можно вставить любую последовательность символов.
Например:
serhiy@kubuntu:~/pic/from_sky$ du -h --exclude=1?.jpg
2,8M .
serhiy@kubuntu:~/pic/from_sky$ du -h
4,0M .

В первом случае я исключил все файлы, состоящие из двух символов, первый из которых 1.

Команда: df

'df' - показывает информацию об использовании дискового пространства.
$ df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda6 9629880 5732280 3408424 63% /
varrun 514072 112 513960 1% /var/run
varlock 514072 4 514068 1% /var/lock

Вывод команды df состоит из 6 колонок. Fylesystem - физический раздел, Mounted on - точка монтирования этого раздела, 1K-blocks - размер раздела в килобайтах, Used - сколько занято, Available - свободно, Use% - сколько занято места в процентах.
$ df -h
Как и в случае с командой du, опция -h задает вывод в удобном для человека виде. Обычно это мегабайты и гигабайты. (-m - вывести только в мегабайтах)
Команда df имеет и другие опции, но большинство пользователей ограничиваются лишь приведенными, поэтому я их рассматривать не буду. Если Вам интересно знать больше. обратитесь к man df.

Если хочется узнать лишь информацию о том, сколько места в процентах используется на заданном диске, то можно воспользоваться утилитами grep и cut.
$ df -h | grep /dev/sda8 | cut -c41-43
83%
Здесь grep из вывода команды df -h вырезает лишь строку, где встречается /dev/sda8 (на этот раздел у меня примонтирована директория /home), а cut-c41-43 обрезает лишь 41-43 символы строки (именно там находится информация о процентном использовании разделов).

Команда: who

Поскольку операционная система Linux является многопользовательской, количество пользователей компьютера может быть больше чем один. Для того чтобы узнать, кто работает за компьютером в данный момент, и предназначена команда who. Эта команда показывает, кто работает за компьютером, сколько времени прошло с момента, когда он вошел в систему, и когда он это сделал.
$ who
serhiy tty2 2007-02-04 13:50
root tty3 2007-02-04 13:50
serhiy :0 2007-02-01 10:19

С помощью этой команды можно узнать и информацию о себе:
$ whoami
serhiy

Команда: w

'w' - это собранный воедино вывод команд 'uptime', 'who' и 'ps a' для более подробной информации о системе. Для того, чтобы задать информацию для одного пользователя, а не для всех, допишите имя пользователя к команде:
w serhiy
14:05:12 up 3 days, 3:46, 1 user, load average: 0,35, 0,32, 0,33
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
serhiy :0 - Thu10 ?xdm? 9:06 0.09s /bin/sh /usr/bin/startkde

Команда: vmstat
vmstat - показывает информацию о процессах , виртуальной памяти, физических томах и активности ЦПУ . По умолчанию выдается полный список статистики с момента загрузки системы, что не очень полезно с точки зрения анализа ситуации в данный момент. Поэтому, стоит запускать vmstat с аргументом interval, указанным в секундах.

$ vmstat 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 21680 22248 16480 416000 0 0 99 45 166 3 3 1 95 1
0 0 21680 21872 16504 415976 0 0 0 34 1250 3087 2 1 98 0
0 0 21680 25388 16520 416436 0 0 96 11 1209 3458 3 1 95 1


(вывод может отличаться в зависимости от используемой системы)

Каждая последующая линия показывают параметры системы за предыдущие 5 секунд.
Рассмотрим поля вывода команды vmstat:

procs - число процессов, которые: r - находятся в очереди на выполнение;
b - заблокированы в ожидании ресурсов.

memory - информация о памяти: swpd - количество используемой виртуальной памяти;
free - незадействованная память; buff - количество памяти, используемой в качестве буфера, cache - в качестве кэш.

swap: si - количество свап-памяти взятой с диска, so - записанной на диск (/s).

IO: bi - количество блоков взятых с блочного устройства (жесткий диск), b0 - отправленных на блочное устройство.

System: in - количество прерываний за секунду, cs - количество контекстных переключений за секунду.

CPU: процент цикла процессора, затрачиваемый на различные режимы: us - пользователь; sy - система; id - ожидание; wa - ввод/вывод.

Команда: iostat
(входит в пакет sysstat).
iostat (input/output statistics) - без аргументов показывает краткую статистику использования процессора и дисковых операций ввода/вывода:
$ iostat
Linux 2.6.15-23-amd64-generic (kubuntu) 21.02.2007

avg-cpu: %user %nice %system %iowait %steal %idle
1,64 0,87 0,84 1,33 0,00 95,32

Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn
hda 0,00 0,00 0,00 152 0
sda 9,97 399,79 182,30 18796197 8570744

В первой строке представлены версия ядра системы, имя узла и текущая дата. Во второй - усредненная информация использования процессора после загрузки системы. В поле Device - данные использования дисковых устройств (hda и sda):

tps - число операций передачи данных (или операций ввода/вывода) в секунду;
Blk_read/s - число блоков (обычно 512 байт), прочитанных за секунду;
Blk_wrtn/s - число блоков, записанных за секунду;
Blk_read - общее число прочитанных блоков;
Blk_wrtn - общее число записанных блоков.

Если Вам не удобно возиться с блоками, можете воспользоваться ключами -k - для отображения в килобайтах и -m - мегабайтах.

Надеюсь, данный обзор поможет Вам быстро освоиться с работой с основными командами по мониторингу системы Linux. Конечно, здесь рассмотрены не все программы из этой области, но я надеюсь, что для новичка в Linux этого будет вполне достаточно.

Как проверить Linux на наличие руткитов.

Как проверить Linux на наличие руткитов.

Сегодня я хочу рассказать о двух программах - chrootkit и rkhunter, с помощью которых можно легко проверить Linux на наличие руткитов. Под термином руткит (англ. root kit) понимается набор утилит, которые злоумышленник устанавливает на взломанном им компьютере после получения первоначального доступа. Этот набор, как правило, включает в себя разнообразные утилиты для получения прав суперпользователя root (отсюда и название), для «заметания следов» вторжения в систему, хакерский инструментарий (сниферы, сканеры) и троянские программы, замещающие основные утилиты UNIX. Rootkit позволяет хакеру закрепиться во взломанной системе и скрыть следы своей деятельности. (подробней в wikipedia).

chrootkit

Загружаем программу здесь. Или, если удобней:

wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz

Распаковываем, компилируем и запускаем:

tar xvfz chkrootkit.tar.gz
cd chkrootkit-0.47
make sense

chmod 755 chkrootkit

sudo ./chkrootkit

Пользователи Debian могут установить так:

sudo apt-get install chkrootkit

После проверки Вы должны увидеть следующую запись:

chkutmp: nothing deleted

Для всех проверяемых пунктов должно быть 'not found' или 'not infected'.

Можно автоматизировать проверку через cron, а результат получать на мыло. Но как пишут знающие люди, после проверки программу желательно удалить, чтобы пробравшийся злоумышленник не подозревал о ее существовании на Вашем компьютере. Здесь выбор за Вами.

rkhunter

Загружаем со страницы разработчкика:

wget http://downloads.rootkit.nl/rkhunter-1.2.7.tar.gz

Распаковываем и устанавливаем:

tar xvfz rkhunter-1.2.7.tar.gz
cd rkhunter
sudo ./installer.sh

Пользователи Debian и Ubuntu могут поставить привычным им способом:

sudo apt-get install rkhunter


После установки нужно запустить следующее:

sudo rkhunter --update

чтобы обновить базу данных руткитов/троянов/червей.
Для проверки системы на наличие или отсутствие этих "товарищей" запускаем:

sudo rkhunter -с

В конце вы должны получить отчет:

---------------------------- Scan results ----------------------------

MD5 scan
Scanned files: 0
Incorrect MD5 checksums: 0

File scan
Scanned files: 342
Possible infected files: 0

Application scan
Vulnerable applications: 0

Scanning took 188 seconds

-----------------------------------------------------------------------

Надеюсь, на Вашем компьютере вы увидите аналогичные нолики.

Дисковые квоты в Linux

Как известно, Linux - это многопользовательская операционная система. Это значит, что на одном компьютере могут работать несколько человек одновременно. Каждый из них имеет свою домашнюю директорию, которая находятся в разделе /home. Многие администраторы для /home создают отдельный раздел на жестком диске. Следовательно, что мы имеем? Есть отдельный раздел диска фиксированного размера и есть несколько пользователей, которые могут им пользоваться. Здесь возникает вопрос. А как разделить это пространство между всеми пользователями? Как застраховаться от ситуации, когда пользователь захочет перенести в свой раздел всю коллекцию фильмов или музыки? Для решения этой проблемы в Linux и существуют квоты.


Установка дисковых квот.

Первым делом в ядре должна быть включена поддержка квот. Если у вас ядро серии 2.6, то по умолчанию квоты включены, если - 2.4 - пересоберите ядро (посмотреть версию ядра можно командой uname -r). Для того, чтобы проделать все нижеописанное, Вам понадобится утилита quota, установленная на вашем компьютере. Бинарные пакеты существуют для всех распространенных дистрибутивов.
В Debian-производных дистрибутивах установка с помощью утилиты apt-get выглядит так:

$ sudo apt-get install quota

Все. Никаких дополнительных пакетов не требуется.

Теперь, как я уже упоминал выше, допустим, у нас есть папка /home, смонтированная на отдельном разделе жесткого диска, скажем /dev/sda8, размером 20Гб, и два пользователя - serhiy и nadiia с домашними директориями /home/serhiy/ и /home/nadiia. И что я хочу сделать? Правильно, ограничим пользователя nadiia всего 50 мегабайтами. Приступим.

1. Загрузитесь в однопользовательский режим. Поскольку директория /home будет перемонтирована, то мы должны застраховаться от того, что другие пользователи могут потерять свои данные.

#init 1

(этого можно и не делать, если вы уверены, что за компьютером больше никто кроме вас не работает)

2. Отредактируйте файл /etc/fstab/:

$sudo vi /etc/fstab/

добавив usrqouta к опциям раздела /home.
Вот так это выглядит у меня:

/dev/sda8 /home ext3 defaults,usrquota 0 2

3. Перемонтируйте раздел /home:

$ sudo mount -o remount /home

4. Создайте файлы aquota.user и/или aquota.group. Файлы должны быть созданы в самой верхней директории раздела. В нашем случае это /home. Поскольку я хочу ограничить квотами лишь пользователей, файл aquota.group я создавать не буду.

$ sudo touch /home/aquota.user
$ sudo chmod 600 /home/aquota.user

5. Разрешаем linux читать файл aquota.user. Это делается с помощью команды quotackeck. Будьте готовы к тому, что будет выведена ошибка, как показано ниже. Это связано с тем, что файл был создан вручную, а не командами qouta. Также будет сказано об отсутствии файла для групп. Ничего страшного в этом нет

$ sudo quotacheck -vagum
quotacheck: WARNING - Quotafile /home/aquota.user was probably truncated. Can't save quota settings...
quotacheck: Scanning /dev/sda8 [/home] quotacheck: Old group file not found. Usage will not be substracted.
done
quotacheck: Checked 5265 directories and 74403 files

6. Задайте квоты для пользователей, используя команду edquota

$sudo edquota -u nadiia

Эта команда запустит редактор, установленный по умолчанию (переменная EDITOR) (в моем случае это редактор mc -mcedit):

Disk quotas for user nadiia (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda8 16 0 0 5 0 0

(Если используемый по умолчанию редактор вам не нравится, всегда можно его изменить, запустив в консоли export EDITOR=vi. Вместо vi запишите удобный для вас редактор)

В приведенном выше файле:

Blocks : Место, используемое пользователем в блоках длиной 1kB.
inodes : Число используемых пользователем файлов
Soft Limit : Максимальное количество блоков/файлов, которое пользователь может иметь на данном разделе. Если используется период отсрочки (grace period), то вместо жесткого ограничения, пользователь нарушивший данные требования, получит лишь сообщение об этом. Значение 0 отключает данную опцию.
Hard Limit : Максимальное количество блоков/файлов, которое пользователь может иметь на данном разделе даже с установленным периодом отсрочки. Это жесткое ограничение, которое пользователь не может превысить.

Ограничим пользователя всего 50-ю мегабайтами (приблизительно).

Disk quotas for user nadiia (uid 1001):
Filesystem blocks soft hard inodes soft hard
/dev/sda8 16 50000 0 5 0 0

7. Теперь можно выйти из однопользовательского режима (если вы работали в нем), набрав

#init 5

Все. Теперь пользователь nadiia не может превысить 50Mb.


Другие команды quota.

Изменяем период отсрочки:

$sudo edquota -t

Эта команда установит период отсрочки для всех пользователей. Период отсрочки - это период, во время которого опция soft period будет лишь предупреждать, но не ограничивать. Могут быть использованы секунды, минуты, часы, дни, недели и месяцы (нужно вписать на английском языке seconds, minutes, hours, days, weeks и months ) Так выглядит запуск этой команды у меня:

Grace period before enforcing soft limits for users:
Time units may be: days, hours, minutes, or seconds
Filesystem Block grace period Inode grace period
/dev/sda8 7days 7days

Редактирование квот для групп:

$sudo edquota -g


Регулярная проверка квот:

Полезно регулярно выполнять quotacheck. Это можно реализовать, добавив задание в файл crontab

0 3 * * 0 /sbin/quotacheck -vagu
(частоту выполнения задания можно выставить, используя синтаксис cron)

Отчет об квотах:

Команда repquota показывает суммарный отчет по квотам на файловой системе. У меня отчет выглядит следующим образом:

$ sudo repquota /home
*** Report for user quotas on device /dev/sda8
Block grace time: 7days; Inode grace time: 7days
Block limits File limits
User used soft hard grace used soft hard grace
----------------------------------------------------------------------
root -- 131312 0 0 15 0 0
serhiy -- 18774192 0 0 79512 0 0
sshd -- 14512 0 0 137 0 0
nadiia -- 16 50000 0 5 0 0


Для более подробной информации обращайтесь к страницам man. Также рекомендую почитать перевод Quota mini-HOWTO.

Установка и настройка NFS сервера и NFS клиента в [K]Ubuntu.

Network File System (NFS) — это сетевая файловая система, позволяющая пользователям обращаться к файлам и каталогам, расположенным на удалённых компьютерах, как если бы эти файлы и каталоги были локальными. Главным преимуществом такой системы является то, что отдельно взятые рабочие станции могут использовать меньше собственного дискового пространства, так как совместно используемые данные хранятся на отдельной машине и доступны для других машин в сети. NFS - это клиент-серверное приложение. Т.е. в системе пользователя должен быть установлен NFS-клиент, а на компьютерах, которые предоставляют свое дисковое пространство - NFS-сервер. Здесь я хочу показать, как просто установить и настроить эти программы в [K]Ubuntu Linux. (Вся информация рассчитана для новичка в Linux. Если вы имели опыт установки NFS в Linux - ничего нового, вероятно, вы здесь не найдете. Целью статьи является, показать как легко это может быть реализовано.)

Установка и настройка NFS-сервера.

Устанавливаем NFS-сервер:

$sudo apt-get install nfs-kernel-server nfs-common portmap

Настраиваем, какие именно директории мы хотим открыть для совместного пользования и кому. Все это делается в файле /etc/exports:

$sudo vi /etc/exports

В приведенном ниже примере я выделил директорию /data (директория с данными на сервере) в совместное пользование всем компьютерам с IP - 192.168.1.1 - 192.168.1.255 с правами чтения и записи:

/data 192.168.1.1/24(rw,no_root_squash,async)

Или еще пример:

/home/serhiy/ 192.168.1.34(ro,async)

домашняя директория пользователя serhiy стала доступной в режиме только чтение для компьютера с IP 192.168.1.34. Все остальные компьютеры сети к этому разделу доступа не имеют.
/files *(ro,sync) # Только чтение для всех access to anyone
/files 192.168.0.2(rw,sync) # Чтение и запись для клиента с IP 192.168.0.2
/files 192.168.1.1/24(rw,sync) # Чтение и запись для всех клиентов с 192.168.1.1 по 192.168.1.255

Чтобы изменения вступили в силу без перезапуска демона, выполните команду:

#exportfs -arv

Если вы хотите сделать ваш разделённый NFS каталог открытым и с правом записи, вы можете использовать опцию all_squash в комбинации с опциями anonuid и anongid.

Например, чтобы установить права для пользователя 'nobody' в группе 'nobody', вы можете сделать следующее:

; Доступ на чтение и запись для клиента на 192.168.0.100, с доступом rw для пользователя 99 с gid 99
/files 192.168.0.100(rw,sync,all_squash,anonuid=99,anongid=99))

Это также означает, что если вы хотите разрешить доступ к указанной директории, nobody.nobody должен быть владельцем разделённой директории:

chown -R nobody.nobody /files

/etc/hosts.allow

Чтобы разрешить доступ по сети к nfs серверу для IP 192.168.0.1, вам надо добавить следующие строчки в /etc/hosts.allow.

portmap: 192.168.0.2
lockd: 192.168.0.2
rquotad: 192.168.0.2
mountd: 192.168.0.2
statd: 192.168.0.2

Чтобы все машины могли иметь доступ, напишите в файл /etc/hosts.allow следующие строчки:

portmap: ALL
lockd: ALL
rquotad: ALL
mountd: ALL
statd: ALL

Подробнее про настройку файла /etc/hosts.allow, смотрите, например, http://www.die.net/doc/linux/man/man5/hosts.allow.5.html

Демоны

Для запуска nfs сервера, вам требуется запустить несколько демонов:

#/etc/rc.d/portmap start
#/etc/rc.d/nfslock start
#/etc/rc.d/nfsd start

Вы можете добавить эти демоны в список в файл /etc/rc.conf, чтобы они запускались при загрузке системы.

Опции:
ro - права только на чтение. Можно и не указывать, так как она установлена по умолчанию.
rw - дает клиентам право на запись.
no_root_squash - по умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать.
noaccess - запрещает доступ к указанной директории. Может быть полезной, если перед этим вы задали доступ всем пользователям сети к определенной директории, и теперь хотите ограничить доступ в поддиректории лишь некоторым пользователям.
all_squash : все пользователи экспортируемой системы используют nobody's UID/GID;
anonuid, anongid: пользователь nobody использует UID/GID предоставляемый этими опциями.
О других опция можно почитать здесь.

Теперь нужно перезапустить nfs-kernel-server:

$sudo /etc/init.d/nfs-kernel-server restart

Если после этого вы захотите поменять что-нибудь в файле /etc/exports, то для того, чтобы изменения вступили в силу, достаточно запустить следующую команду:

$sudo exportfs -a

Все. NFS-сервер установлен и настроен. Можно переходить к настройке NFS клиента.

Установка и настройка NFS-клиента.

Установка:

$sudo apt-get install portmap nfs-common

Монтирование:

Создаем точку монтирования. Допустим, это будет папка в вашей домашней директории с названием data:

$cd ~
$mkdir data

Монтировать можно двумя способами - каждый раз вручную или прописав опции монтирования в файл /etc/fstab. Мне больше нравится второй способ:

$sudo vi /etc/fstab
Файловые системы NFS могут быть добавлены в файл /etc/fstab так же, как и локальные, но существует некоторые отличия: тип файловой системы должен быть nfs и значения dump и fsck order (последние две записи в строчке) должны быть равны 0.

и в конце дописываем следующую строку:

192.168.1.1:/data ~/data nfs rw,hard,intr 0 0

Вместо 192.168.1.1:/data впишите IP или имя сервера и путь к директории совместного пользования.
Опции монтирования можно изменить.

Записав и сохранив изменения, можно монтировать:

$sudo mount ~/data

Если все прошло успешно, то набрав в терминале

$cd ~/data
$ls

вы увидете содержимое папки /data, находящейся на NFS-сервере. Можете проверить скорость работы и запустить, например, фильм с этого раздела.

Монтирование удалённых директорий

Монтирование удалённых каталогов происходит так же, как и локальных (предположим, что точка монтирование /mnt/home существует):

#mount 192.168.0.1:/home /mnt/home

Отмонтировать можно так же, как и локальный каталог:

#umount /mnt/home

soft или hard монтирование

nfs клиент может обрабатывать сбои сервера в работе. Есть две опции монтирования: hard и soft.

soft:

Если запрос на получение файла не выполнен, NFS клиент сообщит об ошибке процессу, который пытается получить доступ к файлу. Некоторые программы умеют это обрабатывать, большая же часть - нет. Разработчики nfs не рекомендуют использовать эту опцию; это прямой путь к повреждённым данным и потере информации.


hard:

Программа, осуществляющая доступ к файлу повиснет при смерти сервера. Процесс не может быть прерван или убит (только "sure kill"), пока вы не укажете опцию intr. Когда NFS сервер вернётся к работе, программа продолжит работу с того места, где остановилась. Разработчики NFS рекомендуют использование опций hard,intr со всеми монтируемые NFS файловые системы.


Если после всего проделанного, у вас все же что-нибудь не получилось, не бросайте сразу эту затею, а напишите об этом в комментариях. Если же все получилось и вам хочется чего-нибудь большего, например лучше разобраться в различных опциях и принципах работы, советую почитать русский перевод NFS HOWTO.

вторник, 5 мая 2009 г.

Kcontrol strikes back

Можно ставить галочку напротив ещё одного пункта feature-parity между KDE3 и KDE4: Ben Cooksley (bcooksley) и Mathias Soeken (msoeken) полностью переработали “System Settings” и теперь у нас появился выбор промеж двумя способами отображения списка kcm-модулей — текущим “Icon-based view” и классическим “Tree-based view”. Об этом нам сообщает Luca Beltrame (aka einar77), один из администраторов forum.kde.org. Режим отображения переключается в настройках.

Вот так выглядит новый старый “классический вид”:

Так же было добавлено отображение количества субмодулей во всплывающей подсказке:

А также добавлена подсветка результатов поиска:

Тема “верните KControl народу!” поднималась неоднократно, но в этом топике на форуме KDE способный написать соответствующий код разработчик был всё-таки найден — можно даже проследить разработку от стадии “я глянул в код, и вроде бы реализация не составит труда” до “можете ставить из SVN-а и пользоваться”

Подборка полезных сайтов

Сайты с литературой:
journal-plaza.net - Электронные журналы
osa.samag.ru - Журнал «Open Source»
linuxformat.ru - Журнал «Linux Format»
freebooks.net.ua - Литература
all-ebooks.com
mirknig.com

Туризм:
travel.org.ua - Туристический клуб "Мангуп" (Хороший сервис погоды)

Музыка:
Zaycev.net - Пожалуй из лучших сайтов (если не считать рекламу)
pisni.org.ua - Сайт украинских песен