This is an old revision of the document!


Zabezpečení Node-REDu

Pokud přihlašovací údaje podle následujícího postupu nenastavíte, může to mít za následek umožnění přístupu neoprávněné osobě k jednotce Unipi. To může vést k nepovoleným zásahům, které mohou zastavit, či omezit provoz. V horším případě může zásah způsobit poškození připojených technologií, nebo ohrožení bezpečnosti osob v místě instalace.

Proto vždy, když zavádíte nový projekt, je velmi důležité mít systém správně zabezpečen.


Jelikož se budeme k PLC připojovat pomocí SSH protokolu, je nutné znát IP adresu PLC a mít na PC nainstalovaného SSH klienta. Mezi nejoblíbenější pro OS Windows patří software PuTTy. Pokud jej v PC nemáte, či tento SW vůbec neznáte, postupujte dle tohoto návodu.

Instalace node-red-admin a generování hesla

Jakmile jste připojeni a přihlášení, máte před sebou terminálové okno s přístupem do jednotky. Následující příkaz zkopírujte a vložte do terminálu, vkládání do PuTTy se provádí za pomoci právého tlačítka myši. Tím nainstalujete balíček potřebný pro úpravy autorizace.

sudo npm install -g --unsafe-perm node-red-admin

Po dokončení instalace node-red-admin balíčku, si již můžete vygenerovat šifrovanou podobu Vašeho hesla, které budete následně vkládat do konfiguračního souboru settings.js. Pro vygenerování hesla zadejte příkaz:

node-red-admin hash-pw

Nyní budete vyzváni k napsání hesla, psané znaky se nebudou nijak zobrazovat a není možné si heslo následně překontrolovat, jelikož výstup z programu je již šifrované heslo. Dbejte na to, aby jste heslo zadali bezchybně.

Heslo si zkopírujte, budete jej dále používat.

Toto rozhraní je velmi důležité zabezpečit, jelikož zde máte logiku vašeho programu a lze přes něj ovládat celé PLC bez omezení. Existuje však varianta uživatele “Pouze pro čtení”, takovýto uživatel se může připojit, sledovat, ale nemá oprávnění zasahovat do programu, ani měnit hodnoty. Ve výchozím nastavení je požadavek k autorizaci vypnut.

Pro zapnutí autorizace je třeba přejít do skryté složky .node-red. Zadejte příkaz:

cd ~/.node-red

Nyní jste se přepnuli do skryté složky Node-RED. Nyní spusťtě terminálový program Midnight Commander, zadejte do terminálu:

mc

Tím se Vám otevře modré okno Midnight Commanderu, zde pomocí šipek vyberte soubor settings.jsa klávesou F4 ho otevřete pro úpravy.

V tomto souboru vyhledejte položku adminAuth, ve výchozím stavu je zakomentována pomocí značky ⁄⁄, vše od této značky až po zalomení řádku je v kódu ignorováno. Proto je nutné tyto značky u adminAuth odebrat. Nyní kód vypadá takto

    // Securing Node-RED
    // -----------------
    // To password protect the Node-RED editor and admin API, the following
    // property can be used. See http://nodered.org/docs/security.html for details.
    //adminAuth: {
    //    type: "credentials",
    //    users: [{
    //        username: "admin",
    //        password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
    //        permissions: "*"
    //    }]
    //},

Po odkomentování takto:

    // Securing Node-RED
    // -----------------
    // To password protect the Node-RED editor and admin API, the following
    // property can be used. See http://nodered.org/docs/security.html for details.
    adminAuth: {
        type: "credentials",
        users: [{
            username: "admin",
            password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
            permissions: "*"
        }]
    },

Pokud by jste nyní soubor uložili, odpojili a znovu připojili nápájení, popř. restartovali PLC, bude již Admin API pro vstup požadovat heslo. Výchozí jméno je: admin a heslo: password. Můžete si ale všimnout, že vaše heslo generované v úvodu článku má stejný formát jako výchozí heslo uživatele, pokud jej tedy nahradíte, nastavíte tím své heslo k danému uživatelskému účtu.

V případě, že chcete nastavit více uživatelů, tak do hranatých závorek users: [] vložte další blok složených závorek (záznam uživatele) a jednotlivé bloky oddělte čárkou:

    // Securing Node-RED
    // -----------------
    // To password protect the Node-RED editor and admin API, the following
    // property can be used. See http://nodered.org/docs/security.html for details.
    adminAuth: {
        type: "credentials",
        users: [
            {
                username: "admin",
                password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
                permissions: "*"
            },
            {
                username: "user_rd",
                password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
                permissions: "read"
            }
        ]
    },

Všimněte si, že druhý uživatel má oprávnění pouze pro čtení, můžete tedy nastavovat dva druhy oprávnění:

  • čtení/zápis → *
  • jen čtení → read

Výchozí uživatel

Pro nastavení výchozího uživatele je třeba vytvořit další položku v adminAuth konkrétně položku default.

    adminAuth: {
        type: "credentials",
        users: [ /* seznam uživatelů */ ],
        default: {
            permissions: "read"
        }
    }

Uživatelské webové rozhraní v systému Node-RED nazýváme Dashboard, toto uživatelské rozhraní je také vhodné chránit heslem proti neoprávněným zásahům, ale již to není zcela nezbytné, tak jako u Admin API.

Pro zapnutí autorizace dashboardu vyhledejte v souboru settings.js záznam httpNodeAuth:, odkomentujte jej a upravte název uživatele podle potřeby (bez diakritiky). Dále změňte heslo, to musí být vytvořeno generátorem, který je popsán v úvodu článku. Měňte pouze hodnoty v uvozovkách.

httpNodeAuth: {user:"user",pass:"$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN."},