Estou tentando implementar um contêiner simples. Eu gostaria que os usuários pudessem especificar syscalls na lista de permissões em um arquivo profile.json.
Exemplo de conteúdo do arquivo profile.json:
{
"whitelisted_syscalls": ["read", "exit", "write", "accept"],
}
então, meu aplicativo apenas analisaria esse arquivo e habilitaria/desabilitaria syscalls com base no conteúdo.
O problema é que seccomp_rule_add
espera que o usuário use SCMP_SYS
macro. Por exemplo, para permitir read
syscall, eu normalmente chamaria:
seccomp_rule_add(filter, SCMP_ACT_ALLOW, SCMP_SYS(read), 0);
e SCMP_SYS(read)
seria desdobrado para um número inteiro dependendo de uma arquitetura.
libseccomp trabalha com números de syscall; mesmo que não pedisse para usar SCMP_SYS (), você ainda precisaria trabalhar com macros como
__NR_read
em vez de nomes textuais.No entanto, você pode usar seccomp_syscall_resolve_name () em vez de executar a tradução de nomes de syscall para números em tempo de execução.
(Cuidado com algumas arquiteturas, incluindo x86 de 32 bits, usadas para ocultar accept() atrás de uma syscall "socketcall" multiplexada antes de começarem a fornecer seu próprio número.)