回答

回答

私のサーバーの一部のサービスを強化しようとしています。

この目的のために、私はsystemctlサービス構成を使用しています。特定のサービスに対して、たとえばシステムコールホワイトstraceリストを生成するために通常の操作で使用されるシステムコールを確認します。これは私のopenvpn.service設定です。

[Unit]
Description=a given service I want to restrict systemcalls
After=syslog.target network-online.target
Wants=network-online.target
Documentation=man:openvpn(8) service

[Service]
Type=notify
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw
KillMode=process
RestartSec=5s
Restart=on-failure
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/server/vpn.conf
ProtectHome=yes
User=openvpn
Group=openvpn
SystemCallFilter=
CapabilityBoundingSet=CAP_NET_ADMIN
AmbientCapabilities=CAP_NET_ADMIN
ProtectSystem=strict
PrivateTmp=yes
#PrivateDevices=yes
RestrictNamespaces=yes
RestrictAddressFamilies=AF_INET
NoNewPrivileges=yes
ProtectKernelModules=yes
ProtectKernelTunables=yes
ProtectControlGroups=yes
MemoryDenyWriteExecute=yes
[Install]
WantedBy=multi-user.target

straceを使用してコマンドラインで実行すると、少なくともsendtoシステムコールが使用されていることがわかります。recvfromただし、SystemCallFilter(SystemCallFilter=)をクリアすると、サービスはまだロードされ、正常に実行されます。

では、このオプションは実際に考慮されますか(たとえば、スペルを誤って書いたり、すべてを無効にしたりするのが正しい構文ではない可能性があります)。それとも、このオプションは自分で処理せずにopenvpn開始されるサービスに対してのみ機能しますかopenvpn

問題は、この関数を使用したいのですが、実際に何をすべきかを確認する方法がないことです。リストされたシステムコールのみを許可します。

ご協力ありがとうございます!

ベストアンサー1

straceを使用してコマンドラインで実行すると、少なくともsendtoシステムコールが使用されていることがわかります。recvfromただし、SystemCallFilter(SystemCallFilter=)をクリアすると、サービスはまだロードされ、正常に実行されます。


CapabilityBoundingSet=CAP_NET_ADMIN
AmbientCapabilities=CAP_NET_ADMIN

回答

上記の質問の2つは、OpenVPNサービスがすべての必要なシステムコールにアクセスできる理由に対する答えを提供します。

まず、SystemCallFilter=すべてのシステムコールをブロックしないでください。マンページ:

execve、、、、、、システムコール、および時間およびスリープクエリのシステムコールは暗黙的にホワイトリストに含まexitれて いるため、明示的にリストする必要はありません。exit_groupgetrlimitrt_sigreturnsigreturn

第二:見るとsocket(7)マニュアルページでプロセス/ファイルに設定すると、ほとんどすべてのソケット関連のシステムコール(およびsendto含むrecvfrom)とネットワークインターフェイスの操作機能にアクセスできることがわかります。CAP_NET_ADMINcapabilities(7)マンページ:

   CAP_NET_ADMIN
          Perform various network-related operations:
          * interface configuration;
          * administration of IP firewall, masquerading, and accounting;
          * modify routing tables;
          * bind to any address for transparent proxying;
          * set type-of-service (TOS)
          * clear driver statistics;
          * set promiscuous mode;
          * enabling multicasting;
          * use setsockopt(2) to set the following socket options:
            SO_DEBUG, SO_MARK, SO_PRIORITY (for a priority outside the
            range 0 to 6), SO_RCVBUFFORCE, and SO_SNDBUFFORCE.

3番目:、、、、、、、、、、、またはオプションによって無視されますNoNewPrivileges=。上記のマンページを見てください。SystemCallFilter=SystemCallArchitectures=RestrictAddressFamilies=RestrictNamespaces=PrivateDevices=ProtectKernelTunables=ProtectKernelModules=MemoryDenyWriteExecute=RestrictRealtime=LockPersonality=

文書を見るとsystemd警告がいっぱいであることがわかるので、このようなシステムコールを許可しなくても警告はCAP_NET_ADMIN

これを使用してsystemd-analyze syscall-filteropenvpn サービスを再確認できます。

おすすめ記事