対話型シェルと非対話型シェルとは何ですか?
質問:インタラクティブシェルを取得しないユーザーjohnを作成します。
どうすればよいですか?
/etc/passwd
ファイルには、ユーザーの行の最後の項目として、ログイン時に実行されるプログラムがあります。通常のユーザーの場合、これは通常/bin/sh
または他のシェル(bash、zshなど)に設定されます。
従来、プロセスやファイル、またはその他のリソースを所有するために使用されるIDは、「シェル」が/bin/false
に設定されています。
syslog:x:101:102::/home/syslog:/bin/false
疑似ユーザーsyslogは/var/log/syslog
を所有し、そのファイルへの書き込み権限を持つ唯一のUIDですが、実行するコマンドインタープリターがないため、ユーザーsyslogとしてログインできません。
あなたが答えようとしている質問に関して:
対話型シェルを取得しないユーザーjohnを作成します。
質問は、「ログインしてシェルからコマンドを実行できないjohn
という名前のユーザーを作成する」という意味です。インタラクティブは、シェルの動作方法を説明します。ユーザーが何かを入力すると、シェルがそれに応じて何かを実行します(ユーザーとシェルの間に一種の通信があります)。ユーザーがコマンドを入力している限り、シェルセッションは対話型であるため、「対話型」という単語は実際には質問に情報を追加しません。
非対話型モードもあります。ユーザーは、実行する一連のコマンドをファイル(シェルスクリプトと呼ばれます)に保存し、後でファイルを実行します。シェルがインタラクティブに実行されるか非インタラクティブに実行されるかによって、一部のコマンドの動作は異なります。詳細は here を参照してください(このドキュメントはbash
を対象としていますが、同じ概念が他のシェルにも適用されます)。
このようなユーザーを作成する方法について、man useradd
をざっと見れば、ログインシェル-s
または--Shell
を設定するオプションがあります。また、通常どおりユーザーを作成し、必要に応じて(既に知っていると思いますが)、次に/etc/passwd
を msw's answer のように編集します。
はい、パスワードファイル(/ etc/passwd)のシェルを、シェルエスケープをできないプログラムに変更します。
bofh /bin/falseになりたい場合は、まさにあなたが望むことをします。
adduser username -s /sbin/nologin