Go to main content

Oracle® Solaris 11.4 でのユーザーとプロセスのセキュリティー保護

印刷ビューの終了

更新: 2018 年 8 月
 
 

ユーザーからの特権の削除

特定の状況では、標準ユーザーまたはゲストユーザーから特権を削除できます。たとえば、リモートユーザーに対してそのユーザーが所有していないプロセスのステータスを確認できないようにしたり、個々のユーザーが自分のプロセスを強調表示するために同様の処理を行なったり、ゲストが多くのリソースを使いすぎないようにしたりする場合があります。

ユーザーから不要な基本特権を削除する方法

特定の状況では、標準ユーザーまたはゲストユーザーの基本セットから一部の基本特権を削除できます。たとえば、リモートユーザーは自分が所有していないプロセスのステータスを確認できない場合があります。

始める前に

root 役割になる必要があります。詳細は、割り当てられている管理権利の使用を参照してください。

  1. 基本特権セットの完全な定義を一覧表示します。

    次の 3 つの基本特権は、削除の対象になる可能性があります。

    $ ppriv -lv basic
    file_link_any
    	Allows a process to create hardlinks to files owned by a uid
    	different from the process' effective uid.
    ...
    proc_info
    	Allows a process to examine the status of processes other
    	than those it can send signals to.  Processes which cannot
    	be examined cannot be seen in /proc and appear not to exist.
    proc_session
    	Allows a process to send signals or trace processes outside its
    	session.
    ...
  2. 特権削除のスコープを選択します。
    • システム全体に設定します。

      システムを使用しようとするユーザーは、これらの特権を拒否されます。この特権削除の方法は、だれでも使用可能なコンピュータに適している可能性があります。

      # pfedit /etc/security/policy.conf
      ...
      #PRIV_DEFAULT=basic
      PRIV_DEFAULT=basic,!file_link_any,!proc_info,!proc_session
    • 個別のユーザーから特権を削除します。
      • ユーザーが所有していないファイルへのリンクを作成できないようにします。
        # usermod -K 'defaultpriv=basic,!file_link_any' user
      • ユーザーが所有していないプロセスを調査できないようにします。
        # usermod -K 'defaultpriv=basic,!proc_info' user
      • ユーザーの現在のセッションから ssh セッションを開始するなど、ユーザーが 2 つ目のセッションを開始できないようにします。
        # usermod -K 'defaultpriv=basic,!proc_session' user
      • ユーザーの基本セットから 3 つの特権をすべて削除します。
        # usermod -K 'defaultpriv=basic,!file_link_any,!proc_info,!proc_session' user
    • 権利プロファイルを作成して割り当てます。

      この保護は、この権利プロファイルが割り当てられたユーザーまたはシステムに適用されます。

      1. 権利プロファイルを作成します。
        # profiles -p shared-profile -S ldap
        shared-profile: set defaultpriv=basic,!file_link_any,!proc_info,!proc_session
        ...

        権利プロファイルの作成の詳細は、権利プロファイルと承認の作成を参照してください。

      2. 権利プロファイルをユーザーまたはシステム全体に割り当てます。

        リモートユーザーなど、権利プロファイルを共有するユーザーの数が多い場合は、権利プロファイルにこの値を設定することがスケーラブルな解決方法になります。

        # usermod -P shared-profile username

        また、policy.conf ファイルでシステムごとにプロファイルを割り当てることもできます。

        # pfedit /etc/security/policy.conf
        ...
        #PROFS_GRANTED=Basic Solaris User
        PROFS_GRANTED=shared-profile,Basic Solaris User
使用例 24  ユーザーの制限セットからの特権の削除

次の例では、jdoe の最初のログインから開始されるすべてのセッションで sys_linkdir 特権を使用できないようにします。su コマンドの実行後でも、ユーザーはディレクトリへのハードリンクの作成やディレクトリのリンク解除を実行できません。

# usermod -K 'limitpriv=all,!sys_linkdir' jdoe
# userattr limitpriv jdoe
all,!sys_linkdir
使用例 25  ユーザー自身からの基本特権の削除

次の例では、通常のユーザーが .bash_profile を変更して proc_info 基本特権を削除します。psprstat などのプログラムの出力にはユーザー自身のプロセスだけが含まれており、有用な情報を示していることがあります。

##  .bash_profile
## Remove proc_info privilege from my shell
##
ppriv -s EI-proc_info $$

ppriv 行は、現在のシェルプロセス ($$) でユーザーの有効特権セットと継承可能特権セット (EI-) から proc_info 特権を削除します。

次の prstat 出力では、プロセスの合計が 74 から 3 に減少しています。

## With all basic privileges
Total: 74 processes, 527 lwps, load averages: 0.01, 0.00, 0.00

## With proc_info removed from the effective and inheritable set
Total: 3 processes, 3 lwps, load averages: 0.00, 0.00, 0.00
使用例 26  ゲストによるエディタサブプロセス生成の防止

この例では、管理者がエディタコマンドから proc_exec 基本特権を削除して、ユーザーが 1 つまたは複数のエディタからサブシェルを作成することを防止します。

  1. 管理者は、vim エディタの制限特権セットから proc_exec を削除する権利プロファイルを作成します。

    # profiles -p -S ldap "Editor Restrictions"
    profiles:Editor Restrictions> set desc="Site Editor Restrictions"
    ... Restrictions> add cmd=/usr/bin/vim
    ... Restrictions:vim> set limitprivs=all,!proc_exec
    ... Restrictions:vim> end
    ... Restrictions> commit
    ... Restrictions> exit
  2. 管理者がほかの一般的なエディタを権利プロファイルに追加します。

    # profiles -p "Editor Restrictions"
    profiles:Editor Restrictions> add cmd=/usr/bin/gedit
    ... Restrictions:gedit> set limitprivs=all,!proc_exec
    ... Restrictions:gedit> end
    ... Restrictions> add cmd=/usr/bin/vim
    ... Restrictions:vim> set limitprivs=all,!proc_exec
    ... Restrictions:vim> end
    ... Restrictions> add cmd=/usr/xpg4/ed
    ... Restrictions:ed> set limitprivs=all,!proc_exec
    ... Restrictions:ed> end
    ... Restrictions> add cmd=/usr/xpg4/ex
    ... Restrictions:ex> set limitprivs=all,!proc_exec
    ... Restrictions:ex> end
    ... Restrictions> add cmd=/usr/xpg4/vi
    ... Restrictions:vi> set limitprivs=all,!proc_exec
    ... Restrictions:vi> end
    ... Restrictions> commit
    ... Restrictions> exit
  3. 管理者は、権利プロファイルのエントリに誤字、脱字、繰り返しなどのエラーがないかどうかを確認します。

    # profiles -p "Editor Restrictions" info
    Found profile in files repository.
    name=Editor Restrictions
    desc=Site Editor Restrictions
    cmd=/usr/bin/vim
    limitprivs=all,!proc_exec
    ...
  4. 管理者は Editor Restrictions 権利プロファイルを guest ユーザーに割り当てます。

    # usermod -K profiles+="Editor Restrictions" guest

    管理者は profiles+ を使用して、この権利プロファイルをアカウントの現在の権利プロファイルに追加します。

  5. エディタ特権が制限されていることを確認するため、管理者はエディタを開き、別のウィンドウでエディタプロセスの特権を調べます。

    # ppriv -S $(pgrep vim)
    2805:   vim .bash_profile
    flags = PRIV_PFEXEC User is running a profile shell
            E: basic,!proc_info proc_info is removed from basic set
            I: basic,!proc_info
            P: basic,!proc_info
            L: all,!proc_exec proc_exec is removed from limit set
使用例 27  全ユーザーへの Editor Restrictions 権利プロファイルの割り当て

この例では、管理者が Editor Restrictions 権利プロファイルを policy.conf ファイルに追加します。管理者は、ゲストがログインできるパブリックシステムにこのファイルが配布されていることを確認します。

# cd /etc/security; cp policy.conf policy.conf.orig
# pfedit /etc/security/policy.conf
...
AUTHS_GRANTED=
AUTH_PROFS_GRANTED=
#PROFS_GRANTED=Basic Solaris User
PROFS_GRANTED=Editor Restrictions,Basic Solaris User

User Security 管理者は、すべてのユーザーにプロファイルシェルを割り当てました。理由と手順については、ユーザーへの権利の割り当てを参照してください。

関連項目

詳細は、privileges(7) のマニュアルページを参照してください。