Estou familiarizado com algumas das formas mais comuns de configurar um servidor Linux para estar em conformidade com PCI-DSS 3.2 , pelo menos para os requisitos de SAQ A . Uma preocupação comum é o requisito 8.5, que exige que:
Generic user IDs and accounts are disabled or removed
Isso inclui o usuário root, que obviamente não pode ser desativado, portanto, é necessário um "controle de compensação" (na terminologia do PCI-DSS). Uma receita comum é uma variante dos seguintes itens:
ssh
para usar uma chave SSH; sudo
para obter root; pam_loginuid
para registrar o ID do usuário de login quando os usuários tiverem raiz; e auditd
para registrar as ações raiz e o ID do usuário de login. No entanto, no caso de eu estar lidando com hoje, não é uma única máquina que estou protegendo: é um pequeno cluster (atualmente com 10 máquinas) e é muito, muito útil para poder ssh
(e scp
files) entre as máquinas. Ter que fazer isso como um usuário não-root seria uma verdadeira dor: quase sempre o arquivo que você precisa é somente legível para o root e precisa ser colocado em algum lugar onde somente o root possa gravar.
O que eu gostaria de fazer é permitir ssh
como root entre as máquinas, usando uma chave SSH presente nos servidores. Isso é bastante fácil em /etc/ssh/sshd_config
com PermitRootLogin
de comando em um bloco Match Address
. Não estou muito preocupado com as implicações de segurança de permitir que alguém que tenha comprometido uma máquina ganhe controle de todo o cluster: as máquinas são semelhantes o suficiente para que, se conseguirem comprometer um, provavelmente possam usar o mesmo processo para acessar o restante .
No entanto, se eu fizer isso, perco a capacidade de rastrear quem está executando o comando, pois o UID sem login não está mais conectado ao processo quando eu ssh
para outra máquina. Um controle de compensação no PCI-DSS precisa "atender à intenção e rigor do requisito original do PCI DSS", e a intenção do requisito 8.5 é declarada como sendo para tornar possível "rastrear o acesso e as atividades do sistema a um indivíduo". Sem preservar o UID de login, não estamos mais fornecendo um controle de compensação para permitir que o usuário raiz exista.
O que eu espero encontrar é a maneira de passar o loginuid do servidor para o servidor quando fizer login como root, provavelmente colocando-o no ambiente. Eu não me importo que isso requeira implicitamente confiar no servidor de origem: ele já é. Alguém pode sugerir um meio de fazer isso? Ou, na falta disso, outra maneira de rastrear a atividade do sysadmin como raiz para um usuário específico, enquanto permite fácil ssh
e scp
entre máquinas?