Ricerca nel sito web

Come installare PowerDNS e PowerAdmin su Rocky Linux


Su questa pagina

  1. Prerequisiti
  2. Installazione e configurazione del server database MariaDB
  3. Installazione e configurazione di PowerDNS
  4. Installazione di PowerDNS-Admin
    1. Installazione delle dipendenze dei pacchetti
    2. Impostazione dell'ambiente virtuale Python
    3. Installazione delle dipendenze di Python
    4. Configurazione di PowerDNS-Admin con database MariaDB
    5. Generazione dello schema del database e creazione di file statici

    PowerDNS è un software server DNS gratuito e open source. Può essere utilizzato come server dei nomi autorevole e recursor DNS. Il PowerDNS è scritto in C++ e supporta più sistemi operativi, inclusi BSD, Linux e macOS.

    PowerDNS è un server DNS di fascia alta e ad alte prestazioni che supporta più tipi di backend come BIND e backend RDBMS come MySQL/MariaDB, PostgreSQL e database Oracle.

    Il server PowerDNS è ad alte prestazioni in grado di gestire decine di migliaia di server simultanei, supporta DNSSEC e offre alta possibilità di scripting con Lua.

    In questa guida, ti mostreremo come installare PowerDNS e PowerDNS-Admin su un sistema Rocky Linux. Eseguiremo PowerDNS con il backend del database MySQL/MariaDB e configureremo PowerDNS-Admin che verrà utilizzato come strumento di gestione basato sul Web per il server PowerDNS.

    Questa guida mostra anche l'installazione di pacchetti Python per progetti basati su Flask e la configurazione di Nginx e Gunicorn che verranno utilizzati come proxy inverso per l'applicazione Web PowerDNS-Admin.

    Prerequisiti

    Per iniziare con questa guida, avrai bisogno dei seguenti requisiti:

    • Un server Rocky Linux: puoi utilizzare Rocky Linux v8 o v9.
    • Un utente non root con privilegi di amministratore sudo/root.

    Installazione e configurazione del server database MariaDB

    PowerDNS è un software server DNS scalabile che supporta più backend come PostgreSQL, MariaDB/MySQL e SQLite. Per distribuzioni di grandi dimensioni, dovresti prendere in considerazione l'utilizzo di PostgreSQL o MySQL/MariaDB come back-end del database.

    Inizierai ora installando e configurando il database MariaDB sul server Rocky Linux. Configura il PowerDNS con MariaDB come back-end del database.

    Il repository Rocky Linux predefinito fornisce più versioni dei pacchetti del server MariaDB. Eseguire il comando dnf di seguito per installare il server del database MariaDB.

    sudo dnf install mariadb-server

    Quando viene richiesta la conferma, inserire y per confermare e premere INVIO per procedere.

    Dopo aver installato il server MariaDB, eseguire il comando systemctl di seguito per avviare e abilitare il servizio MariaDB.

    sudo systemctl start mariadb
    sudo systemctl enable mariadb

    Ora il server MariaDB dovrebbe essere in esecuzione e dovrebbe essere abilitato. Esegui il comando seguente per verificare il servizio MariaDB e assicurati che sia in esecuzione.

    sudo systemctl status mariadb

    Vedrai il seguente output: il servizio MariaDB è in esecuzione ed è abilitato, il che significa che il servizio verrà eseguito automaticamente all'avvio.

    Ora che il server MariaDB è in esecuzione, configurerai e proteggerai l'installazione di MariaDB tramite lo strumento da riga di comando mysql_secure_installation.

    Esegui il seguente comando per iniziare a proteggere la distribuzione del server MariaDB.

    sudo mysql_secure_installation

    Ti verranno quindi chieste alcune configurazioni del server MariaDB.

    • Configurare la password root di MariaDB? Immettere y per confermare e digitare la nuova password per il server MariaDB, quindi ripetere la password.
    • Disabilitare l'accesso remoto per l'utente root di MariaDB? Immettere y per confermarlo e disabilitarlo.
    • Rimuovere l'utente anonimo predefinito da MariaDB? Immettere y per confermare.
    • Rimuovere il test del database predefinito da MariaDB? Immettere nuovamente y per confermare.
    • Infine, ricaricare i privilegi delle tabelle per applicare le nuove modifiche? Inserisci y per confermare e MariaDB ricaricherà tutti i privilegi e applicherà nuove impostazioni.

    Ora che hai protetto la distribuzione di MariaDB, dovrai configurare un nuovo database e un nuovo utente MariaDB per PowerDNS.

    Per iniziare, esegui il comando mysql di seguito per accedere alla shell MariaDB come utente root MariaDB.

    sudo mysql -u root -p

    Quando ti viene chiesta la password, inserisci la password del tuo utente root MariaDB.

    Successivamente, esegui le seguenti query per creare un nuovo database e utente MariaDB. In questo esempio, creerai un nuovo database pdns con l'utente pdnsadmin e la password è password.

    CREATE DATABASE pdns;
    GRANT ALL ON pdns.* TO IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;

    Ora esegui le seguenti query per verificare i privilegi dell'utente MariaDB [email .

    SHOW GRANTS FOR ;

    Vedrai il seguente output: l'utente MariaDB [email protetto] dispone dei privilegi per il database PowerDNS pdns.

    Ora digita quit per uscire dalla shell MariaDB.

    Con il server MariaDB in esecuzione, installerai e configurerai il server PowerDNS con il backend del database MariaDB.

    Installazione e configurazione di PowerDNS

    Dopo aver installato il server del database MariaDB, ora installerai il server PowerDNS e configurerai PowerDNS con il backend del database MariaDB.

    Per i sistemi operativi basati su RHEL, PowerDNS è disponibile nel repository EPEL. Quindi, prima di installare PowerDNS, devi aggiungere il repository EPEL al tuo sistema.

    Eseguire il seguente comando dnf per installare il repository EPEL.

    sudo dnf install epel-release -y

    Dopo aver aggiunto il repository EPEL, eseguire il seguente comando dnf per installare il backend PowerDNS e PowerDNS MySQL.

    sudo dnf install pdns pdns-backend-mysql

    Quando viene richiesta la conferma, inserire y per confermare e premere ENTER per procedere.

    Al termine dell'installazione di PowerDNS, eseguire il seguente comando mysql per importare lo schema del database per PowerDNS. Il seguente comando importerà lo schema del database tramite l'utente MariaDB pdnsadmin nel database pdns.

    sudo mysql -u pdnsadmin -p pdns < /usr/share/doc/pdns/schema.mysql.sql

    Immettere la password per l'utente pdnsadmin e premere INVIO per confermare e procedere.

    Successivamente, modifica la configurazione PowerDNS /etc/pdns/pdns.conf utilizzando il seguente comando nano editor.

    sudo nano /etc/pdns/pdns.conf

    Rimuovere il commento dalla configurazione del backend MariaDB e modificare il nome, l'utente e la password del database dei dettagli. Assicurati di utilizzare i dettagli del database MariaDB corretti che hai creato.

    #################################
    # launch        Which backends to launch and order to query them in
    #
    launch=gmysql

    gmysql-host=localhost
    gmysql-user=pdnsadmin
    gmysql-password=password
    gmysql-dbname=pdns

    Successivamente, decommenta l'API e modifica il valore in yes. Quindi, decommenta l'opzione api-key e modifica la chiave predefinita. La seguente API PowerDNS verrà utilizzata per gestire il server PowerDNS tramite l'applicazione web PowerDNS-Admin.

    #################################
    # api   Enable/disable the REST API (including HTTP listener)
    #
    api=yes

    #################################
    # api-key       Static pre-shared authentication key for access to the REST API
    #
    api-key=CHANGEME

    Salva il file ed esci dall'editor quando hai finito.

    Dopo aver configurato il server PowerDNS, eseguire il seguente comando per verificare la configurazione PowerDNS.

    pdns_server --daemon=no --guardian=no --loglevel=9

    Vedrai l'output come il seguente: la connessione di PowerDNS al back-end del database MariaDB è andata a buon fine, ora puoi premere Ctrl+c per terminare il processo.

    Ora esegui il seguente comando systemctl per avviare e abilitare il servizio PowerDNS.

    sudo systemctl start pdns
    sudo systemctl enable pdns

    Infine, verifica il servizio PowerDNS per assicurarti che PowerDNS sia in esecuzione e abilitato.

    sudo systemctl status pdns

    Nell'output seguente, vedrai lo stato corrente del servizio PowerDNS in esecuzione e abilitato, il che significa che verrà eseguito automaticamente al processo di avvio.

    A questo punto, hai terminato l'installazione del server PowerDNS. Successivamente avvierai l'installazione di PowerDNS-Admin che verrà utilizzato come gestione front-end Web per il server PowerDNS.

    Installazione di PowerDNS-Admin

    Con PowerDNS in esecuzione, ora installerai e configurerai PowerDNS-Admin sul server Rocky Linux. PowerDNS-Admin è un'applicazione Web basata su Python Flask, pertanto l'installazione di PowerDNS-Admin è praticamente identica all'installazione del framework Web Flask.

    Di seguito sono riportati alcuni passaggi da eseguire per installare PowerDNS-Admin su Rocky Linux

    • Installazione delle dipendenze dei pacchetti
    • Impostazione dell'ambiente virtuale Python
    • Installazione delle dipendenze Python
    • Configurazione di PowerDNS-Admin con database MariaDB
    • Generazione dello schema del database e creazione di file statici

    Ora iniziamo l'installazione di PowerDNS-Admin

    Installazione delle dipendenze dei pacchetti

    Il primo passaggio da eseguire per l'installazione di PowerDNS-Admin consiste nell'installare le dipendenze dei pacchetti come Python3, Pip, Node.js e Yarn.

    Prima di iniziare, esegui il comando dnf di seguito per abilitare il repository powertools sul tuo sistema Rocky Linux.

    sudo dnf config-manager --set-enabled powertools

    Dopo aver abilitato il repository powertools, installa i pacchetti Python tramite il comando dnf di seguito.

    sudo dnf install python3 python3-devel python3-pip python3-xmlsec gcc git mariadb-devel openldap-devel xmlsec1-devel xmlsec1-openssl libtool-ltdl-devel

    Quando viene richiesta la conferma, immettere y e premere INVIO per procedere.

    Successivamente, aggiungi i repository Node.js e Yarn al tuo sistema tramite il comando seguente. Il pacchetto Node.js e Yarn verrà utilizzato per generare file statici per l'applicazione Web PowerAdmin. Questo esempio utilizza Node.js v16.

    curl -sL https://rpm.nodesource.com/setup_16.x | bash -
    curl -sL https://dl.yarnpkg.com/rpm/yarn.repo -o /etc/yum.repos.d/yarn.repo

    Dopo aver aggiunto i repository, esegui il comando dnf di seguito per installare il gestore di pacchetti Node.js e Yarn.

    sudo dnf install nodejs yarn

    Immettere y e premere INVIO quando viene richiesta l'installazione.

    Inoltre, quando viene richiesto di confermare il tasto GPG, inserire ye premere INVIO.

    Quindi, esegui il comando pip3 di seguito per aggiornare il pacchetto pip di Python e installa virtualenv sul tuo sistema.

    pip3 install -U pip
    pip3 install -U virtualenv

    Il pip Python e virtualenv verranno ora installati nella directory /usr/local/bin. Aggiungi la directory /usr/local/bin alla variabile di ambiente PATH di sistema tramite il comando seguente.

    echo "export PATH="/usr/local/bin:$PATH"" >> ~/.bashrc

    Ora applica le nuove modifiche nel file ~/.bashrc usando il comando seguente. Ora dovresti eseguire i comandi pip e virtualenv.

    source ~/.bashrc

    Configurazione dell'ambiente virtuale Python

    Con le dipendenze del pacchetto installate, ora scaricherai il codice sorgente di PowerDNS-Admin e configurerai l'ambiente virtuale Python per PowerDNS-Admin.

    Clonare il codice sorgente di PowerDNS-Admin nella directory /opt/powerdns-admin utilizzando il seguente comando git.

    git clone https://github.com/ngoduykhanh/PowerDNS-Admin.git /opt/powerdns-admin

    Dopo aver scaricato il codice sorgente, sposta la directory di lavoro in /opt/powerdns-admin e crea un nuovo ambiente virtuale Python flask.

    cd /opt/powerdns-admin
    virtualenv -p python3 flask

    Ora attiva l'ambiente virtuale Python flask tramite il comando seguente.

    source flask/bin/activate

    Una volta attivato, ora dovresti vedere il prompt diventare come (flask) [[email  /directory/path]#.

    Da qui, il tuo ambiente di lavoro dovrebbe essere sempre nell'ambiente virtuale Python flask.

    Installazione delle dipendenze di Python

    Dopo aver configurato l'ambiente virtuale Python e averlo classificato, installerai le dipendenze Python tramite il comando pip.

    Eseguire il seguente comando pip per installare le dipendenze Python per PowerDNS-Admin.

    pip install python-dotenv
    pip install -r requirements.txt

    Ora inizierà l'installazione: verranno installate le dipendenze Python richieste da PowerDNS-Admin, memorizzate nel file requirements.txt.

    Ora che hai installato le dipendenze Python, sei pronto per impostare e configurare PowerDNS-Admin con il database MariaDB.

    Configurazione di PowerDNS-Admin con database MariaDB

    Con le dipendenze Python installate, ora configurerai PowerDNS-Admin con il database MariaDB. I dettagli del database per PowerDNS-Admin saranno lo stesso database del server PowerDNS.

    Ora modifica il file /opt/powerdns-admin/powerdnsadmin/default_config.py utilizzando il seguente comando nano editor.

    nano /opt/powerdns-admin/powerdnsadmin/default_config.py

    Modificare la configurazione come di seguito.

    SALT = 'RANDOM-GENERATED'
    SECRET_KEY = 'RANDOM-GENERATED'
    BIND_ADDRESS = '0.0.0.0'
    PORT = 9191
    HSTS_ENABLED = False
    OFFLINE_MODE = False

    SQLA_DB_USER = 'pdnsadmin'
    SQLA_DB_PASSWORD = 'password'
    SQLA_DB_HOST = '127.0.0.1'
    SQLA_DB_NAME = 'pdns'
    SQLALCHEMY_TRACK_MODIFICATIONS = True

    Salva il file ed esci dall'editor quando hai finito.

    Generazione di schemi di database e creazione di file statici

    Dopo aver configurato il database MariaDB su PowerDNS-Admin, eseguirai la migrazione del database e genererai i file statici per PowerDNS-Admin.

    Innanzitutto, esegui il seguente comando per migrare il database di PowerDNS-Admin. Questo inserirà un nuovo schema di database nel database che verrà utilizzato per PowerDNS-Admin.

    export FLASK_APP=powerdnsadmin/__init__.py
    flask db upgrade

    Di seguito è riportato l'output che otterrai al termine della migrazione del database.

    Al termine della migrazione del database, eseguire il comando seguente per generare file statici per PowerDNS-Admin.

    yarn install --pure-lockfile
    flask assets build

    Di seguito puoi vedere l'installazione di alcune dipendenze JavaScript tramite il gestore di pacchetti di filati e il processo di generazione di file statici per PowerDNS-Admin.

    Quando vengono generati file statici, eseguire il comando seguente per disattivare l'ambiente virtuale Python.

    deactivate

    A questo punto, hai terminato l'installazione di base di PowerDNS-Admin con il server del database MariaDB. Ora puoi avviare l'applicazione PowerDNS-Admin tramite la riga di comando, ma puoi anche eseguire PowerDNS-Admin come servizio systemd.

    Impostazione del servizio Systemd per PowerDNS-Admin

    In questo passaggio, imposterai un nuovo file di servizio systemd per l'applicazione PowerDNS-Admin. Ciò consente di gestire e mantenere facilmente PowerDNS-Admin tramite il comando systemd. Inoltre, questo semplificherà la configurazione di PowerDNS-Admin.

    Per iniziare, crea un nuovo file di servizio systemd /etc/systemd/system/powerdns-admin.service utilizzando il seguente comando nano editor.

    sudo nano /etc/systemd/system/powerdns-admin.service

    Aggiungi la configurazione di seguito al file. Con questa configurazione, eseguirai l'applicazione PowerDNS-Admin tramite gunicorn ed eseguirai come utente e gruppo pdns. Inoltre, PowerDNS-Admin verrà eseguito con il file socket UNIX /run/powerdns-admin/socket.

    [Unit]
    Description=PowerDNS-Admin
    Requires=powerdns-admin.socket
    After=network.target

    [Service]
    PIDFile=/run/powerdns-admin/pid
    User=pdns
    Group=pdns
    WorkingDirectory=/opt/powerdns-admin
    ExecStartPre=+mkdir -p /run/powerdns-admin/
    ExecStartPre=+chown pdns:pdns -R /run/powerdns-admin/
    ExecStart=/usr/local/bin/gunicorn --pid /run/powerdns-admin/pid --bind unix:/run/powerdns-admin/socket 'powerdnsadmin:create_app()'
    ExecReload=/bin/kill -s HUP $MAINPID
    ExecStop=/bin/kill -s TERM $MAINPID
    PrivateTmp=true

    [Install]
    WantedBy=multi-user.target

    Salva il file ed esci dall'editor quando hai finito.

    Successivamente, crea un nuovo file socket systemd per PowerDNS-Admin /etc/systemd/system/powerdns-admin.socket utilizzando il nano editor di seguito.

    sudo nano /etc/systemd/system/powerdns-admin.socket

    Aggiungere la seguente configurazione al file.

    [Unit]
    Description=PowerDNS-Admin socket

    [Socket]
    ListenStream=/run/powerdns-admin/socket

    [Install]
    WantedBy=sockets.target

    Salva il file ed esci dall'editor quando hai finito.

    Ora crea un nuovo file di configurazione /etc/tmpfiles.d/powerdns-admin.conf usando il comando nano editor di seguito.

    sudo nano /etc/tmpfiles.d/powerdns-admin.conf

    Aggiungere la seguente configurazione al file.

    d /run/powerdns-admin 0755 pdns pdns -

    Salva il file ed esci dall'editor quando hai finito.

    Dopo aver aggiunto un nuovo file di servizio systemd e una nuova configurazione, eseguire il seguente comando per ricaricare il gestore systemd e applicare i nuovi file di servizio su systemd.

    sudo systemctl daemon-reload

    Ora avvia e abilita il servizio PowerDNS-Admin tramite il seguente comando systemctl. PowerDNS-Admin dovrebbe ora essere in esecuzione con gunicorn e aprire il file socket disponibile nella directory /run/powerdns-admin/.

    sudo systemctl start powerdns-admin.socket powerdns-admin.service
    sudo systemctl enable powerdns-admin.socket powerdns-admin.service

    Infine, esegui il seguente comando per verificare il servizio PowerDNS-Admin e assicurati che sia in esecuzione.

    sudo systemctl status powerdns-admin.service powerdns-admin.socket

    Nell'output seguente, powerdns-admin.service e powerdns-admin.socket sono in esecuzione ed entrambi sono abilitati. Entrambi i servizi verranno eseguiti automaticamente all'avvio del sistema.

    Installazione di Nginx come proxy inverso per PowerDNS-Admin

    In questo passaggio, configurerai Nginx come proxy inverso per PowerDNS-Admin.

    Esegui il seguente comando dnf per installare Nginx sul tuo server Rocky Linux. Quando richiesto, inserire y per confermare e premere INVIO per procedere.

    sudo dnf install nginx

    Successivamente, crea un nuovo blocco server Nginx /etc/nginx/conf.d/pdns.conf utilizzando il seguente editor nano.

    sudo nano /etc/nginx/conf.d/pdns.conf

    Aggiungi la seguente configurazione al file e assicurati di modificare il nome di dominio. Questo esempio usa il dominio pdns.hwdomain.io per PowerDNS-Admin.

    server {
            listen                  80;
            server_name             pdns.hwdomain.io;
            return 301 https://$http_host$request_uri;
    }

    server {
            listen                  443 ssl http2;
            server_name              pdns.hwdomain.io;
            index                   index.html index.htm;
            error_log               /var/log/nginx/error_powerdnsadmin.log error;
            access_log              off;

            ssl_certificate                 /etc/letsencrypt/live/pdns.hwdomain.io/fullchain.pem;
            ssl_certificate_key             /etc/letsencrypt/live/pdns.hwdomain.io/privkey.pem;
            #ssl_dhparam                     path_to_your_dhparam.pem;
            ssl_prefer_server_ciphers       on;
            ssl_ciphers                     'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
            ssl_session_cache               shared:SSL:10m;

            client_max_body_size            10m;
            client_body_buffer_size         128k;
            proxy_redirect                  off;
            proxy_connect_timeout           90;
            proxy_send_timeout              90;
            proxy_read_timeout              90;
            proxy_buffers                   32 4k;
            proxy_buffer_size               8k;
            proxy_set_header                Host $http_host;
            proxy_set_header                X-Scheme $scheme;
            proxy_set_header                X-Real-IP $remote_addr;
            proxy_set_header                X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header                X-Forwarded-Proto $scheme;
            proxy_headers_hash_bucket_size  64;

            location ~ ^/static/  {
                    include         mime.types;
                    root            /opt/powerdns-admin/powerdnsadmin;
                    location        ~* \.(jpg|jpeg|png|gif)$ { expires 365d; }
                    location        ~* ^.+.(css|js)$ { expires 7d; }
            }

            location ~ ^/upload/  {
                    include         mime.types;
                    root            /opt/powerdns-admin;
                    location        ~* \.(jpg|jpeg|png|gif)$ { expires 365d; }
                    location        ~* ^.+.(css|js)$ { expires 7d; }
            }

            location / {
                    proxy_pass              http://unix:/run/powerdns-admin/socket;
                    proxy_read_timeout      120;
                    proxy_connect_timeout   120;
                    proxy_redirect          http:// $scheme://;
            }
    }

    Salva il file ed esci dall'editor quando hai finito.

    Successivamente, esegui il seguente comando per verificare la configurazione di Nginx e assicurarti che sia corretta. Dovresti vedere un messaggio di output come sintassi ok - il test è riuscito.

    sudo nginx -t

    Ora esegui il seguente comando systemctl per avviare e abilitare il servizio Nginx.

    sudo systemctl start nginx
    sudo systemctl enable nginx

    Infine, verifica il servizio Nginx tramite il seguente comando per assicurarti che il servizio sia in esecuzione.

    sudo systemctl status nginx

    Dovresti vedere l'output che il servizio nginx è in esecuzione ed è abilitato. Con questo, il servizio Nginx verrà eseguito automaticamente all'avvio del sistema.

    Accesso all'installazione PowerDNS-Admin

    Apri il browser Web e visita il nome di dominio della tua installazione di PowerDNS-Admin (ad esempio: https://pdns.hwdomain.io) e dovresti ottenere la pagina di accesso di PowerDNS-Admin.

    Fare clic sul collegamento Crea un account per configurare un nuovo utente amministratore per PowerDNS-Admin.

    Ora inserisci i dettagli del nuovo utente, e-mail e password. Quindi fare clic su Registrati per confermare.

    Dopo aver creato l'utente amministratore, verrai nuovamente reindirizzato alla pagina di accesso di PowerDNS-Admin. Accedi con il nuovo amministratore utente e la password, quindi fai clic su Accedi.

    Ora dovresti ottenere la dashboard PowerDNS-Admin. PowerDNS-Admin è in esecuzione, ma non è ancora connesso al server PowerDNS.

    Per configurare il server PowerDNS con PowerDNS-Admin, è necessario aggiungere la chiave API configurata tramite il server PowerDNS a PowerDNS-Admin.

    Immettere i dettagli API del server PowerDNS nella sezione Impostazioni PDNS e fare clic su Aggiorna.

    Quando PowerDNS-Admin e il server PowerDNS sono connessi tramite API, la tua dashboard dovrebbe avere l'aspetto della seguente schermata.

    Da qui, ora puoi facilmente aggiungere nuovi record DNS o modificare facilmente i record DNS esistenti tramite la dashboard PowerDNS-Admin.

    Conclusione

    In questa guida, hai imparato come installare un server PowerDNS con database MySQL/MariaDB su un server Rocky Linux. Hai anche appreso la distribuzione di base del database MariaDB su Rocky Linux. Infine, hai appreso l'installazione e la configurazione di PowerDNS-Admin che verrà utilizzato come strumento di gestione basato sul Web per il server PowerDNS. PowerDNS-Admin viene eseguito con Nginx come proxy inverso e back-end del database MariaDB.

    Con il server PowerDNS e PowerDNS-Admin in esecuzione, ora puoi gestire il tuo server DNS tramite la dashboard di amministrazione web. Puoi aggiungere, modificare o eliminare i record DNS tramite il dashboard di amministrazione di PowerDNS-Admin.