5

テスト目的で、Linux の procfs の下にある drop_caches ファイルに書き込むことで、キャッシュされたメモリを削除できます。これはルートとしてのみ実行できます。これは組み込み Linux 上にあるため、sudo はありません。

sync; echo 3 > /proc/sys/vm/drop_caches

投稿から何かを行うことで、C ++でプログラムでファイルに書き込むことができます-> LinuxシステムでC ++でファイルシステムメモリキャッシュをプログラムでクリアする方法は?

sync();
std::ofstream ofs("/proc/sys/vm/drop_caches");
ofs << "3" << std::endl;

課題は、root 以外のユーザーとしてアプリを実行しているときにこれを行うことです。再起動すると、アクセス許可は次のようになります。

# cd /proc/sys/vm/
# ls -lrt drop_caches 
-rw-r--r--    1 root     root             0 Feb 13 19:50 drop_caches

そして、root であっても、これらの権限を変更できないようです。

# chmod 777 drop_caches 
chmod: drop_caches: Operation not permitted
# chown user:user drop_caches 
chown: drop_caches: Operation not permitted

Linuxでこれを達成するにはどうすればよいですか? procfs ファイルのパーミッションを変更することはできますか? 必要に応じて、カーネルを完全にカスタマイズできます。ありがとう -

4

1 に答える 1

3

すべてのユーザーがroot権限で実行できる補助実行可能ファイルを作成できます(非常に注意してください。危険です)。

これはsetuidと呼ばれます。

setuid安全上の理由から、シェルスクリプトは使用できません。

ウィキからの使用方法の抜粋:

setuidビットとsetgidビットは、通常、コマンドchmodを使用して、上位8進数を4(setuidの場合)または2(setgidの場合)に設定することによって設定されます。「chmod6711ファイル」はsetuidビットとsetgidビットの両方を設定します(2 + 4 = 6)

アップデート

@riciが指摘したように、このプロセスを実行するには実行権限が必要です。そのため、から実行権限を削除しothersて、にのみ保持できgroupます。したがって、グループのメンバーである人だけがそれを実行できます。

于 2013-02-13T20:03:25.917 に答える