機能入門チュートリアル:基本的な戦闘の章

この合計は、3つのシリーズに分かれています。

記事では、Linuxの機能と基本的な原則の誕生の背景を説明し、この記事では、表示し、具体的な事例を通じてファイル機能を設定する方法を紹介します。

Linuxシステムは、機能を管理するために2つの主要なツールを提供していますlibcap と  libcap-nglibcap 提供  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]/statusNoNewPrivsno_new_privsno_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

おすすめ

転載: www.cnblogs.com/cider/p/11840878.html