Skip to content

A facial authentication software for Linux built in Rust.

License

Notifications You must be signed in to change notification settings

SimonBrandner/oblichey

Repository files navigation

Oblichey

A facial authentication software for Linux built in Rust inspired by Howdy. I would highly recommend reading about how Oblichey works before using it.

Notes/disclaimers

  • Oblichey can generate false positives!
  • You need a device with an infrared (IR) webcam.
  • At the very least until #6 is solved, this can be fooled with a printed photo.
  • I am relatively new to Rust, Nix and PAM development, so use this at your own risk while it is in early stages of development.
  • I am a student, and so my availability is somewhat limited depending on the time of year etc.
  • Contributions are welcome!

Installation and setup

NixOS

Using a Nix flake

Add Oblichey to your flake inputs:

{
  inputs = {
    oblichey.url = "github:SimonBrandner/oblichey/main";
    ...
  };
  ...
}

Add the Oblichey NixOS module to your imports inside your system configuration:

{inputs, ...}: {
  imports = [
    inputs.oblichey.nixosModules.default
  ];
  ...
}

Add an oblichey entry to programs:

{inputs, ...}: {
  ...
  programs.oblichey = {
    enable = true;
    settings = {
      camera = {
        path = "/dev/video2"; # Path to your IR camera
      };
    };
    pamServices = ["su" "sudo"]; # List of PAM services (see `/etc/pam.d/`) in which a rule for Oblichey should be added
  };

And now you are good to go!

Other distributions

Building

Using the Nix package manager

Install the Nix package manager. It is not to be confused with NixOS. NixOS is a whole distribution but we only need the package manager which can be installed on any distribution. It is going to manage dependencies for us. It can be found here.

Enable flakes by following the documentation here.

Clone the repo and build the flake.

git clone https://github.com/SimonBrandner/oblichey/
cd oblichey
nix build

Once the build process has finished, the resulting binary, library and weights will be located in ./result/.

Manually (without the Nix package manager)

If you do not want to install Nix and know what you are doing, you can build manually. For that you are going to need to take a look at the package.nix file and install the equivalents of the packages listed in nativeBuildInputs and buildInputs for your distribution.

Once that is done you can clone the repo and build using cargo.

git clone https://github.com/SimonBrandner/oblichey/
cd oblichey
cargo build --release

Once the build process has finished, the resulting binary, library and weights will be located in ./target/release/.

Setup

You can now add oblichey-cli to your PATH, so that the PAM module can use it. It is recommended to move the build output to a more proper place though.

Now, it is necessary to create a configuration file at /etc/oblichey.toml with the path to your IR camera. It will usually be something like /dev/video2.

[camera]
path="/path/to/camera"

The last step is to add a PAM rule for Oblichey. You can find the configuration for PAM services at /etc/pam.d/. For example, one may want to use Oblichey to authenticate when using sudo, so they would edit /etc/pam.d/sudo and add the following line. It is important to note that this line should be placed above the other auth rules, so that it takes precedence.

auth sufficient /path/to/libpam_oblichey.so

And now you are good to go!

Usage

You can use oblichey-cli help to see the available commands. Everything should be straightforward - you scan a new face, (use the test feature to check everything is fine), and you are good to go.

Development

Install the Nix package manager. It is not to be confused with NixOS. NixOS is a whole distribution but we only need the package manager which can be installed on any distribution. It is going to manage dependencies for us. It can be found here.

Enable flakes by following the documentation here.

Clone the repo and enter the Nix development environment, this is going to automagically install all the necessary dependencies.

git clone https://github.com/SimonBrandner/oblichey/
cd oblichey
nix develop
./scripts/unzip_models.sh

Now you can compile both oblichey-cli and oblichey-pam-module like so.

cargo build --release

The binary and library files can be found in the target directory. You can also use cargo run --release -p oblichey-cli to build and run the cli.

To avoid having to type nix develop manually every time, you can use direnv.

cp .envrc.sample .envrc

Notes

  • You need to compile with the --release flag, otherwise Oblichey is going to run super slow due to the neural network models not being optimized.
  • If you want to develop on a machine that does not have an IR camera, you can do so by compiling with --features "rgb-webcam". This is intended solely for development purposes.

Etymology or where does the name come from?

The word oblichey comes from the Czech word obličej (which sounds sort of like oblichey when said aloud) meaning face.

Software that was used to build Oblichey