Limites do descritor de arquivo em / etc / system vs /etc/sysctl.conf vs /etc/security/limits.conf no Solaris

3

Deixe-me explicar primeiro o que entendi.

No Solaris 10, rlim_fd_max e rlim_fd_cur in /etc/system definem os limites de hardware e software no nível do sistema.

E /etc/security/limits.conf define os limites para login , certo? Então, para um usuário, ele sobrescreve os limites definidos por /etc/system . Se os limites não estiverem definidos em /etc/security/limits.conf , o usuário terá os valores em /etc/system , certo?

Então, o que é /etc/sysctl.conf ?

No meu Solaris 10, não tenho sysctl.conf ou limits.conf . Neste caso, como posso definir limites para usuários individuais que são persistidos após a reinicialização? Qualquer outro mecanismo que não seja defini-los em profile ?

    
por GP92 05.06.2015 / 13:37

1 resposta

1

Os parâmetros rlim_fd_cur e rlim_fd_max in /etc/system não são mais recomendados com o Solaris 10 e encaminhar. Deve ser usado o controle de recursos process.max-file-descriptor , que substitui a comunicação entre processos do System V. O advento é que a reinicialização do servidor não é mais necessária e você pode usar projetos sem afetar outros processos.

Em seguida, para alterar o limite rígido do projeto user.root é necessário também definir o nível de privilégio priv (o limite máximo) como o seguinte comando:

# projmod -s -K "process.max-file-descriptor=(priv,4096,deny)" user.root

Para alterar o limite flexível do projeto user.other , é necessário também definir o nível de privilégio como:

$ projmod -s -K "process.max-file-descriptor=(basic,1024,deny)" user.other

Os projetos podem ser encontrados no arquivo /etc/project .

Este é um exemplo de projadd (para criar) e projmod (para definir):

# useradd test
# projadd -c "Test" 'user.test'
# projmod -s -K "project.max-shm-memory=(privileged,6GB,deny)" 'user.test'
# projmod -s -K "process.max-file-descriptor=(basic,1024,deny)" user.test
# cat /etc/project|grep -i test
user.test:101:Test:::process.max-file-descriptor=(basic,1024,deny);project.max-shm-memory=(privileged,6442450944,deny)
#

projadd e projmod são valores persistentes. Para valores não persistentes, você deve usar o comando prctl .

Exemplo:

# prctl -n project.max-shm-memory -v 8gb -r -i project default 
# prctl -n project.max-shm-memory -i project default 
project: 3: default 
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT 
project.max-shm-memory 
usage 8.49MB 
privileged 8.00GB - deny - 
system 16.0EB max deny - 

/etc/security/limits.conf e /etc/sysctl.conf são arquivos do Linux.

limits.conf define limites nos recursos do sistema em uma sessão de usuário no módulo pam_limits PAM. - > Isso é semelhante a projmod .

sysctl.conf é o arquivo que sysctl usa para modificar os parâmetros do kernel no tempo de execução. - > Isso é semelhante para modificar o /etc/system .

Se o usuário não tiver restrições sobre limits.conf , os valores padrão serão obtidos de: Kernel: init process Herdado: processo pai (configurações de fornecedores estão em /usr/lib/sysctl.d/ ) PAM: limits.conf (pode substituir o kernel e herdado) Processar por si só (pode substituir PAM, Kernel e Inherited, " getrlimit , setrlimit , prlimit - obter / definir limites de recursos").

As alterações em limits.conf e sysctl.conf são persistentes.

Para definir limites para um usuário individual, você deve editar o arquivo limits.conf . Como:

{account} soft as size (KB)
{account} hard as size (KB)

Exemplo:

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

A reinicialização não é necessária para a modificação de limits.conf, mas os novos parâmetros serão aplicados apenas às novas sessões.

Se você quiser modificar um processo em execução, use prlimit . Como:

prlimit --pid <pid> --<limit>=<soft>:<hard>

Exemplo:

prlimit --pid 12345 --nofile=1024:2048
    
por 20.10.2017 / 22:52