Introduction

Deaddrop can be configured through both a web-based interface and a command-line environment, offering flexibility for different administrative preferences.

Web-Based Interface

The graphical interface requires the ddadm package to be installed (default). Once set up, it is accessible over TLS on port TCP/8443. This interface provides an intuitive way to manage the system through your web browser.

Command-Line Access

For direct control, administrators can interact with Deaddrop via the command line. This environment is typically accessible in one of two ways:

Locally: Through a console session on the system itself.

Remotely: Using the SSH network protocol to establish a secure connection.

Both methods provide full administrative access to configure and manage the system.

Access Methods

Deaddrop supports several methods of administrative access, allowing both local and remote management.

Console Access

Administrators can access Deaddrop directly through the system console. This is typically available via:

  • A physical terminal or virtual console attached to the system.

Recommendation: Use individual user accounts and escalate privileges using sudo when administrative access is required. Note that sudo is configured to authenticate using the root password.

SSH Access

Deaddrop can be configured to allow secure remote access via the SSH (Secure Shell) protocol.

Recommendation: Just as with console access, it is best practice to log in using personal user accounts and switch to the root user using sudo. sudo is configured to require the root password for authentication.

HTTPS Access (Web Interface)

For browser-based administration, Deaddrop provides an HTTPS interface once the ddadm package is installed. This interface is accessible over TLS on port 8443/TCP.

This option allows secure, remote configuration through a graphical user interface.

System Updates

Deaddrop uses RPM packages for software management. Keeping the system up to date ensures stability, security, and access to the latest features.

Enabling Automatic Updates

Automatic updates is enabled by default since version 4.0.0

To automate the update process, you can install the ddplugin-upgrade package:

dnf install ddplugin-upgrade

Once installed, this plugin will manage updates in the background without requiring manual intervention.

Checking the Installed Deaddrop Version

To determine which version of Deaddrop is currently installed, run:

rpm -qa deaddrop

The output will follow the format:

[name]-[version]-[build_version].[platform].noarch

Example:

deaddrop-4.4.0-1749812404.fc41.noarch

Kernel updates

Operating system kernel updates are treated as a special case. While the kernel can be updated like any other package, the changes only take effect after a system reboot.

To apply a newly installed kernel:

systemctl reboot

Note: Always ensure the system can safely reboot (e.g., services properly shut down, backups complete) before executing this command. Automatic upgrades will reboot system if needed.

User Accounts and Authentication

Deaddrop supports multiple authentication mechanisms, with behavior depending on account type and system version.

Authentication Modes

As of Deaddrop version 3.2, the default authentication method for local, permanent, password-based accounts has changed:

  • Session-Based Authentication is now the default for most users.
  • Basic Authentication is still used for:
    • Users assigned the API role
    • The administration account
    • Legacy accounts not yet migrated

Previously, Basic Authentication was the default for all password-based accounts. This behavior was standard up to version 3.1.

All local permanent password based accounts will use Session based authentication with an exception for users with the API-role which will use Basic Auth. Basic Auth was default for local password based accounts and was used for all accounts before deaddrop version 3.2. This has changes since version 3.2 to session based authentication. Accounts can manually be migrated to the new session based authentication. Administration account is still using Basic Auth.

Migrating to Session-Based Authentication

Accounts created prior to version 3.2 may still be using Basic Auth. These can be manually migrated to use the new session-based authentication model for improved security and modern session handling.

Adding a Permanent Deaddrop Account

To create a new end-user account in Deaddrop, use the following administrative script:

/opt/sysctl/deaddrop/admscripts/add_account.pl

This script requires three arguments:

  • Email address (in lowercase)
  • Cell phone number (including country code, without a + sign)
  • Account role, one of the following:
    • perm — For a standard permanent user account
    • perm-me — Permanent account that can grant access to others
    • api — API-only access (uses Basic Auth instead of session-based login)

Example

/opt/sysctl/deaddrop/admscripts/add_account.pl example@sysctl.se 46123456789 perm

Important Notes

  • The email address must be in lowercase.
  • The cell phone number must include the country code, but do not prefix it with a +.

Adding a Permanent x509 or SAML Account

Deaddrop supports automatic account provisioning for users authenticated through x509 certificates or SAML, once the respective integrations have been properly configured.

x509 Authentication

Once x509 integration is in place, accounts are automatically created the first time an authorized user attempts to log in with their certificate.

  • No manual account creation is required.
  • Authorization is handled through the configured trust and policy mechanisms.

SAML Authentication

Once SAML integration has been completed, accounts for authorized users are created automatically on first login via the SAML Identity Provider (IdP).

  • The user must be successfully authenticated and authorized by the IdP.
  • Account provisioning is seamless and requires no administrative intervention.

Removing a Permanent Deaddrop Account

To remove an end-user account from the Deaddrop system, use the following administrative script:

/opt/sysctl/deaddrop/admscripts/removedeaddropuser.pl

This script takes a single argument:

Email address of the user to be removed (must be in lowercase)

  • Email address of the user to be removed (must be in lowercase)

Example

/opt/sysctl/deaddrop/admscripts/removedeaddropuser.pl example@sysctl.se

Notes:

  • Ensure the email address provided matches exactly with the one used during account creation.
  • This action will remove the user’s access and associated credentials from the system.

Resetting a Deaddrop Account Password

If a user forgets their password, a new one can be generated and sent to them using the following administrative script:

/opt/sysctl/deaddrop/admscripts/reset_password.pl <email_address>

This script takes one argument:

  • The username (i.e., email address) of the account for which the password should be reset.

Example

/opt/sysctl/deaddrop/admscripts/reset_password.pl example@sysctl.se

Notes

  • The email address must be entered exactly as it was during account creation (typically in lowercase).
  • A new password will be generated and securely delivered to the user.

Migrating an Account from Basic Auth to Session-Based Authentication

For accounts created prior to Deaddrop version 3.2, Basic Authentication may still be in use. To align with current security practices, these accounts can be migrated to Session-Based Authentication using the provided script.

Migration Script

/opt/sysctl/deaddrop/admscripts/convert_basic_auth_to_session_account.pl

This script takes one argument:

  • The username (i.e., email address) of the account to be migrated.

Example

/opt/sysctl/deaddrop/admscripts/convert_basic_auth_to_session_account.pl example@sysctl.se

Notes

  • The email address must be entered in lowercase.
  • This operation updates the authentication method without affecting the user’s data or permissions.

Adding an Administrative Account

Administrative accounts can be created directly through the Deaddrop web-based administration interface.

Steps to Add an Admin Account via the Web GUI

  1. Log in to the web admin interface using a privileged account.
    • The GUI is accessible over HTTPS on port 8443 (requires ddadm to be installed).
  2. In the left-hand navigation column, click on System.
  3. Under the System menu, select Accounts.
  4. You will be taken to the “Add and Remove Administrative Accounts” section.
  5. Use the provided form to:
    • Enter the username/email for the new administrative account.
    • Set the initial password.
    • Choose the appropriate privilege level (Role) for the new account.

Default Administrative User: sysadm

During initial system installation, the system automatically generates a password for sysadm.

This generated password is stored in the following secure file:

/root/ddadm-sysadm-initial-password

Important:

This default password should be changed immediately after installation to comply with your organization’s password policy.

Removing an Administrative Account

Administrative user accounts can be removed through the Deaddrop web-based administration interface.

Steps to Remove an Admin Account via the Web GUI

  1. Log in to the web admin interface using a privileged account.
    • Accessible over HTTPS on port 8443 (requires the ddadm package).
  2. In the left-hand navigation menu, click on System.
  3. Under the System section, select Accounts.
  4. You will be directed to the “Add and Remove Administrative Accounts” section.
  5. In the account removal area:
    • Select the user you wish to remove from the dropdown menu.
    • Click the “Remove user account” button to confirm the action.

Resetting the Password of an Administrative Account

If you need to change the password for an administrative user in the web-based admin interface, you can do so using the htpasswd command.

Example Command To reset the password for an admin user named robert, run:

htpasswd -B -C6 /opt/sysctl/ddadm/etc/ddadm/.htpasswd robert

This command:

  • Updates the password hash in the .htpasswd file used by the admin web GUI.
  • Uses bcrypt with a cost factor of 6 for secure password hashing.

Default Administrative User

The default administrative username for the web GUI is:

sysadm

If no other users have been created, this is the primary account for system administration.

Notes

  • You will be prompted to enter and confirm the new password.
  • Ensure only privileged users have access to the .htpasswd file and can execute this command.

Handling Existing Dispatches

When a dispatch is created for a recipient—such as demo@sysctl.se — and that user does not have a permanent account, the system will automatically generate a temporary account for them.

Temporary Account Location

The temporary account is created in the following directory:

/var/deaddrop/html/demo@sysctl.se/

This directory serves as the root for that user’s Deaddrop session.

Uploaded Files

Any files uploaded to the dispatch are stored in a randomized subdirectory within the user’s temporary account folder. The full path typically looks like:

/var/deaddrop/html/demo@sysctl.se/<unique_id>/

For example:

/var/deaddrop/html/demo@sysctl.se/6ffe03aee5d7ccd78b3b22b6de8d660df141147f129ee806cac5711f7e411d9d

The ** portion is a secure, randomly generated string used to isolate and identify each dispatch instance.

Notes

  • These temporary accounts are ephemeral and designed for one-time or short-term use.
  • Administrators may inspect, archive, or remove contents as necessary based on organizational policies or retention guidelines.

Removing a Shared Dispatch

Shared dispatch — especially those associated with temporary accounts — can be removed using an administrative script provided with the system.

Script Location

/opt/sysctl/deaddrop/admscripts/

To remove a specific shared dispatch, use the removedeaddropuser.pl script with the following syntax:

./removedeaddropuser.pl <email_address> <drop_directory_hash>

Example

[root@localhost ~]# ls /var/deaddrop/html/demo@sysctl.se/
6ffe03aee5d7ccd78b3b22b6de8d660df141147f129ee806cac5711f7e411d9d
[root@localhost ~]# cd /opt/sysctl/deaddrop/admscripts/
[root@localhost admscripts]# ./removedeaddropuser.pl demo@sysctl.se 6ffe03aee5d7ccd78b3b22b6de8d660df141147f129ee806cac5711f7e411d9d

Verifying Removal

To confirm that the account and all associated files have been deleted, attempt to list the user directory:

[root@localhost admscripts]# ls /var/deaddrop/html/demo@sysctl.se/
ls: cannot access /var/deaddrop/html/demo@sysctl.se/: No such file or directory

This error indicates that the directory (and its contents) no longer exists.

Note on Temporary Accounts

If the account was temporary and all its shared content has been deleted, the entire user directory (e.g., /var/deaddrop/html/demo@sysctl.se/) will also be automatically removed as part of the cleanup process.

Configure Deaddrop

Deaddrop’s system behavior and operational settings are primarily managed through configuration files. Most administrators will only need to modify a single file after the initial setup.

Main Configuration File

The primary configuration file for Deaddrop is:

/opt/sysctl/deaddrop/conf/admin.conf

This file contains key system settings that determine Deaddrop’s runtime behavior and environment-specific configurations.

Default Settings File

/opt/sysctl/deaddrop/conf/default/admin.conf

This file serves as the baseline and should not be modified directly. Instead, override values in the primary admin.conf file as needed.

Editing Configuration

  • The file /opt/sysctl/deaddrop/conf/admin.conf can be manually edited using a text editor (e.g., vi).
  • Alternatively, you can configure the same settings through the web-based graphical administrator interface if the ddadm package is installed.

Applying Changes

After making any configuration changes, you must restart the Deaddrop service for the changes to take effect:

systemctl restart deaddrop

Deaddrop configurations

Deaddrop configurations are stored in an .ini file and must follow the format:

key = value

Each configuration entry should consist of a key-value pair separated by an equals sign.

avscan_plugin_enabled

Default: avscan_plugin_enabled = 0

Description:

Enables antivirus scanning for files transferred via Deaddrop. When set to 1, all files will be scanned, and any infected files will be quarantined.

Note:

This feature requires the ddplugin-av plugin to be installed.

avscan_script_file

Default: avscan_script_file = /opt/sysctl/ddplugin-av/scripts/avscan.pl

Description:

Specifies the script responsible for triggering antivirus scans.

WARNING: Changing this will likely not work.

emaildeaddropadmin

Default: emaildeaddropadmin = admin@domain.tld

Description:

Specifies the email address that Deaddrop will use as the sender when notifying the administrator.

emaildeaddropservice

Default: emaildeaddropservice = service@domain.tld

Description:

Defines the email address Deaddrop uses as the sender when sending notifications to user accounts.

Note:

This value supports the mailbox format, e.g., ‘Deaddrop Service service@domain.tld’.

support_info_email

Default: support_info_email = service@domain.tld

Description:

Specifies the email address displayed by Deaddrop for user support inquiries.

support_info_number

Default: support_info_number = 070123456789

Description:

Specifies the phone number that Deaddrop will display for user support contact.

email_sender_is_system

Default: email_sender_is_system = 1

Description:

Determines which email address Deaddrop uses as the sender for outgoing messages.

  • 1: Always use the system email address.
  • 0: Use the individual sender’s email address.

wwwroot

Default: wwwroot = https://deaddrop.domain.tld

Description:

Defines the base URL that Deaddrop expects users to access the service from. This value is used when generating links in emails and other user-facing communications.

passwordlength_min

Default: passwordlength_min = 12

Description:

Specifies the minimum allowed length for user passwords.

passwordlength_max

Default: passwordlength_max = 250

Description:

Specifies the maximum allowed length for user passwords.

passwordregex

Default: passwordregex = A-Za-z0-9

min_classes

Default: min_classes = 4

Description:

Specifies the minimum number of character classes required in a password. The supported character classes are:

  • Uppercase letters
  • Lowercase letters
  • Digits
  • Special characters

A value of 4 enforces the use of all four character classes.

post_max

Default: post_max = 10240000000

Description:

Defines the maximum allowed size (in bytes) for HTTP POST data submitted to Deaddrop.

smspasswordchars

Default: smspasswordchars = AaBbCcDdEeFfGgHhJjKkMmNnOoPpQqRrSsTtUuVvWwXxYyZz123456789

Description:

Defines the character set used for generating temporary passwords sent via SMS. The password will be composed only of characters from this string.

smspasswordlength

Default: smspasswordlength = 8

Description:

Specifies the length of the temporary password sent to users via SMS.

language

Default: language = en

Description:

Specifies the default language used by Deaddrop.

Supported values are:

  • en (English)
  • sv (Swedish)

Note:

The language used in emails is determined based on the following evaluation order:

  1. force_email_lang setting – If set, this overrides all other language preferences.
  2. Receiver’s language setting – If the recipient is a permanent user, their individually selected language will be used.
  3. Sender’s contact language – The language configured by the sender for the recipient contact. The evaluation order for language in emails is the following

timeout

Default: timeout = 900

Description:

Specifies the number of seconds of user inactivity after which Deaddrop will automatically log the user out. A value of 900 corresponds to 15 minutes.

Custom_Design

Default: Custom_Design = 0

Description:

Enables the use of a custom design/theme for the Deaddrop interface.

  • 0: Use the default design
  • 1: Enable custom design (requires appropriate custom assets)

Custom_Design_Brand

Default: Custom_Design_Brand = default

Description:

Specifies the directory name containing the custom design assets such as images, text, and CSS files.

Global_Contacts_Enable

Default: Global_Contacts_Enable = 0

Description:

Enables or disables the use of global contacts within Deaddrop.

  • 1: Enable global contacts
  • 0: Disable global contacts

Local_Contacts_Enable

Default: Local_Contacts_Enable = 1

Description:

Enables or disables the use of local (user-specific) contacts in Deaddrop.

  • 1: Enable local contacts
  • 0: Disable local contacts

Allow_Share_dd

Defaul: Allow_Share_dd = 1

Description:

Allows users to grant their contacts temporary access to use Deaddrop.

  • 1: Enable sharing access
  • 0: Disable this feature

use_mcs

Default: use_mcs = 1

Description:

Controls whether Deaddrop assigns unique MCS (Multi-Category Security) labels to all users.

  • 1: Enable MCS labeling
  • 0: Disable MCS labeling

send_password_insecure

Default: send_password_insecure = 0

Description:

Controls whether passwords are sent via insecure channels.

  • 0: Do not send passwords insecurely (recommended)
  • 1: Send passwords insecurely (not secure — strongly discouraged)

Warning:

Setting this to 1 poses a significant security risk and should be avoided.

first_run

Default: first_run = false

Description:

Enables the “first run” view for users upon their initial login.

  • true: Show introductory or onboarding view the first time a user logs in
  • false: Do not display the first run view

change_password

Default: change_password = false

Description:

Forces users to change their password upon their first login.

  • true: Users must change their password when logging in for the first time
  • false: No password change is required at first login

hide_file_name_in_email

Default: hide_file_name_in_email = 1

Description:

Determines whether file names are included in email notifications.

  • 1: Hide file names in email notifications
  • 0: Show file names in email notifications

del_user_history_x_days

Default: del_user_history_x_days = 0

Description:

Specifies the number of days after which a user’s personal history will be deleted.

  • A value of 0 means history will not be deleted automatically.
  • Any positive integer sets the number of days before deletion occurs.

anon_sender_email

Default: anon_sender_email =

Description:

If set, this email address will be used as the sender (consigner) for all outgoing emails, overriding the actual sender identity.

force_email_lang

Default: force_email_lang = en

Description:

Forces all outgoing emails to use the specified language. Supported values:

  • en — English
  • sv — Swedish
  • (empty) — Use the recipient contact’s predefined email language, if available.

name_in_account_notify

Default: name_in_account_notify = 0

Description:

Controls whether the account name is included in the email notification sent after an account is created.

  • 1: Include the account name in the notification
  • 0: Do not include the account name

ttl_max

Default: ttl_max = 336

Description:

Specifies the maximum time-to-live (TTL) in hours for a Deaddrop dispatch. Can be exceeded via force_all_dispatch_ttl or force_grant_contact_temp_access_ttl.

A value of 336 corresponds to 14 days.

ttl_default

Default: ttl_default = 72

Description:

Specifies the default time-to-live (TTL) in hours for a Deaddrop dispatch. Users can modify this value when creating a dispatch, up to the maximum defined by ttl_max.

force_all_dispatch_ttl

Default: = 0

Description:

Force time-to-live (TTL) to a fixed amount of hours for all Deaddrop dispatches. This renders users unable to modify TTL when creating a dispatch. Unaffected by ttl_max.

force_grant_contact_temp_access_ttl

Default: = 0

Description:

Force time-to-live (TTL) to a fixed amount of hours for temporary deaddrop access grants. This renders users unable to modify TTL when granting a contact temporary deaddrop access. Maximum 336 and unaffected by ttl_max.

password_enabled

Default: password_enabled= 1

Description:

Enables or disables password-based authentication for Deaddrop.

  • 1: Enable password authentication
  • 0: Disable password authentication

saml_enabled

Default: saml_enabled = 0

Description:

Enables or disables SAML (Security Assertion Markup Language) authentication in Deaddrop.

  • 1: Enable SAML authentication
  • 0: Disable SAML authentication

client_cert_enabled

Default: client_cert_enabled = 0

Description:

Enables or disables the use of X.509 client certificates for authentication.

  • 1: Enable client certificate authentication
  • 0: Disable client certificate authentication

dns_enabled

Default: dns_enabled = 1

Description:

Enables or disables DNS lookups for verifying email addresses in Deaddrop.

  • 1: Enable DNS lookups (default) – Deaddrop will verify user contacts by checking if their email addresses have valid MX records.
  • 0: Disable strict email verification via DNS.

user_notification_script

Default: user_notification_script = /opt/sysctl/deaddrop/scripts/mail.pl

Description:

Specifies the script or program used to send user notifications. By default, this points to an email-based notification script.

show_dd_version

Default: show_dd_version = 1

Description:

Controls whether the current Deaddrop version is displayed to logged-in users under the Support view.

  • 1: Show the version
  • 0: Hide the version

upstream_repo_server

Default: upstream_repo_server = https://updates.sysctl.se

Description:

Specifies the URL of the upstream repository server used for updates and package retrieval.

Example: https://updates.sysctl.se

upstream_repo_server_path

Default: upstream_repo_server_path = deaddrop

Description:

Specifies the subpath on the upstream repository server used for Deaddrop updates. For example, combined with the server URL, the full path would be:

https://updates.sysctl.se/deaddrop

upstream_repo_username

Default: upstream_repo_username =

Description:

Specifies the username required to authenticate with the upstream repository server, if applicable.

upstream_repo_password

Default: upstream_repo_password =

Description:

Specifies the password used to authenticate with the upstream repository server.

upstream_repo_proxy

Default: upstream_repo_proxy =

Description:

Specifies the proxy server to use when connecting to the upstream repository.

Example format: http://1.2.3.4:3128

upstream_repo_proxy_usr

Default: upstream_repo_proxy_usr =

Description:

Specifies the username for authenticating with the configured upstream repository proxy, if required.

upstream_repo_proxy_pwd

Default: upstream_repo_proxy_pwd =

Description:

Specifies the password for authenticating with the upstream repository proxy.

Supporting Multiple Domains

Deaddrop supports operation across multiple domain names, allowing the system to dynamically adjust URLs based on the recipient’s email domain. This is especially useful for organizations with multiple brands or divisions, or when supporting SSO (Single Sign-On) for specific domains.

Default Behavior

By default, Deaddrop uses the wwwroot setting defined in:

/opt/sysctl/deaddrop/conf/admin.conf

This default applies to all users unless overridden by domain-specific configuration.

Domain-Based URL Overrides

To customize the URL used for users from specific domains, Deaddrop can reference a domain-to-URL mapping file:

  1. Use the provided template file as a starting point:
/opt/sysctl/deaddrop/conf/email_domain_mappings.json.example
  1. Rename it to activate the feature:
/opt/sysctl/deaddrop/conf/email_domain_mappings.json
  1. Edit the JSON file to define custom domain mappings. Example:
[
{"domain":"sysctl.se", "url":"https://deaddrop.sysctl.se"},
{"domain":"sysctl.com", "url":"https://deaddrop.sysctl.com"}
]

When a dispatch is sent, the system checks the recipient’s email address domain and rewrites the URL in the outgoing email to match the corresponding entry.

Typical Use Case

This feature is commonly used in environments where recipients authenticate via SSO that is bound to specific domains. It ensures the user receives a domain-specific URL that aligns with their login infrastructure.

Enabling Global Contacts

Deaddrop supports a global contacts directory, which allows predefined users to be accessible across the platform. This can streamline file sharing and communication, especially in large or multi-user environments.

Step 1: Enable Global Contacts To enable this feature, open the configuration file:

/opt/sysctl/deaddrop/conf/admin.conf

Then add or modify the following line:

Global_Contacts_Enable = 1

Save and close the file. You must restart Deaddrop for the changes to take effect:

systemctl restart deaddrop

Step 2: Edit the Global Contacts File

Global contacts are defined in the following file:

/var/deaddrop/globalcontacts/contacts.json

Use a text editor to add or update entries:

vi /var/deaddrop/globalcontacts/contacts.json

Example: Adding Global Contacts

Here is a sample JSON structure containing two global contacts:

[
  {
    "email": "global_contact@sysctl.se",
    "language": "en",
    "number": "123456789",
    "groups": [],
    "nick": "global_contact"
  },
  {
    "email": "global_user@sysctl.se",
    "number": "123456780",
    "language": "en",
    "groups": [],
    "nick": "global_user"
  }
]

Important:

The file must contain valid JSON syntax. Invalid formatting will result in errors when loading the contacts.

User Notification Script

Deaddrop uses a customizable notification script to alert users about account and file events, such as file uploads, reminders, and account status changes. This script is defined by the user_notification_script configuration setting.

Default Behavior

By default, the system uses an email to send notifications such as:

  • New file received
  • Download reminders
  • File removal alerts

Custom Notification Script

You can replace the default mail notification mechanism by creating a custom script, provided it follows the required format and permissions.

Requirements

  • The script must have the following SELinux label and permissions:
-rwxr-x---. root ddadm system_u:object_r:ddbackend_mail_exec_t:s0
  • The script must accept a single JSON-formatted argument and process it accordingly.

Notification JSON Format

The Deaddrop backend calls the notification script with structured JSON input. Here’s an example:

{
  "from": "sender@sysctl.se",
  "to": "receiver@sysctl.se",
  "lang": "sv",
  "mail_type": "new_file_available"
}
  • from: The sender’s email address
  • to: The recipient’s email address
  • lang: The recipient’s preferred language
  • mail_type: The type of notification to send

Supported Languages

Deaddrop currently supports the following languages by default:

  • en — English
  • sv — Swedish

Supported mail_type Values

  • new_account
    • Notify user about creation of a new account
  • new_account_notify
    • Notify admin of new account creation
  • new_file_available
    • Notify receiver that files are available
  • new_file_available_notify
    • Notify sender that files have been shared
  • send_file_to_me
    • Inform receiver they can send files only to sender
  • send_file_to_any
    • Inform receiver they can temporarily use Deaddrop
  • reminder
    • Remind receiver to download pending files
  • temp_account_removed
    • Notify user that a temporary account has been deleted
  • send_password_insecure
    • Send password by email
  • send_file_to_me_notify
    • Notify sender that receiver has access to send files
  • send_file_to_any_notify
    • Notify sender of receiver’s temporary file-sending access
  • remove_download_site
    • Notify receiver of download site and file removal
  • error_watermark
    • Alert sender that watermarking failed and no files were sent

Extended Data for File Downloads

If the mail_type is new_file_available, the JSON input will also include:

  • download_dir: A hash used in the download URL
  • jobcard: Path to a directory containing job.json, which holds more detailed metadata

Example:

{
  "from": "sender@sysctl.se",
  "to": "receiver@sysctl.se",
  "lang": "en",
  "mail_type": "new_file_available",
  "download_dir": "a9a7aff2a9d58cc1f0ee007f9c2e257a5d15918bfe62625b09b6e783b2ba536e",
  "jobcard": "/var/deaddrop/work/backend/fromcgi/sender@sysctl.seXw9vFynlx3datEBmzPXIq4xS"
}

job.json Contents

The jobcard directory contains job.json with additional delivery metadata, such as:

{
  "sender": {
    "email": "sender@sysctl.se",
    "number": "4671234567",
    "lang": "en",
    "first_run": "false",
    "accountType": "perm",
    "change_passwd": "false",
    "settings": {
      "show_number": "true",
      "show_email": "true",
      "show_lang": "false",
      "show_nick": "true"
    }
  },
  "ttl": "8",
  "receivers": [
    {
      "email": "receiver@sysctl.se",
      "language": "en",
      "number": "46712345678",
      "name": "",
      "groups": [],
      "nick": "nickname"
    }
  ],
  "ddmessage": "You are allowed to share files delivered by the deaddrop service",
  "create_time": 1677585663,
  "deaddrop_type": "me"
}

SMS Configuration

Deaddrop’s SMS functionality is configured using the gateway.conf file. This file defines how SMS notifications—such as password delivery or access alerts—are routed through the system’s SMS gateway.

Editing the Configuration

To modify SMS gateway settings, use the built-in vi text editor:

vi /opt/sysctl/sms/conf/gateway.conf

This is the primary configuration file used to define SMS behavior.

  • Alternatively, you can configure the same settings through the web-based graphical administrator interface if the ddadm package is installed.

Viewing Default Settings

To view the default settings (without modifying anything), run:

cat /opt/sysctl/sms/conf/default/gateway.conf

Note:

  • The default configuration file includes inline comments after each setting, explaining its purpose and expected values.

Best Practice

  • Do not edit the default config file directly. Always make changes in the primary gateway.conf file to preserve update compatibility.
  • Restart the relevant service after applying configuration changes, if required by your system.

SMS Providers

Deaddrop uses SMS to securely deliver passwords to users. It supports integration with a wide range of SMS solutions, including both local hardware and external network-based services.

Supported SMS Providers

Deaddrop comes with built-in support for the following SMS delivery options:

  • Local Modem (requires SIM card and physical modem hardware)
  • Tele2
  • Beepsend
  • Telia Telemat
  • Clickatell
  • Link Mobility
  • Sergel
  • Bosbec
  • TDC
  • 46elks
  • Twilio
  • SMS Eagle
  • Cellsynt

This flexibility allows organizations to choose a provider that aligns with their infrastructure, pricing model, and geographic delivery capabilities.

Local Modem Setup

To use a local modem for SMS:

  • A physical modem must be connected to the Deaddrop host system.
  • A valid SIM card must be inserted.
  • Ensure the modem is supported and recognized by the system.
  • No internet connection is required for local SMS sending, which can be beneficial in air-gapped or high-security environments.

Network SMS Services

For all network-based SMS providers:

  • Internet connectivity is required.
  • Firewall rules must permit outbound connections to the respective SMS provider’s endpoint or API gateway.
  • Each provider may have specific authentication (e.g., API key or credentials) and endpoint requirements defined in the gateway.conf file.

Multi-Gateway Support

Deaddrop supports multiple configured SMS gateways. When sending an SMS:

  • The system attempts to use the gateways in the order they are defined in the configuration.
  • If the first gateway fails, Deaddrop will failover to the next available one automatically.

This ensures improved reliability and delivery success rates across heterogeneous SMS infrastructures.

Testing the SMS Setup

To verify that the SMS functionality is working correctly, Deaddrop includes a script that allows you to send a test SMS through the system’s internal queuing mechanism.

Test Command

Use the following script to send a test message:

/opt/sysctl/deaddrop/scripts/sendsms.pl YOUR-CELLPHONE-NUMBER-HERE test

Replace YOUR-CELLPHONE-NUMBER-HERE with the target phone number, including the country code (without a + sign).

How It Works

  • The message is sent through Deaddrop’s internal SMS queuing system.
  • This process verifies both the configuration of the selected SMS gateway and the queue processing pipeline.

Example

/opt/sysctl/deaddrop/scripts/sendsms.pl 46701234567 test

This sends a simple “test” message to the phone number +46 701 234 567.

Troubleshooting an SMS Configuration

If SMS notifications are not functioning as expected, use the following steps to diagnose and resolve common issues with the Deaddrop SMS subsystem.

1. Send a Test SMS

Begin by using the test script to verify the basic functionality of the SMS setup:

/opt/sysctl/deaddrop/scripts/sendsms.pl YOUR-CELLPHONE-NUMBER-HERE test

This sends a test message through the internal SMS queue using the configured gateway(s). If this fails, proceed with the following steps.

2. Test the Modem (If Applicable)

If you are using a direct-attached modem (local SMS gateway), verify that it can send messages independently:

/opt/sysctl/sms/admin/testmodem.pl YOUR-CELLPHONE-NUMBER-HERE

Note: This command accepts only one argument — the recipient phone number. The script will automatically provide a short test message.

Example:

/opt/sysctl/sms/admin/testmodem.pl 46701234567

3. Check the SMS Queue

Deaddrop uses an internal queue for processing outgoing SMS messages. To verify that messages are being queued and processed:

ls -al /opt/sysctl/sms/work/
  • If you see files accumulating in this directory without being cleared, the SMS backend may be stuck or misconfigured.
  • A healthy queue should grow and shrink as messages are processed.

4. Restart the SMS Backend Service

To ensure the backend daemon responsible for sending SMS is running properly, restart the service:

systemctl restart ss

Changing the Time Server

Deaddrop uses the Network Time Protocol (NTP) to ensure accurate time synchronization on the host system. This is essential for proper operation of time-sensitive features such as token expiration, file availability windows, and audit logging.

Configuration File

The time server configuration is stored in:

/opt/sysctl/deaddrop/etc/chrony/deaddrop.conf

Updating the Time Server

To configure a new NTP server:

  1. Open the configuration file using the built-in text editor:
vi /opt/sysctl/deaddrop/etc/chrony/deaddrop.conf
  1. Locate the existing server line and replace it with your preferred time server. For example:
server time.sysctl.se
  1. Save the changes and exit the editor.

Apply the Changes

Restart the Deaddrop time synchronization service to apply the new settings:

systemctl restart deaddrop-chronyd

Prerequisites for NTP to Function Properly

To ensure successful time synchronization:

  • The server name must be correctly specified in the configuration.
  • The specified NTP server must permit connections from the Deaddrop host.
  • Firewall rules must allow outbound UDP traffic on port 123, which is used by the NTP protocol.

Changing the Mail Relay

Deaddrop uses Postfix as its mail delivery agent. By default, the mail system is configured to use the variable $mydomain, which typically resolves correctly without modification. However, you may specify a custom mail relay if required by your environment.

Configuration File

The mail relay configuration is stored in:

/opt/sysctl/deaddrop/etc/postfix/main.ddadm.cf

Updating the Mail Relay Server

To define a new outbound relay server:

  1. Open the configuration file using a text editor:
vi /opt/sysctl/deaddrop/etc/postfix/main.ddadm.cf
  1. Locate (or add) the relayhost directive and set it to your desired SMTP relay. For example:
relayhost = relay.sysctl.se

Authentication can be implemented using the following approach

smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/opt/sysctl/deaddrop/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
relayhost = [mail.sysctl.se]:587

Create the credential file /opt/sysctl/deaddrop/etc/postfix/sasl_passwd with the following content

[mail.sysctl.se]:587 email@fqdn.se:random_password

Create the password database file with the following command

postmap /opt/sysctl/deaddrop/etc/postfix/sasl_passwd
  1. Save the file and exit the editor.

Apply the Changes

Restart the mail service to activate the new relay settings:

systemctl restart deaddrop-postfix

Notes

  • Ensure the specified relay server accepts connections from the Deaddrop host.
  • If authentication is required, additional Postfix configuration may be necessary (e.g., sasl_passwd).
  • Firewall rules must permit outbound SMTP (typically TCP port 25, 587, or 465, depending on your relay server).

Changing the DNS Server

Deaddrop relies on DNS to resolve domain names for email delivery, time synchronization, external API calls, and more. Therefore, it is essential that a valid DNS server is configured on the host system.

Configuration File

DNS settings are managed through NetworkManager connection profiles. You will need to edit the appropriate interface-specific configuration file, typically found in:

/etc/NetworkManager/system-connections/INTERFACE_NAME.nmconnection

Replace INTERFACE_NAME with the name of the active network interface (e.g., eth0, ens33, etc.).

Setting DNS Servers

To define custom DNS servers:

  1. Open the .nmconnection file with a text editor:
vi /etc/NetworkManager/system-connections/INTERFACE_NAME.nmconnection
  1. Under the [ipv4] or [ipv6] section (as applicable), add or update the DNS directive. For example:
[ipv4]
method=manual
DNS=8.8.8.8,8.8.4.4

You can use any preferred DNS servers (e.g., public, internal, or provider-specific).

  1. Save the file and exit the editor.

Apply the Changes

After editing the configuration, restart NetworkManager or bring the interface down and up to apply changes:

nmcli connection reload
nmcli connection down INTERFACE_NAME && nmcli connection up INTERFACE_NAME

Additional Tips

  • Verify DNS resolution with host or dig after applying changes.
  • Ensure no local firewall or DNS filtering blocks outbound UDP port 53 (DNS queries).

Log retention

Customize how logs are retained on disk.

Rotation frequency

Default: Daily

Description: Controls how often logs are rotated, provided that a log file hasn’t reached the maximum file size.

Maximum log file size

Default: 20 megabytes

Description: Sets the maximum size of an individual log file in megabytes. If the maximum size is reached, files are rotated and a new log file is created. This overrides the rotation frequency.

Logs to keep

Default: 7

Description: Sets the number of log files kept on disk. When the number of files on disk reaches this value, the oldest log file is removed during rotation - whether triggered by frequency or maximum size.

Backup

Deaddrop includes built-in mechanisms for system and data backup, supporting both automated and manual approaches. This ensures recovery capability in case of data loss, corruption, or misconfiguration.

Snapshot Backups (Virtual Machines)

If Deaddrop is deployed as a virtual machine, it is recommended to use hypervisor-level snapshot backups. This approach captures the entire system state—including configuration, OS, and data—for quick restoration.

File-Based Backups

Deaddrop also supports file-level backups, which can be accessed in two primary ways:

  1. Administrator Web Interface
    • A user with backup privileges can log into the graphical admin interface and download backup files directly.
  2. Secure Copy (SCP) or SFTP
    • Use scp or an SFTP client to securely download backup files from the Deaddrop server.

Automated Backup Service

Deaddrop’s internal backup system runs nightly at 01:01:00 and performs the following:

  • Creates a complete backup of the system’s critical data and configuration.
  • Retains the 10 most recent backups, ensuring a rolling backup history of the past 10 days.

Note: Ensure adequate disk space is available for storing backup archives, and consider offloading older backups to an external storage location or remote archive.

File Backup

Deaddrop provides convenient access to system backups and configuration archives through both HTTPS and secure file transfer protocols. This allows administrators to retrieve and archive backup files for disaster recovery or offline analysis.

Accessing Backups via HTTPS

The latest backup and configuration files can be downloaded directly from the Deaddrop administrative API (TLS-secured) by visiting the following URLs:

  • Latest full backup archive
https://FQDN:8443/v1/backup/backups/latest.tgz
  • Latest configuration backup
https://FQDN:8443/v1/backup/backups/ddconf.tgz

Replace FQDN with the fully qualified domain name of your Deaddrop instance.

These URLs require authentication and appropriate user privileges to access.

Accessing Backups via SCP or SFTP

Alternatively, backups can be retrieved directly from the file system using scp, sftp, or any compatible secure transfer tool. The backup files are located at:

  • Latest full backup archive
/var/deaddrop/work/backup/backups/latest.tgz

Latest configuration backup

/var/deaddrop/work/backup/backups/ddconf.tgz

Make sure the user has sufficient permissions to access these paths.

Using a Replica Server as a Backup Server

Deaddrop supports the use of a replica server as a failover or backup solution. When configured properly, the replica server can act as a live standby, receiving data from the primary system and preserving operational continuity in the event of a failure.

Enabling Replica Functionality

To use a replica server as a backup target:

  • The replica function must be explicitly enabled on both the primary and replica systems.
  • This ensures synchronization of critical data such as:
    • User accounts and metadata
    • File exchanges and delivery state
    • Configuration and system status

Notes

  • The replica server must be properly networked and reachable from the primary instance.
  • You may need to adjust firewall rules and security policies to permit replication traffic.
  • Once enabled, the replica server can be promoted to primary or used for backup extraction in case of a system outage.

    Restore backup

    Deaddrop provides a dedicated restoration process that allows administrators to restore system configuration and user accounts from previously saved backup files. This can be used for disaster recovery, testing, or migration to a new server.

Step 1: Copy Backup Files

Place the appropriate backup archives in the following target directories on the system:

  • Configuration backup
/var/ddadm/slave/configurations/ddconf.tgz
  • Account data backup
/var/ddadm/slave/accounts/latest.tgz

Step 2: Run the Restore Script

Once the files are in place, initiate the restore by running the provided restoration script:

/opt/sysctl/ddadm/scripts/ddslave_restore.sh

Important Notes

  • All existing accounts will be removed. The script clears all current account data before restoring from the backup files.
  • The system’s configuration and account state will be restored to the exact versions contained in the backup.
  • After restoration, consider restarting the Deaddrop services to ensure all changes are fully applied.

deaddrop replica

To enable replication between a primary Deaddrop server and a replica (backup) server, both systems must be properly configured. The replica server synchronizes account and configuration data from the primary, allowing it to act as a failover or backup target.

  1. Configure Backup Account on Primary Server

The primary Deaddrop server must have a dedicated backup account created specifically for replication purposes. This account is used by the replica server to authenticate and retrieve data.

  1. Configure the Replica Server

On the replica server, you must define the backup account credentials and the master server’s domain in the following file:

/opt/sysctl/ddadm/conf/ddadm.conf

Example configuration:

backup_username = 'username_for_backup_account'
backup_password = 'password_for_backup_account'
backup_server = 'server.domain.tld'

Ensure that the domain name is resolvable and reachable from the replica host.

  1. Enable and Start Replica Services

To activate automatic account and configuration synchronization on the replica server, run the following commands:

systemctl enable slave.timer
systemctl start slave.timer

systemctl enable slave_restore.path
systemctl start slave_restore.path

These services manage periodic synchronization and the automatic application of restored data.

  1. Promoting the Replica to Primary

If the replica server is intended to take over as the new master server, follow these steps:

  • Reconfigure the original master as a replica (i.e., reverse the roles).
  • On the new master (former replica), disable the replica-specific services:
systemctl disable slave.timer
systemctl stop slave.timer

systemctl disable slave_restore.path
systemctl stop slave_restore.path

© Copyright sysctl Aktiebolag 2013-2025. All rights reserved