2

仮定の質問があります。特定のプロセスのみが読み取りおよび変更できるようにしたいファイルがあるとします。これを実装するにはどうすればよいですか?

現在、最良の方法論は、プロセス グループへのアクセスを制限することに基づいているようです。*nix と同じように、特定のグループのユーザーに rwx アクセスを許可するためにファイルのアクセス許可を変更する方法は、特定のプロセス グループに属するプロセスにファイルの rwx アクセス許可のみを与えることは可能ですか? ここでの私のアプローチは有効ですか、それともこれを行うためのより簡単な方法はありますか?

4

4 に答える 4

2

ファイルパーミッションは、あなたが話している3つのレベルに存在します。所有者->所有者グループ->すべて。ただし、プロセスを実行すると、特定のユーザー(プロセスを開始したユーザー)のアクセス許可の下で実行され、アクセス許可を継承します。次に、一意のユーザーグループを作成し、そのアクセス許可の下でプロセスを実行し、ファイルのアクセスをそのグループのみに制限するとします。

このような方法を使用できなかった理由に制限はありますか?

于 2012-11-09T16:41:30.757 に答える
1

アクセス制御リストにも興味があるかもしれません

個人的には、アクセスを細かく制御する必要がないため、使用したことはありません。

于 2012-11-09T16:55:56.563 に答える
1

プロセス グループに応じて書き込み用にファイルをロックする必要があることを正しく理解していれば、この場合は fcntl と gpgrp を組み合わせることができます。

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>

#define ALLOWED_GROUP 500

int main(int argc, char *argv[])
{
    struct flock fl = {F_WRLCK, SEEK_SET, 0, 0, 0};
    int fd;

    fl.l_pid = getpid();

    if (argc > 1 || getpgrp() != ALLOWED_GROUP) 
        fl.l_type = F_RDLCK;

    if ((fd = open("demo.c", O_RDWR)) == -1) {
        perror("open");
        exit(1);
    }

    printf("Press <RETURN> to try to get lock: ");
    getchar();
    printf("Trying to get lock...");

    if (fcntl(fd, F_SETLKW, &fl) == -1) {
        perror("fcntl");
        exit(1);
    }

    printf("got lock\n");
    printf("Press <RETURN> to release lock: ");
    getchar();

    fl.l_type = F_UNLCK;

    if (fcntl(fd, F_SETLK, &fl) == -1) {
        perror("fcntl");
        exit(1);
    }

    printf("Unlocked.\n");

    close(fd);

    return 0;
}
于 2012-11-09T17:27:09.580 に答える
1

このようにすることはできませんが、次の手順でこの効果を実現できます。

最初に新しいグループを作成し、それをファイルの所有者にして、グループ外のアクセスを除外する権限を設定します。

次に、このグループを実行可能ファイルの所有者にして、その setgid ビットを設定します。

実行すると、実行可能ファイル (およびその子プロセス) はグループの ID を持つため、ファイルにアクセスできます。

詳細については、CHMOD(1) を参照してください。

このセットアップは通常、ゲームにスコア ファイルへの排他的アクセスを許可して、外部からの改ざんを防ぐために使用されます。/usr/games を調べると、setgid 実行可能ファイルの例が見つかる場合があります。

于 2012-11-09T17:24:13.300 に答える