私は多くのchmodとchownとそれらの組み合わせを試しました。
私はまだそのユーザーのホームディレクトリにあるファイルをそのユーザーが読み取ることはできますが、書き込みまたは実行は不可能にしたいと思います。しかし、私はまだそのユーザーがユーザーのホームフォルダに書き込むことができるので、ユーザーはフォルダにファイルを追加できますが、これらのコマンドを実行したフォルダ内のファイルを削除することはできません。
より多くのデータ:
- このホームディレクトリは暗号化されています。
- bashスクリプトに入れることができる限り、私が必要とする解決策が複数行かどうかはあまり気にしません。
答え1
私が知っている唯一の方法は、名前が示すように、ファイル属性を変更するchatr(1)を使用することです。
プロパティセクションでは、以下を読むことができます。
「i」属性を持つファイルは変更できません。削除または名前変更できず、ファイルへのリンクを作成できず、ファイルのメタデータのほとんどを変更できず、ファイルを書き込みモードで開くことができません。ユーザーまたは所有者CAP_LINUX_IMMUTABLE機能を持つプロセスのみが、この属性を設定または消去できます。
--実際のケース:
: lsattr example.file
------------------- example.file
: ls -lh example.file
-rw------- 1 tntx tntx 15 Dec 23 20:43 example.file
: su -
Password:
root@foo: chattr +i example.file
root@foo: exit
logout
: lsattr example.file
----i-------------- example.file
: cat example.file
testing chattr
: echo "adding text" >> example.file
ksh93: example.file: cannot create [Operation not permitted]
Same with vi:
Read-only file, not written; use ! to override.
:w!
Error: example.file: Operation not permitted.
And then trying to mv:
: mv example.file example.file2
mv: cannot move 'example.file' to 'example.file2': Operation not permitted
What about cp:
: ls -lh example.file*
-rw------- 1 tntx tntx 15 Dec 23 20:43 example.file
-rw------- 1 tntx tntx 15 Dec 23 21:02 example.file2
: /usr/bin/lsattr example.file*
----i-------------- example.file
------------------- example.file2
したがって、ユーザーだけが読み取れるようにファイルをロックできますが、自由に cp(1) して新しいファイルで編集できるため失敗します。
答え2
ユーザーがモードを変更できるため、chmodでは不十分です。
まず、ユーザーがファイルを編集できないようにします。
- chmod go-w «ファイル名»
- chown «他のユーザー» «ファイル名»
これで、ユーザーはまだファイルを削除できるので、これを避けましょう。 (ファイルを含むディレクトリからファイルを削除すると、ファイルは削除されます。停止する必要があります。)
- chown «他のユーザー» «ディレクトリを含む»
- chmod +t «ディレクトリを含む»
これで、ユーザーが書き込むことができるインクルードディレクトリを作成します。
- chown «ユーザー名» «ディレクトリを含む»
- chmod g+w «ディレクトリを含む»
実行を防ぐことはできません。実行ビットを設定することはできませんが、ユーザーがファイルを読み取ることができる場合はコピーできます。コピーできる場合は、実行可能にすることができます。