ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
Oracle Solaris の管理: セキュリティーサービス Oracle Solaris 11 Information Library (日本語) |
パート II システム、ファイル、およびデバイスのセキュリティー
特殊なファイルアクセス権 (setuid、setgid、スティッキービット)
実行可能ファイルを原因とするセキュリティーへの悪影響を防止する
10. Oracle Solaris のセキュリティー属性 (参照)
22. Kerberos エラーメッセージとトラブルシューティング
次の手順では、UNIX アクセス権を持つファイルの保護、セキュリティーリスクのあるファイルの検出、およびそれらのファイルによるシステムの危殆化の防止を行います。
次のタスクマップは、ファイルアクセス権の一覧表示、ファイルアクセス権の変更、特殊なファイルアクセス権によるファイルの保護などの作業操作について説明した箇所を示しています。
|
ls コマンドを使用して、ディレクトリ内のすべてのファイルに関する情報を表示します。
% ls -la
ユーザー所有権、グループ所有権、ファイルのアクセス権などを長形式で表示します。
ドット (.) で始まる隠しファイルを含め、すべてのファイルを表示します。
例 7-1 ファイル情報を表示する
次の例では、/sbin ディレクトリ内のファイルを部分的に表示しています。
% cd /sbin % ls -la total 4960 drwxr-xr-x 2 root sys 64 Dec 8 11:57 ./ drwxr-xr-x 39 root root 41 Dec 8 15:20 ../ -r-xr-xr-x 1 root bin 21492 Dec 1 20:55 autopush* -r-xr-xr-x 1 root bin 33680 Oct 1 11:36 beadm* -r-xr-xr-x 1 root bin 184360 Dec 1 20:55 bootadm* lrwxrwxrwx 1 root root 21 Jun 7 2010 bpgetfile -> ... -r-xr-xr-x 1 root bin 86048 Dec 1 20:55 cryptoadm* -r-xr-xr-x 1 root bin 12828 Dec 1 20:55 devprop* -r-xr-xr-x 1 root bin 130132 Dec 1 20:55 dhcpagent* -r-xr-xr-x 1 root bin 13076 Dec 1 20:55 dhcpinfo* . . .
それぞれの行には、ファイルについての情報が次の順で表示されています。
ファイルの形式 – たとえば、d。ファイル形式の一覧は、「ファイルとディレクトリの所有権」を参照してください。
アクセス権 – たとえば、r-xr-xr-x。詳細は、「ファイルとディレクトリの所有権」を参照してください。
ハードリンクの数 – たとえば、2。
ファイルの所有者 – たとえば、root。
ファイルのグループ – たとえば、bin。
バイト数でのファイルサイズ – たとえば、21308。
ファイルの作成日時、またはファイルが最後に変更された日時 – たとえば、Dec 9 15:55。
ファイルの名前 – たとえば、dhcpinfo。
始める前に
ファイルまたはディレクトリの所有者でない場合は、Object Access Management 権利プロファイルが割り当てられている必要があります。公開オブジェクトであるファイルを変更するには、スーパーユーザーである必要があります。
% ls -l example-file -rw-r--r-- 1 janedoe staff 112640 May 24 10:49 example-file
詳細は、「管理権限を取得する方法」を参照してください。
# chown stacey example-file
# ls -l example-file -rw-r--r-- 1 stacey staff 112640 May 26 08:50 example-file
NFS によってマウントされたファイルシステムには、所有権とグループの変更に関する制限がほかにもあります。詳細は、『Oracle Solaris のシステム管理 (ネットワークサービス)』の第 6 章「ネットワークファイルシステムへのアクセス (リファレンス)」を参照してください。
例 7-2 自分のファイルの所有権を変更するためのユーザーの有効化
セキュリティー上の考慮事項 – rstchown 変数の設定をゼロに変更するにはそれ相応の理由が必要です。デフォルト設定では、容量の割り当て制限を回避するために、ユーザーは自分のファイルがほかのユーザーの所有になっているときはそれを一覧表示できません。
この例では、rstchown 変数の値は、/etc/system ファイル内でゼロに設定されます。この設定によりファイルの所有者は、chown コマンドを使用してファイルの所有権をほかのユーザーに変更できます。所有者は chgrp コマンドを使用し、ファイルのグループ所有権を所有者自身が属していないグループに設定することもできます。変更は、システムのリブート時に適用されます。
set rstchown = 0
詳細は、chown(1) および chgrp(1) のマニュアルページを参照してください。
始める前に
ファイルまたはディレクトリの所有者でない場合は、Object Access Management 権利プロファイルが割り当てられている必要があります。公開オブジェクトであるファイルを変更するには、スーパーユーザーである必要があります。
詳細は、「管理権限を取得する方法」を参照してください。
$ chgrp scifi example-file
グループの設定については、『Oracle Solaris の管理: 一般的なタスク』の第 2 章「ユーザーアカウントとグループの管理 (概要)」を参照してください。
$ ls -l example-file -rw-r--r-- 1 stacey scifi 112640 June 20 08:55 example-file
また、例 7-2 も参照してください。
次の手順では、ユーザーはそのユーザーが所有するファイルのアクセス権を変更します。
% chmod who operator permissions filename
アクセス権を変更する対象となるユーザーを指定します。
実行する操作を指定します。
変更するアクセス権を指定します。有効な記号の一覧は、表 7-5 を参照してください。
ファイルまたはディレクトリを指定します。
% ls -l filename
注 - ファイルまたはディレクトリの所有者でない場合は、Object Access Management 権利プロファイルが割り当てられている必要があります。公開オブジェクトであるファイルを変更するには、スーパーユーザーである必要があります。
例 7-3 アクセス権を記号モードで変更する
次の例では、その他のユーザーから読み取り権を削除します。
% chmod o-r example-file1
次の例では、ユーザー、グループなどのローカルファイルに読み取り権と実行権を追加します。
$ chmod a+rx example-file2
次の例では、ローカルファイルにグループの読み取り権、書き込み権、および実行権を割り当てます。
$ chmod g=rwx example-file3
次の手順では、ユーザーはそのユーザーが所有するファイルのアクセス権を変更します。
% chmod nnn filename
所有者、グループ、その他のユーザーのアクセス権をこの順序で表す 8 進数値を指定します。有効な 8 進数値の一覧は、表 7-4 を参照してください。
ファイルまたはディレクトリを指定します。
注 - chmod コマンドを使用して ACL エントリを持つファイルのグループアクセス権を変更する場合、グループアクセス権と ACL マスクの両方が新しいアクセス権に変更されます。新しい ACL マスクのアクセス権は、そのファイル上に ACL エントリを持つほかのユーザーおよびグループのアクセス権を変更する場合があるので注意が必要です。getfacl コマンドを使用して、すべての ACL エントリに適切なアクセス権が設定されていることを確認してください。詳細は、getfacl(1) のマニュアルページを参照してください。
% ls -l filename
注 - ファイルまたはディレクトリの所有者でない場合は、Object Access Management 権利プロファイルが割り当てられている必要があります。公開オブジェクトであるファイルを変更するには、スーパーユーザーである必要があります。
例 7-4 アクセス権を絶対モードで変更する
次の例では、公開されているディレクトリのアクセス権が、744 (読み取り/書き込み/実行、読み取り専用、読み取り専用) から 755 (読み取り/書き込み/実行、読み取り/実行、読み取り/実行) に変更されます。
# ls -ld public_dir drwxr--r-- 1 jdoe staff 6023 Aug 5 12:06 public_dir # chmod 755 public_dir # ls -ld public_dir drwxr-xr-x 1 jdoe staff 6023 Aug 5 12:06 public_dir
次の例では、実行可能シェルスクリプトのアクセス権が、読み取り/書き込みから、読み取り/書き込み/実行に変更されます。
% ls -l my_script -rw------- 1 jdoe staff 6023 Aug 5 12:06 my_script % chmod 700 my_script % ls -l my_script -rwx------ 1 jdoe staff 6023 Aug 5 12:06 my_script
始める前に
ファイルまたはディレクトリの所有者でない場合は、Object Access Management 権利プロファイルが割り当てられている必要があります。公開オブジェクトであるファイルを変更するには、スーパーユーザーである必要があります。
詳細は、「管理権限を取得する方法」を参照してください。
% chmod nnnn filename
ファイルまたはディレクトリのアクセス権を変更する 8 進数値を指定します。一番左端の 8 進数値で、ファイルに特殊なアクセス権を設定します。特殊なアクセス権に有効な 8 進数値の一覧は、表 7-6 を参照してください。
ファイルまたはディレクトリを指定します。
注 - chmod コマンドを使用して ACL エントリを持つファイルのグループアクセス権を変更する場合、グループアクセス権と ACL マスクの両方が新しいアクセス権に変更されます。新しい ACL マスクのアクセス権は、そのファイル上に ACL エントリを持つ追加ユーザーおよびグループのアクセス権を変更する場合があるので注意が必要です。getfacl コマンドを使用して、すべての ACL エントリに適切なアクセス権が設定されていることを確認してください。詳細は、getfacl(1) のマニュアルページを参照してください。
% ls -l filename
例 7-5 絶対モードによる特殊なファイルアクセス権の設定
次の例は、dbprog ファイルに setuid のアクセス権を設定します。
# chmod 4555 dbprog # ls -l dbprog -r-sr-xr-x 1 db staff 12095 May 6 09:29 dbprog
次の例では、dbprog2 ファイルに setgid のアクセス権を設定します。
# chmod 2551 dbprog2 # ls -l dbprog2 -r-xr-s--x 1 db staff 24576 May 6 09:30 dbprog2
次の例では、public_dir ディレクトリにスティッキービットのアクセス権を設定します。
# chmod 1777 public_dir # ls -ld public_dir drwxrwxrwt 2 jdoe staff 512 May 15 15:27 public_dir
次のタスクマップは、リスクのある実行ファイルをシステム内に見つける作業や、プログラムが実行可能スタックを不正利用しないように防ぐ作業などの操作を説明した箇所を示しています。
|
この手順では、プログラム上での承認されていない可能性のある、setuid および setgid アクセス権の使用を見つけます。疑わしい実行可能ファイルによって、所有権が root または bin ではなく、通常のユーザーに与えられることがあります。
始める前に
root 役割になっている必要があります。
# find directory -user root -perm -4000 -exec ls -ldb {} \; >/tmp/filename
指定したディレクトリから始めて、マウントされているすべてのパスを検査します。ディレクトリとしてルート (/)、sys、bin、または mail を指定できます。
root が所有するファイルを表示します。
アクセス権が 4000 に設定されているファイルだけを表示します。
find コマンドの出力を ls -ldb 形式で表示します。
find コマンドの結果が書き込まれるファイルです。
# more /tmp/filename
setuid アクセス権の基本的な情報については、「setuid アクセス権」を参照してください。
例 7-6 setuid アクセス権が設定されているファイルを検索する
次の例の出力は、rar というグループのユーザーが /usr/bin/sh のコピーを作成し、そのアクセス権を root への setuid に設定したことを示しています。この結果、/usr/rar/bin/sh プログラムは root アクセス権で実行されます。
この出力は、/var/tmp/chkprm ディレクトリをアーカイブに移動することによって、今後の参照用に保存されています。
# find / -user root -perm -4000 -exec ls -ldb {} \; > /var/tmp/ckprm # cat /var/tmp/ckprm -r-sr-xr-x 1 root bin 38836 Aug 10 16:16 /usr/bin/at -r-sr-xr-x 1 root bin 19812 Aug 10 16:16 /usr/bin/crontab ---s--x--x 1 root sys 46040 Aug 10 15:18 /usr/bin/ct -r-sr-xr-x 1 root sys 12092 Aug 11 01:29 /usr/lib/mv_dir -r-sr-sr-x 1 root bin 33208 Aug 10 15:55 /usr/lib/lpadmin -r-sr-sr-x 1 root bin 38696 Aug 10 15:55 /usr/lib/lpsched ---s--x--- 1 root rar 45376 Aug 18 15:11 /usr/rar/bin/sh -r-sr-xr-x 1 root bin 12524 Aug 11 01:27 /usr/bin/df -rwsr-xr-x 1 root sys 21780 Aug 11 01:27 /usr/bin/newgrp -r-sr-sr-x 1 root sys 23000 Aug 11 01:27 /usr/bin/passwd -r-sr-xr-x 1 root sys 23824 Aug 11 01:27 /usr/bin/su # mv /var/tmp/ckprm /export/sysreports/ckprm
32 ビットの実行可能スタックのセキュリティーリスクについては、「実行可能ファイルを原因とするセキュリティーへの悪影響を防止する」を参照してください。
始める前に
root 役割になっている必要があります。
set noexec_user_stack=1
# reboot
例 7-7 実行可能スタックメッセージのログ記録を無効にする
この例では、実行可能スタックメッセージのログ記録が無効にされ、続いてシステムのリブートが行われます。
# cat /etc/system set noexec_user_stack=1 set noexec_user_stack_log=0 # reboot
参照
詳細は、次を参照してください。