Официальная возможность получить лицензионный софт бесплатно.
Giveaway of the Day
Это не реклама!

Щелкните для получения прогноза по Биробиджану


суббота, 30 августа 2014 г.

Внешний выпуск "Биробиджанского Ведомасона"


(материал предоставлен внештатным корреспондентом ZEROC)
(первоисточник)


Cобраны неопровержимые доказательства вторжения Мордорской Федерации на территорию демократической Укроббитании.



Бронекавалерийская дивизия Черного Властелина захватила Новоазовск и Хоббитон и вышла к Мариуполю.



четверг, 28 августа 2014 г.

Формирование списка чисел заданной ширины: seq

Понадобилось мне создать энное количество каталогов вида "каталогХХХ", где ХХХ - последовательные номера в диапазоне от 0 до 999, но не обязательно весь диапазон, например, от 6 до 155. При этом ХХХ - всегда три знака, стало быть

Конструкция for и "развёртывание фигурных скобок" (brace expansion - ABSG, ch.36, p.528)?

#start - начальный номер, finish - конечный
for i in {$start..$finish}; do ... ; done


Не пойдет! Потому что "развертывание" не поддерживает использование переменных, и $i примет текстовое значение "{начальный_номер..конечный_номер}" вместо ожидаемого набора чисел в нужном интервале.

Может вернуться ко временам DOS и сделать три вложенных цикла? Можно, и оно даже будет работать:

for i in {0..9}
  for j in {0..9}
    for k in {0..9}
      if [ $i$j$k -lt $start ] || [ $i$j$k -gt $finish ] then break
      mkdir каталог$i$j$k
...

Но зачем крутить лишние циклы и делать кучу лишних проверок на попадание в диапазон? В общем, команда seq рулит! Потребовалось некоторое время, чтобы вспомнить формат pfintf-a, но оно того стоило.

Сначала попробовал с ключом -w - выровнять ширину: если числа в последовательности имеют разную ширину, например "1" и "123", то меньшие будут дополняться ведущими нулями - для диапазона 1..111 "1" превратится в "001", "10" - в "010". Чудесно! Чудесно? Мне-то надо, чтобы было всегда три знака, независимо от конечного значения, а здесь три знака будут только если конечное значение трехзначное, увы. (с тоской вспоминаю Clarion, где такие вещи решались на "раз-два")

Что ж, раз ключ -w не подходит, попробуем поиграться с -f - формат вывода. А вот это - то, что доктор прописал:

for i in $( seq -f %03g 0 $max_dir_number )
do
    dir_name="каталог$i"
    mkdir $dir_name
    chown $owner_name:$owner_group $dir_name
    chmod 777 $dir_name
done


формат %03g как раз делает то, что я хочу: дополняет нулями слева (0), до трех знаков (3). Честно скажу, не помню, для чего суффикс "g", я тупо взял его из подобного примера. Но работает именно так, как надо.

среда, 20 августа 2014 г.

SAMBA: несколько полезных команд по работе с...

1. добавить пользователя в группу

net rpc group addmem группа пользователь -U админ -S сервер_каталога

ГРУППУ и ПОЛЬЗОВАТЕЛЯ можно указывать без домена, если явно указываешь СЕРВЕР_КАТАЛОГА. Впрочем, я не проверял, можно ли не указывать СЕРВЕР_КАТАЛОГА, но просто указать домен.
АДМИН - пользователь, имеющий права на изменение групп и учетных записей пользователей


Почему rpc, а не ads? Потому что с ads что-то не получалось, а по rpc прошло "со свистом". Разбираться дальше было лень

2. удалить пользователя из группы

аналогично, но заменить addmem на delmem

3. удобный список групп, в которых состоит пользователь

id домен\\пользователь|sed 's/\,/\n/g'|sort -t \\ -k 2


Вывод будет примерно такой:
 
$ getent passwd contoso\\gates_wh
CONTOSO\gates_wh:*:129125:100513:Gates, William Henry, III:/home/CONTOSO/gates_wh:/bin/false
 
$ id contoso\\gates_wh|sed 's/\,/\n/g'|sort -t \\ -k 2
113723(CONTOSO\acl_cnt304421_p-sam4200sizpi)
129126(CONTOSO\acl_cnt304421_p-sam4200sizpi-def)
122960(CONTOSO\acl_cnt30srv012_031rw)
122867(CONTOSO\acl_cnt30srv012_o)
113709(CONTOSO\acl_cnt30srv041_p022f)
123333(CONTOSO\acl_cnt30srv041_p056f)
122903(CONTOSO\acl_cnt30srv042_valid)
122900(CONTOSO\acl_cnt30srv201-l-r)
uid=129125(CONTOSO\gates_wh) gid=100513(CONTOSO\domain users) группы=100513(CONTOSO\domain users)
122893(CONTOSO\rbl_user-gpo9)

То есть, sed-ом заменяем запятые, которые выдает стандартная id, перечисляя список групп, на переводы строки, чтобы группы вывелись в столбик.
Дальше сортируем полученный столбец. Можно было, в принципе, вырезать GID-ы, но лень, поэтому, чтобы сортировать не по GID-ам, а по названиям групп, объявляем символ "\" разделителем полей (это будет "\" между ДОМЕНОМ и ПОЛЬЗОВАТЕЛЕМ), и сортируем не с начала строки, а по второму полю.

понедельник, 11 августа 2014 г.

sed: чистка логов

Сошел с ума SARG: после настройки авторизации в сквиде через AD в логах стали появляться записи вида:

что-то-там ... домен\имя_пользователя ...

SARG, видя такое безобразие, в итоговом отчете всем пользователям присваивает имя "домен", из-за чего отчет становится нечитаемым.

Пришлось думать, как почистить логи прежде чем скормить SARG-у

cat лог|sed 's/домен\\//'|sed 's/.*TCP_DENIED.*$//'|sed '/^$/d'

первый sed убирает из лога упоминания про "домен\"
второй убирает все строки, где пользователь получил отказ в доступе
третий убирает оставшиеся пустые строки.

Наверное, будет логичнее совместить второй и третий и поставить их перед первым, чтобы не делать лишние замены "домен\" в строках, которые всё равно будут удалены.

Да, более правильной и быстрой оказалась такая конструкция:

cat лог|sed '/^.*TCP_DENIED.*$/d'|sed 's/[дД][оО][мМ][еЕ][нН]\\//'

Возможно, удалось бы совместить обе замены в одну, но уже лень.

пятница, 8 августа 2014 г.

HDD-бокс Zalman ZM-VE300

Приобрел эту интересную штуку.
Описание на сайте производителя.

Существует и более дорогая модель ZM-VE400, но мне не трудно оперировать управляюшим колесиком (на фото - ближний к зрителю угол, справа), поэтому переплачивать за сенсорные кнопки и сомнительную для частного использования возможность установки пароля я не хочу.

Чем же так хорош этот бокс, что за него в розницу отдал 2100 рублей?

суббота, 19 июля 2014 г.

Антивирусная защита файловых серверов Samba с помощью ClamFS


Существуют всякие коммерческие решения для файловых серверов под линуксом, но лично мне как-то впадлу покупать лицензию у Касперского или Данилова, учитывая всякие активации, верификации и прочую проприетарщину.

Воспользуемся, как описано здесь, кошерным ClamAV и егонной ClamFS. Я внес некоторые изменения в то, что предложил "ИТ Специалист", но в целом более чем благодарен ему за подробное и доходчивое объяснение что к чему.

1. устанавливаем нужное:

sudo apt-get install clamav clamfs


2. самбовские шары живут у меня в var, пусть и clamfs живет там же (самба еще не настроена, поэтому создаю каталог и для нее)

sudo mkdir -p /var/clamfs/data
sudo mkdir /var/samba
sudo chmod -R 777 /var/clamfs
 
Попутно создаем каталог для карантина
 
sudo mkdir /var/clamfs/quarantine

Он будет использован отдельной шарой специально для администратора, поэтому создаем его не в общем каталоге для самбы, а отдельно.

3. создаем файл конфигурации ClamFS

Распаковываем /usr/share/doc/clamfs/clamfs-sample.xml.gz в /etc/clamav/clamfs.xml любым удобным способом, я, например, предпочитаю mc.

В полученном файле правим строчку

<filesystem mountpoint="/var/samba" nonempty="yes" public="yes" root="/var/clamfs/data" />

mountpoint - куда будет монтироваться контролируемая файловая система
root - где она находится по факту.
nonempty - довольно опасный параметр, он позволит смонтировать защищенную ФС в указанный каталог даже если он не пустой, поэтому лучше не держать в настоящей /var/samba ничего - при несмонтированной ClamFS этот каталог должен быть пуст.

То есть, каталоги /var/clamfs/data и /var/samba будут содержать одно и то же, но файлы, помещаемые (локально или по сети) в /var/samba будут на лету проверяться демоном ClamD.

Настраиваем протоколирование:

<log method="file" filename="/var/log/clamav/clamfs.log" verbose="no" />

4. Во избежание неприятностей с AppArmor, делаем рекомендованное:

Теперь о ложке дегтя. Как выяснилось, в Ubuntu 10.04 ClamFS при включенном Apparmor полностью блокирует все файлы на чтение. Выходов из этой ситуации несколько, так как файловый сервер обычно является сугубо внутрисетевым ресурсом, то мы пойдем по наиболее простому пути и просто удалим профиль clamd для Apparmor:

sudo rm /etc/apparmor.d/usr.sbin.clamd

5. Устанавливаем и настраиваем самбу по своему вкусу, создавая каталоги для защищаемых шар внутри /var/samba, который, как мы помним, на самом деле - защищаемое /var/clamfs/data. Дополнительно создаем шару для карантина, указав к ней путь /var/clamfs/quarantine - эта шара не будет защищена и должна быть доступна только администраторам. Остальные пользователи не должны даже подозревать об ее существовании. Реализация - на ваше усмотрение. Например, как в оригинальной статье создать отдельного пользователя "администратор антивирусной безопасности"

6. Теперь самое вкусное. Зараженный файл, заблокированный ClamFS, будет недоступен пользователям, однако продолжит валяться в общедоступном защищенном каталоге. А это плохо. Настроим регулярное сканирование.

/etc/clamav/clamscan:

#!/bin/sh
/usr/bin/clamscan -r /var/clamfs/data --move=/var/clamfs/quarantine

Добавим его периодический запуск в кронтаб:

/etc/crontab:

0 19    * * *   root    /etc/clamav/clamscan

Теперь в 7 вечера вся наша порнография будет сканироваться и найденные бяки будут переноситься в каталог карантина.

7. Если мы работаем через прокси, то будет не лишним добавить настройки в /etc/clamav/freshclam.conf:

#(например: myproxy.mydomain.ru) 
HTTPProxyServer FQDN_вашего_прокси

#(если пользователь доменный, используем одинарный бэкслеш!) 
HTTPProxyUsername [домен\]пользователь

HTTPProxyPassword пароль_этого_пользователя


Порт прокси по умолчанию 8080, если у вас отличается, добавьте строчку

HTTPProxyPort номер_вашего_порта


Обратите внимание: freshclam - параноик и не захочет работать, если в конфиге указан пароль для подключения к прокси. Для полного счастья ему надо, чтобы разрешения на файл конфигурации в таком случае были не выше чем 700. chmod в помощь!
Если же авторизация на прокси не предусмотрена или делается не через имя/пароль, то достаточно просто указать имя узла прокси-сервера и, в случае нестандарта, номер порта.

Дополнительные несущественные (на мой взгляд) моменты можно посмотреть в исходной статье.

no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory

После установки Ubuntu Server 14.04 и его штатной Samba при логине стал появляться такой вот неприятный глюк. Утечки памяти - это всегда неприятно.
Виновата библиотека авторизации libpam-smbpass.

лечение:

sudo apt-get remove libpam-smbpas

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

Использование этой библиотеки прописано в /etc/pam.d/common-password. В сети есть советы "удалить строчку с pam-smbpass.so" в этом файле, но лучше всё же штатно снести саму библиотеку до тех пор, пока ребята из Самбы не разберутся с ней. Тем более, что удаление строчки всё равно не помогает. :-)

По материалам.