Назад | Перейти на главную страницу

безопасность sudoers

Я установил сценарий для выполнения обновлений Subversion на двух серверах - локальном и удаленном, - которые вызываются ловушкой после фиксации, запускаемой пользователем www-data.

/ srv / svn / mysite / hooks / post-commit содержит:

sudo -u cli /usr/local/bin/svn_deploy

/ usr / local / bin / svn_deploy принадлежит пользователю cli и содержит:

#!/bin/sh

svn update /srv/www/mysite
ssh cli@remotehost 'svn update /srv/www/mysite'

Чтобы это сработало, мне пришлось добавить в файл sudoers следующее:

www-data ALL = (cli) NOPASSWD: /usr/local/bin/svn_deploy
cli ALL = NOEXEC:NOPASSWD: /usr/local/bin/svn_deploy

Записи для www-data и cli были необходимы, чтобы избежать ошибки:

post commit hook failed: no tty present and no askpass program specified

Я опасаюсь давать какие-либо повышенные права на www-data. Есть ли что-нибудь еще, что мне нужно сделать, чтобы уменьшить или устранить любую угрозу безопасности?

Что вы можете сделать, так это использовать что-то вроде svnsync.

Из их сайт :

svnsync - это инструмент зеркалирования удаленного репозитория Subversion. Проще говоря, это позволяет вам воспроизводить версии одного репозитория в другом.

Итак, что вы можете сделать, так это поместить такую ​​запись в раздел обработчиков после фиксации:

/ usr / bin / svnsync синхронизировать svn: //X.X.X.X/ --username XXXX --password 'XXXXXX' --non-interactive

Это синхронизирует обновления с удаленным сервером, и вам также не нужно будет предоставлять какие-либо особые привилегии любому пользователю.

Надеюсь, это помогло.

Я бы не стал использовать непривилегированного пользователя (www-data) для выполнения административных задач. svn update кажется больше работой root. Поэтому я бы не стал добавлять эту дополнительную привилегию для www-данных. Когда вы используете SSH-соединение, вы можете подключиться с помощью аутентификации по ключу и создать команду force, чтобы ограничить действие, выполняемое пользователем root, до «svn update». Открытый ключ, который будет сохранен в /root/.ssh/authorized_keys, будет выглядеть так:

command='svn update /srv/www/mysite',ssh-rsa dedllrfflr[...]

Таким образом, ваше соединение будет ограничено этой конкретной командой, и www-data не получит дополнительных прав.

На стороне клиента команда для запуска обновления:

ssh -i /path/to/private/key root@server whatEverCommandYouMayImagine

Только команда, содержащаяся в force-command, будет запущена, если аутентификация прошла успешно.

Затем вы можете иметь дело с группами / правами Unix загруженных файлов. Для apache обычно включается:

find /srv/www/mysite -type f -print0 | xargs -0 chmod 640
find /srv/www/mysite -type d -print0 | xargs -0 chmod 750
find /srv/www/mysite -print0 | xargs -0 chown root:www-data