Я думаю, что вы можете перечислить команды, которые может выполнять другой пользователь, только если вы можете выполнять произвольные команды от имени (ВСЕГО) этого пользователя. Поэтому вместо этого...
В sudoers:
non_sudo_user ALL=(ALL) NOPASSWD: /usr/bin/sudo -l
И перечислить их, запуская от имени не_sudo_user
:
for target_user in user1 user2 user3... ; do
sudo -u "$target_user" sudo -l
done
Ключом является директива Limit
. Подсказка находится в разделе
Directive на странице документации core
mod Apache.
При использовании директив
или
с параметром
Require
обратите внимание, что первыйRequire
для успешного выполнения разрешает запрос, независимо от наличия других директивRequire
.
Как оказалось, первое Require
, соответствующее рассматриваемому случаю, определяет, как оно будет обработано. С конфигурацией из моего вопроса, а именно:
<Limit GET POST OPTIONS>
Require all granted
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
AuthType Basic
AuthName "Personal HTML"
AuthUserFile "/usr/share/apache2/passwd/passwords"
Require valid-user
с простым запросом GET, это Require all grant
во второй строке приведенного выше листинга, который делает это. AuthType Basic
и другие строки ниже него являются мертвым кодом. Правильный путь:
<Limit GET POST OPTIONS>
AuthType Basic
AuthName "Personal HTML"
AuthUserFile "/usr/share/apache2/passwd/passwords"
Require valid-user
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
Кстати, вот случай, когда директива Limit
игнорируется.
Require all granted
<Limit GET POST OPTIONS>
AuthType Basic
AuthName "Personal HTML"
AuthUserFile "/usr/share/apache2/passwd/passwords"
Require valid-user
</Limit>
<LimitExcept GET POST OPTIONS>
Require all denied
</LimitExcept>
Первая строка завершается успешно и авторизует запрос.