В более предыдущих временах, стандартная модель обеспеченностью для операционных систем GNU/Linux и Unix дала общим потребителям минимальный комплект привилегированностей, пока дарующ полные привилегированности к учету одиночного потребителя, т.е. корень, который был использован для того чтобы управить системой и потребителями, установить системы файлов програмного обеспечения, держателя и unmount, нагружая модули стерженя, связывает процесс к привилигированный порту и бежит много обслуживаний.
, что была несколько опасна в что она была всем или ничего и не была одета эта зависимость на учете корня для того чтобы выполнить все действия требуя привилегированности к компартментализации ролей. Furthermore, она увеличила риск уязвимостей в пределах применения setuid которое может только требовать привилегированностей корня для очень малой части своей деятельности как раскрывать системный файл или вязку к привилигированный порту.
Этот риск наилучшим образом был понят внутри община открытых систем. В результате, IEEE Std.1003.1e (aka POSIX.1e или POSIX.6) был главным влиянием начатым в 1995 для того чтобы начать унифицированный комплект интерфейсов обеспеченностью для соответствуя систем которые включенный контроль допуска перечисляет (ACL), проверкы, разъединения привилегированности (возможностей), необходимого контроля допуска (MAC) и ярлыков информации.
Работа была прекращена RevCon IEEE в 1998 на проекте 17 документа должного к отсутсвию консенсуса (главным образом из-за противоречя существующей практики.) Пока официально усилие стандартов потерпело неудачу, с после этого много из стандарта проекта делает свой путь в стержене Линукс включая возможности которые этот столб исследует.
Во-первых, чего мы значим возможностями Линукс? Это по-существу выдвинутое verion модели возможностей описанной в стандарте проекта POSIX.1e. Читатели знакомые с VMS или версиями Unix которые включают доверено что вычисляя основание (TCB) узнают его как был несколько аналогичны к как привилегированностям. Эти возможности разделяют комплект privlileges корня в комплект определенных логически привилегированностей которые могут быть ы или заданы к процессам, потребителям, системам файлов и больше. Как резерв, возможность термине возникла в бумаге 1966 Jack Дэннис и Графом Van Горн (VOL. 9 CACM, #3, pp 143-155, март 1966.) Возможности можно снабдить в много путей включая через бирки оборудования, тайнопись, в пределах языка программирования (например. Java) или использующ защищенное место для адреса. Для введения к возможност-основанным механизмам пойдите здесь. Линукс использует защищенное место для адреса и расширенные атрибуты архива к возможностям инструмента.
Флаг возможности атрибут возможности. 3 названного флага возможности, позволено (p), эффективно (e) и унаследовано (I), связано с каждой из возможностей которые, кстати, документированы в коллекторе <security/capability.h>.
Комплект возможности состоит из 64ого-разрядн поэлементного карты (до libcap 2.03 поэлементное карта были 32 бита.) Процесс имеет положение возможности состоять из 3 комплектов возможности, т.е. inheritable (I), позволено (p) и эффективно (e), с каждым флагом возможности снабженных как бит в каждом из 3 поэлементных карт.
Когда процесс пытает привилигированную деятельность, стержень проверяет что установлен соотвествующий бит в эффективном комплекте. Например, когда процесс попробует установить monotomic часы, стерженя проверки сперва что бит CAP_SYS_TIME установлен в отростчатый эффективный комплект.
Позволенный комплект показывает какие возможности процесс может использовать. Процесс может иметь возможности установленные в позволенный комплект которые нет в эффективном комплекте. Это показывает что процесс временно выводил эту возможность из строя. Процесс позволен установить свой эффективный комплект сдержано только если он имеющийся в позволенном комплекте. Различение между позволено и эффективное существуют так, что процесс сможет деятельности кронштейна которым нужна привилегированность.
Inheritable возможности возможности настоящего процесса который должен быть унаследован программой исполненной настоящим процессом. Позволенный комплект процесса замаскирован против inheritable комплекта во время exec, пока дают процессам и резьбам ребенка точный экземпляр возможностей родительского процесса.
Довольно чем идущ в детальное explaination, котор принудили комплектов и вычислений возможности, я ссылаюсь вы к объяснению Крис Friedhoff превосходному. Однако, я суммировал правила в следующей диаграмме.
Для нашего первого примера дорабатывать возможности рассматривайте общее назначение Пинга. Много людей не осуществляют что setuid исполнительное на большинств системах GNU/Linux. Для этого нужно быть так потому что для этого нужна привилегированность написать тип пакетов он использует для того чтобы зондировать сеть.
$ ls - al /bin/ping - 02:02 2008-09-26 /bin/ping корня 41784 корня rwsr-xr-x 1 Если вы копируете Пинг, то оно теряет свой бит setuid и не сумеет работать cp /bin/ping $. $ ls - Пинг al - Пинг 20:26 2009-05-29 fpm 41784 fpm rwxr-xr-x 1 $ localhost ./ping Пинг: гнездо icmp открытое: Не позволенная деятельность но работы если вы будете корнем # ./ping - localhost c1 ПИНГ localhost.localdomain (127.0.0.1) 56 (84) байт данных. 64 байта от localhost.localdomain (127.0.0.1): госпожа icmp_seq=1 ttl=64 time=0.026 --- статистик Пинга localhost.localdomain --- 1 переданные пакеты, 1 получили, потеря пакета 0%, время 0ms минута/avg/максимальное/mdev rtt = 0.026/0.026/0.026/0.000 госпожи по мере того как корень добавляет CAP_NET_RAW к позволенной возможности и установил бит наследия эффективный # cap_net_raw=ep ./ping /usr/sbin/setcap проверите чего возможности посылают информационные пакеты теперь имеют # /usr/sbin/getcap ./ping ./ping = cap_net_raw+ep и работы этого Пинга времени без быть setuid $ ls - al ./ping - 20:26 2009-05-29 ./ping fpm 41784 fpm rwxr-xr-x 1 $ ./ping - localhost c1 ПОШЛИТЕ ИНФОРМАЦИОННЫЕ ПАКЕТЫ localhost.localdomain (127.0.0.1) 56 (84) байт данных. 64 байта от localhost.localdomain (127.0.0.1): госпожа icmp_seq=1 ttl=64 time=0.026 --- статистик Пинга localhost.localdomain --- 1 переданные пакеты, 1 получили, потеря пакета 0%, время 0ms минута/avg/максимальное/mdev rtt = 0.026/0.026/0.026/0.000 госпожи
Другой сценарий мог быть что мы хотим извлечь бит setuid от Пинга только позволять non-root потребитель использовать его. Мы можем сделать это используя модуль pam_cap PAM который что часть пакета libcap. Архив конфигурации значения по умолчанию для этого модуля PAM /etc/security/capability.conf но то можно переписывать используя аргумент config=filename. Другой аргумент который вы можете передать к модулю отлаживает. Все ошибки написаны к архиву учета ошибок для этого модуля который pam_cap.
Следующий пример показывает как установить pam_cap для того чтобы позволить испытания проводимый заказчиком использовать Пинг
кот /security/capability.conf # # /etc/security/capability.conf # последн редактируйте FPM 05/29/2009 # потребитель «испытание» ## может использовать Пинг через унаследование испытание cap_net_raw ## каждое еще не получает никакие inheritable возможности никакие * затем обеспечьте что pam_cap.so необходимо su кот /etc/pam.d/su #%PAM-1.0 auth достаточно pam_rootok.so # Uncomment следующая линия неявно для того чтобы доверить потребителям в группе «колеса». #auth достаточно use_uid доверия pam_wheel.so # Uncomment следующая линия для того чтобы требовать, что потребитель находился в группе «колеса». #auth необходимо use_uid pam_wheel.so # pam_cap.so добавленное FPM 5/29/2009 auth необходимо pam_cap.so отлаживают auth включите система-auth учет достаточно uid pam_succeed_if.so = 0 тишей use_uid учет включите система-auth пароль включите система-auth встреча включите система-auth встреча опционно pam_xauth.so теперь setup возможности для Пинга который мы идем использовать отсутствие бита наследия эффективного (e), отсутствие позволенной привилегированности # /usr/sbin/setcap - r ./ping # cap_net_raw=p ./ping /usr/sbin/setcap # /usr/sbin/getcap ./ping ./ping = cap_net_raw+p могу я послать информационные пакеты как fpm? No. удостоверение личности $ - ООН fpm компактный диск $ ~test $ ./ping - q - localhost c1 Пинг: гнездо icmp открытое: Не позволенная деятельность могу я послать информационные пакеты как испытание? да. $ su - испытание Пароль: удостоверение личности $ - ООН испытание $ ./ping - q - localhost c1 ПИНГ localhost.localdomain (127.0.0.1) 56 (84) байт данных. --- статистик Пинга localhost.localdomain --- 1 переданные пакеты, 1 получили, потеря пакета 0%, время 0ms минута/avg/максимальное/mdev rtt = 0.024/0.024/0.024/0.000 госпожи
Незадокументированное общее назначение /usr/sbin/capsh можно использовать для того чтобы управлять возможностями и уменьшать потенциалом для уязвимостей в сценарях заполнения. Это просто завертчица вокруг раковины оргии могущие понадобиться для того чтобы поднять и понизить и bset и возможности pI перед призывая /bin/bash.
используя предыдущий пример Пинга которому дал CAP_NET_RAW удостоверение личности $ - nu корень $ /usr/sbin/getcap ./ping ./ping = cap_net_raw+ep теперь используйте capsh для того чтобы упасть CAP_NET_RAW и изменить к uid 500 (fpm) позволенная деятельность не длинние $ /usr/sbin/capsh --drop=cap_net_raw --uid=500 -- удостоверение личности $ - nu fpm $ ./ping - q - localhost c1 оргия: ./ping: Не позволенная деятельность постоянно падение CAP_NET_RAW $ /usr/sbin/setcap - r ./ping и призовите Пинг используя capsh --крышки $ capsh --caps= " cap_net_raw-ep " -- - c «. /ping - c1 - localhost q» ПОШЛИТЕ ИНФОРМАЦИОННЫЕ ПАКЕТЫ localhost.localdomain (127.0.0.1) 56 (84) байт данных. --- статистик Пинга localhost.localdomain --- 1 переданные пакеты, 1 получили, потеря пакета 0%, время 0ms минута/avg/максимальное/mdev rtt = 0.056/0.056/0.056/0.000 госпожи используйте capsh для того чтобы напечатать вне возможности удостоверение личности $ - ООН fpm $ /usr/sbin/capsh --печать Течение: = Прыгая установленное =cap_chown, cap_dac_override, cap_dac_read_search, cap_fowner, cap_fsetid, cap_kill, cap_setgid, cap_setuid, cap_setpcap, cap_linux_immutable, cap_net_bind_service, cap_net_broadcast, cap_net_admin, cap_net_raw, cap_ipc_lock, cap_ipc_owner, cap_sys_module, cap_sys_rawio, cap_sys_chroot, cap_sys_ptrace, cap_sys_pacct, cap_sys_admin, cap_sys_boot, cap_sys_nice, cap_sys_resource, cap_sys_time, cap_sys_tty_config, cap_mknod, cap_lease, cap_audit_write, cap_audit_control, cap_setfcap, cap_mac_override, cap_mac_admin Securebits: 00/0x0 обеспечьте-noroot: никак (открыно) обеспечивать-никак-suid-fixup: никак (открыно) обеспечивать-держать-крышки: никак (открыно) uid=500
Много других вариантов к capsh и вы вероятно должны потратить некоторое время экспериментируя с ими. Призовите capsh с - вариантом помощи для того чтобы увидеть полный список. Заметьте что сценари заполнения setuid имеют возможности.
Все примеры показанные выше работают на Fedora 10 чточто libcap 2.10 польз. Если вы желаете экспериментировать на других распределениях GNU/Linux, то оно должно иметь >= 2.6.24 стерженя построенное с CONFIG_FILE_CAPABILITIES=y, версией libcap >=2.08 и системой файлов которая поддерживает выдвинутые атрибуты например ext3 или ext4. Заметьте что CONFIG_CAPABILITIES=y должно не более длиной необходимо.
Почему нет больше людей осведомлены и использующ возможности? Я верю что плохая документация основная причина. Например, Fedora 10 пропускает страницы человека для getpcaps, capsh и pam_cap, и направляющий выступ обеспеченностью Fedora даже не упоминает возможности (или коль на то пошло ACLs!) Я не могу только помощь думая что возможности обработаны как плохой кузен к SELinux проектом Fedora.
Хлынется этот столб блога получает бит длинним поэтому я иду остановить. Я чуть-чуть царапал поверхность возможностей. После того как Fedora 11 грузит, я покрою возможности от программируя перспективы. Между тем, если вы хотите держать течение с, то что случается с возможностями Линукс, Андрю Morgan полно способный одно, котор нужно bookmark.

























