четверг, 29 июля 2010 г.

ACL (getfacl, setfacl)

Порядок установки ACL:
1.Устанавливаем маску максимальных полномочий, она определяется из тех максимальных полномочий, которые должны быть у пользователя или группы на ресурс
2.Устанавливаем или модифицируем необходимые ACL с опцией отменяющей изменение маски максимальных полномочий
3.Удаляем  все или необходимые ACL записи
Важно!
1.ACL никоим образом не влияет на права доступа для владельца

2.Изменение маски максимальных полномочий отражается на группе по умолчанию, т.е права определённые маской максимальных полномочий определяются и для группы по умолчанию
3.Изменение прав доступа для категории o(other) в ACL влияет на категорию o(other) по умолчанию
При установки ACL для многих групп (u,g,o) в качестве разделителя используется запятая(,). 

Установка доступа rwx для пользователя user на каталог 1
setfacl -R -m u:user:rwx /safe/samba/users/1
- R - рекурсивно
- m - изменение
Установка доступа rwx для пользователя user на каталог 1 по умолчанию (то есть все файлы будут создаваться с указанным доступом)
setfacl -R -d -m u::rwx,g::---,o::---,u:user:rwx /safe/samba/users/1
посмотреть их можно
[root@redhat ~]# getfacl /safe/samba/users/1
getfacl: Removing leading '/' from absolute path names
# file: safe/samba/users/1
# owner: telemarketing1
# group:tele
user::rwx
user:user:rwx
user:telemarketing1:rwx
group::---
mask::rwx
other::---
default:user::rwx
default:user:telemarketing1:rwx
default:group::---
default:mask::rwx
default:other::---
Нужные ключи:
-b – удаляет все установленные ACL
-m   – добавляет и модифицирует существующие записи ACL
-M - добавляет и модифицирует существующие ACL взятые из указанного файла
-n – не изменяет существующую маску максимальных полномочий при установке ACL
-x – удаляет конкретную запись ACL
-X – удаляет записи ACL взятые из указанного файл

-k - удаляет значения по умолчанию (Default ACL)
-d - вывод (задание) только значения по умолчанию Default ACL
-a Вывод ACL без Default ACL.

При установке ACL важен порядок следования опций, опция –n должна следовать перед опцией –m или -x
Важно!
Обязательно не забывайте использовать опцию –n при установке, модификации или удалении существующих ACL, так как при добавлении, модификации или удалении ACL без опции –n происходит изменение максимальной маски полномочий в сторону уменьшения или увеличения, в зависимости от прав доступа.
Пример почему это важно
Удалим ACL установленные для пользователя tests:
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw-         # effective: r--
user:tests:rw-          # effective: r--
group::r--
mask::r--
other::r--
fdesktop1# setfacl -n -x u:tests:rw test.file
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw-         # effective: r--
group::r--
mask::r--
other::r--
Сделаем тоже самое, только без опции –n для демонстрации того, как меняется максимальная маска полномочий:
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw-         # effective: r--
user:tests:rw-          # effective: r--
group::r--
mask::r--
other::r--
fdesktop1# setfacl -x u:tests:rw test.file
fdesktop1# getfacl test.file
# file: test.file
# owner: root
# group: 0
user::rw-
user:atrium:rw-
group::r--
mask::rw-
other::r--
Как можно видеть максимальная маска полномочий изменилась в сторону увеличения, что соответственно может привести к проблемам с безопасностью, поэтому будьте внимательны.

Продвинутое использование:
Cохранить и восстановить списки контроля доступа (архивирование данных или переносе в другую систему например)
# getfacl -R --skip-base . > backup.acl
# setfacl --restore=backup.acl
Если для некоторого файла или каталога требуется установить разрешения, которые сходны с уже имеющимися, то можно поступить так (опции, написанные с заглавной буквы, применяются при использовании в качестве ввода результата работы другой утилиты).
#  getfacl -a dir | setfacl -M - dir
#  getfacl file1 | setfacl -S- file2
Чтобы удалить разрешение, используйте опцию -х. Например, удалим права для группы sales:
# setfacl -x g:sales test_acl
Опция -m модифицирует (а фактически сохраняет) старые разрешения, добавляя к ним  новые. В некоторых случаях проще установить новые права на файл или каталог, полностью затерев старые. Для этих целей используется флаг -b.
# setfacl -m u:fedja:rw,g:netadmin:rwx test_acl_file
Установленную для каталога маску доступа, используемую по умолчанию, можно изменить так:
# setfacl -m default:u::rx acldir

среда, 21 июля 2010 г.

linux автоматическая авторизация в разных системах

#!/usr/bin/expect -f
set timeout 20
spawn /usr/kerberos/bin/kinit -r 30d user@KTDOMAIN
expect "Password for workuser@KTDOMAIN:" { send "password\n" }
interact

скрипт получает тикет от Active Directory, очень важна строка "set timeout 30" (например задержки в 20 секунд не хватает поэтому нужно проверять хватает ли времени) - скрипт не будет без нее работать в crontab.

если в скрипте не только еxpect, то есть есть еще куча команд (использовал источник
http://stackoverflow.com/questions/10393848/using-expect-in-bash-script)

#!/bin/bash
cd /var/www/domains/bridge.com/
echo "Updating Source start"
expect <<- DONE
  set timeout  -1
  spawn git pull
  expect "*?assword:*"
  send -- "b15\r"
  send -- "\r"
  expect eof
DONE
echo "Updating Source done"

ясное дело если есть переменные (смотрим вышеприведенный источник нужно писать в начале скрипта #!/usr/bin/env bash)

но если сессия должна остаться и вы будете дальше что-то вводить (interact), то конечно нужно использовать конструкции вроде (источник http://blog.omnidarren.com/2011/04/quick-and-dirty-telnet-script-for-switches-in-bash/)

#!/bin/bash
(expect -c "
set timeout  20
spawn /usr/bin/telnet $1
expect \"Username:\"
send \"user\r\"
expect \"Password:\"
send \"pass\r\"
expect \">\"
send \"enable\r\"
expect \"Password:\"
send \"pass_en\r\"
interact
exit
")



среда, 14 июля 2010 г.

загрузка модулей ядра при старте (modprobe preload)

/etc/modprobe.preload: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line.  Comments begin with
# a `#', and everything on the line after them are ignored.
# this file is for module-init-tools (kernel 2.5 and above) ONLY
# for old kernel use /etc/modules

intel_agp
evdev
ip_conntrack_ftp

как видим файл называется /etc/modprobe.preload, старый /etc/modules уже не используется.
ip_conntrack_ftp - используется для коректной работы с пасивным ftp iptables, файла iptables-config mandriva не содержит

в redhat es 5.2 файлик такой есть /etc/sysconfig/iptables-restore там модули задаются через пробел в строке IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp"

понедельник, 5 июля 2010 г.

обмен трафик машинами, которы обе за NAT

./pwnat <-s|-c> <args> (-s, -c - клиент и сервер)
Для клиента
: [local ip] <local port> <proxy host> [proxy port (def:2222)] <remote host> <remote port>
Для сервера (можно помимо прочего указать доверенные хосты и порты)
: [local ip] [proxy port (def:2222)] [[allowed host]:[allowed port]...]