この合計は、3つのシリーズに分かれています。
記事では、Linuxの機能と基本的な原則の誕生の背景を説明し、この記事では、表示し、具体的な事例を通じてファイル機能を設定する方法を紹介します。
Linuxシステムは、機能を管理するために2つの主要なツールを提供していますlibcap
と libcap-ng
。libcap
提供 getcap
し、 setcap
また、提供しながら、2つのコマンドは、機能や設定ファイルを表示している capsh
現在のシェルプロセス能力のビューを。libcap-ng
使いやすく、同じコマンドを使用して filecap
ビューや能力を設定します。
1. libcap
インストールは、例えば、以下のコマンドでインストールすることができ、CentOSのに非常に簡単です:
$ yum install -y libcap
あなたは現在のシェルプロセスの能力を確認したい場合は、使用できる capsh
コマンドを。以下は、ルートユーザのCentOSシステム行うで capsh
出力:
$ capsh --print
Current: = cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read+ep
Bounding set =cap_chown,cap_dac_override,cap_dac_read_search,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_linux_immutable,cap_net_bind_service,cap_net_broadcast,cap_net_admin,cap_net_raw,cap_ipc_lock,cap_ipc_owner,cap_sys_module,cap_sys_rawio,cap_sys_chroot,cap_sys_ptrace,cap_sys_pacct,cap_sys_admin,cap_sys_boot,cap_sys_nice,cap_sys_resource,cap_sys_time,cap_sys_tty_config,cap_mknod,cap_lease,cap_audit_write,cap_audit_control,cap_setfcap,cap_mac_override,cap_mac_admin,cap_syslog,cap_wake_alarm,cap_block_suspend,cap_audit_read
Securebits: 00/0x0/1'b0
secure-noroot: no (unlocked)
secure-no-suid-fixup: no (unlocked)
secure-keep-caps: no (unlocked)
uid=0(root)
gid=0(root)
groups=0(root)
説明:
-
現在 :現在の効果的な能力を示し、許可機能は、プロセスをシェル。複数のパケットを含んでいてもよい、各パケットの表現である
capability[,capability…]+(e|i|p)
前記e
有効を表すi
継承を表し、p
許可表明しました。異なるグループ間で、たとえば、スペースで区切っ:Current: = cap_sys_chroot+ep cap_net_bind_service+eip
。別の例として、cap_net_bind_service+e cap_net_bind_service+ip
およびcap_net_bind_service+eip
等価物。 -
SETバウンディング :ここではそのパケットの終わりを追加しない、他のコレクションを含まない、収集機能をバウンディングだけで表現したものです
+...
。 -
Securebits :私はこれが何であるか地獄把握しませんでした。
この情報は、より限定されたコマンドの出力と完全な情報は、あなたが見ることができ、現在のシェルプロセスとして、/ procファイルシステムを表示することができますです /proc/$$/status
。重要なステータスの一つ NoNewPrivs
は、次のコマンドで見ることができます。
grep NoNewPrivs /proc/$$/status
NoNewPrivs: 0
よれば、 (2)prctlコマンドの 説明は、Linuxの4.10開始から、 値は、スレッド表す 属性。とおり 、それはやっているかどうかを、ここで私が説明のみです。/proc/[pid]/status
NoNewPrivs
no_new_privs
no_new_privs
no_new_privs
通常の状況下では、execve()
システムは、プロセスは、新たな親プロセスを開始する許可を与えることができます呼び出すことは最も一般的な例ではないことである setuid
と setgid
手順を設定すると、ファイルのuidとgidのアクセスを処理します。これは悪戯抜け穴をたくさんあけ与える、プロセスは直接不純な動機を達成するように、フォークによって権限を上昇させることができます。
この問題を解決するために、3.5リリースの導入からLinuxカーネル no_new_privs
に処理する方法を提供するプロパティ(実際には少し、あなたはオンとオフを切り替えることができ)、 execve()
コールは効果的かつ安全な方法の段階を通じて継続することができます。
-
開かれた
no_new_privs
すべての操作を呼び出す必要があることにはexecve関数保証した後、execve()
裁判官をし、与えられた許可後に行うことができます。彼らがsetuidとsetgid、設定することはできません許可ファイルを実行することはできませんので、これは性を保証スレッドと子スレッドは、追加の権限を取得することができないこと。 -
現在のスレッド一旦
no_new_privs
セットされた後、フォーク、クローン又ははexecveによってサブスレッド生成するかどうかは、このビットをクリアすることができます。
ドッカーパラメータがあり --security-opt
オンにする no_new_privs
次のような属性docker run --security-opt=no_new_privs busybox
。理解するための例で見てみましょう no_new_privs
財産の役割を。
最初の行とCコード、現在のプロセスの実効ユーザIDが表示されます。
$ cat testnnp.c
#include <stdio.h>
#include <unistd.h> #include <sys/types.h> int main(int argc, char *argv[]) { printf("Effective uid: %d\n", geteuid()); return 0; }
$ make testnnp
cc testnnp.c -o testnnp
ドッキングウィンドウのミラーへの実行ファイル:
FROM fedora:latest
ADD testnnp /root/testnnp
RUN chmod +s /root/testnnp ENTRYPOINT /root/testnnp
ミラーの構築:
$ docker build -t testnnp .
Step 1 : FROM fedora:latest
---> 760a896a323f
Step 2 : ADD testnnp /root/testnnp
---> 6c700f277948
Removing intermediate container 0981144fe404
Step 3 : RUN chmod +s /root/testnnp
---> Running in c1215bfbe825
---> f1f07d05a691
Removing intermediate container c1215bfbe825
Step 4 : ENTRYPOINT /root/testnnp
---> Running in 5a4d324d54fa
---> 44f767c67e30
Removing intermediate container 5a4d324d54fa
Successfully built 44f767c67e30
ここで、が存在しない状態で開くことが最初の二つの実験を行う no-new-privileges
場合には、コンテナを開始します:
$ docker run -it --rm --user=1000 testnnp
Effective uid: 0
出力の観点からは、ただ実行可能ファイルにSUIDのアイデンティティを与え、我々は効果的なユーザー・コンテナを実行するために、平均的なユーザー(UID = 1000)を使用していても、プロセスがルートになります。
開放に続いて no-new-privileges
実行SUID識別UID変換に実行可能ファイルが行われるのを防止するために開始容器前提。
$ docker run -it --rm --user=1000 --security-opt=no-new-privileges testnnp
Effective uid: 1000
それが開か見ることができる no_new_privs
としても、実行可能ファイルSUIDアイデンティティた場合、スレッドは実効ユーザIDのルートになることはありません、プロパティの後。コードの画像は、セキュリティ上のリスクを持っているにもかかわらず、あなたはまだそれが攻撃されるのを避けるために特権を昇格防ぐことができます。
Kubernetesも開くことができます no_new_privs
、しかし論理はもう少し複雑。ポッドた場合 SecurityContext
の定義で allowPrivilegeEscalation
、次のいずれかの条件が満たされない場合は時間フィールドは、(デフォルトはfalseにある)偽で、開く no_new_privs
プロパティを:
-
セットアップ
privileged=true
-
増加し
CAP_SYS_ADMIN
、あること、機能をcapAdd=CAP_SYS_ADMIN
-
ルートとして、すなわち、UID = 0
たとえば、ときに設定 privileged=true
と allowPrivilegeEscalation=false
するとき、それは開かない no_new_privs
性質。同様に、我々はセットアップ capAdd=CAP_SYS_ADMIN
と allowPrivilegeEscalation=false
それが開かない no_new_privs
性質。
管理機能
あなたはできる getcap
ようなドキュメント機能を、表示します。
$ getcap /bin/ping /usr/sbin/arping
/bin/ping = cap_net_admin,cap_net_raw+p
/usr/sbin/arping = cap_net_raw+p
また、使用することができます -r
再帰クエリにパラメータを:
$ getcap -r /usr 2>/dev/null
/usr/bin/ping = cap_net_admin,cap_net_raw+p
/usr/bin/newgidmap = cap_setgid+ep
/usr/bin/newuidmap = cap_setuid+ep
/usr/sbin/arping = cap_net_raw+p
/usr/sbin/clockdiff = cap_net_raw+p
あなたは、プロセスの能力を確認したい場合には、直接使用することができる getpcaps
プロセスのPIDを維持するために戻って、:
$ getpcaps 1234
あなたが相互に機能スレッド(などのnginxなど)のセットを見たい場合は、あなたが見ることができます:
$ getpcaps $(pgrep nginx)
唯一のマスターは、このようなネットワークポートに耳を傾けなどの特別な権限を必要としたので、ここでは能力を持っていないだけで、メインスレッドだけの能力、子スレッドや他の労働者が表示され、これは、他のスレッドがうまく要求にのみ応答する必要があります。
機能の設定ファイルには、使用することができ setcap
、次の構文を:
$ setcap CAP+set filename
例えば、 CAP_CHOWN
および CAP_DAC_OVERRIDE
機能追加する permitted
と effective
セット:
$ setcap CAP_CHOWN,CAP_DAC_OVERRIDE+ep file1
ファイル機能を削除したい場合は、使用することができます -r
パラメータを:
$ setcap -r filename
2. Libcap-A
インストールはまた、例としてCentOSのに非常に簡単です:
$ yum install libcap-ng-utils
使い方
libcap-ngの使用して filecap
ファイルを管理するためのコマンド機能を。いくつかの注意点があります。
-
ビュー機能を追加または削除filecapすると、機能名が持参する必要はありません
CAP_
(例えば、使用して接頭辞をNET_ADMIN
代替しますCAP_NET_ADMIN
)。 -
filecapは、絶対パスをサポートして、相対パスをサポートしていません。
-
filecap収集機能の役割を指定することは許されない、機能が追加されます
permitted
とeffective
コレクション。
ビューファイル機能:
$ filecap /full/path/to/file
ビュー機能は、ディレクトリ内のすべてのファイルを再帰的に:
$ filecap /full/path/to/dir
例えば:
$ filecap /usr/bin
file capabilities
/usr/bin/newgidmap setgid
/usr/bin/newuidmap setuid
注: filecapは唯一の「機能が追加されて表示さ
permitted
とeffective
文書セット」。だから、何も表示pingやARPを実行はありません。
ファイルシステム全体のすべての再帰的な能力を見ます:
$ filecap /
# or
$ filecap -a
次のような機能の設定ファイルの構文は次のとおりです。
$ filecap /full/path/to/file cap_name
例えば:
$ filecap /usr/bin/tac dac_override
ファイルの機能を削除します。
$ filecap /full/path/to/file none
3.まとめ
この記事では、実行可能ファイル機能を管理する方法を示し、およびドッキングウィンドウに、例えば、2つのツールの立証 no_new_privs
のパワーを。条件が許すならば、我々は完全なセットのSUIDルート権限やアイデンティティを交換する機能を使用しようと後でお勧めします。
http://market.szonline.net/amaz/23467.html
http://market.szonline.net/amaz/23466.html
http://market.szonline.net/amaz/23465.html
ます。http://市場.szonline.net / amaz / 23464.html
http://market.szonline.net/amaz/23463.html
http://market.szonline.net/amaz/23462.html
http://market.szonline.net/ amaz / 23461.html
http://market.szonline.net/amaz/23460.html
http://market.szonline.net/amaz/23459.html
http://market.szonline.net/amaz/23458.html
http://market.szonline.net/amaz/23457.html
http://market.szonline.net/amaz/23456.html
http://market.szonline.net/amaz/23455.html
ます。http://市場.szonline.net / amaz / 23454.html
http://market.szonline.net/amaz/23453.html
http://market.szonline.net/amaz/23452.html
http://market.szonline.net/amaz/23451.html
http://market.szonline.net/amaz/23450.html
ます。http://市場.szonline.net / amaz / 23449.html
http://market.szonline.net/amaz/23448.html
http://market.szonline.net/amaz/23447.html
http://market.szonline.net/ amaz / 23446.html
http://market.szonline.net/amaz/23445.html
http://market.szonline.net/amaz/23444.html