ICFS -- Interactively Controlled File System
Motivation
Traditional access control mechanisms in operating systems allow the same level of access to all processes running on behalf of the same user. This typically enables malicious processes to read and/or modify all data accessible to the user running a vulnerable application. It can be dealt using various mandatory access control mechanisms, but these are often complicated to configure and are rarely used in common user oriented scenarios. This thesis focuses on design and implementation of a file system layer which delegates the decision to allow or deny access to a file system object by a specific process to the user.
Goals
- Analyze the problem and design a solution
- Implement the solution using the FUSE framework
- Test the solution and demonstrate its benefits
Building
- Install dependencies
- libfuse3
- Debian:
sudo apt install fuse3 libfuse3-dev
- Debian:
- Build tools
- Debian:
sudo apt install gcc make pkg-config
- Debian:
- libfuse3
- Build using
make
:- In the project directory:
make
- Add
DEBUG=1
to show more compiler warnings. - Add
TEST=1
to also test the program. - Add
DIALOGUE=0
to not compile the dialogue program.
- In the project directory:
- Resulting binaries should appear in the
build
directory.
Installation
Currently, there is no installer implemented.
Usage
icfs <FUSE arguments> [target directory] [path to permanent permission database]
The filesystem will be mounted over the target directory, and ask user permission every time a file in that directory is opened. We highly recommend adding -o default_permissions
to increase performance and add an additional security layer.
Development build
Execute this command in the root directory of this project:
env PATH="$(realpath ./build):$PATH" build/icfs <FUSE arguments> [target directory] [path to permanent permission database]
The env PATH="$(realpath ./build):$PATH"
adds the access dialogue program to PATH, allowing ICFS to call it seamlessly.
Docs
Credit
Student: Fedir Kovalov
Supervisor: RNDr. Jaroslav Janáček, PhD.