Número limite de execuções de programa

3

Por favor, ajude-me a descobrir como limitar o número de execuções simultâneas do programa. Quer dizer, programa específico pode ser executado apenas, por exemplo, 5 vezes de uma só vez. Eu sei como limitar o número do processo para o usuário, mas como fazer isso para o programa, usando o PAM?

    
por Michocio 15.01.2017 / 23:22

1 resposta

3

O PAM é usado para autorizar logins e modificações na conta. Não é de todo relevante restringir um programa específico.

A única maneira de aplicar um limite ao número de vezes que um programa pode ser executado é invocá-lo por meio de um wrapper que aplique esse limite. Os usuários podem, obviamente, ignorar esse wrapper, tendo sua própria cópia do programa; se você não quiser, não dê conta aos usuários em sua máquina.

Para restringir um programa a uma única instância, você pode fazer um bloqueio exclusivo em um arquivo. Não existe uma maneira simples de usar um arquivo para permitir um número limitado de instâncias, mas você pode usar 5 arquivos para permitir 5 instâncias e fazer o script de wrapper tentar cada arquivo separadamente. Crie um diretório /var/lib/myapp/instances (ou onde quer que você queira colocá-lo) e crie 5 arquivos nele, todos legíveis, mas somente graváveis pelo root.

umask 022
mkdir /var/lib/myapp
touch /var/lib/myapp/instances/{1,2,3,4,5}

Wrapper script (substitua myapp.original pelo caminho do executável original), usando o % do Linux utilitárioflock :

#!/bin/sh
for instance in /var/lib/myapp/instances; do
  flock -w 0 -E 128 "$instance" myapp.original "$@"
  ret=$?
  if [ "$ret" -ne 128 ]; then exit "$ret"; fi
done
echo >&2 "Maximum number of instances of myapp reached."
exit 128
    
por 16.01.2017 / 00:09