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.