Normalmente, o bash sabe que é um shell de login, porque quando o programa de login o invoca, diz ao bash que seu nome é -bash
. Esse nome está no argv[0]
, o argumento da linha de comando do zeroth, que é convencionalmente o modo como o usuário invocou o programa. O hífen inicial é uma convenção para dizer ao shell que ele é um shell de login. O Bash também se comporta como um shell de login se você passar a opção --login
ou -l
. Consulte Diferença entre o Shell de Login e o Shell de Não Login para mais detalhes.
A partir do Jailkit 2.16, jk_chrootsh
lê o caminho absoluto para o shell a ser chamado de várias origens e passa esse caminho como argv[0]
e passa seus próprios argumentos de linha de comando para esse shell. No caso de uso normal, em que jk_chrootsh
é usado em /etc/passwd
, não há como passar um argumento como -l
. Como o caminho absoluto não começa com -
, não há como fazer com que jk_chrootsh
invoque um shell de login, mesmo usando um minúsculo programa intermediário.
#include <unistd.h>
int main () {
execl("/bin/bash", "-bash", NULL);
return 127;
}
Eu esperava que jk_chrootsh
tivesse uma maneira fácil de invocar um shell de login. Sugiro fazer uma solicitação de recurso.