Glassfish アプリケーションサーバーは、アプリケーションサーバーを管理し、それらを開始および停止するためのスクリプトを提供します。rootユーザーによるこのスクリプトの実行を制限したいと思います。その理由は、一部の主要な開発者がサーバーを非特権ユーザーとして管理することを忘れており、アプリケーションサーバーをrootユーザーとして再起動する場合、アプリケーションサーバーはrootユーザーによって実行される必要があるためです[*]。
ルートアクセスを許可することを回避するオプションはありません。開発者は、ローカルマシンでこれを行うのに慣れているため、忘れてしまいます。 asadmin
スクリプトを変更して非特権ユーザーとして実行するか、オプションでスクリプトがrootによって実行されるたびにエラーメッセージを表示するようにしたいと思います。
Bashシェルが使用されます。
[*]:ファイルの権限を修正しようとしましたが、rootが所有する多くのファイルを追跡し、それらをchmodしたにもかかわらず、アプリケーションで奇妙なエラーが発生し、rootとして再度実行する必要があります。
他の答えと同様ですが、あなたが望む方向にあります。
if [[ $EUID -eq 0 ]]; then
echo "This script must NOT be run as root" 1>&2
exit 1
fi
または、スクリプト内でSudo
を使用して、-u
フラグを使用して非特権ユーザーとして実行を強制し、実行するユーザーを指定することもできます。私はGlassfishを使用していませんが、これがプロトタイプの疑似スクリプトです。
#!/bin/bash
if [ $1 == "start" ]; then
Sudo -u nobody /usr/bin/glassfish
fi
うまくいけば、あなたはアイデアを得るでしょう。申し訳ありませんが、スクリプトがどのように表示されるか、または非特権ユーザーの名前がわかりません。
@Tshepangは正しい考えを持っています。どちらが最も移植性が高いかはわかりませんが、ユーザーがrootであるかどうかを検出する他の方法は次のとおりです。
id -u
$UID
または、同じパラメーターを使用して別のユーザーとして実行するように強制することもできます。
if [[ "$USER" != appuser ]]
then
exec Sudo -u appuser "$0" "$@"
fi