创建无法获得交互式 shell 的用户

创建无法获得交互式 shell 的用户

什么是交互式 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),则用户无法登录。

相关内容