新しいプロセス(信頼できないコード)が生成されないように新しいプロセスを開始できますか?
また、通常、ファイルやすべてのデバイスに対して入出力を実行できないようにプロセスを開始するにはどうすればよいですか?
答え1
これは職業だと思います。必須アクセス制御システムのようにSELinuxまたは鎧を適用。
SELinuxに関するこの記事そのようなシステムの力とそのような政策を開発するために必要なツールを紹介します。
すべてのファイルへのアクセスを制限したい場合は、逆効果を生み出すことができます。 Unixでは「すべてがファイル」なので、すべてのファイルアクセスを完全にブロックしてもプログラムは起動しません。より効率的なアプローチは、ファイルの書き込みを完全にまたは特定のディレクトリに限定し、プログラムが合法的に読み取ることができるファイルカテゴリをホワイトリストに追加することです。
別のオプションは、次のものを使用することです。chrootまたは刑務所。これらのオペレーティングシステム機能を使用すると、ファイルI / Oまたはプログラムの実行をブロックする必要はありません。信頼できないプログラムで重要な内容を読み書きできる、実行できない制限された環境を簡単に構築できます。あなたのプログラムは「箱」に入れたファイルでのみ動作することができます。
答え2
システムでを使用している場合は、pam
信頼できない専用ユーザーを作成し、次を参照してください/etc/security/limits.conf
。
#Each line describes a limit for a user in the form:
#<domain> <type> <item> <value>
#
#Where:
#<domain> can be:
# - an user name
# - a group name, with @group syntax
[...]
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit (KB)
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to values: [-20, 19]
# - rtprio - max realtime priority
nproc
あなたは特におそらく探していますnofile
。それにもかかわらず、どんなプログラムもuser hard nofile 0
。
免責事項:私はそれを直接使用したことがありません。 (これは意味ですpam
。信頼できない専用ユーザーを作成するのは悪いことではありません。)