대화형 셸과 비대화형 셸이란 무엇입니까?
문제: 대화형 쉘을 가져오지 말아야 하는 사용자 john을 생성하십시오.
우리는 무엇을 해야 합니까?
답변1
이 /etc/passwd
파일에는 로그인 시 사용자 행의 마지막 항목으로 실행되는 프로그램이 있습니다. 일반 사용자의 경우 일반적으로 /bin/sh
또는 다른 쉘(예: bash, zsh)로 설정됩니다.
전통적으로 프로세스, 파일 또는 기타 리소스를 소유하는 데 사용되는 ID에는 "셸"이 다음 /bin/false
으로 설정되어 있었습니다.
syslog:x:101:102::/home/syslog:/bin/false
의사 사용자 syslog는 /var/log/syslog
파일을 소유하고 파일에 대한 쓰기 권한이 있는 유일한 UID이지만 실행할 명령 해석기가 없기 때문에 사용자 syslog로 로그인할 수 없습니다.
답변2
답변하려는 질문에 관해:
대화형 셸을 가져오지 말아야 하는 사용자 john을 만듭니다.
질문은 " john
쉘에서 로그인하고 명령을 실행할 수 없는 이 사용자라는 사용자를 생성하십시오"를 의미합니다. Interactive는 쉘이 작동하는 방식을 설명합니다. 즉, 사용자가 무언가를 입력하면 쉘이 그에 대한 응답으로 무언가를 수행합니다(사용자와 쉘 사이에는 일종의 통신이 있습니다). 사용자가 명령을 입력하는 한 쉘 세션은 대화형이기 때문에 "대화형"이라는 단어는 실제로 질문에 아무것도 추가하지 않습니다.
사용자가 실행하려는 일련의 명령을 파일(셸 스크립트라고 함)에 저장한 다음 파일을 실행하는 비대화형 모드도 있습니다. 일부 명령은 쉘이 대화식으로 실행되는지 또는 비대화식으로 실행되는지에 따라 다르게 작동합니다. 더 읽어보실 수 있습니다여기(이 문서는 에 적용되지만 bash
다른 셸에도 동일한 개념이 적용됩니다.)
이와 같은 사용자를 생성하는 방법에 대해서는 탐색하면 man useradd
로그인 셸을 설정하는 옵션이 있습니다 . -s
또는 --shell
원하는 방식으로 일반적으로 사용자를 생성할 수도 있습니다(이미 알고 있다고 가정합니까?) /etc/passwd
. 이 편집msw의 답변.
답변3
예, 비밀번호 파일(/etc/passwd)의 쉘을 다음을 수행하는 프로그램으로 변경하십시오.아니요쉘은 탈출이 허용되지 않습니다.
당신이되고 싶다면보베/bin/false는 귀하가 요청한 작업을 정확하게 수행합니다.
답변4
adduser john -s /sbin/nologin
이 명령은 대화형 쉘을 얻을 수 없는 사용자를 생성하는 데 사용됩니다.
대화형 및 비대화형 쉘
대화형 셸은 사용자와 상호 작용합니다. 로그인 셸인 경우 ~/.login의 모든 명령이 실행되고, 로그인 셸(대화형 하위 셸을 생성할 수 있음)이 아닌 경우 .login은 평가되지 않습니다.
비대화형 쉘은 사용자와 상호작용하지 않지만 쉘 스크립트를 실행합니다. 쉘 스크립트를 호출할 때마다 첫 번째 줄("shebang" #!/bin/bash)은 비대화형 하위 쉘을 생성합니다. 모든 비대화형 쉘은 로그인 쉘이 아니므로 .login을 평가하지 않습니다.
정의에 따르면 사용자가 로그인할 수 있는 모든 쉘은 대화형 쉘입니다. 그렇지 않은 경우(예: /bin/false 또는 /bin/nologon) 사용자는 로그인할 수 없습니다.