Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
Töltse le a minta Docker-fájlt a nem rendszergazdai SQL Server-tárolókhoz, és mentse el
Dockerfilenéven.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 .Indítsa el a tárolót.
Important
A
SA_PASSWORDkörnyezeti változó elavult. AMSSQL_SA_PASSWORDhaszná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-rootNote
A
--cap-add SYS_PTRACEjelző 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.Ellenőrizze, hogy a konténer nem root felhasználóként fut-e:
docker exec -it sql1 bashFuttassa 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.
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 365Az előző kódmintában
sql1az SQL-tároló állomásneve, így a tárolóhoz való csatlakozáskor a kapcsolati sztringben használt névsql1.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.Győződj meg róla, hogy a megfelelő jogosultságokat állítod be az
mssql.keyandmssql.pemfá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.keyMost hozz létre egy
mssql.conffá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 -reforceencryption = 0.[network] tlscert = /etc/ssl/certs/mssql.pem tlskey = /etc/ssl/private/mssql.key tlsprotocols = 1.2 forceencryption = 1Note
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ókmssql.conffrissítése előtt ellenőrizze az elérési utat. A megadott hely azmssql.confa 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.conffá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ésmssql.pemasql1mappában.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-latestAz előző parancsban a
mssql.conf,mssql.pem, ésmssql.keyfá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 runhelyett adocker runparancsot 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.
Kapcsolódó tartalom
- Kezdjen dolgozni az SQL Server 2017 (14.x) konténerképekkel a Docker használatával a gyors útmutató segítségével
- Kezdje el az SQL Server 2019 (15.x) konténer képeivel a Dockeren a rövid útmutatón keresztül.
- 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