423 lines
8.7 KiB
Markdown
423 lines
8.7 KiB
Markdown
# Testing Linux Hello on Your Linux Computer
|
|
|
|
This guide will help you test Linux Hello on your system. We'll start with safe CLI testing before any system-level installation.
|
|
|
|
## Prerequisites
|
|
|
|
### Install Required Packages
|
|
|
|
**Debian/Ubuntu:**
|
|
```bash
|
|
sudo apt update
|
|
sudo apt install -y \
|
|
build-essential \
|
|
libpam0g-dev \
|
|
v4l-utils \
|
|
pkg-config \
|
|
libssl-dev
|
|
```
|
|
|
|
**Fedora/RHEL:**
|
|
```bash
|
|
sudo dnf install -y \
|
|
gcc \
|
|
make \
|
|
pam-devel \
|
|
v4l-utils \
|
|
pkgconfig \
|
|
openssl-devel
|
|
```
|
|
|
|
**Arch Linux:**
|
|
```bash
|
|
sudo pacman -S \
|
|
base-devel \
|
|
pam \
|
|
v4l-utils \
|
|
pkgconf \
|
|
openssl
|
|
```
|
|
|
|
### Install Rust
|
|
|
|
If you don't have Rust installed:
|
|
```bash
|
|
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|
source $HOME/.cargo/env
|
|
```
|
|
|
|
---
|
|
|
|
## Step 1: Build the Project
|
|
|
|
```bash
|
|
# Clone or navigate to the project directory
|
|
cd Linux-Hello
|
|
|
|
# Build in release mode (works on any Linux)
|
|
cargo build --release
|
|
|
|
# Or with ONNX ML support (requires glibc 2.38+ / Ubuntu 24.04+)
|
|
cargo build --release --features onnx
|
|
```
|
|
|
|
This will create:
|
|
- `target/release/linux-hello` (CLI tool)
|
|
- `target/release/linux-hello-daemon` (daemon)
|
|
|
|
### Build Options
|
|
|
|
| Build | Command | Requirements |
|
|
|-------|---------|--------------|
|
|
| Default | `cargo build --release` | Any Linux |
|
|
| With ONNX | `cargo build --release --features onnx` | glibc 2.38+ |
|
|
| With TPM | `cargo build --release --features tpm` | TPM2 libraries |
|
|
|
|
---
|
|
|
|
## Step 2: Test Without Installation (Safest)
|
|
|
|
You can test most features without installing anything system-wide.
|
|
|
|
### 2.1 Check Camera Detection
|
|
|
|
```bash
|
|
# Run the CLI tool directly
|
|
./target/release/linux-hello status --camera
|
|
```
|
|
|
|
**Expected output:**
|
|
- Lists available cameras
|
|
- Shows IR camera detection
|
|
- May show "No cameras found" if no camera is connected
|
|
|
|
**Note:** Works even without a camera (will show empty list or use mock).
|
|
|
|
### 2.2 Test Configuration
|
|
|
|
```bash
|
|
# View default configuration
|
|
./target/release/linux-hello config
|
|
|
|
# View as JSON
|
|
./target/release/linux-hello config --json
|
|
```
|
|
|
|
### 2.3 Capture Test Frames (if camera available)
|
|
|
|
```bash
|
|
# Create a test directory
|
|
mkdir -p ~/test-frames
|
|
|
|
# Capture 5 frames
|
|
./target/release/linux-hello capture --output ~/test-frames --count 5
|
|
```
|
|
|
|
**Expected:** Creates PNG files in `~/test-frames/` (if camera available).
|
|
|
|
### 2.4 Test Face Detection (with image file)
|
|
|
|
```bash
|
|
# Test detection on a photo
|
|
./target/release/linux-hello detect --image ~/test-frames/frame_000.png --output ~/detected.png
|
|
```
|
|
|
|
**Expected:**
|
|
- With ONNX models: Accurate face detection with bounding boxes
|
|
- Without ONNX: Basic placeholder detection (unreliable)
|
|
|
|
---
|
|
|
|
## Step 3: Test with Daemon (Manual Start)
|
|
|
|
Before installing system-wide, test the daemon manually:
|
|
|
|
### 3.1 Start Daemon Manually
|
|
|
|
```bash
|
|
# Create runtime directory
|
|
sudo mkdir -p /run/linux-hello
|
|
sudo chmod 777 /run/linux-hello # For testing only!
|
|
|
|
# Start daemon in foreground (to see logs)
|
|
sudo ./target/release/linux-hello-daemon
|
|
```
|
|
|
|
**Keep this terminal open** - you'll see daemon logs.
|
|
|
|
### 3.2 Test Enrollment (in another terminal)
|
|
|
|
```bash
|
|
# In a new terminal, test enrollment
|
|
./target/release/linux-hello enroll --label test
|
|
```
|
|
|
|
**Expected:**
|
|
- Captures frames from camera
|
|
- Runs anti-spoofing checks
|
|
- Creates face template
|
|
- Stores encrypted in `/var/lib/linux-hello/templates/`
|
|
|
|
### 3.3 Test Authentication
|
|
|
|
```bash
|
|
# Test authentication
|
|
./target/release/linux-hello test
|
|
```
|
|
|
|
**Expected:**
|
|
- Captures frame from camera
|
|
- Runs face detection
|
|
- Compares with enrolled template
|
|
- Reports success/failure with confidence score
|
|
|
|
### 3.4 List Enrolled Templates
|
|
|
|
```bash
|
|
./target/release/linux-hello list
|
|
```
|
|
|
|
---
|
|
|
|
## Step 4: Full Installation (Optional)
|
|
|
|
**Warning:** This modifies system PAM configuration. Test in a VM or have a recovery plan.
|
|
|
|
### 4.1 Build PAM Module
|
|
|
|
```bash
|
|
cd pam-module
|
|
make
|
|
```
|
|
|
|
### 4.2 Install Components
|
|
|
|
```bash
|
|
# Install PAM module
|
|
sudo make install
|
|
|
|
# Install daemon and CLI
|
|
sudo cp ../target/release/linux-hello-daemon /usr/libexec/
|
|
sudo cp ../target/release/linux-hello /usr/bin/
|
|
sudo chmod +x /usr/libexec/linux-hello-daemon /usr/bin/linux-hello
|
|
|
|
# Install systemd service
|
|
sudo cp ../dist/linux-hello.service /etc/systemd/system/
|
|
sudo systemctl daemon-reload
|
|
sudo systemctl enable linux-hello.service
|
|
sudo systemctl start linux-hello.service
|
|
|
|
# Install D-Bus configuration
|
|
sudo cp ../dist/org.linuxhello.Daemon.conf /etc/dbus-1/system.d/
|
|
sudo cp ../dist/org.linuxhello.Daemon.service /usr/share/dbus-1/system-services/
|
|
|
|
# Install configuration
|
|
sudo mkdir -p /etc/linux-hello
|
|
sudo cp ../dist/config.toml /etc/linux-hello/
|
|
```
|
|
|
|
### 4.3 Configure PAM (CAREFUL!)
|
|
|
|
**Backup first:**
|
|
```bash
|
|
sudo cp /etc/pam.d/common-auth /etc/pam.d/common-auth.backup
|
|
```
|
|
|
|
**Edit PAM config:**
|
|
```bash
|
|
sudo nano /etc/pam.d/common-auth
|
|
```
|
|
|
|
Add at the top:
|
|
```
|
|
auth sufficient pam_linux_hello.so debug fallback=password
|
|
auth required pam_unix.so use_first_pass
|
|
```
|
|
|
|
**Test login:**
|
|
- Try logging out and back in
|
|
- Face authentication will be attempted first
|
|
- Falls back to password if it fails
|
|
|
|
---
|
|
|
|
## Step 5: ONNX Model Setup (For Real Face Recognition)
|
|
|
|
For accurate face recognition, you need ONNX models:
|
|
|
|
### 5.1 Check System Requirements
|
|
|
|
ONNX support requires **glibc 2.38+**:
|
|
- Ubuntu 24.04 or later
|
|
- Fedora 39 or later
|
|
- Arch Linux (rolling release)
|
|
|
|
```bash
|
|
# Check your glibc version
|
|
ldd --version
|
|
```
|
|
|
|
### 5.2 Download Models
|
|
|
|
See [models/README.md](models/README.md) for model download instructions.
|
|
|
|
### 5.3 Build with ONNX
|
|
|
|
```bash
|
|
cargo build --release --features onnx
|
|
```
|
|
|
|
---
|
|
|
|
## Step 6: Troubleshooting
|
|
|
|
### Daemon Won't Start
|
|
|
|
```bash
|
|
# Check if socket directory exists
|
|
ls -la /run/linux-hello/
|
|
|
|
# Check daemon logs
|
|
sudo journalctl -u linux-hello.service -f
|
|
```
|
|
|
|
### Camera Not Detected
|
|
|
|
```bash
|
|
# List V4L2 devices
|
|
v4l2-ctl --list-devices
|
|
|
|
# Check permissions
|
|
ls -la /dev/video*
|
|
|
|
# May need to add user to video group
|
|
sudo usermod -aG video $USER
|
|
# Log out and back in
|
|
```
|
|
|
|
### Permission Errors
|
|
|
|
```bash
|
|
# Template storage directory
|
|
sudo mkdir -p /var/lib/linux-hello/templates
|
|
sudo chmod 755 /var/lib/linux-hello/templates
|
|
|
|
# Runtime directory
|
|
sudo mkdir -p /run/linux-hello
|
|
sudo chmod 755 /run/linux-hello
|
|
```
|
|
|
|
### PAM Module Issues
|
|
|
|
```bash
|
|
# Check if module is installed
|
|
ls -la /lib/x86_64-linux-gnu/security/pam_linux_hello.so
|
|
|
|
# Check PAM logs
|
|
sudo tail -f /var/log/auth.log
|
|
# or
|
|
sudo journalctl -f | grep pam
|
|
```
|
|
|
|
### ONNX Linking Errors
|
|
|
|
If you see errors about `__isoc23_strtoll`:
|
|
- Your system has glibc < 2.38
|
|
- Use the default build (without `--features onnx`)
|
|
- Or upgrade to Ubuntu 24.04+ / Fedora 39+
|
|
|
|
---
|
|
|
|
## Step 7: Running Tests
|
|
|
|
```bash
|
|
# Run all tests
|
|
cargo test
|
|
|
|
# Run specific test suites
|
|
cargo test --test phase3_security_test
|
|
cargo test --test phase2_auth_test
|
|
|
|
# Run with output
|
|
cargo test -- --nocapture
|
|
|
|
# Run benchmarks
|
|
cargo bench -p linux-hello-daemon
|
|
```
|
|
|
|
---
|
|
|
|
## Step 8: Cleanup (If Needed)
|
|
|
|
### Remove Installation
|
|
|
|
```bash
|
|
# Stop and disable service
|
|
sudo systemctl stop linux-hello.service
|
|
sudo systemctl disable linux-hello.service
|
|
|
|
# Remove PAM module
|
|
cd pam-module
|
|
sudo make uninstall
|
|
|
|
# Remove binaries
|
|
sudo rm /usr/libexec/linux-hello-daemon
|
|
sudo rm /usr/bin/linux-hello
|
|
|
|
# Remove service file
|
|
sudo rm /etc/systemd/system/linux-hello.service
|
|
sudo systemctl daemon-reload
|
|
|
|
# Remove D-Bus files
|
|
sudo rm /etc/dbus-1/system.d/org.linuxhello.Daemon.conf
|
|
sudo rm /usr/share/dbus-1/system-services/org.linuxhello.Daemon.service
|
|
|
|
# Restore PAM config
|
|
sudo cp /etc/pam.d/common-auth.backup /etc/pam.d/common-auth
|
|
```
|
|
|
|
---
|
|
|
|
## Safety Recommendations
|
|
|
|
1. **Test in a VM first** - Don't test on your main system
|
|
2. **Keep password fallback** - Always have `fallback=password` in PAM config
|
|
3. **Backup PAM configs** - Before modifying `/etc/pam.d/`
|
|
4. **Test logout/login** - In a separate session (don't lock yourself out)
|
|
5. **Use TPM for production** - Software fallback is for development only
|
|
|
|
---
|
|
|
|
## Quick Test Checklist
|
|
|
|
- [ ] Project builds successfully
|
|
- [ ] CLI tool runs (`./target/release/linux-hello status`)
|
|
- [ ] Camera enumeration works (or shows empty list)
|
|
- [ ] Configuration displays correctly
|
|
- [ ] Daemon starts manually
|
|
- [ ] Enrollment works (creates template)
|
|
- [ ] Authentication test runs
|
|
- [ ] Tests pass (`cargo test`)
|
|
|
|
---
|
|
|
|
## What Works With/Without ONNX
|
|
|
|
### Default Build (No ONNX)
|
|
- All infrastructure and security features
|
|
- Camera capture and IR control
|
|
- Anti-spoofing framework
|
|
- Template encryption (AES-256-GCM)
|
|
- IPC and D-Bus communication
|
|
- **Placeholder** face detection/embedding (not accurate)
|
|
|
|
### With ONNX Models
|
|
- Accurate face detection (RetinaFace)
|
|
- Accurate face embedding (MobileFaceNet)
|
|
- Production-ready face recognition
|
|
- Proper anti-spoofing based on real face data
|
|
|
|
---
|
|
|
|
**The system is feature-complete.** For production use, build with `--features onnx` on a compatible system and download the ONNX models.
|