Definindo ulimits sem o PAM

3

Como fazer isso? Sem o PAM no meu sistema operacional GNU / Linux, o número de arquivos abertos é 1024 por padrão e não pode ser aumentado acima de 4096 (via comando ulimit -n NNNN ), desconsiderando o que está escrito em /etc/security/limits.conf. Então, como funciona sem o PAM e como definir limites nesse caso?

=== upd ===

Eu decidi usar o PAM. Para aqueles que desejam exceder o limite de arquivos abertos sem o PAM, procure a constante RLIMIT_NOFILE em include/asm-generic/resource.h e INR_OPEN_MAX in include/linux/fs.h , que define o número de 4096 arquivos como limite rígido para rlimits. Verifique também CAP_SYS_RESOURCE, que é necessário para poder chamar setrlimit() em um sistema em execução para exceder o limite. Parece que não há como fazer uma chamada de sistema como setrlimit() no bash, mas ela pode ser implementada como um arquivo executável binário. Ou você pode fazer um patch no kernel.

    
por tijagi 23.11.2012 / 21:19

1 resposta

4

Na verdade, você só precisa executar o syscall (que é o que o comando ulimit faz) com o recurso CAP_SYS_RESOURCE.

Existem dois valores distintos para cada limite: hard e soft. Soft pode ser aumentado até mesmo pelo usuário até o limite rígido. O limite rígido só pode ser aumentado com privilégios adequados (para alguns recursos, ele não pode ser aumentado com o limite do kernel). Veja man getrlimit para informações mais detalhadas.

A maneira mais fácil de fazer isso é executá-lo pela raiz (ou seja, ao longo das linhas: su root; ulimit; su user - primeiro tornar-se root, de lá mudar limites e su voltar para o usuário apropriado), a maneira segura é ter um binário que teria apenas o conjunto de recursos mencionado acima (consulte man setcap e man capabilities ) e direitos de acesso adequados.

No seu caso, o limite rígido é 4096, então você não pode ir além disso sozinho (como usuário).

    
por 23.11.2012 / 22:36

Tags