Михаил Фленов СанктПетербург бхвпетербург 2010 удк 681 06 ббк 32. 973. 26018. 2 Ф69
Скачать 3.69 Mb.
|
4.12.2. Переадресация Для разрешения переадресации с помощью iptables нужно выполнить сле- дующую команду: iptables -A FORWARD -o ppp0 -j MASQUERADE В данной строке позволяется переадресация на интерфейс ppp0. С помощью параметра -j мы требуем прятать IP-адрес отправителя, то есть включаем маскарадинг Кроме того, можно использовать NAT (Network Address Translation, трансля- ция сетевых адресов). Для чего нужна трансляция? Сетевых IP-адресов на всех не хватает, поэтому локальные сети используют адреса из зарезервиро- ванного диапазона (10.x.x.x или 192.168.x.x). Эти адреса не маршрутизиру- ются и не могут использоваться в Интернете. Но как же тогда использовать Глава 4 162 в таких сетях Интернет? Все пакеты, направляемые на адреса в Интернет, перенаправляются на шлюз, на котором работает NAT. С помощью NAT ад- рес компьютера из локальной сети подменяется интернет-адресом, и пакет продолжает свой путь из локальной сети во всемирную. Таким образом, дос- таточно иметь только один интернет-адрес, который присваивается шлюзу, и вся локальная сеть сможет работать с ресурсами всемирной сети. Для настройки NAT команда может выглядеть следующим образом: iptables -t nat -A FORWARD -o ppp0 -j MASQUERADE Ключ -t nat указывает на необходимость загрузить модуль iptable_nat Если он не загружен, то это легко сделать вручную с помощью следующей команды : modprobe iptable_nat iptable_nat — это модуль ядра, который позволяет сетевому экрану рабо- тать с NAT. 4.13. Замечания по работе Firewall Сетевой экран может как защитить вашу сеть или компьютер от вторжения, так и сделать ее уязвимой. Только внимательное конфигурирование и жесткие за- преты сделают вашу систему надежной, иначе она будет подвержена рискам. Но даже если вы очень вдумчиво все настроили, нет гарантии, что сервер ока- жется в безопасности. Абсолютная неуязвимость сетевого экрана — это миф. И в данном случае проблема заключается не только в программах iptables или ipchains. Сама технология сетевого экрана не гарантирует полной безопасно- сти . На 100% ее никто не может обеспечить, иначе я не писал бы эту книгу. В этом разделе нам предстоит познакомиться с проблемами, с которыми вы можете встретиться во время использования сетевого экрана. Вы должны четко себе их представлять, чтобы знать, откуда может идти угроза. 4.13.1. Внимательное конфигурирование Как я уже сказал, только предельная внимательность может обеспечить отно- сительно спокойный сон администратора и специалиста по безопасности. Давайте разберем наиболее типичные промахи администраторов, это помо- жет избежать появления подобных ошибок в вашей практике. Как вы помните, теперь у нас по три записи для цепочек input и output. Если вам уже не нужен больше доступ по FTP, вы захотите его убрать. Отключив FTP-сервер, не забудьте удалить разрешающие правила из цепочек. Управление доступом 163 В моей практике был случай, когда знакомый администратор не убрал эти записи . Через какое-то время доступ снова был включен, но под разрешен- ным IP-адресом работал уже другой пользователь, и сервер попал под угрозу. Хорошо , что IP-адрес достался человеку, который и не собирался делать ни- чего разрушительного. Очень тяжело, если IP-адреса распределяются динамически и могут регуляр- но меняться. Если в вашей сети используется сервер DHCP (Dynamic Host Configuration Protocol, протокол динамической конфигурации хоста), то нужно позаботиться о том, чтобы компьютеры, которым необходим особый доступ и правила (например, основной шлюз), все же имели жестко закрепленный адрес . Это предотвратит и случайное попадание IP-адреса в недобросовест- ные руки, и потерю привилегий теми, кто в них нуждается. Чтобы четко контролировать IP-адреса, желательно использовать DHCP- сервер , но жестко фиксировать адреса тем, кто нуждается в привилегирован- ном доступе и имеет фильтры в цепочках. Очень распространенная уязвимость — забывчивость администратора. На- строив соединение, администратор банально забывает сохранить таблицу цепочек , и после перезагрузки сервера все настройки теряются. При формировании правил будьте очень внимательны. Некоторые сервисы (такие как FTP), могут требовать для своей работы более одного порта. Если вы не откроете все нужные порты, то можете не получить необходимого ре- зультата При настройке сетевого экрана из графической оболочки будьте особенно осторожны . При неправильных запретах X Window может зависнуть, если не найдет сетевого соединения с ядром Linux. Я конфигурирую свой сервер через удаленное соединение по протоколу SSH. Тут тоже нужно быть аккуратным, потому что одно неверное действие может оборвать подключение и SSH-клиент теряет связь. После этого приходится идти в серверную комнату и настраивать сетевой экран прямо там. Если сер- вер корпоративный и рабочий, то телефон расплавится от звонков возмущен- ных пользователей. Тестируйте все используемые соединения после каждого изменения конфи- гурации сетевого экрана. После внесения нескольких модификаций найти ошибку очень тяжело. Для поиска конфликтных цепочек я сохраняю конфигурацию во временный файл и распечатываю ее. На бумаге намного проще, чем на экране монитора, видеть всю картину в целом. Обращайте внимание на правильность указания параметров (адрес и порт) источника и получателя пакета. Очень часто адми- нистраторы путают, где и что прописывать. Я и сам регулярно путаюсь. Глава 4 164 Мысленно пройдите по каждой записи, анализируя, какие пакеты пропуска- ются , а какие нет. Удобней начинать обследование с цепочки input (когда пакет входит в систему). Затем проверяйте перенаправление (forward) и, на- конец , выход, то есть цепочку output. Таким образом можно проследить пол- ный цикл прохождения пакета. Помните, что после первой найденной записи, соответствующей параметрам пакета, дальнейшие проверки не производятся. При контроле записей, относящихся к TCP, помните, что этот протокол уста- навливает соединение, а значит, необходимо, чтобы пакеты проходили в обе стороны . Протокол UDP не требует подключения, и пакеты можно пропус- кать в одну сторону — input или output. Но бывают исключения, некоторым программам нужен двусторонний обмен даже по протоколу UDP. Если какая-либо программа не работает, то убедитесь, что существуют пра- вила для всех необходимых портов. Некоторые протоколы требуют доступ к двум и более сетевым портам. После этого проверьте, чтобы запись с раз- решением шла раньше фильтра запрещения. Никогда не открывайте доступ к определенному порту на всех компьютерах. Например , если просто добавить фильтр разрешения для входящих на порт 80 пакетов , то в результате этого порт будет открыт на всех компьютерах сети. Но далеко не всем он необходим. При формировании правила указывайте не только порт, но и конкретные IP-адреса, а не целые сети. Это касается сете- вого экрана, который устанавливается на границе вашей сети и Интернета, а не персонального экрана, который стоит на каждом компьютере. Регулярно делайте резервную копию цепочек. Для этого можно сохранять их содержимое в отдельном месте (желательно, на другой компьютер или на сменный носитель). Тогда в случае возникновения проблем можно быстро восстановить работающие цепочки, а тестирование сетевого экрана с новыми параметрами перенести на внерабочее время. 4.13.2. Обход сетевого экрана Сетевой экран не может обеспечить абсолютной безопасности, потому что алгоритм его работы несовершенен. В нашем мире нет ничего безупречного, стопроцентно надежного, иначе жизнь была бы скучной и неинтересной. Как Firewall защищает ваш компьютер или сервер? Все базируется на опре- деленных правилах, по которым экран проверяет весь проходящий через сетевой интерфейс трафик и выносит решение о возможности его пропуска. Но не существует такого фильтра кроме абсолютного запрета, который мо- жет обеспечить полную безопасность, и нет такого правила, которое нельзя обойти Управление доступом 165 На большинстве сетевых экранов очень легко реализовать атаку DoS. Эта атака легко организуется в двух случаях: мощность канала злоумышленника больше, чем у вас; на сервере есть задача, требующая больших ресурсов компьютера, и есть возможность ее выполнить. Сетевой экран — это сложная программная система, которой необходим зна- чительный технический потенциал для анализа всего проходящего трафика, б óльшая часть которого тратится на пакеты с установленным флагом syn, то есть на запрос соединения. Параметры каждого такого пакета должны сравниваться со всеми установленными правилами. В то же время для отправки syn-пакетов больших ресурсов и мощного канала не надо. Хакер без проблем может забросать разрешенный порт сервера syn- пакетами , в которых адрес отправителя подставляется случайным образом. Процессоры атакуемой машины могут не справиться с большим потоком за- просов , которые надо сверять с фильтрами, и выстроится очередь, которая не позволит обрабатывать подключения добропорядочных пользователей. Самое неприятное происходит, если сетевой экран настроен на отправку со- общений об ошибках. В этом случае нагрузка на процессор увеличивается за счет создания и посылки пакетов на несуществующие или не принадлежащие хакеру адреса. Если клиент посылает слишком много данных, которые не могут быть поме- щены в один пакет, то информация разбивается на несколько блоков. Этот процесс называется фрагментацией пакетов. Некоторые сетевые экраны ана- лизируют только первые блоки в сессии, а все остальные считают правиль- ными . Логика такого поведения понятна: если первый пакет верен, то зачем проверять их все и тратить на это драгоценные ресурсы сервера? В против- ном случае от остальных не будет толка, потому что соединение не установ- лено и нарушена целостность информации. Чтобы сетевой экран пропустил данные хакера, пакеты могут быть специаль- ным образом фрагментированы. От подобной атаки можно защититься, толь- ко если Firewall осуществляет автоматическую сборку фрагментированных пакетов и просматривает их в собранном виде. Данной уязвимости были подвержены даже некоторые экраны, используе- мые в Linux, но ошибка уже давно исправлена и сейчас так обойти Firewall нереально Сетевой экран очень часто становится объектом атаки, и не факт, что попыт- ка не окажется успешной. Если злоумышленнику удастся захватить Firewall, то сеть станет открытой как на ладони. В этом случае вас смогут спасти Глава 4 166 от тотального разгрома только персональные сетевые экраны на каждом компьютере . На практике политика безопасности на персональном компью- тере не такая жесткая, но может быть вполне достаточной для предотвраще- ния дальнейшего проникновения хакера в сеть. Атака на сетевой экран не зависит от его реализации. Ошибки бывают как в ОС Linux, так и в маршрутизирующих устройствах с возможностями фильтрации Основная задача, которую решает сетевой экран, — запрет доступа к заведо- мо закрытым ресурсам. Но существуют открытые ресурсы. Например, если необходимо , чтобы WEB-сервер был доступен пользователям Интернета, то сетевой экран не сможет защитить от взлома через ошибки в сценариях на WEB-сервере. Максимальная безопасность приносит некоторые неудобства. Так, я уже го- ворил , что лучше всего запретить любые попытки подключения извне. Со- единение может быть установлено только по инициативе клиента вашей сети, но не удаленного компьютера. В этом случае хакер останется за бортом, но и у пользователей сети могут возникнуть проблемы, например, при попытке подсоединения к FTP-серверу в активном режиме. Этот сервис работает на двух портах: ftp и ftp-data. Пользователь подключается к серверному порту ftp для выполнения команд, но когда вы запрашиваете получение файла, сервер сам инициирует соединение с клиентом, а этого сетевой экран не разрешит. Для FTP эту проблему решили, добавив возможность работы в пассивном ре- жиме , но в других программах (например, в чатах) вопрос остается открытым. Тут его решают по-разному, в зависимости от производителя программы. Хакер может установить соединение с защищенной сетью через туннель на открытом порту и с дозволенным адресом внутри сети. От этого уже никуда не денешься, потому что хоть что-то, но должно быть разрешено. В крупных компаниях в одной сети может быть несколько серверов. Я только в одной фирме и в кино видел, как администраторы для управления каждым из них работают за несколькими мониторами и клавиатурами одновременно. В реальной жизни специалисты слишком ленивы, да и однообразный труд утомляет , поэтому они сидят только за одним компьютером, а для подключе- ния к серверу используют удаленное соединение. Но на этом лень администраторов не заканчивается. Чтобы не приезжать на работу во внеурочное время в случае экстренной ситуации, им требуется дос- туп к консоли сервера прямо из дома. А вот это уже может стать серьезной угрозой . Благо, если программа, через которую происходит управление, под- держивает шифрование (например, SSH), а если это простой telnet-клиент? Злоумышленник сможет подсмотреть параметры аутентификации с помощью утилиты -сниффера и получить такой же административный доступ к серверу. Управление доступом 167 4.13.3. Безопасный Интернет Интернет не будет безопасным, пока нельзя четко установить принадлеж- ность пакета. Любое поле IP-пакета можно подделать, и сервер никогда не сможет определить подлинность данных. Мы не можем гарантировать спо- койную жизнь, пока не можем четко знать источника и конкретного челове- ка . С другой стороны, изменение ситуации может повлиять на нашу свободу. Вы должны тщательно маскировать, что именно и кому разрешено на серве- ре . Чем меньше знает хакер, тем лучше. Помимо этого, должны пресекаться любые разведывательные действия, например, использование сканеров пор- тов , трассировка сети и др. Что такое трассировка? В сети каждый пакет проходит по определенному пути . При необходимости перенаправления такой пакет обязательно прохо- дит через маршрутизаторы, которые доставляют его в нужные сети. Но если в устройство, обеспечивающее межсетевую совместимость, закралась ошиб- ка , то пакет может навечно заблудиться. Чтобы этого не произошло, в заго- ловке IP-пакета есть поле TTL (Time To Live, время жизни). Отправитель па- кета устанавливает в это поле определенное число, а каждый маршрутизатор уменьшает счетчик ретрансляций. Если значение TTL становится равным нулю , то пакет считается потерявшимся и уничтожается, а отправителю по- сылается сообщение о недостижимости хоста. Эту особенность администраторы стали использовать для диагностики сети, чтобы узнать маршрут, по которому проходит пакет. Как это работает? В 99% случаев каждый запрос идет до адресата одним и тем же путем. На отправленный со значением TTL, равным 1, пакет первый же маршрутизатор ответит ошибкой, и по полученному отклику можно узнать его адрес. Сле- дующая посылка идет с TTL, равным 2. В ответ на это ошибку вернет второй маршрутизатор . Таким образом можно узнать, через какие узлы проходят запросы к адресату. Сетевой экран должен уничтожать любые пакеты с TTL, равным 1. Это за- щищает сеть, но явно указывает на наличие Firewall. Пакет с реальным зна- чением TTL дойдет до адресата, а если команда traceroute выдала ошибку, то это значит, что на пути следования пакета есть Firewall, который запреща- ет трассировку. Для выполнения трассировки в ОС Linux нужно выполнить команду traceroute с ключом -I , указав имя хоста. Например: traceroute -I redhat.com В ОС Windows есть аналогичная команда tracert , и в ней достаточно задать имя узла или IP-адрес, который нужно трассировать, без использования до- полнительных ключей. Глава 4 168 Итак , на экране начнут появляться адреса промежуточных маршрутизаторов, через которые проходит пакет. Например, результат может быть следующим: traceroute to redhat.com (xxx.xxx.xxx.xxx)? 30 hops max, 38 byte packets 1 218 ms 501 ms 219 ms RDN11-f200.101.transtelecom.net [217.150.37.34] 2 312 ms 259 ms 259 ms sl-gw10-sto-5-2.sprintlink.net [80.77.97.93] 17 638 ms 839 ms 479 ms 216.140.3.38 18 * * * Request timed out. Если сетевой экран пропускает ICMP-пакеты, то сканирование можно про- вести с помощью traceroute . Возможно, появится сообщение об ошибке. В данном случае строка 18 сообщает о превышении времени ожидания отве- та . Это значит, что пакет отправлен, но сервер отбросил запрос, а значит, ве- роятнее всего пакет с TTL, равным 18, был уничтожен без предупреждения и информирования отправителя. Для сканирования сети за пределами Firewall достаточно выполнить команду соединения с компьютерами внутри сети с TTL, равным 19. Во время трасси- ровки мы увидим первые 17 ответов, 18-й пропадет, а 19-й пройдет дальше в сеть, потому что на сетевом экране такой пакет появится с TTL, равным 2, и не будет удален, а вот в локальной сети первый же маршрутизатор вернет ошибку Но в реальности ICMP-пакеты запрещены, поэтому такой метод редко при- носит злоумышленнику пользу. С другой стороны, если мы увидели полный путь к компьютеру назначения, это еще не значит, что сетевого экрана нет. Может, он просто не запрещает ICMP-трафик. Внутреннюю сеть можно просканировать и через DNS-сервер, если он нахо- дится внутри нее и доступен для всеобщего использования. Но это уже от- дельная история, не касающаяся сетевого экрана. 4.13.4. Дополнительная защита Помимо фильтров на основе определенных администратором правил в сете- вом экране может быть реализовано несколько дополнительных защитных механизмов , которые работают вне зависимости от вашей конфигурации или могут включаться специальными опциями. Одним из популярных методов обхода Firewall и проведения атаки является фальсификация IP-адреса отправителя. Например, у хакера может быть адрес 100.1.1.1, но с него запрещено подключаться к сервису FTP. Чтобы получить Управление доступом 169 доступ , хакер может послать пакеты, в которых в качестве отправителя ука- зан , например, 100.2.2.2, с которого доступ разрешен. Hacker IP: 100.1.1.1 Server IP: 100.1.1.100 User IP: 100.2.2.2 Query Answer Рис . 4.6. Подмена IP- адреса Но это еще не все. Просто воспользовавшись чужим именем, хакер ничего не добьется : он не увидит отклика сервера (рис. 4.6). Чтобы хакер смог полу- чить ответ на свой запрос, в IP-пакет должна быть добавлена специальная информация , по которой сервер найдет реальный адрес хакера 100.1.1.1. Современные сетевые экраны (в том числе и поставляемые с Linux) легко определяют подделку и блокируют такие пакеты. 4.14. Запрет и разрешение хостов Работа с ipchains или iptables может показаться сложной, потому что требует знания необходимых портов, но этот способ наиболее надежный, и для по- строения реальной защиты рекомендуется использовать именно его. А вот для решения простых задач есть другой метод — использование файлов Глава 4 170 /etc/hosts.allow и /etc/hosts.deny. Первый файл содержит записи хостов, кото- рым разрешен доступ в систему, а во втором прописаны запреты. При подключении к серверу файлы проверяются следующим образом: 1. Если соответствие обнаружено в файле hosts.allow, то доступ разрешен и файл hosts.deny не проверяется. 2. Если в файле hosts.deny найдена запись, то доступ запрещен. 3. Если нет ни одной подходящей записи в обоих файлах, то доступ по умолчанию разрешен. Удобство использования этих файлов заключается в том, что в них нужно указывать сервисы, требующие ограничения доступа. Это делается в виде строк следующего вида: сервис: хост Строка состоит из двух параметров, разделенных двоеточием. Первым ука- зывается имя сервиса (или список, разделенный запятыми), доступ к которо- му нужно ограничить. Второй — это адреса (для файла /etc/hosts.allow — разрешенные , а для /etc/hosts.deny — запрещенные), разделенные запятыми. В качестве параметров можно использовать ключевое слово ALL , которое со- ответствует любому адресу или сервису. Рассмотрим пример конфигурирования файла. Для начала закроем любой доступ . Для этого в файле /etc/hosts.deny нужно прописать запрет для всех пользователей на любые сервисы. Для этого добавляем строку ALL: ALL В результате ваш файл будет выглядеть следующим образом: # hosts.deny This file describes the names of the hosts which are # *not* allowed to use the local INET services, as decided # by the '/usr/sbin/tcpd' server. # # The portmap line is redundant, but it is left to remind you that # the new secure portmap uses hosts.deny and hosts.allow. In particular # you should know that NFS uses portmap! ALL: ALL Теперь в файле hosts.allow санкционируем только следующий доступ: компьютеру с адресом 192.168.1.1 разрешено подключение ко всем сервисам; с ftpd-сервисом могут работать только компьютеры с адресами 192.168.1.2 и 192.168.1.3. # hosts.allow This file describes the names of the hosts # which are allowed to use the local INET services, Управление доступом 171 # as decided by the '/usr/sbin/tcpd' server. # ALL: 192.168.1.1 ftpd: 192.168.1.2, 192.168.1.3 Если вам нужно целой сети позволить доступ к какому-либо сервису, то можно указать неполный адрес: ftpd: 192.168.1. Эта строка разрешает доступ к ftpd-сервису всем компьютерам сети 192.168.1.x (последнее число адреса не указано, значит, оно может быть любым). Как видите, использовать файлы /etc/hosts.allow и /etc/hosts.deny намного проще , потому что не требуется прописывать правила для входящих и исхо- дящих пакетов. Но возможности этих файлов слишком ограничены, и любой сетевой экран позволяет осуществлять куда более тонкие настройки. Я рекомендую использовать файлы /etc/hosts.allow и /etc/hosts.deny для ре- шения временных проблем безопасности. Если в каком-либо сервисе найдена уязвимость , то его легко обойти через установки в файле /etc/hosts.deny. Если вы заметили попытку атаки с какого-нибудь IP-адреса, запретите на пару ча- сов любые подключения с него, но опять же используя файл /etc/hosts.deny. Почему нежелательно играть с цепочками сетевого экрана? Случайное уда- ление или добавление ошибочной записи может нарушить работу сервера или понизить его безопасность. Именно поэтому временные правила я не ре- комендую устанавливать в сетевом экране. 4.15. Советы по конфигурированию Firewall Конфигурирование сетевого экрана достаточно индивидуально и зависит от конкретных задач, решаемых сервером. Но я все же дам некоторые рекомен- дации , которым надо следовать во время настройки: изначально необходимо все запретить. К хорошему быстро привыкаешь, и если открыть что-то лишнее, то потом отучить пользователей будет труд- но , и процесс закрытия сервиса будет проходить с большими сложностями; если есть возможность, необходимо запретить все типы ICMP-сообщений, особенно ping . Мы еще не раз будем говорить об опасности сканирования сети с помощью ICMP-пакетов; запретить доступ к 111 порту. На нем работает portmapper, который необ- ходим для удаленного вызова процедур (RPC, Remote Procedure Call) на сервере и получения результата. С помощью утилиты rpcinfo хакер может Глава 4 172 узнать , какие RPC-сервисы работают на вашем сервере. Например, вы- полните следующую команду: rpcinfo -p localhost Результатом будет примерно следующее: Program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 32768 status 100024 1 tcp 32768 status 391002 2 tcp 32769 sgi_fam Как видите, одна команда может сообщить весьма большое количество информации , поэтому 111 порт необходимо закрыть; для облегчения управления доступом к портам разделите открытые ресур- сы на две категории: • для всеобщего просмотра, в том числе и пользователями Интернета; • только для использования внутри сети. Например, такие сервисы как ftp и telnet несут в себе опасность, потому что позволяют закачивать файлы на сервер и выполнять на нем команды. Если пользователям Интернета нет необходимости в этих службах, то следует их явно за- претить для внешних подключений. 4.16. Повышение привилегий В заключение рассмотрения темы безопасности необходимо подробно позна- комиться с командой sudo , которая позволяет выполнять программы от име- ни другого пользователя. Мы уже говорили в разд. 2.7, что нельзя работать в системе под учетной записью администратора. Это опасно по следующим причинам: программы , запущенные вами таким образом, работают с правами адми- нистратора . При наличии уязвимости хакер сможет воспользоваться ею для получения полных прав; ошибки ввода какой-либо команды могут нарушить работу всей системы. А оплошности бывают часто, потому что в ОС Linux поддерживаются достаточно мощные возможности. Если у вас в системе нет пользователя, не обладающего правами администра- тора , то добавьте его сейчас (см. разд. 4.3). Теперь войдите в систему под его Управление доступом 173 учетной записью и попробуйте просмотреть файл /etc/shadow, например, с помощью следующей команды: cat /etc/shadow В ответ на это вы должны получить сообщение о недостатке прав доступа. Теперь выполните ту же команду через sudo : sudo cat /etc/shadow Вы увидите сообщение, что ваша учетная запись отсутствует в файле /etc/sudoers, в котором прописываются разрешения на использование коман- ды sudo . Пример содержимого этого конфигурационного файла приведен в листинге 4.2. Листинг 4.2. Содержимое конфигурационного файла /etc/sudoers # sudoers file. # Файл sudoers # This file MUST be edited with the 'visudo' command as root. # Этот файл должен редактироваться с помощью команды 'visudo' # от имени root # See the sudoers man page for the details # on how to write a sudoers file. # Смотрите страницу sudoers руководства, где имеется # подробная информация по использованию sudoers-файла. # Host alias specification # User alias specification # Cmnd alias specification # Defaults specification # User privilege specification root ALL=(ALL) ALL # Uncomment to allow people in group wheel to run all commands # %wheel ALL=(ALL) ALL # Same thing without a password Глава 4 174 # %wheel ALL=(ALL) NOPASSWD: ALL # Samples # %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom # %users localhost=/sbin/shutdown -h now В этом файле только одна строка без комментария: root ALL=(ALL) ALL Она состоит из трех параметров: имя — пользователь (или группа), которому разрешено выполнять опреде- ленную команду. Я рекомендую указывать конкретных пользователей. Хакер может стать участником группы, и, не обладая при этом частными привилегиями , получит доступ к выполнению опасных команд; компьютер — имя машины, на которой можно выполнять команду от лица администратора ; команды , которые разрешено выполнять указанному пользователю (пере- числяются после знака равно). Итак , чтобы пользователь смог просмотреть файл /etc/shadow, необходимо прописать соответствующее право. В моей системе есть простой пользова- тель с именем robert. Для него я добавляю в файл /etc/sudoers следующую запись : robert ALL=ALL Теперь пользователь robert сможет выполнять с помощью sudo любые адми- нистраторские задачи. Проверьте это, повторив выполнение команды: sudo cat /etc/shadow На этот раз все должно пройти успешно. На экране появится приглашение ввести пароль администратора для выполнения команды. Но разрешение выполнения абсолютно всех команд не соответствует прин- ципам построения безопасной системы. Необходимо вводить определенные ограничения Обслуживать сервер, который обрабатывает ежедневно множество подклю- чений пользователей и на котором работают разные сервисы, в одиночку очень сложно. Чаще в этом участвует множество людей. Один отвечает за саму систему, другой занимается поддержкой WEB-сервера, третий настраи- вает базу данных MySQL. Давать трем администраторам полные права не имеет смысла, необходимо разрешить каждому выполнять только те команды, Управление доступом 175 которые необходимы для реализации поставленных задач. Таким образом, нужно четко прописывать права для конкретного пользователя. robert ALL=/bin/cat /etc/shadow Обратите внимание, что я указываю полный путь к программе cat (напоми- наю , его можно узнать с помощью команды which ), это необходимо, иначе вместо результата, полученного по разрешенной команде, пользователь robert увидит сообщение об ошибке в конфигурации. Допустим , вы хотите расширить права пользователя и позволить ему не только просматривать файл паролей, но и монтировать CD-ROM-диск. Для этого изменяем строку, добавляя разрешение на выполнение команды mount : robert ALL=/bin/cat /etc/shadow, /bin/mount Обратите внимание, что в случае с доступом к файлу /etc/shadow мы дали добро только на его просмотр, явно указав утилиту cat с параметром в виде пути к файлу с паролями. Это логично, ведь нет смысла изменять его, когда для этого существует команда passwd . Можно задать просто разрешение на выполнение команды cat : robert ALL=/bin/cat, /bin/mount Но в этом случае пользователь robert сможет от имени root просматривать любые файлы в системе, включая те, которые не должны быть ему видны. Для команды mount мы не указываем ничего, кроме самой программы. Таким образом , пользователь сам может варьировать ее параметры. Если явно ука- зать в качестве аргумента CD-ROM, то пользователь сможет монтировать именно это устройство: robert ALL=/bin/cat /etc/shadow, /bin/mount /dev/cdrom В рассмотренных примерах вместо имени компьютера я всегда применял ключевое слово ALL , что соответствует любой машине. Тут желательно ука- зывать конкретный компьютер, к которому относится данная запись. Чаще всего это локальный сервер. С помощью утилиты sudo можно выполнять команды от лица различных пользователей . Для этого используется ключ -u . Например, следующая коман- да пытается просмотреть файл паролей от имени пользователя flenov: sudo —u flenov cat /etc/shadow Если пользователь не указан, то программа sudo по умолчанию запрашивает пароль root. Это не очень удобно, так как придется отдавать пароль админи- стратора пользователю с учетной записью robert. В этом случае теряется смысл в построении такой сложной системы безопасности, ведь, зная пароль root, пользователь сможет зарегистрироваться в системе как администратор и сделать все, что угодно. Глава 4 176 Желательно не передавать пароль администратора. Используйте пароли дру- гих учетных записей, которым разрешена работа с необходимыми файлами и программами. В этом случае придется указывать конкретное имя пользова- теля , которое назначил администратор для выполнения команды. Еще один способ сохранить пароль администратора — разрешить пользова- телю выполнять команды без аутентификации. Для этого необходимо между знаком равенства и списком разрешенных команд добавить ключевое слово NOPASSWD и двоеточие. Например: robert ALL=NOPASSWD:/bin/cat /etc/shadow, /bin/mount /dev/cdrom Теперь при выполнении команды sudo пароль вообще запрашиваться не бу- дет . Это очень опасно, если вы не перечисляете необходимые команды, а указываете ключевое слово ALL : robert ALL=NOPASSWD:ALL Если хакер получит доступ к учетной записи robert, то сможет с помощью команды sudo выполнять в системе любые команды. Если вы перечисляете возможные директивы, то опасность взлома системы уменьшается в зависи- мости от того, насколько опасные команды вы разрешаете выполнять поль- зователю robert, и в какой мере защищена эта учетная запись (длина и слож- ность пароля, прилежность владельца и т. д.). С помощью утилиты sudo можно предоставить доступ для корректировки фай- лов . Никогда не делайте этого. Если текстовый редактор запустится для правки даже безобидного файла, хакер получит слишком большие возможности: выполнять системные команды. Так как редактор открывается с правами root, команды также будут выполняться от имени этого пользователя, а значит, хакер получит в свое распоряжение всю систему; открыть любой другой файл, пользуясь правами администратора. Я никогда не делегирую возможность корректировки конфигурационных файлов с помощью редакторов. Если без этого не обойтись, то никогда не использую в этом случае права root. Конфигурационному файлу назначается другой владелец, и пользователь для исправлений будет запускать программу sudo только от его имени, а это значит, что редактор будет работать не с пра- вами root. К потенциально опасным командам, которые нежелательно предоставлять для выполнения с правами root другим пользователям, относятся: редактирование файлов — позволяет злоумышленнику изменить любой конфигурационный файл, а не тот, что вы задали; chmod — дает возможность хакеру понизить права доступа на конфигура- ционный файл и после этого редактировать его даже с правами гостя; Управление доступом 177 useradd — добавляет учетные записи. Если хакер создаст пользователя с ID, равным нулю, то он получит полные права в системе; mount — позволяет монтировать устройства. Прописывайте в конфигура- ционном файле конкретные устройства и доверяйте эту команду только проверенным пользователям. Если хакер смонтирует устройство со свои- ми программами, которые будут содержать SUID-биты или троянские программы , то он сможет получить в свое распоряжение всю систему; chgrp и chown — санкционируют смену владельца файла или группы. Из- менив владельца файла паролей на себя, хакер сможет легко его прочи- тать или даже изменить. Напоминаю , что вы должны быть очень внимательны при работе с самой программой sudo, потому что для нее установлен SUID-бит, а значит, она бу- дет выполняться с правами владельца, то есть администратора системы. Вер- сии sudo от 1.5.7 до 1.6.5.p2 содержат ошибку выделения памяти. Хакер мо- жет воспользоваться этим для выполнения атаки переполнения стека. Проверьте вашу версию, вызвав команду sudo с ключом -V . Если вы являе- тесь администратором, то увидите на экране подробную информацию о про- грамме , вроде приведенной в листинге 4.3. Листинг 4.3. Информация о программе sudo Sudo version 1.6.5p2 Authentication methods: 'pam' Syslog facility if syslog is being used for logging: authpriv Syslog priority to use when user authenticates successfully: notice Syslog priority to use when user authenticates unsuccessfully: alert Ignore '.' in $PATH Send mail if the user is not in sudoers Use a separate timestamp for each user/tty combo Lecture user the first time they run sudo Require users to authenticate by default Root may run sudo Allow some information gathering to give useful error messages Visudo will honor the EDITOR environment variable Set the LOGNAME and USER environment variables Length at which to wrap log file lines (0 for no wrap): 80 Authentication timestamp timeout: 5 minutes Password prompt timeout: 5 minutes Number of tries to enter a password: 3 Umask to use or 0777 to use user's: 022 Глава 4 178 Path to mail program: /usr/sbin/sendmail Flags for mail program: -t Address to send mail to: root Subject line for mail messages: *** SECURITY information for %h *** Incorrect password message: Sorry, try again. Path to authentication timestamp dir: /var/run/sudo Default password prompt: Password: Default user to run commands as: root Path to the editor for use by visudo: /bin/vi Environment variables to check for sanity: LANGUAGE LANG LC_* Environment variables to remove: BASH_ENV ENV TERMCAP When to require a password for 'list' pseudocommand: any When to require a password for 'verify' pseudocommand: all Local IP address and netmask pairs: 192.168.77.1 / 0xffffff00 Default table of environment variables to clear BASH_ENV ENV TERMCAP Default table of environment variables to sanity check LANGUAGE LANG LC_* Я не стал приводить результат выполнения команды полностью, но основ- ную информацию можно увидеть. Вначале нам сообщается версия програм- мы sudo, в данном случае это 1.6.5.p2. Наиболее интересными в этом листин- ге являются следующие три строки: Authentication timestamp timeout: 5 minutes Password prompt timeout: 5 minutes Number of tries to enter a password: 3 Управление доступом 179 В первой строке указывается время сохранения пароля в кэше. В данном слу- чае это 5 минут. Если пользователь в течение этого времени снова выполнит команду sudo , то повторно аутентификация проводиться не будет. Следующая строка указывает время ожидания ввода пароля, а последняя — количество попыток его задать. Если за этот период верный пароль не будет указан , работа программы прервется. 4.17. Привилегии пользователя В разд. 4.9 мы говорили о том, что отсутствие стандартной гибкой возможно- сти распределения прав является узким местом. Возможности есть, и в Интер- нете можно найти много решений. Кое-что интересное уже появилось в графи- ческой утилите управления пользователями в Ubuntu. На рис. 4.7 показана закладка привилегий в утилите настройки пользователей. Рис . 4.7. Закладка привилегий пользователя в Ubuntu Глава 4 180 Это далеко не самые мощные возможности, но уже что-то. Если пользователь не должен иметь доступа к функциям администрирования системы, то их нужно отключить. Без этих функций пользователь и запущенные им про- граммы смогут нанести системе меньше вреда, если вообще смогут сделать что -то злостное. Далеко не всегда пользователи намеренно делают что-то плохое на серверах. Очень часто это происходит случайно, по незнанию или неопытности. Каж- дый лишний уровень защиты между пользователем и системой — это наш спокойный сон. |