switch user and group when started as root
webfused
Reference implementation of webfuse daemon.
Build and run
To install dependecies, see below.
cd webfused
mkdir build
cd build
cmake ..
make
./webfused -f webfused.conf
Config file
version = { major = 1, minor = 0 }
server:
{
vhost_name = "localhost"
port = 8080
tls:
{
certificate = "/etc/webfused/cert.pem"
key = "/etc/webfused/key.pem"
}
document_root = "/var/www"
}
authentication:
(
{
provider = "file"
settings:
{
file = "/etc/webfused/passwd"
}
}
)
filesystems:
(
{name = "test", mount_point = "/tmp/webfused" }
)
log:
{
provider: "syslog"
level: "warning"
settings:
{
ident = "webfused"
facility = "daemon"
log_pid = true
}
}
user:
{
name = "webfused"
group = "webfused"
}
Version
The version sections specifies the schema version of the config file. Currently, there is only one schema version defined: 1.0
Server
| Setting | Type | Default value | Description |
|---|---|---|---|
| vhostname | string | localhost | Name of the virtual host |
| port | int | 8080 | Port number of server |
| document_root | string | -empty- | Path of HTTP files |
| tls | object | -empty- | see below |
When document_root is omitted, no HTTP files are served.
TLS
| Setting | Type | Default value | Description |
|---|---|---|---|
| certificate | string | -empty- | Path to servers own certificate (.pem file) |
| key | string | -empty- | Path to servers own private key (.pem file) |
TLS is only activated, when both, certificate and key are specified. Otherwise, plain websockes without TLS are used.
Authentication
| Setting | Type | Default value | Description |
|---|---|---|---|
| provider | string | -required- | Name of the authentication provider (see below) |
| settings | object | -empty- | Provider specific settings (see below) |
Currently, only one provider is specified:
- file: file based authentication
File Authenticaton Provider
Allows authentication against a file containing username and password.
| Setting | Type | Default value | Description |
|---|---|---|---|
| file | string | -empty- | Path to the authentication file |
Filesystems
Contains a list of file systems that can be provided by webfuse providers.
| Setting | Type | Default value | Description |
|---|---|---|---|
| name | string | -required- | Name of the filesystem |
| mount_point | string | -required- | Local path to mount the filesystem |
Log
| Setting | Type | Default value | Description |
|---|---|---|---|
| provider | string | -required- | Name of log provider (see below) |
| level | string | -required- | Log level (see below) |
| settings | object | -empty- | Provider specific settings (see below) |
The following log levels are supported:
- none: diabled logging
- fatal: log only fatal errors
- error: log all kind of errors
- warn: log errors and warnings
- info: log info messages, warnings and errors
- debug: log debug and info messages as well as warnings and errors
- all: log all kind of messages
Currently, the following providers are available:
- stderr: logs to console error output
- syslog: logs to syslog
Stderr Logger
This logger does not provide any settings.
Syslog Logger
| Setting | Type | Default value | Description |
|---|---|---|---|
| ident | string | webfused | Syslog ident (see syslog documentation) |
| facility | string | daemon | Syslog facility (see syslog documentation) |
| log_pid | bool | false | Add process ID to log messages |
User
| Setting | Type | Default value | Description |
|---|---|---|---|
| name | string | -required- | Name of the user to switch to. |
| group | string | -required- | Name of the group to switch to. |
Webfuse daemon will not run as root. If started as root, webfuse daemon tries to switch to user and group provided in config file.
Note: user and group are not switched, when webfuse daemon is not started as root.
Dependencies
- webfuse
- openssl
- libconfig
- Google Test (Test only)
Installing dependencies
libfuse
To install libfuse, meson is needed. Please refer to meson quick guide for setup instructions.
wget https://github.com/libfuse/libfuse/archive/fuse-3.9.0.tar.gz -O fuse.tar.gz
tar -xf fuse.tar.gz
cd libfuse-fuse-3.9.0
mkdir .build
cd .build
meson ..
ninja
sudo ninja install
libwebsockets
wget https://github.com/warmcat/libwebsockets/archive/v3.2.0.tar.gz -O libwebsockets.tar.gz
tar -xf libwebsockets.tar.gz
cd libwebsockets-3.2.0
mkdir .build
cd .build
cmake ..
make
sudo make install
jansson
wget https://github.com/akheron/jansson/archive/v2.12.tar.gz -O jansson.tar.gz
tar -xf jansson.tar.gz
cd jansson-2.12
mkdir .build
cd .build
cmake ..
make
sudo make install
openssl
sudo apt update
sudo install openssl libssl-dev
webfuse
wget https://github.com/falk-werner/webfuse/archive/v0.2.0.tar.gz -O webfuse.tar.gz
tar -xf webfuse.tar.gz
cd webfuse-0.2.0
mkdir .build
cd .build
cmake -DWITHOUT_TESTS=ON ..
make
sudo make install
libconfig
sudo apt update
sudo apt install libconfig-dev
GoogleTest
Installation of GoogleTest is optional webfuse library, but required to compile tests.
wget -O gtest-1.10.0.tar.gz https://github.com/google/googletest/archive/release-1.10.0.tar.gz
tar -xf gtest-1.10.0.tar.gz
cd googletest-release-1.10.0
mkdir .build
cd .build
cmake ..
make
sudo make install