Bash는 그것이 어떻게 호출되었는지 어떻게 알 수 있습니까?

Bash는 그것이 어떻게 호출되었는지 어떻게 알 수 있습니까?

사용자 쉘을 설치 jailkit하고 설정 했지만 호출되면 대신 실행됩니다.Ubuntu 12.04/bin/bash/etc/bash.bashrc/etc/profile

이전에 사용해 본 적이 없다면 jailkit요점은 다음과 같습니다.

  1. 시스템 루트의 "jail" 버전이 /home/jail과 같은 어딘가에 생성됩니다.
  2. 감옥에 갇힌 사용자의 홈 디렉터리는 이 폴더 안으로 이동됩니다(예: /home/jail/home/testuser).
  3. 제한된 /etc/passwd를 포함하여 관련 구성 파일이 /home/jail/etc/에 복사됩니다.
  4. /bin/bash와 같은 적절한 디렉토리에 대한 액세스를 허용하려는 프로그램을 복사하십시오.
  5. 감옥에 갇힌 사용자가 로그인하면 /etc/jail/로 루트가 지정되어 해당 파일을 볼 수 없습니다.

그래서 다음과 같은 항목을 가진 사람이 있습니다 testuser./etc/passwd

testuser:x:1002:1003::/home/jail/./home/testuser:/usr/sbin/jk_chrootsh

파일에 /home/jail/etc/passwd다음과 같은 항목이 있습니다 .

testuser:1001:1003::/home/testuser:/bin/bash

나는 이것을 읽었 bash(1)으므로 bash가 로그인 쉘로 호출되지 않는다고 생각하는 것이 문제라고 생각합니다.

bash가 --login 옵션을 사용하여 대화형 로그인 셸 또는 비대화형 셸로 호출되면 먼저 /etc/profile 파일(파일이 있는 경우)에서 명령을 읽고 실행합니다.

bash실제로 호출된다는 것은 알지만 어떤 유형의 셸인지, 어떤 시작 파일 세트를 실행해야 하는지 확인하는 /usr/sbin/jk_chrootsh방법을 이해하지 못합니다 .bash

이 문제를 해결할 수 있는지 확인하고 싶지만 이해가 되지 않습니다.

Bash는 그것이 어떻게 호출되었는지 어떻게 알 수 있습니까?

ps: 저도 조사해 봤는데 login(1)운이 없더군요.

답변1

일반적으로 bash는 로그인 프로그램이 이를 호출할 때 bash에 이름을 알려주기 때문에 이것이 로그인 쉘임을 알고 있습니다 -bash. 이름은 argv[0]사용자가 프로그램을 호출하는 전통적인 방식인 0번째 명령줄 인수에 있습니다. 초기 하이픈은 로그인 쉘임을 쉘에 알리는 규칙입니다. --loginBash 에 옵션 이나 -l. 바라보다로그인 쉘과 비로그인 쉘의 차이점은 무엇입니까?자세한 내용은.

Jailkit 2.16부터 jk_chrootsh호출할 셸의 절대 경로는 다양한 소스에서 읽어와 argv[0]자체 명령줄 인수와 함께 이 경로로 전달됩니다. jk_chrootsh의도된 일반적인 사용 사례 에서는 /etc/passwd이와 같은 매개변수를 전달할 수 없습니다 -l. 절대 경로는 로그인 -쉘로 시작하지 않기 때문에 작은 중개 프로그램을 제외하고는 로그인 쉘을 호출할 수 있는 방법이 없습니다 jk_chrootsh.

#include <unistd.h>
int main () {
    execl("/bin/bash", "-bash", NULL);
    return 127;
}

jk_chrootsh로그인 셸을 호출하는 쉬운 방법이 있기를 바랐습니다 . 기능 요청을 제출하는 것이 좋습니다.

답변2

loginargv[0]로 시작하는 사용자의 로그인 명령/셸을 호출합니다 -. 쉘은 이를 검사하여 argv[0]로그인 쉘로 호출되었는지 여부를 판별합니다.

@slm이 말했듯이 매뉴얼의 "통화" 섹션에 명시적으로 지정되어 있습니다 bash.

또한 csh, tcsh, ksh, zsh, 와 같은 일부 쉘이 있습니다.yash, bashAlmquist 셸의 일부 변형은 첫 번째 인수와 혼합하지 않고 -l이 모드를 활성화하는 옵션을 지원합니다. login사용하지 마십시오 login. 그러나 사용하기 어려운 것을 피하고 싶다면 argv[0]그래픽 로그인 관리자가 사용하는 것을 본 적이 있습니다.

답변3

보세요배쉬 매뉴얼 페이지. 그들은 거기에서 그것을 어떻게 부르는지에 대한 차이점을 논의했습니다. 이 부분을 이라고 합니다부르다. 이를 호출하는 두 가지 주요 방법은 로그인 셸( bash -l)과 대화형 셸( bash -i)입니다.

다음 제목의 다른 Unix 및 Linux Q&A를 살펴보세요.로그인 쉘과 비로그인 쉘의 차이점은 무엇입니까?. 질문하신 내용을 거의 정확하게 다루고 있습니다.

관련 정보