четверг, 31 января 2013 г.

Использование Proxy в APT

Всё в принципе просто, хотя тырнет информацией не блещет


$ cat /etc/apt/apt.conf.d/99proxy
Acquire::http
{
  Proxy "http://10.10.10.1:3128/";
  Proxy::ppa.launchpad.net "DIRECT";
}

Все репозитории, кроме тех, для которых прописано "DIRECT" - будут идти через прокси.

воскресенье, 13 января 2013 г.

Nagios NRPE and SELinux (or the tale of check_mount.pl)

После перехода одного клиента с RHEL6 на репозитоий от Scientific Linux 6 стали приходить нотификации от nagios - check_mount.pl отказывался видеть примонтированную шару, хотя она была и

# /usr/lib64/nagios/plugins/check_mount.pl -m /someshare
/someshare is mounted!
рапотровал что всё ok.

Однако 
# /usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_mount
/someshare is not mounted!
валился.

Стал разбираться и нашёл причину - SELinux (ну кто бы сомневался).

Игры с restorecon не помогли. Возможно ребут с Relabeling помог бы (http://www.centos.org/docs/5/html/5.2/Deployment_Guide/sec-sel-fsrelabel.html), но перезагружать сервак не хотелось, да и просто fixfiles делать тоже не улыбалось.

Из несотыковок со старым сервером (там где ещё был чистый RHEL6) было
[root@new ~]# ps auxZ | grep nrpe|grep -v grep
unconfined_u:system_r:nrpe_t:s0 nrpe     23079  0.0  0.0  40944  1312 ?        Ss   Jan11   0:05 /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d
[root@old ~]# ps auxZ | grep nrpe|grep -v grep
system_u:system_r:nrpe_t:s0     nrpe      1618  0.0  0.0  40888  1116 ?        Ss    2012   0:23 /usr/sbin/nrpe -c /etc/nagios/nrpe.cfg -d

Но ошибки в логах были про типы.

Поочерёдным разрешением был выведен полный лог:
type=AVC msg=audit(1357998818.538:612779): avc:  denied  { read open } for  pid=1779 comm="check_mount.pl" name="bash" dev=dm-0 ino=913934 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:shell_exec_t:s0 tclass=file
type=AVC msg=audit(1357999043.623:612812): avc:  denied  { execute } for  pid=2450 comm="check_mount.pl" name="bash" dev=dm-0 ino=913934 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:shell_exec_t:s0 tclass=file
type=AVC msg=audit(1357999147.645:612833): avc:  denied  { execute_no_trans } for  pid=2571 comm="check_mount.pl" path="/bin/bash" dev=dm-0 ino=913934 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:shell_exec_t:s0 tclass=file
type=AVC msg=audit(1357999256.580:612863): avc:  denied  { getattr } for  pid=3124 comm="sh" path="/bin/bash" dev=dm-0 ino=913934 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:shell_exec_t:s0 tclass=file
type=AVC msg=audit(1357999256.581:612864): avc:  denied  { execute } for  pid=3125 comm="sh" name="mount" dev=dm-0 ino=913990 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:mount_exec_t:s0 tclass=file
type=AVC msg=audit(1357999256.581:612865): avc:  denied  { getattr } for  pid=3125 comm="sh" path="/bin/mount" dev=dm-0 ino=913990 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:mount_exec_t:s0 tclass=file
type=AVC msg=audit(1357999256.581:612866): avc:  denied  { getattr } for  pid=3125 comm="sh" path="/bin/mount" dev=dm-0 ino=913990 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:mount_exec_t:s0 tclass=file
type=AVC msg=audit(1357999376.586:612887): avc:  denied  { read open } for  pid=3252 comm="sh" name="mount" dev=dm-0 ino=913990 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:mount_exec_t:s0 tclass=file
type=AVC msg=audit(1357999376.586:612888): avc:  denied  { read } for  pid=3252 comm="sh" name="mount" dev=dm-0 ino=913990 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:mount_exec_t:s0 tclass=file
type=AVC msg=audit(1357999376.586:612889): avc:  denied  { read } for  pid=3252 comm="sh" name="mount" dev=dm-0 ino=913990 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:mount_exec_t:s0 tclass=file
type=AVC msg=audit(1357999481.484:612914): avc:  denied  { execute_no_trans } for  pid=3626 comm="sh" path="/bin/mount" dev=dm-0 ino=913990 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=system_u:object_r:mount_exec_t:s0 tclass=file
type=AVC msg=audit(1357999594.918:612928): avc:  denied  { setattr } for  pid=4172 comm="mount" name="mtab" dev=dm-0 ino=655655 scontext=unconfined_u:system_r:nagios_services_plugin_t:s0 tcontext=unconfined_u:object_r:etc_runtime_t:s0 tclass=file
Потом
cat nrpe|audit2allow -M nrpe
semodule -i nrpe.pp
(Кстати теперь audit2allow в пакете policycoreutils-python.)
И получаем такой модуль
# cat ~/nrpe.te
module nrpe 1.0;
require {
type shell_exec_t;
type etc_runtime_t;
type mount_exec_t;
type nagios_services_plugin_t;
class file { execute setattr read execute_no_trans getattr open };
}
#============= nagios_services_plugin_t ==============
allow nagios_services_plugin_t etc_runtime_t:file setattr;
#!!!! This avc is allowed in the current policy
allow nagios_services_plugin_t mount_exec_t:file { read execute open getattr execute_no_trans };
#!!!! This avc is allowed in the current policy
allow nagios_services_plugin_t shell_exec_t:file { read execute open getattr execute_no_trans };
 Ошибки пропали и nrpe заработал.

Хотя это не сказать что правильное решение. Вероятно После обновления поменялись политики, но опять же - разница в версиях минорна.

wget http://ftp.scientificlinux.org/linux/scientific/6x/SRPMS/vendor/selinux-policy-3.7.19-155.el6_3.14.src.rpm
wget http://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/selinux-policy-3.7.19-93.el6_1.2.src.rpm
rpm2cpio selinux-policy-3.7.19-93.el6_1.2.src.rpm | cpio -idmv
tar xvf serefpolicy-3.7.19.tgz
mv serefpolicy-3.7.19 serefpolicy-3.7.19_old
rm serefpolicy-3.7.19.tgz
rpm2cpio selinux-policy-3.7.19-155.el6_3.14.src.rpm | cpio -idmv
tar xvf serefpolicy-3.7.19.tgz
vimdiff  serefpolicy-3.7.19/policy/modules/services/nagios.te serefpolicy-3.7.19_old/policy/modules/services/nagios.te

И... И никакой разницы.

И тут приходит мысль - сервер то был ещё давно и ставил его не я.
Смотрим что есть у selinux
# semanage fcontext -l|grep nagios
и нет его
# rpm -q --whatprovides /usr/lib64/nagios/plugins/check_mount.pl
file /usr/lib64/nagios/plugins/check_mount.pl is not owned by any package
Файл не из репозитория и соответственно к нему нет политики.
И вот как оно работало раньше...

В общем, попробовав все типы для плагинов взятые из semanage "fcontext -l|grep nagios" я понял, что надо либо наследоваться от уже существующего типа и добавлять роли вроде mount_exec_t, либо просто установить тип nagios_unconfined_plugin_exec_t.
Лень взяла вверх:
semanage fcontext -a -s system_u -t nagios_unconfined_plugin_exec_t -f -- '/etc/nagios/plugins/check_mount.pl'
restorecon -v check_mount.pl
/usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_mount
Выгружаем наш модуль
semodule -r nrpe
И проверяем
# /usr/lib64/nagios/plugins/check_nrpe -H localhost -c check_mount
/someshare is mounted!
Ну вот так получше.

Заодно написал автору коммент - http://binfalse.de/software/nagios/check_mount-pl/comment-page-1/#comment-417

четверг, 10 января 2013 г.

Resize LVM physical volume


Стандартная процедура, которая обычно не вызывает никаких проблем.
Однако иногда попадаются "интересные" таблицы разделов, из-за который приходится подумать.

Есть proxmox, а на нём виртуалка.

# qemu-img info vm-100-disk-1.qcow2
# qemu-img resize vm-100-disk-1.qcow2 +50G
# qm start 100
Заходим на виртуалку и видим
# fdisk -l /dev/vda
Disk /dev/vda: 182.5 GB, 182536110080 bytes
16 heads, 63 sectors/track, 353686 cylinders, total 356515840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000df459
   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048      499711      248832   83  Linux
/dev/vda2          501758   251656191   125577217    5  Extended
/dev/vda5          501760   251656191   125577216   8e  Linux LVM
Разница между началом extended и первым logical - всего 2 сектора, при стандартных для fdisk - 2048. Ну и конец 1й партиции 499711, а начало второй - сразу 501758.

Ну вот мы как обычно делаем
1) удаляем старую партицию - d 5
2) создаём новую - n 5 - и тут видим, что начала свежесозданной партиции не будет совпадать с началом только что удалённой. фиаско.

Но всё на самом деле оказалось просто - надо было пересоздать ещё и extended.
И всё красиво подогналось - 501760-2048=499712.
   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048      499711      248832   83  Linux
/dev/vda2          499712   356515839   178008064    5  Extended
/dev/vda5          501760   356515839   178007040   8e  Linux LVM
Ну а дальше как обычно:

1) partprobe или ребут
2) pvs, vgs, lvs для проверки
3) pvresize /dev/vda5
4) lvresize main/opt -L+50g
5) umount /opt
6) e2fsck -f /dev/mapper/main-opt
7) resize2fs /dev/mapper/main-opt
8) mount /opt
9) df -h, pvs, vgs, lvs для проверки

Избранное сообщение

Запуск "Петька и Василий Иванович спасают галактику" в Linux через wine

Совсем недавно, почему-то вспомнил про серию "Петька и Василий Иванович". К своему удивлению, обнаружил, что первую и вторую част...