SELinux
If you do not use SELinux, you can ignore this.
If you do use SELinux, read this. SELinux is MAC (Mandatory Access Control), which means anything that isn't allowed is prohibited. This is as opposed to DAC, Discretionary Access Control, where everything is allowed except what's prohibited. MAC generally works on top of DAC, and they are expected to work in a complementary fashion. Vely deploys both methods for enhanced security.
Vely comes with a SELinux policy out-of-the-box, which covers its general functioning. However, you can write any code with Vely, and if you are using SELinux, you may run afoul of its other policies, which may not be conducive to your code. In that case, use temporarily a permissive mode (via setenforce), and then audit2allow to get a clue on what is the issue and then take action to allow actions requested.
Note that OpenSUSE package does not come with SELinux policy as of this release, because OpenSUSE at this time does not come with a default base policy and SELinux installation.
General
Vely policy files (.te, .fc files, .if file is empty) can be found here:
ls $(vv -l)/selinux/*.{te,fc}
As a part of installing Vely, the following SELinux types will be installed:
- vvfile_t: all files within Vely directory (/var/lib/vv) are labeled with this type.
- vv_t: domain type (process type) of all Vely executables that communicate with other processes (be it Unix or TCP sockets). Only files labeled vvfile_t can run as this process type.
- vvport_t: port type that any Vely FastCGI (FCGI) process is allowed to bind, accept and listen. No other process types are allowed to do so.
Vely policy:
- allows Vely processes unconfined access. This is expected as Vely is a general purpose framework. It means you do not have to do anything to connect to database, use files, connect to other servers etc.
- allows web servers (httpd_t domain type) to connect to sockets labeled with vvfile_t, but does not allow any other access. This allows communication between reverse-proxy web servers and Vely applications.
- allows web servers to connect to any Vely FCGI process that is listening on a TCP port (see vv), but does not allow any other access (i.e. to any other ports).
Vely policy allows normal functioning of Vely features only, but does not introduce any unnecessary privileges to the rest of the system.
Note: Vely installation does not distribute .pp (compile) policy files, because it is not currently part of distro repos (which may change in the future). Due to changes in SELinux and difference in versions installed across derived distros, Vely will compile source .te and .fc files during the installation, ensuring the best possibility of successful SELinux policy setup.
Unix domain sockets
Using Unix domain sockets for Vely FCGI processes to communicate with a web server (see
vv) is the default method and no further action is needed.
Unix TCP sockets
Using TCP sockets for Vely FCGI processes to communicate with a web server (see
vv) requires you to label such ports as vvport_t, for example if you plan to use port 2109:
sudo semanage port -a -t vvport_t -p tcp 2109
When you no longer need a port, for example if you are switching to another port (for instance 2209), remove the old one and add the new one:
sudo semanage port -d -t vvport_t -p tcp 2109
sudo semanage port -a -t vvport_t -p tcp 2209
Changing or adding directories
If you are adding directories to be used by Vely program, or changing a directory, for example using a different storage instead of /var/lib/vv (see
how_vely_works), you need to label files in new directories:
sudo semanage fcontext -a -t vvfile_t "/your/new/dir(/.*)?"
sudo restorecon -R /your/new/dir
To remove context from such directories (if you are not using them anymore), use:
sudo semanage fcontext -d -t vvfile_t "/your/new/dir(/.*)?"
sudo restorecon -R /your/new/dir
See also
General (
deploying_application how_vely_works quality_control rename_files SELinux vely vely_architecture vely_removal vf vv why_Vely )
SEE ALL (
documentation)