Необходимо смочь сделать это с несколькими <Каталог> блоки. Вот ссылка на применимую апачскую документацию:
http://httpd.apache.org/docs/2.2/sections.html
Я думаю, что ключевые объекты для Вашего случая:
Что использовать Когда
Выбор между контейнерами файловой системы и webspace контейнерами на самом деле довольно легок. Когда применение директив к объектам, которые находятся в файловой системе всегда, использует <Каталог> или <Файлы>. При применении директив к объектам, которые не находятся в файловой системе (такой как веб-страница, сгенерированная от базы данных), используйте <Местоположение>.
Важно никогда не использовать <Местоположение> при попытке ограничить доступ к объектам в файловой системе. Это вызвано тем, что много различных webspace местоположений (URL) могли отобразиться на то же местоположение файловой системы, позволив Вашим ограничениям обойтись.
Также http://httpd.apache.org/docs/2.2/sections.html#mergin - конкретно:
Кроме <Каталога>, каждая группа обрабатывается в порядке, что они появляются в конфигурационных файлах. <Каталог> (группа 1 выше) обрабатывается в порядке самый короткий компонент каталога к самому длинному. Так, например, <Каталог,/var/web/dir>, будет обработан прежде <Каталог,/var/web/dir/subdir>. Если несколько <Каталог> разделы относятся к тому же каталогу, они обрабатываются в порядке конфигурационного файла. Конфигурации, включенные с помощью Включать директивы, будут рассматривать, как будто они были во включении файла в местоположении Включать директивы.
Я думаю, что это будет работать:
AllowOverride All
Options FollowSymlinks -Indexes
Order deny,allow
Allow from 127.0.0.0/8 1.2.3.4 5.6.7.8
# our IP
Allow from 4.3.2.1
# PayPal IPN
Allow from 216.113.191.33
# Deny from all
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /srv/www/htdocs/.htpasswd
Require valid-user
Satisfy Any
Order allow,deny
Allow from all
Вы знаете, что можете перейти в роль sysadm_r
как staff_u
, верно?
Например, следующее ниже будет работать.
myuser ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r PASSWD: ALL
Это позволит вам делать (почти) то, что вы можете делать как root, так и без ограничений.
И еще один последний совет. Использование su
с RBAC немного сложно (он делает много вещей, которые помещают его в самые разные места). Вместо этого вы можете использовать команду runuser
, которая делает то же самое без больших накладных расходов su
.
Я фактически ограничиваю использование su
в таких sudoer'ах;
%wheel ALL=(ALL) TYPE=sysadm_t ROLE=sysadm_r NOPASSWD: ALL, ! /bin/su
Потому что по умолчанию политика SELinux не позволяет переходу sudo
управлять необходимыми сигналами. На самом деле люди, вероятно, в любом случае должны просто использовать sudo -i
.