root 以外のユーザーとして ircd-hybrid サーバーを実行します。

root 以外のユーザーとして ircd-hybrid サーバーを実行します。

新しいCentOS 7システムにircd-hybridをインストールし、通常のユーザーを介して実行できますが、より低い権限を持つ私のユーザーとして実行したいと思います(例:/ etc / ircdの外部では書き込みアクセスできません)。 Googleと数時間の試行錯誤の最後に、次の方法が見つかりました。

su - <user> -c <command>

「nobody」のようなシェルやパスワードなしでユーザーとして実行したいので、パスワードが必要なため、これは失敗します(常に失敗します)。

daemon --user=<user> <command>

「デーモン」はコマンド以外の関数なので、/etc/init.d/functionssudo(スクリプトの実行に必要)または起動スクリプトで実行すると見つからないため失敗します。

runuser -u <user> <command>
sudo -u <user> <command>

これらは私が知っている限り近いと同じように動作します。オプションなしで実行すると機能します。

sudo -u nobody '/etc/ircd/ircd'

ただし、設定ファイルがないため、ircd はすぐに終了します。あるいは、少なくとも私の考えにはそのようなことが起こっていると思います。 ps -aux | grep irc通常のユーザーとして実行しても、grepプロセスのみが返されます。

sudo -u nobody '/etc/ircd/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log'

ただし、引数が 1 つまたは 2 つある場合は、次を返します。

sudo: /etc/ircd/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log: command not found

同じコマンド減算を実行すると、期待sudo -u nobodyどおりに正しく動作します。

私が逃したものは何ですか?別のユーザーとしてデーモンを起動するのはなぜそれほど難しいのですか?

修正する:Arthur2e5のコメントのおかげで、これはデーモンを「nobody」(引用符を省略)で開始する直接コマンドとして機能します。

sudo -u nobody /etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log

しかし、元の目標はこれを起動スクリプトとして実行することであり、sudoはオプションではありません(Jun 13 07:03:00 coldcandor.com sudo[5335]: sudo: sorry, you must have a tty to run sudo)。この場合、runuserが唯一の方法のように見えますが、同じ方法を試してみると、次のような結果が得られます。

$ runuser -u nobody /etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log
runuser: invalid option -- 'o'

Usage:
 runuser [options] -u <USER> COMMAND
 runuser [options] [-] [USER [arg]...]

別の構文を試しても役に立ちませんでした(runuserが実行するにはrootが必要なので、rootアカウントで実行するとき)。

$ runuser - nobody /etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log
runuser: invalid option -- 'o'


$ runuser - nobody '/etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log'
This account is currently not available.

最後の魔法は何ですか?

ベストアンサー1

別の構文でより多くのことを行い、manページを再度掘り下げて-sオプションを見つけました。ハレルヤ!スタートアップサービスとして実行されます!

/sbin/runuser -s /bin/sh - nobody -c '/etc/ircd/bin/ircd -configfile /etc/ircd/ircd.conf -logfile /var/log/ircd/ircd.log'

私が気にする唯一のことはこれです。誰かが今シェルを使って実行するように強制すると、セキュリティが損なわれますか?そうでないようで、マニュアルページにも警告はありません。

これがログファイルへの書き込みを許可しないことがわかっているので、/var/log/ircdディレクトリを所有するircという新しいユーザー:グループを作成し、ホームを/etc/ircdに設定し、シェルを/に設定します。スビン/ノログイン。

おすすめ記事