特権ユーザー以外のユーザーとして、Linux で init.d スクリプトを使って Nessus を実行する
制限
ローカルホストをスキャンする場合、Nessus プラグインは root として実行されていると想定します。したがって、特定タイプのスキャンは失敗する場合があります。たとえば、特権ユーザー以外で Nessus が実行される場合、プラグインがすべてのディレクトリにアクセスできないため、ファイルコンテンツのコンプライアンス監査は失敗するか、間違った結果を返すことがあります。
nessuscli には --no-root モードがないため、root として nessuscli を使用するコマンドを実行すると、root が所有する Nessus インストールディレクトリにファイルが作成され、Nessus がこれらのファイルに正常にアクセスできなくなる可能性があります。nessuscli を実行する場合は注意が必要です。使用後に chown でアクセス許可を修正することもできます。
手順
- まだ行っていない場合は Nessus をインストールします。
-
Nessus サービスを実行する root 以外のアカウントを作成します。
sudo useradd -r -m nonprivuser
-
/sbin ディレクトリの Nessus バイナリで「world」アクセス許可を削除します。
sudo chmod 750 /opt/nessus/sbin/*
-
/opt/nessus の所有者を root ユーザー以外に変更します。
sudo chown nonprivuser:nonprivuser -R /opt/nessus
-
nessusd と nessus サービスの機能を設定します。
ヒント:
cap_net_admin を使用してインターフェースをプロミスキャスモードにします。
パケットフォージェリ用の raw ソケットを作成するには、cap_net_raw を使用します。
リソース制限を設定するには、cap_sys_resource を使用します。
これが管理ツールにすぎず、この Nessus インストールのインスタンスにスキャンを実行させない場合、このインスタンスにリソース制限の変更機能のみを付与する必要があります。
sudo setcap "cap_sys_resource+eip" /opt/nessus/sbin/nessusd
sudo setcap "cap_sys_resource+eip" /opt/nessus/sbin/nessus-service
この Nessus のインスタンスにスキャンを実行させる場合は、パケットフォージェリを許可し、インターフェースでプロミスキャスモードを有効にするための権限をさらに追加する必要があります。
sudo setcap "cap_net_admin,cap_net_raw,cap_sys_resource+eip" /opt/nessus/sbin/nessusd
sudo setcap "cap_net_admin,cap_net_raw,cap_sys_resource+eip" /opt/nessus/sbin/nessus-service
-
次のラインを
/etc/init.d/nessusd
スクリプトに追加します。CentOSdaemon --user=nonprivuser /opt/nessus/sbin/nessus-service -q -D --no-root
Debianstart-stop-daemon --start --oknodo --user nonprivuser --name nessus --pidfile --chuid nonprivuser --startas /opt/nessus/sbin/nessus-service -- -q -D --no-root
お使いのオペレーティングシステムに応じて、追加後のスクリプトは次のように表示されます。
CentOSstart() {
KIND="$NESSUS_NAME"
echo -n $"Starting $NESSUS_NAME : "
daemon --user=nonprivuser /opt/nessus/sbin/nessus-service -q -D --no-root
echo "."
return 0
}
Debianstart() {
KIND="$NESSUS_NAME"
echo -n $"Starting $NESSUS_NAME : "
start-stop-daemon --start --oknodo --user nonprivuser --name nessus --pidfile --chuid nonprivuser --startas /opt/nessus/sbin/nessus-service -- -q -D --no-root
echo "."
return 0
}
-
nessusd を開始します。
このステップで Nessus は root として開始しますが、init.d は Nessus を nonprivuser として開始させます。
sudo service nessusd start
注意 : Debian で Nessus を実行している場合、Nessus の開始後に、
chown -R nonprivuser:nonprivuser /opt/nessus
コマンドを実行しランタイムに作成されたディレクトリの所有権を再取得します。