権限のないユーザーとして FreeBSD で Nessus を実行する

制限

  • ローカルホストをスキャンする場合、Nessus プラグインは root として実行されていると想定します。したがって、特定タイプのスキャンは失敗する場合があります。たとえば、特権ユーザー以外で Nessus が実行される場合、プラグインがすべてのディレクトリにアクセスできないため、ファイルコンテンツのコンプライアンス監査は失敗するか、間違った結果を返すことがあります。
  • nessuscli には --no-root モードはありません。root として nessuscli を使用するコマンドを実行すると、root が所有する Nessus インストールディレクトリにファイルが作成され、Nessus がこれらのファイルに適切にアクセスできなくなる可能性があります。nessuscli を実行する場合は注意が必要です。使用後に chown でアクセス許可を修正することもできます。

注意: 特記されない限り、次のコマンドは root のログインシェルで実行します。

  1. まだ実行していない場合は、Nessus on FreeBSD をインストールします。
    pkg add Nessus-*.txz
  2. Nessus サービスを実行する root 以外のアカウントを作成します。
    この例では、ユーザーが nonprivgroupnonprivuser を作成します。
    # adduser
    Username: nonprivuser
    Full name: NonPrivUser
    Uid (Leave empty for default):
    Login group [nonprivuser]:
    Login group is nonprivuser.Invite nonprivuser into other groups?[]:
    Login class [default]:
    Shell (sh csh tcsh bash rbash nologin) [sh]:
    Home directory [/home/nonprivuser]:
    Home directory permissions (Leave empty for default):
    Use password-based authentication?[yes]:
    Use an empty password?(yes/no) [no]:
    Use a random password?(yes/no) [no]:
    Enter password:
    Enter password again:
    Lock out the account after creation?[no]:
    Username : nonprivuser
    Password : *****
    Full Name :NonPrivUser
    Uid :1003
    Class :
    Groups : nonprivuser
    Home : /home/nonprivuser
    Home Mode :
    Shell : /bin/sh
    Locked : no
    OK?(yes/no): yes
    adduser:INFO:Successfully added (nonprivuser) to the user database.
    Add another user?(yes/no): no
    Goodbye!
  3. /sbin ディレクトリの Nessus バイナリで「world」アクセス許可を削除します。
    chmod 750 /usr/local/nessus/sbin/*
  4. /opt/nessus の所有者を root ユーザー以外に変更します。
    chown -R nonprivuser:nonprivuser /usr/local/nessus
  5. /dev/bpf デバイスへのアクセス権を root ユーザー以外に付与し、raw socket を使用できるようにするためのグループを作成します。
    pw groupadd access_bpf
    pw groupmod access_bpf -m nonprivuser
  6. nonprivuser がグループに表示されていることを確認します。
  7. # pw groupshow access_bpf
    access_bpf:*:1003:nonprivuser

  8. 次に、システム制限値を確認します。
    ulimit -a コマンドを使用して、各パラメーターが次の値以上であることを確認します。
    この例は、FreeBSD 10 の値を示しています。
    # ulimit -a
    cpu time           (seconds, -t)       unlimited
    file size          (512-blocks, -f)    unlimited
    data seg size      (kbytes, -d)        33554432
    stack size         (kbytes, -s)        524288
    core file size     (512-blocks, -c)    unlimited
    max memory size    (kbytes, -m)        unlimited
    locked memory       (kbytes, -l)        unlimited
    max user processes  (-u)                6670
    open files          (-n)                58329
    virtual mem size    (kbytes, -v)        unlimited
    swap limit          (kbytes, -w)        unlimited
    sbsize              (bytes, -b)         unlimited
    pseudo-terminals    (-p)                unlimited
  9. ステップ 6 の値が最小要件を満たさない場合、次のステップに沿って値を変更します。

    テキストエディターを使用して、/etc/sysctl.conf ファイルを編集します。
    次に、service コマンドを使用して、sysctl サービスを再起動します。
    service sysctl restart

    別な方法として、システムを再起動することもできます。
    ulimit -a コマンドを再び使用して、新しい最小必要値を確認します。
  10. 次に、テキストエディターを使用して、/usr/local/etc/rc.d/nessusd サービススクリプトを変更して以下の行を削除および追加します。
    削除 : /usr/local/nessus/sbin/nessus-service -D -q
    追加 : chown root:access_bpf /dev/bpf
    追加 : chmod 660 /dev/bpf
    追加 : daemon -u nonprivuser /usr/local/nessus/sbin/nessus-service -D -q --no-root

    変更後のスクリプトは次のように表示されます。
  11. nessusd_start() {
    echo 'Starting Nessus...'
    chown root:access_bpf /dev/bpf
    chmod 660 /dev/bpf
    daemon -u nonprivuser /usr/local/nessus/sbin/nessus-service -D -q --no-root
    }

    nessusd_stop() {
    test -f /usr/local/nessus/var/nessus/nessus-service.pid && kill `cat /usr/local/nessus/var/nessus/nessus-service.pid` && echo 'Stopping Nessus...' && sleep 3
    }