<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.linuxformat.ru/wiki/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF112%3ADrBrown3</id>
		<title>LXF112:DrBrown3 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.linuxformat.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=LXF112%3ADrBrown3"/>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF112:DrBrown3&amp;action=history"/>
		<updated>2026-05-13T03:53:20Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.19.20+dfsg-0+deb7u3</generator>

	<entry>
		<id>http://wiki.linuxformat.ru/wiki/index.php?title=LXF112:DrBrown3&amp;diff=9143&amp;oldid=prev</id>
		<title>Crazy Rebel: Новая: ==Наследить для аудита==  : ''Sudo'' и ''auditctl'' Вооружившись Fedora 9 и насушив сухарей, рассмотрим пару способов ...</title>
		<link rel="alternate" type="text/html" href="http://wiki.linuxformat.ru/wiki/index.php?title=LXF112:DrBrown3&amp;diff=9143&amp;oldid=prev"/>
				<updated>2009-11-29T12:14:40Z</updated>
		
		<summary type="html">&lt;p&gt;Новая: ==Наследить для аудита==  : &amp;#039;&amp;#039;Sudo&amp;#039;&amp;#039; и &amp;#039;&amp;#039;auditctl&amp;#039;&amp;#039; Вооружившись Fedora 9 и насушив сухарей, рассмотрим пару способов ...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Наследить для аудита==&lt;br /&gt;
&lt;br /&gt;
: ''Sudo'' и ''auditctl'' Вооружившись Fedora 9 и насушив сухарей, рассмотрим пару способов записать действия системного администратора.&lt;br /&gt;
&lt;br /&gt;
Постоянная запись действий системного администратора – список, что было сделано (когда и кем) – может быть бесценна, если возникли неполадки и вы хотите знать, кого в этом&lt;br /&gt;
винить, или если вы собираете доказательства взлома. В некоторых&lt;br /&gt;
компаниях аудит – обязательная часть политики безопасности. Здесь&lt;br /&gt;
я предложу вам несколько способов обеспечить оставление следов от&lt;br /&gt;
любого важного действия в файлах журналов.&lt;br /&gt;
&lt;br /&gt;
Первый подход – запретить вход в систему от имени суперпользователя-root, сделав так, чтобы все действия с привилегиями администратора выполнялись через команду ''sudo''. Если ''sudo'' соответствующим образом настроена, то все команды, выполняемые от имени '''root''', будет записываться в журнальный файл, обычно '''/var/log/secure'''.&lt;br /&gt;
&lt;br /&gt;
Чтобы избежать вольготного доступа кому ни попадя, ограничим использование ''sudo'' членами группы '''wheel'''. Итак, для начала настроим ''sudo'' так, чтобы члены группы '''wheel''' могли запустить любую команду&lt;br /&gt;
с правами '''root'''. Соответствующая строка в файле '''sudoers''' будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
 %wheel ALL=(ALL) ALL&lt;br /&gt;
&lt;br /&gt;
Возможно, эта строка уже там, и ее надо просто раскомментировать. Затем занесем в группу '''wheel''' хотя бы одного пользователя. Я добавил пользователя '''chris''' в нее таким образом:&lt;br /&gt;
&lt;br /&gt;
 # usermod -G wheel chris&lt;br /&gt;
&lt;br /&gt;
Теперь я могу войти в систему как пользователь '''chris''' и выполнять отдельные команды с привилегиями '''root''' с помощью ''sudo'' таким образом:&lt;br /&gt;
&lt;br /&gt;
 $ sudo /usr/sbin/useradd ellie&lt;br /&gt;
 [sudo] password for chris:&lt;br /&gt;
&lt;br /&gt;
В этом примере я создаю нового пользователя. Пароль, который у меня запрашивается – мой собственный, а не пароль '''root'''.&lt;br /&gt;
&lt;br /&gt;
Убедившись, что это работает (но не раньше!), можете запретить непосредственный вход в систему под пользователем '''root''', заблокировав его пароль:&lt;br /&gt;
&lt;br /&gt;
 $ sudo passwd -l root&lt;br /&gt;
 Locking password for user root.&lt;br /&gt;
 passwd: Success&lt;br /&gt;
&lt;br /&gt;
Теперь пользователю '''root''' в систему не войти. Нельзя даже воспользоваться командой ''su'' для работы от имени '''root''': все действия придется выполнять с помощью ''sudo''. (В Ubuntu этот механизм установлен&lt;br /&gt;
по умолчанию.) При всей нудности, тут есть и ощутимые преимущества. Во-первых, вы всем объявляете: «Я буду работать от имени root». Во-вторых, число ваших покушений на команды с привилегиями '''root'''&lt;br /&gt;
сводится к минимуму. В-третьих, ''sudo'' зафиксирует в файле журнала все выполняемые команды. Пусть, например, мне нужно изменить настройки ''Apache''. Это можно сделать так:&lt;br /&gt;
&lt;br /&gt;
 $ sudo vi /etc/httpd/conf/httpd.conf&lt;br /&gt;
&lt;br /&gt;
В файл журнала '''/var/log/secure''' запишутся следующие строки:&lt;br /&gt;
&lt;br /&gt;
 Aug 18 11:51:54 fedora9 sudo: chris : TTY=pts/2 ; PWD=/etc/&lt;br /&gt;
 httpd/conf ; USER=root ; COMMAND=/bin/vi /etc/httpd/conf/&lt;br /&gt;
 httpd.conf&lt;br /&gt;
&lt;br /&gt;
Итак, теперь мы знаем, кто и когда влез в файл '''httpd.conf''' и с какого терминала он зашел в систему.&lt;br /&gt;
&lt;br /&gt;
Если вам нужен более тонкий контроль над процессом аудита, возможно, вы захотите поэкспериментировать с системой аудита, встроенной в ядро. С ее помощью можно наблюдать за любым файлом в системе и журналировать для него все операции чтения, записи, выполнения или изменения прав доступа. Можно отслеживать все&lt;br /&gt;
системные вызовы указанного процесса или пользователя или, например, записывать каждую операцию '''open()''', завершившуюся с ошибкой. А можно отслеживать неправомерное поведение пользователей или&lt;br /&gt;
собирать доказательства нарушений политики безопасности.&lt;br /&gt;
&lt;br /&gt;
===Любишь одно, полюби и другое===&lt;br /&gt;
&lt;br /&gt;
Предположим, мы заметили, что кто-то сканирует порты компьютеров локальной сети. У нас установлена утилита сканирования портов ''Nmap''; вопрос в том, использует ли ее кто-нибудь. Командой ''auditctl''&lt;br /&gt;
мы просим ядро отслеживать любые попытки запустить ''Nmap'' таким&lt;br /&gt;
образом:&lt;br /&gt;
&lt;br /&gt;
 # auditctl -w /usr/bin/nmap -p x -k port-scan&lt;br /&gt;
&lt;br /&gt;
Проанализируем команду. Аргументы '''-w /usr/bin/nmap''' определяют файл – объект наблюдения. Здесь нельзя использовать шаблоны: только обычные имена файлов. Аргументы '''-p x''' определяют действие,&lt;br /&gt;
которое надо отследить – некая комбинация из '''r''' (чтение),''' w''' (запись), '''x'''&lt;br /&gt;
(исполнение) или '''a''' (изменение атрибута). Наконец, аргументы '''-k port-scan''' задают ключ для фильтрации (произвольная строка): он будет добавлен к записи в журнале, чтобы запись можно было найти командой ''ausearch'' или, конечно, ''grep''.&lt;br /&gt;
&lt;br /&gt;
Далее мы проверяем файл журнала, отыскивая там записи, содержащие наше ключевое слово '''port-scan''':&lt;br /&gt;
&lt;br /&gt;
 # ausearch -k port-scan&lt;br /&gt;
 ----&lt;br /&gt;
 time-&amp;gt;Mon Aug 18 21:15:42 2008&lt;br /&gt;
  type=PATH msg=audit(1219072542.201:117): item=1 name=(null)&lt;br /&gt;
  inode=354635 dev=fd:00 mode=0100755 ouid=0 ogid=0&lt;br /&gt;
  rdev=00:00 obj=system_u:object_r:ld_so_t:s0&lt;br /&gt;
  type=PATH msg=audit(1219072542.201:117): item=0 name=”/usr/&lt;br /&gt;
  bin/nmap” inode=33539 dev=fd:00 mode=0100755 ouid=0 ogid=0&lt;br /&gt;
  rdev=00:00 obj=system_u:object_r:traceroute_exec_t:s0&lt;br /&gt;
  type=CWD msg=audit(1219072542.201:117): cwd=”/home/ellie”&lt;br /&gt;
  type=EXECVE msg=audit(1219072542.201:117): argc=2&lt;br /&gt;
  a0=”nmap” a1=”192.168.0.1-20”&lt;br /&gt;
  type=SYSCALL msg=audit(1219072542.201:117): arch=40000003&lt;br /&gt;
  syscall=11 success=yes exit=0 a0=83096e0 a1=83079d8&lt;br /&gt;
  a2=830fd48 a3=0 items=2 ppid=2766 pid=2790 auid=0 uid=501&lt;br /&gt;
  gid=501 euid=501 suid=501 fsuid=501 egid=501 sgid=501&lt;br /&gt;
  fsgid=501 tty=pts2 ses=10 comm=”nmap” exe=”/usr/bin/nmap”&lt;br /&gt;
  subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023&lt;br /&gt;
  key=”port-scan”&lt;br /&gt;
&lt;br /&gt;
Весь предыдущий результат был получен при единственном запуске ''Nmap''. Посмотрев внимательно, вы увидите, что пользователь с идентификатором '''501''' запустил команду ''nmap 192.168.0.1-20'' в '''9.15'''&lt;br /&gt;
вечера в понедельник 18 августа. Проверка пользователя с идентификатором '''501''' в файле паролей выявляет нарушителя: это '''ellie''', шалопай, учетную запись которого мы создали ранее на нашем уроке.&lt;br /&gt;
&lt;br /&gt;
Команда ''auditctl'' делает для аудита то же самое, что и команда ''iptables'' для пакетного фильтра – она загружает правила в ядро. Ее синтаксис задает определенный язык правил аудита, точно так же, как&lt;br /&gt;
синтаксис ''iptables'' определяет язык для правил фильтрации пакетов.&lt;br /&gt;
Чтобы посмотреть на чуть более сложный пример, создадим правило аудита, которое запишет в файл журнала все неудачные попытки открыть файл для пользователя '''ellie'''. Правило может выглядеть так:&lt;br /&gt;
&lt;br /&gt;
  # auditctl -a exit,always -S open -F uid=501 -F success=0&lt;br /&gt;
&lt;br /&gt;
Снова разберемся с ним по частям. Мы добавляем ('''-a''') правило к&lt;br /&gt;
списку '''exit''' системного вызова. Данный список просматривается при&lt;br /&gt;
возврате из системного вызова: с его помощью ядро определяет, нужно ли создавать событие аудита. Для аудита мы выбираем системный вызов '''open''' (он используется программой, чтобы получить доступ к&lt;br /&gt;
данным в файле.) Мы отслеживаем только те события для пользователя с идентификатором '''501''' (учетная запись '''ellie'''), для которых системные вызовы завершились неудачно. Вместо идентификатора&lt;br /&gt;
пользователя можно было использовать другие критерии – реальные&lt;br /&gt;
или эффективные идентификаторы пользователя и группы, код выхода системного вызова, индексный дескриптор файла, к которому производится доступ, идентификатор процесса и др.&lt;br /&gt;
&lt;br /&gt;
Чуть позже можно просмотреть содержимое файла журнала аудита, попросив команду ''aureport'' показать нам все события открытия файла, завершившиеся с ошибкой:&lt;br /&gt;
&lt;br /&gt;
  #aureport -f&lt;br /&gt;
  ...&lt;br /&gt;
  14. 19/08/08 18:47:58 /etc/passwd 5 no /bin/cp 0 310&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
Я удалил из результата множество строк, оставив только те, что нам интересны. 19 августа в 6.47 вечера кто-то попытался открыть файл '''/etc/passwd''' командой '''/bin/cp''', и операция завершилась неудачно. В конце строки мы видим идентификатор события ('''310'''), представляющий собой индекс в файле журнала аудита. Используйте аргумент команды ''ausearch'', чтобы забраться поглубже:&lt;br /&gt;
&lt;br /&gt;
 # ausearch -a 310&lt;br /&gt;
 time-&amp;gt;Tue Aug 19 18:47:58 2008&lt;br /&gt;
 type=PATH msg=audit(1219168078.990:310): item=0 name=”/etc/&lt;br /&gt;
 passwd” inode=256011 dev=fd:00 mode=0100644 ouid=0 ogid=0&lt;br /&gt;
 rdev=00:00 obj=system_u:object_r:etc_t:s0&lt;br /&gt;
 type=CWD msg=audit(1219168078.990:310): cwd=”/home/ellie”&lt;br /&gt;
 type=SYSCALL msg=audit(1219168078.990:310): arch=40000003&lt;br /&gt;
    syscall=5 success=no exit=-13 a0=bfd559d8 a1=8201 a2=0&lt;br /&gt;
    a3=8201 items=1 ppid=4954 pid=4978 auid=0 uid=501 gid=501&lt;br /&gt;
    euid=501 suid=501 fsuid=501 egid=501 sgid=501 fsgid=501&lt;br /&gt;
    tty=pts2 ses=33 comm=”cp” exe=”/bin/cp” subj=unconfined_u:&lt;br /&gt;
    unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)&lt;br /&gt;
&lt;br /&gt;
Прошу извинить меня за столь сумбурный результат; но, вглядевшись, вы увидите время и идентификатор пользователя события. Опять '''ellie'''.&lt;br /&gt;
&lt;br /&gt;
Правила аудита, предоставляемые ''auditctl'', действуют только «здесь&lt;br /&gt;
и сейчас» – они не сохранятся после перезагрузки. Чтобы сделать&lt;br /&gt;
правила постоянными, поместите их в файл '''/etc/audit/audit.rules''', считываемый во время старта системы. Правила в этом файле – просто параметры, которые будут переданы ''auditctl''. Например, строка в файле&lt;br /&gt;
'''audit.rules''', соответствующая правилу, с которым мы работали раньше,&lt;br /&gt;
выглядит таким образом:&lt;br /&gt;
&lt;br /&gt;
 -w /usr/bin/nmap -p x -k port-scan&lt;br /&gt;
&lt;br /&gt;
Чтобы узнать больше о системе аудита в Linux, ознакомьтесь с разделами ''man'' для ''auditd, auditd.conf, auditctl, aureport'' и ''ausearch''. Зайдите на сайт http://www.intersectalliance.com; утилита ''Snare'' предоставляет графический интерфейс для построения наборов правил аудита и просмотра&lt;br /&gt;
результатов. '''LXF'''&lt;br /&gt;
&lt;br /&gt;
'''В таблице ниже показаны основные компоненты системы аудита.'''&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable border=1 cellpadding=5|-&lt;br /&gt;
! Компонент &lt;br /&gt;
! Описание&lt;br /&gt;
|-&lt;br /&gt;
| Ядро &lt;br /&gt;
| Ядро генерирует события аудита в соответствии с заданным набором правил.&lt;br /&gt;
|-&lt;br /&gt;
| auditctl&lt;br /&gt;
|  Пользовательская программа загружает правила поиска событий в ядро. В сущности, это похоже на ''iptables'', которые загружают правила фильтрации пакетов в ядро. Во время загрузки скрипт запуска демона ''auditd'' запускает&lt;br /&gt;
''auditctl'', чтобы загрузить исходный набор правил из файла '''/etc/audit/audit.rules'''.&lt;br /&gt;
|-&lt;br /&gt;
| auditd&lt;br /&gt;
| Этот демон захватывает выходной поток событий аудита из ядра и записывает их в файл журнала, а также может выполнять «ротацию» файлов журнала. Файл конфигурации демона – '''/etc/audit/auditd.conf'''.&lt;br /&gt;
|-&lt;br /&gt;
| aureport&lt;br /&gt;
| Утилита, используемая для создания отчетов из файлов журнала аудита в формате, воспринимаемом человеком. У нее масса флагов, задающих тип отслеживаемых событий и временные интервалы.&lt;br /&gt;
|-&lt;br /&gt;
| ausearch&lt;br /&gt;
| Утилита, отображающая подробные записи о событиях. У нее есть множество опций для выбора интересующих событий.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Изображение: LXF112_49_1.jpg]]&lt;br /&gt;
&lt;br /&gt;
Система аудита ядра фиксирует события в соответствии с правилами, определенными командой ''auditctl''.&lt;br /&gt;
&lt;br /&gt;
===Лучше перебдеть===&lt;br /&gt;
&lt;br /&gt;
Другой способ ограничить использование ''sudo'' группой '''wheel''' – тщательная настройка группывладельца и прав на исполнение исполняемого файла ''sudo'' таким образом:&lt;br /&gt;
&lt;br /&gt;
  # chown root:wheel /usr/bin/sudo&lt;br /&gt;
  # chmod 4110 /usr/bin/sudo&lt;br /&gt;
  # ls -l /usr/bin/sudo&lt;br /&gt;
  ---s--x--- 2 root wheel 148836 2008-03-31 15:13 /usr/bin/sudo&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на необычный режим доступа '''4110'''. Программа выполняет '''setuid''' to&lt;br /&gt;
'''root''' и разрешена пользователю '''root''' и членам группы '''wheel'''. Это гораздо более сильное ограничение доступа, чем строка&lt;br /&gt;
&lt;br /&gt;
 %wheel ALL=(ALL) ALL&lt;br /&gt;
&lt;br /&gt;
в файле '''sudoers''', так как совершенно запрещает ''sudo'' для повышения привилегий пользователей, не являющихся членами группы '''wheel'''.&lt;br /&gt;
&lt;br /&gt;
===Это не для дома!===&lt;br /&gt;
&lt;br /&gt;
Не блокируйте учетную запись '''root''', не будучи абсолютно уверены, что&lt;br /&gt;
есть хотя бы один пользователь, которому разрешено использовать&lt;br /&gt;
''sudo'' для запуска команд с привилегиями '''root''', или что вы способны&lt;br /&gt;
произвести реанимацию. Не мешает также иметь под рукой «огнетушитель» и знать, например, как загрузиться с Live CD.&lt;br /&gt;
&lt;br /&gt;
===Если бы да кабы===&lt;br /&gt;
&lt;br /&gt;
Вдруг бы юристы применили накопленную мудрость к языку ''C''? Конечно, получился бы&lt;br /&gt;
''LEGOL'', но этот был бы совсем другой язык. Например, выражение на языке ''C''&lt;br /&gt;
&lt;br /&gt;
 int i = 1;&lt;br /&gt;
&lt;br /&gt;
преобразуется в ''LEGOL'' как «Сим утвердить и признать всеми присутствующими, что вновь&lt;br /&gt;
созданный объект здесь и далее будет назван (и для ссылки на него будет использоваться) ‘i’&lt;br /&gt;
в рамках, определенных выбранным воплощением ранее представленного патента на пространство имен, оформленного ссылкой, а ‘i’ далее будет типа, объявленного и признанного как целый, и ему напрямую без помех и препятствий будет предоставлено и присвоено значение 1 (ОДИН), и оно будет хранить это значение до тех пор, пока какое-то другое значение в юрисдикции Акта Безопасности Типов не будет предоставлено и присвоено ему».&lt;br /&gt;
&lt;br /&gt;
Следующий пример переведите на ''LEGOL'' сами.&lt;br /&gt;
&lt;br /&gt;
  x += *p++;&lt;br /&gt;
&lt;br /&gt;
А вот еще одна тревожная мысль. Что было бы, если бы Бьерн Страуструп [Bjarne Stroustrup] решил начать с ''COBOL'', а не с ''C''? Мы бы сейчас писали на POSTFIX INCREMENT COBOL BY ONE. И если вы согласны с тем, что&lt;br /&gt;
''C#'' – на самом деле ''C++++'', программисты ''.NET'', наверное, предпочитали бы POSTFIX INCREMENT POSTFIX INCREMENT COBOL BY ONE BY ONE.&lt;br /&gt;
&lt;br /&gt;
Подробности можно найти в книге Стена Келли-Бутла [Stan Kelly-Bootle] «The Computer Contradictionary [Противоречия компьютера]».&lt;/div&gt;</summary>
		<author><name>Crazy Rebel</name></author>	</entry>

	</feed>