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.

Note

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óért lásd: Futtasd a konténert mint egy más, nem root felhasználó a hoszton.

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

  2. Futassák a következő parancsot a Dockerfile-t tartalmazó könyvtárban, hogy megépítsd a nem root SQL Server konténert:

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

    Important

    A SA_PASSWORD környezeti változó elavult. A MSSQL_SA_PASSWORD használható helyette.

    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
    

    Note

    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 konténer nem root felhaszná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

Warning

Győződj meg róla, hogy az SQL Server-konténerben található egy elnevezett felhasználó, például mssql vagy root. Ellenkező esetben sqlcmd nem tud a konténerben futni. 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.

Ha szükséges, a nem root konténert is futtathatod root felhasználóként, ami automatikusan minden fájljogosultságot megad a konténernek, mivel magasabb jogosultságokkal 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

Ahhoz, hogy a nem root felhasználó hozzáférhessen a beépített köteteken lévő adatbázis-fájlokhoz, győződjön meg róla, hogy a konténert futtató felhasználó vagy csoport képes legyen olvasni és írni a tartós fájltárolóba.

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

Important

Amikor beállítod az Active Directory hitelesítést vagy titkosítási lehetőségeket, mint például a transzparens adattitkosítás (TDE) és a TLS for SQL Server on Linux vagy konténerek, több fájl is van, például a keytab, a tanúsítványok és a gépi kulcs, amelyek alapértelmezés szerint a masennus /var/opt/mssql/secretsalatt készülnek, és amelyekhez a hozzáférés alapértelmezés szerint korlátozott a mssql felhasználók root számára. 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,5434lesz. 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 meg róla, hogy a megfelelő jogosultságokat állítod be az mssql.key and mssql.pem fájlokhoz, hogy elkerüld a hibákat, amikor a fájlokat az SQL Server konténerbe szereled:

    chmod 440 /container/sql1/mssql.pem
    chmod 440 /container/sql1/mssql.key
    
  3. Most hozz létre egy mssql.conf fájlt a következő tartalommal, hogy lehetővé tedd a szerver által indított titkosítást. Kliensindított titkosítás esetén az utolsó sort változtassuk -re forceencryption = 0.

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

    Note

    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 a konténerhez csatlakoztattad, és a SQL Server alapértelmezett 1433-as portját a konténerben a hoston lévő 5434-es porthoz kötötted.

    Note

    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 "Regisztráld a tanúsítványt kliens gépeden" és a "Example connection strings" szekciókat, amelyek a kliens által indított titkosítás alatt dokumentáltak, hogy elkezdd titkosítani az SQL Server on Linux konténerekhez való csatlakozásokat.

  • 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