Nesse caso, parece que spawn
refere-se à extensão spawn
à sintaxe hosts.allow
, conforme descrito na seção RUNNING OTHER COMMANDS
da página man hosts_options (5) ( man hosts_options
):
RUNNING OTHER COMMANDS
aclexec shell_command
Execute, in a child process, the specified shell command, after
performing the %<letter> expansions described in the
hosts_access(5) manual page. The command is executed with
stdin, stdout and stderr connected to the null device, so that
it won't mess up the conversation with the client host. Example:
smtp : ALL : aclexec checkdnsbl %a
executes, in a background child process, the shell command
"checkdnsbl %a" after replacing %a by the address of the remote
host.
The connection will be allowed or refused depending on whether
the command returns a true or false exit status.
spawn shell_command
Execute, in a child process, the specified shell command, after
performing the %<letter> expansions described in the
hosts_access(5) manual page. The command is executed with
stdin, stdout and stderr connected to the null device, so that
it won't mess up the conversation with the client host. Example:
spawn (/usr/sbin/safe_finger -l @%h | /usr/bin/mail root) &
executes, in a background child process, the shell command
"safe_finger -l @%h | mail root" after replacing %h by the name
or address of the remote host.
O fato de spawn
retornar um erro quando você tenta executá-lo fora desse contexto (isto é, como um comando no shell) não precisa preocupar com você - se você está tendo problemas com a operação adequada do script de filtragem GeoIP uma questão separada.
Para demonstrar a operação bem-sucedida da extensão hosts.allow spawn
no Ubuntu 14.04 sem ficar emaranhada no GeoIP, você pode criar um script /usr/local/bin/sshfilter.sh executável mínimo que simplesmente registra o endereço IP e, em seguida, retorna 0, por exemplo,
#!/bin/sh
logger "$0: connection from $1"
exit 0
Depois, com as seguintes linhas adicionadas aos arquivos hosts:
Em hosts.deny:
sshd: ALL
Em hosts.allow:
sshd: ALL: spawn /usr/local/bin/sshfilter.sh %a
Em seguida, execute
tail -f /var/log/syslog
em uma janela de terminal e, em outra, tente efetuar login via SSH:
ssh localhost
Você deve ver uma mensagem na cauda do syslog como
Jul 25 08:03:59 T61p logger: /usr/local/bin/sshfilter.sh: connection from 127.0.0.1
Você pode confirmar que ele também funciona com aclexec
no lugar de spawn
, conforme sugerido no artigo vinculado. Na verdade, neste caso, você deve usar aclexec
, pois spawn
não usa o código de saída do processo gerado para determinar se deve permitir a conexão - qual aclexec
.