シェルから現在のユーザーのすべての書き込み権限を削除できますか?

シェルから現在のユーザーのすべての書き込み権限を削除できますか?

これはセキュリティ目的ではありません。

シェルスクリプトを実行したいと思います。実際、このスクリプトに対するすべての書き込み権限を削除したいと思います。現在のユーザーフルシェルセッション中。私は慎重に管理されたファイル権限でグループと権限の低いユーザーを設定することに興味がありません。どんなオプションがありますか?

理想的には、すべてのposixシェルをターゲットにしたいのですが、bashが私に最も親しみやすいので始めましょう。

男のバッシュを読んでください、限られた殻有望に見えますが、間違った場所ではあまりにも制限的です。たとえば、私はまだそれを使用することができ、cdそのようなものをブロックしていないと思いますecho foo | tee /file。同様に、bashsetオプションは子プロセスによる書き込みを制限しないため、十分に制限されません。たとえば、(set -C; echo foo | tee /file)私が望むことを達成していません。

また、単一のSSHセッション内でこの「読み取り専用」モードを開始/終了できるようにしたいので、overlayfsの使用を避けたいと思います。

私が得た最も近いのは、最大ファイルサイズulimitをゼロに下げることです。

(ulimit -f 0; echo "blows up w/ signal SIGXFSZ" > file; ); echo $?

これは私が探しているものと非常によく似ており、同じシェルで動作しますdashが、まだ空のファイルを残す問題があります。したがって、上記の例では「file」が作成されましたが空です。

SELinuxを使用するユーザーセッションをより厳しい範囲に制限する方法があると思いましたが、役に立つポインタを使用しました。

他のオプションがありますか?

私が興味を持っているもう一つの選択肢は、プロセス中にIO書き込みを簡単に監視することです。おそらく、cgroupをこの目的に使用することができます。しかし、私はこれに慣れていません。あるいは、systemd-runも役に立ちます。

答え1

完全な答えではありませんが、おそらく1つのポインタになります...

たぶん良いLinuxディスククォータシステムはい、Debianquotaパッケージの説明:

  Description-en: disk quota management tools
   This package provides the standard set of utilities for manipulating
   file system usage caps via the Linux Diskquota system. It can set hard
   or soft limits with adjustable grace periods on block or inode usage for
   users and groups. It allows users to check their quota status,
   integrates with LDAP, and supports quotas on remote machines via NFS.

おおよその概要は次のとおりです。

  1. ほとんどのコンテンツを書き込み禁止にしてゲストシステムまたはホームディレクトリを設定し、

  2. ユーザーのクォータシステムの有効化プヴァ、設定0

関連情報