Acabei de compilar o código fonte de um programa chamadoJohnO Estripador. Atualmente, se eu quiser rodar, john
preciso cd
entrar no run/
diretório e executá-lo com ./john
. No entanto, eu preferiria poder executar o john
comando a partir de qualquer diretório, como se estivesse instalado em todo o sistema. Não posso criar um alias para isso, porque preciso passar parâmetros para o binário. Então tentei fazer um pequeno script de shell.
#!/bin/bash
/home/username/tools/JohnTheRipper/run/john $@
Coloquei esse script /usr/local/bin
para que fique no meu caminho. Este script funciona, masAPENASse eu executá-lo especificando o caminho.
$ ls john -la
-rwxr-xr-x 1 root root 56 Mar 20 03:54 john
$ ./john --test
Will run 4 OpenMP threads
Benchmarking: descrypt, traditional crypt(3) [DES 256/256 AVX2-16]... (4xOMP)
...
Não funcionará se eu tentar executá-lo usando a $PATH
variável de ambiente
$ which john
/usr/local/bin/john
$ john --test
bash: syntax error near unexpected token `--test'
Por que isso acontece? Por que os argumentos da linha de comando não estão sendo passados para meu script de shell? E como posso configurá-lo para poder executar o john
comando a partir de qualquer diretório, permitindo-me passar argumentos?
ObservaçãoA solução deve ser capaz de aceitar caminhos relativos ao passar parâmetros para John. Por exemplo, se eu estiver no diretório d/
com um arquivo, wordlist.txt
quero poder executar john assim:
john --wordlist=./wordlist.txt
Responder1
Ocomentário de Kamil Maciorowskime ajudou a resolver esse problema. Foi um erro do usuário.
$ type -a john
john is aliased to `(cd ~/tools/JohnTheRipper/run/ && ./john )'
john is /usr/local/bin/john
Acima você pode ver a saída de type -a
. Originalmente, criei um alias que usava um subscrito e, quando isso não funcionou, tentei criar um link simbólico para o executável, tentei diferentes aliases e tentei criar o script mencionado acima. No entanto, nada disso funcionou porque toda vez que eu fazia uma alteração, .bashrc
eu executava
$ source .bashrc
Eu não sabia que isso source
não substituiria meu john
alias original ... Como os aliases têm precedência sobre a $PATH
variável, esse tempo todo john
estava executando o mesmo subshell original que não aceitava argumentos. Ao executar unalias john
, agora tudo funciona.
OBSERVAÇÃOQuando se trata de fazer um link simbólico no /usr/local/bin
, concordo que esta seria uma alternativa melhor, mas infelizmente não funciona nesta situação, como você pode ver na saída a seguir:
$ ls -la john
lrwxrwxrwx 1 root root 39 Mar 20 12:31 john -> /home/username/tools/JohnTheRipper/run/john
$ john --test
fopen: $JOHN/john.conf: No such file or directory