Я знаком с некоторыми из наиболее распространенных способов настройки сервера Linux в соответствии с PCI-DSS 3.2, по крайней мере, к требованиям SAQ A. Общую озабоченность вызывает требование 8.5, которое требует, чтобы:
Общие идентификаторы пользователей и учетные записи отключены или удалены
Сюда входит и пользователь root, который, очевидно, не может быть отключен, поэтому необходим «компенсирующий контроль» (в терминологии PCI-DSS). А общий рецепт это один из вариантов:
ssh
использовать SSH-ключ;sudo
получить root;pam_loginuid
для записи идентификатора пользователя, входящего в систему, после того, как пользователи имеют root; иauditd
для записи действий root и ID пользователя для входа.Однако в случае, если я имею дело с сегодняшним днем, я защищаю не одну машину: это небольшой кластер (в настоящее время с 10 машинами), и очень, очень полезно иметь возможность ssh
(и scp
файлы) между машинами. Сделать это как пользователю без полномочий root было бы настоящей проблемой: почти всегда нужный файл доступен для чтения только root, и его нужно поместить в какое-то место, куда может писать только root.
Я бы хотел разрешить ssh
как root между машинами, используя SSH-ключ, присутствующий на серверах. Это достаточно легко в /etc/ssh/sshd_config
с PermitRootLogin
команда в Match Address
блок. Меня не слишком беспокоят последствия для безопасности, позволяющие кому-то, кто скомпрометировал одну машину, получить контроль над всем кластером: машины достаточно похожи, поэтому, если им удастся скомпрометировать одну, они, вероятно, смогут использовать тот же процесс для доступа к остальным .
Однако, если я сделаю это, я потеряю возможность отслеживать, кто какую команду выполняет, поскольку UID без входа в систему больше не привязан к процессу, когда я ssh
на другую машину. Компенсирующий контроль в PCI-DSS должен «соответствовать назначению и строгости исходного требования PCI DSS», а цель требования 8.5 заявлена как возможность «отслеживать доступ к системе и действия для отдельного человека». Без сохранения UID для входа мы больше не обеспечиваем компенсирующий контроль, позволяющий существовать пользователю root.
Я надеюсь найти способ передачи loginuid с сервера на сервер при входе в систему с правами root, возможно, путем помещения его в среду. Я не возражаю, что для этого требуется неявное доверие исходному серверу: это уже так. Может ли кто-нибудь предложить способ сделать это? Или, если это не удастся, другой способ отслеживания активности системного администратора от имени пользователя root для конкретного пользователя, позволяющий легко ssh
и scp
между машинами?