Megosztás a következőn keresztül:


Sql Server Linux-tárolók biztonságossá tétele

A következőkre vonatkozik:SQL Server Linux rendszeren

Az SQL Server 2017 (14.x) tárolók alapértelmezés szerint gyökérfelhasználóként indulnak el, ami biztonsági problémákat okozhat. Ez a cikk az SQL Server Linux-tárolók futtatásakor elérhető biztonsági lehetőségekről, valamint az SQL Server-tárolók nem gyökérfelhasználóként való létrehozásának módjáról szól.

A cikkben szereplő példák feltételezik, hogy Dockert használ, de ugyanezeket az alapelveket alkalmazhatja más tárolóvezénylési eszközökre, például a Kubernetesre is.

Nem gyökérszintű SQL Server 2017-tárolók létrehozása és futtatása

Kövesse az alábbi lépéseket egy SQL Server 2017-tároló (14.x) létrehozásához, amely mssql (nem gyökérszintű) felhasználóként indul el.

Jegyzet

Az SQL Server 2019 (15.x) és újabb verziók tárolói automatikusan nem gyökérként indulnak el, míg az SQL Server 2017 (14.x) tárolók alapértelmezés szerint gyökérként indulnak el. További információ az SQL Server-tárolók nem gyökérként való futtatásáról: Biztonságos SQL Server Linux-tárolók.

  1. Töltse le a minta Docker-fájlt a nem rendszergazdai SQL Server-tárolókhoz, és mentse el dockerfilenéven.

  2. Futtassa a következő parancsot a dockerfile könyvtár kontextusában a nem gyökérszintű SQL Server-tároló létrehozásához:

    cd <path to dockerfile>
    docker build -t 2017-latest-non-root .
    
  3. Indítsa el a tárolót.

    Fontos

    A SA_PASSWORD környezeti változó elavult. Használjon inkább MSSQL_SA_PASSWORD.

    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE --name sql1 -p 1433:1433 -d 2017-latest-non-root
    

    Jegyzet

    A --cap-add SYS_PTRACE jelző szükséges ahhoz, hogy a nem gyökérszintű SQL Server-tárolók hibaelhárítási célból memóriaképeket generáljanak.

  4. Ellenőrizze, hogy a tároló nem gyökérfelhasználóként fut-e:

    docker exec -it sql1 bash
    

    Futtassa a whoamiparancsot, amely a tárolón belül futó felhasználót adja vissza.

    whoami
    

Másik, nem root felhasználóként futtassa a tárolót a gazdagépen.

Ha az SQL Server-tárolót nem gyökérfelhasználóként szeretné futtatni, adja hozzá a -u jelzőt a docker run parancshoz. A nem gyökérszintű tárolóra vonatkozik az a korlátozás, hogy a root csoport részeként kell futnia, kivéve, ha a kötet /var/opt/mssql van csatlakoztatva, amelyhez a nem gyökérfelhasználó hozzáférhet. A root csoport nem ad további gyökérengedélyeket a nem gyökérfelhasználónak.

Futtatás felhasználóként 4000-es UID azonosítóval

Az SQL Servert egyéni UID azonosítóval is elindíthatja. Az alábbi parancs például a UID 4000 azonosítóval indítja el az SQL Servert:

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE -u 4000:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Figyelmeztetés

Győződjön meg arról, hogy az SQL Server-tároló nevesített felhasználóval rendelkezik, például mssql vagy root, ellenkező esetben az sqlcmd nem futtatható a tárolón belül. A tárolón belüli whoami futtatásával ellenőrizheti, hogy az SQL Server-tároló nevesített felhasználóként fut-e.

A nem root jogosultságú tároló futtatása root felhasználóként.

Szükség esetén gyökérfelhasználóként futtathatja a nem gyökértárolót, amely automatikusan minden fájlengedélyt megad a tárolónak, mert magasabb jogosultsággal rendelkezik.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -u 0:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Felhasználóként történő futtatás a gazdagépen

Az SQL Servert a következő paranccsal indíthatja el egy meglévő felhasználóval a gazdagépen:

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE -u $(id -u myusername):0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Futtatás másik felhasználóként és csoportként

Az SQL Servert egyéni felhasználóval és csoporttal is elindíthatja. Ebben a példában a csatlakoztatott kötet rendelkezik a gazdaszámítógép felhasználójára vagy csoportjára konfigurált engedélyekkel.

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE -u $(id -u myusername):$(id -g myusername) -v /path/to/mssql:/var/opt/mssql -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Állandó tárolási engedélyek konfigurálása nem gyökértárolókhoz

Annak érdekében, hogy a nem gyökérfelhasználó hozzáférhessen a csatlakoztatott köteteken lévő adatbázisfájlokhoz, győződjön meg arról, hogy a tárolót futtató felhasználó vagy csoport az állandó fájltárolóból tud olvasni és írni.

Ezzel a paranccsal lekérheti az adatbázisfájlok aktuális tulajdonjogát.

ls -ll <database file dir>

Futtassa az alábbi parancsok egyikét, ha az SQL Server nem rendelkezik hozzáféréssel a tárolt adatbázisfájlokhoz.

A gyökércsoportnak olvasási/írási hozzáférés biztosítása az adatbázisfájlokhoz

Adjon a gyökércsoport-engedélyeket a következő könyvtáraknak, hogy a nem gyökérszintű SQL Server-tároló hozzáférhessen az adatbázisfájlokhoz.

chgrp -R 0 <database file dir>
chmod -R g=u <database file dir>

A nem root felhasználót állítsa be a fájlok tulajdonosának

A tulajdonos lehet az alapértelmezett nem gyökérfelhasználó, vagy bármely más, nem gyökérszintű felhasználó, amit meg szeretne adni. Ebben a példában az UID 10001-et állítja be nem gyökérfelhasználóként.

chown -R 10001:0 <database file dir>

Sql Server Linux-tárolók kapcsolatainak titkosítása

Fontos

Amikor Konfigurálja az Active Directory hitelesítési vagy titkosítási beállításait, például a Transzparens adattitkosítást (TDE) és az SSL/TLS-t linuxos vagy tárolókon futó SQL Serverhez, több fájl is létezik, például a kulcstartó, a tanúsítvány és a gépkulcs, amelyek alapértelmezés szerint a mappa /var/opt/mssql/secretsalatt jönnek létre, és amelyekhez alapértelmezés szerint mssqlroot csak a felhasználók férhetnek hozzá. Ha tartós tárolót konfigurál az SQL Server tárolókhoz, használja ugyanazt a hozzáférési stratégiát, hogy biztosítsa, a tárolón belüli /var/opt/mssql/secrets mappához hozzárendelt gazdagép vagy megosztott kötet útvonal csak a gazdagép mssql és root felhasználói számára legyen elérhető és védett. Ha az elérési út/mappa hozzáférése sérült, a rosszindulatú felhasználók hozzáférhetnek ezekhez a kritikus fájlokhoz, veszélyeztetve a titkosítási hierarchiát és/vagy az Active Directory-konfigurációkat.

Az SQL Server Linux-tárolókkal való kapcsolatok titkosításához a következő követelményekkel rendelkező tanúsítványra van szüksége.

Az alábbiakban egy példát mutatunk be arra, hogyan titkosítható a kapcsolat SQL Server Linux-tárolókkal. Itt önaláírt tanúsítványt használ, amelyet nem szabad éles helyzetekben használni. Ilyen környezetekben inkább ca-tanúsítványokat kell használnia.

  1. Hozzon létre önaláírt tanúsítványt, amely csak teszt és nem gyártási környezetekre használható.

    openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=sql1.contoso.com' -keyout /container/sql1/mssql.key -out /container/sql1/mssql.pem -days 365
    

    Az előző kódmintában sql1 az SQL-tároló állomásneve, így a tárolóhoz való csatlakozáskor a kapcsolati sztringben használt név sql1.contoso.com,portlesz. Azt is meg kell győződnie, hogy a mappa elérési útja /container/sql1/ már létezik az előző parancs futtatása előtt.

  2. Győződjön meg arról, hogy a megfelelő engedélyeket adja meg a mssql.key és mssql.pem fájlokhoz, így elkerülheti a hibákat, amikor a fájlokat SQL Server-tárolóhoz csatlakoztatja:

    chmod 440 /container/sql1/mssql.pem
    chmod 440 /container/sql1/mssql.key
    
  3. Most hozzon létre egy mssql.conf fájlt a következő tartalommal a kiszolgáló által kezdeményezett titkosítás engedélyezéséhez. Ügyfél által kezdeményezett titkosítás esetén módosítsa az utolsó sort forceencryption = 0.

    [network]
    tlscert = /etc/ssl/certs/mssql.pem
    tlskey = /etc/ssl/private/mssql.key
    tlsprotocols = 1.2
    forceencryption = 1
    

    Jegyzet

    Egyes Linux-disztribúciók esetében a tanúsítvány és a kulcs tárolásának elérési útja is lehet /etc/pki/tls/certs/ és /etc/pki/tls/private/. Az SQL Server-tárolók mssql.conf frissítése előtt ellenőrizze az elérési utat. A megadott hely az mssql.conf a hely, ahol a tárolóban lévő SQL Server keresni fogja a tanúsítványt és annak kulcsát. Ebben az esetben ez a hely /etc/ssl/certs/ és /etc/ssl/private/.

    A mssql.conf fájl ugyanazon a mappahelyen is létrejön, /container/sql1/. A fenti lépések futtatása után három fájlnak kell lennie: mssql.conf, mssql.keyés mssql.pem a sql1 mappában.

  4. Telepítse az SQL Server-tárolót a következő paranccsal (cserélje le <password> érvényes jelszóval):

    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 5434:1433 --name sql1 -h sql1 -v /container/sql1/mssql.conf:/var/opt/mssql/mssql.conf -v   /container/sql1/mssql.pem:/etc/ssl/certs/mssql.pem -v /container/sql1/mssql.key:/etc/ssl/private/mssql.key -d mcr.microsoft.com/mssql/server:2019-latest
    

    Az előző parancsban a mssql.conf, mssql.pem és mssql.key fájlokat csatlakoztatta a tárolóhoz, és a tárolóban lévő 1433-as (az SQL Server alapértelmezett portja) portot a gazdagépen az 5434-es portra térképezte át.

    Jegyzet

    Ha a Red Hat Enterprise Linux 8-at vagy újabb verziókat használja, a podman run helyett a docker run parancsot is használhatja.

Kövesse a Ügyfél által kezdeményezett titkosítási dokumentumban szereplő "Tanúsítvány regisztrálása az ügyfélszámítógépen" és a "Példakapcsolati karakterláncok" szakaszokat az SQL Serverhez való kapcsolat titkosításának elindításához Linux-tárolókon.

  • Kezdje el az SQL Server 2022 (16.x) konténerképek használatát a Dockeren keresztül a gyors útmutató segítségével.
  • Ismerkedés az SQL Server 2025 -ös (17.x) tárolórendszerképekkel a Dockeren a rövid útmutató végigvezetésével