我有一個假設性問題。假設我有一個文件,我只希望某些進程能夠讀取和修改。我將如何去實施這個?基於進程組限制對文件的訪問
目前經過一番思考,最好的方法似乎是基於限制對進程組的訪問。就像在* nix中一樣,如何改變文件的權限以便爲特定組中的用戶授予rwx訪問權限,是否有可能僅將文件的rwx訪問權限授予屬於特定進程組的進程?我的方法在這裏有效嗎?還是有更簡單的方法可以做到這一點?
我有一個假設性問題。假設我有一個文件,我只希望某些進程能夠讀取和修改。我將如何去實施這個?基於進程組限制對文件的訪問
目前經過一番思考,最好的方法似乎是基於限制對進程組的訪問。就像在* nix中一樣,如何改變文件的權限以便爲特定組中的用戶授予rwx訪問權限,是否有可能僅將文件的rwx訪問權限授予屬於特定進程組的進程?我的方法在這裏有效嗎?還是有更簡單的方法可以做到這一點?
您所說的三個級別上存在文件權限。所有者 - >所有者組 - >全部。當一個進程運行時,它運行在某個用戶(啓動它的用戶)的權限下並繼承權限。那麼我會假設你想創建一個唯一的用戶組,在該權限下運行這些進程,並且僅限文件對該組的訪問。
會有限制,爲什麼你不能使用這樣的方法?
您也可以通過access control lists
興趣就個人而言,我從來沒有使用過,因爲我不需要在接入互聯網等精細控制
你不能做到這一點很喜歡這一點,但你可以實現這種效果包括以下步驟:
首先創建一個新組,使其成爲文件的所有者並設置權限以排除組外的訪問權限。
然後讓該組成爲可執行文件的所有者並設置其setgid位。
運行時,可執行文件(及其子進程)將擁有該組的標識,因此可以訪問這些文件。
詳情請參閱CHMOD(1)。
此設置通常用於讓遊戲獨佔訪問樂譜文件以防止外部篡改。看看你的/ usr/games,你可能會發現一些setgid可執行文件的例子。
如果我理解正確的要鎖定爲根據進程組寫文件,在這種情況下,你可以結合的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;
}
你可能想看看進入[AppArmor配置(HTTP:/ /apparmor.net/)或/和[selinux](http://selinuxproject.org) – mata