web-dev-qa-db-ja.com

インタラクティブデーモンログインを作成するにはどうすればよいですか?

起動時にいつでも接続できる「screen」セッションで実行されるdebian/linuxマシンでサービスを実行します。

このサービスを実行できるユーザー名を作成したいと思います。現時点では、「通常の」ログインアカウントを使用しています。このサービス専用のユーザー名のセキュリティを追加したい(「nobody」または「web」がApacheで使用される方法と同様)。

要件:

  • ローカルまたはリモートでログインする機能がない(したがって、管理するパスワードがない)
  • 承認されたユーザーが画面セッションにアクセスし、サービスと対話する機能。

このソリューションでは、su/Sudoをクリエイティブに使用し、アカウントの作成方法の詳細を説明すると思います。

2
John McAleely

まず、screenセッションが実行されるアカウント(たとえば、screenimageと呼ばれる)と、それを使用できるユーザーのグループ(たとえば、screenusers)を作成します。

adduser --system --group screenimage
addgroup --system screenusers

次に、使用を許可されたユーザーごとに、それらをscreenusersグループに追加します。

adduser USER screenusers

次に、承認されたユーザーを/etc/sudoersに追加します。visudoを実行し、行を追加します

%screenusers ALL = (screenimage) /usr/bin/screen

ETA:この投稿の他の回答に対処するには:--systemはシェルまたはパスワードなしでアカウントを作成します。 sudoers行は、screenユーザーのみとして、ユーザーがscreenimageの実行に固定されていることを意味します。

5

ユーザーの作成は簡単です。 adduserスクリプトを使用してユーザーを追加し(これはDebian固有ですが、タグに含まれていることに気付きました)、そのユーザーの結果の/ etc/passwd行を編集するだけです。 x!に変更すると、パスワードが有効と一致しないようになります。 /bin/bash/bin/falseに変更して、誰かがこのユーザーとしてログインした場合にシェルを取得しないようにします。

残りの部分については、実行しようとしているサービスや、サービスとの対話方法によって異なります。スクリーンセッションで実行するよりも、おそらくそれを解決するためのより良い方法があるように感じます。

2
Mykroft

OK、どうですか(/etc/rc.something内):

Sudo -u user screen -d -m service

ser's Shellを/bin/falseに設定します。

1
Alnitak