TransWikia.com

プログラムを、自分のホームディレクトリにある特定のファイル群に書き込めないよう実行したい

スタック・オーバーフロー Asked by Yosh on September 1, 2021

~/Pictures/backup/ というディレクトリの下に写真がたくさんあります。Permission はこのようになっています

  $ ls -l IMG_0944.JPG 
-rw-r--r-- 1 Yosh Yosh 2192854 Mar  2  2019 IMG_0944.JPG

写真の整理をしたくて、とりあえずこのディレクトリにあるファイルの exif 等をよんでデータベースを作るようなプログラムを作成しました。このプログラムは既存の画像ファイルを読み込むだけで、上書きしたり消去したりはしないはずですが、もしかすると自分がバグを作り込んでいて、そうした挙動をしてしまうかもしれません。

写真のデータが失われることは絶対に避けたいので、何らかの方法で実行時にこれらのファイルへの書き込み・消去ができないような(しかしこのプログラムが作るデータベースは書き込めるような)制限をかけられないかと思いました。このようなうまい方法はあるでしょうか?あるいは、同様の目標を達成するために一般に用いられる他の方法がありますか?(バックアップをとっておくことは勿論自明で重要な解決策ですが、それはさておき)

環境は Ubuntu 18.04.4 LTS です。

One Answer

別ユーザでプログラムを実行することにより、ファイル書き込みでエラーにすることができます。

$ ls -l testfile
-rw-rw-r-- 1 tst tst 19 Jul 15 23:47 testfile
$ cat testfile
テストデータ

testfileの所有者はtstで、otherの書き込みパーミッション(w)がないため、tstユーザ以外のユーザはこのファイルに書き込むことができません。

testfileに書き込むプログラムprg.shを別ユーザ(tst2)で実行してみます。

【prg.sh】

#!/bin/sh
id
echo "BUG" > ./testfile

prg.shの実行結果

$ su tst2 ./prg.sh
Password:
uid=1002(tst2) gid=1002(tst2) groups=1002(tst2)
./prg.sh: line 3: ./testfile: Permission denied
$ ls -l testfile
-rw-rw-r-- 1 tst tst 19 Jul 15 23:47 testfile
$ cat testfile
テストデータ

prg.shの3行目のecho "BUG" > ./testfileでエラーが発生しています。
testfileはタイムスタンプ、内容とも変化していません。


コメントにあるYoshさんの懸念ですが、

ちなみに、1つのプログラムの実行のためにユーザを追加することはよく有ることなのでしょうか?: ある種の濫用なのかどうかを気にしています)

この仕組みはもともと他のユーザに修正させたくないためのものですので、本来の使い方であり、濫用とは思えません。
※ユーザが多数の場合はメンテナンスの手間を考えるかもしれませんが、今回のケースでは問題にならないと思います。

検証に使用した環境はWSLのUbuntu 18.04.4 LTSです。

Correct answer by akira ejiri on September 1, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP