什么是交互式 shell 和非交互式 shell?
问题:创建一个不应获得交互式 shell 的用户 john。
我们应该怎么做?
答案1
该/etc/passwd
文件将登录时运行的程序作为用户行的最后一项。对于普通用户,这通常设置为/bin/sh
或其他 shell(例如 bash、zsh)。
传统上,用于拥有进程、文件或其他资源的身份将其“shell”设置/bin/false
为
syslog:x:101:102::/home/syslog:/bin/false
伪用户 syslog 拥有该/var/log/syslog
文件,并且是唯一具有该文件写入权限的 UID,但无法以用户 syslog 身份登录,因为没有要运行的命令解释器。
答案2
关于您试图回答的问题:
创建一个不应获得交互式 shell 的用户 john。
该问题的意思是“创建一个名为该用户的用户,john
该用户将无法登录并从 shell 运行命令”。交互式描述了 shell 的工作方式:用户键入某些内容,shell 相应地执行某些操作(用户和 shell 之间存在一种通信)。 “交互式”一词并没有真正为问题添加任何信息,因为只要有用户键入命令,shell 会话就是交互式的。
还有一种非交互模式,用户将想要运行的一系列命令保存在一个文件中(称为 shell 脚本),然后执行该文件。某些命令的行为有所不同,具体取决于 shell 是交互运行还是非交互运行。您可以阅读更多内容这里(本文档适用于bash
,但相同的概念也适用于其他 shell)。
关于如何创建这样的用户,如果您浏览一下,man useradd
就会有一个设置登录 shell 的选项,-s
或者--shell
.您还可以按照您想要的任何方式正常创建用户(我假设您已经知道?),然后/etc/passwd
像这样进行编辑msw的回答。
答案3
是的,将密码文件 (/etc/passwd) 中的 shell 更改为某个程序,该程序将不是不允许外壳逃脱。
如果你想成为博夫赫/bin/false 将会完全按照您的要求执行。
答案4
adduser john -s /sbin/nologin
此命令将用于创建无法获得交互式 shell 的用户。
交互式和非交互式 shell
交互式 shell 与用户交互。如果它是登录 shell,则执行 ~/.login 中的任何命令,如果它不是登录 shell(您可以生成交互式子 shell),则不评估 .login。
非交互式 shell 不与用户交互,但运行 shell 脚本。每当您调用 shell 脚本时,第一行(“shebang”#!/bin/bash)都会生成一个非交互式子 shell。所有非交互式 shell 都不是登录 shell,因此它们不会评估 .login。
根据定义,用户可以登录的任何 shell 都是交互式 shell。如果不是(例如 /bin/false 或 /bin/nologon),则用户无法登录。