Ubuntu 20.04’te MongoDB’yi Nasıl Güvenli Hale Getirirsiniz?
Sürümün yayınlanmasından bu yana3.0, MongoDB arka plan programı yalnızca yerel Unix soketinden bağlantıları kabul edecek şekilde yapılandırılmıştır ve daha geniş İnternet’e otomatik olarak açılmaz. Ancak, kimlik doğrulama hala varsayılan olarak devre dışıdır. Bu, MongoDB’nin kurulu olduğu sunucuya erişimi olan herhangi bir kullanıcının veritabanlarına da tam erişimi olduğu anlamına gelir.
Bu güvenlik açığını korumanın ilk adımı olarak bir yönetici kullanıcı oluşturacaksınız. Daha sonra, kimlik doğrulamayı etkinleştirecek ve veritabanına erişmek için bu yönetici kullanıcı olarak bağlanacaksınız.
Bir yönetici kullanıcı eklemek için önce Mongo kabuğuna bağlanmalısınız. Kimlik doğrulama devre dışı olduğundan mongo
, başka hiçbir seçenek olmadan bunu komutla yapabilirsiniz:
mongo
Mongo kabuk isteminin üzerinde bir miktar çıktı olacaktır. Kimlik doğrulamayı henüz etkinleştirmediğiniz için, bu, veritabanı için erişim kontrolünün etkinleştirilmediğine ve verilere okuma ve yazma erişiminin ve veritabanı yapılandırmasının sınırsız olduğuna dair bir uyarı içerecektir:
OutputMongoDB shell version v4.4.0
. . .
2020-06-09T13:26:51.391+0000 I CONTROL [initandlisten] ** WARNING: Access control is not enabled for the database.
2020-06-09T13:26:51.391+0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted.
. . .
>
Bu uyarılar, kimlik doğrulamayı etkinleştirdikten sonra kaybolacak, ancak şimdilik Ubuntu sunucunuza erişebilen herkesin veritabanınızı da kontrol edebileceği anlamına geliyor.
Göstermek için Mongo’nun show dbs
komutunu çalıştırın:
show dbs
Bu komut, sunucudaki her veritabanının bir listesini döndürür. Bununla birlikte, kimlik doğrulama etkinleştirildiğinde, liste, Mongo kullanıcısının rolüne veya belirli veritabanlarına ne düzeyde erişime sahip olduğuna bağlı olarak değişir. Kimlik doğrulama devre dışı bırakıldığı için, şu anda sistemde bulunan her veritabanını kısıtlama olmadan döndürür:
Outputadmin 0.000GB
config 0.000GB
local 0.000GB
Bu örnek çıktıda, yalnızca varsayılan veritabanları görünür. Ancak, sisteminizde hassas veriler tutan herhangi bir veri tabanınız varsa, herhangi bir kullanıcı bu komutla onları bulabilir.
Bu güvenlik açığını azaltmanın bir parçası olarak, bu adım bir yönetici kullanıcı eklemeye odaklanır. Bunun için öncelikle admin
veritabanına bağlanmalısınız. Kullanıcı adları, parolaları ve rolleri gibi kullanıcılarla ilgili bilgilerin saklandığı yer burasıdır:
use admin
Outputswitched to db admin
MongoDB , veritabanınızı yönetmek için kullanabileceğiniz bir dizi JavaScript tabanlı kabuk yöntemiyle birlikte gelir. Bunlardan biri olan db.createUser
method, yöntemin çalıştırıldığı veritabanı üzerinde yeni kullanıcılar oluşturmak için kullanılır.
db.createUser
Yöntemi başlatın :
db.createUser(
Bu yöntem, kullanıcı için bir kullanıcı adı ve parola ile kullanıcının sahip olmasını istediğiniz tüm rolleri belirlemenizi gerektirir. MongoDB’nin verilerini JSON benzeri belgelerde sakladığını hatırlayın. Bu nedenle, yeni bir kullanıcı oluşturduğunuzda, tek yaptığınız uygun kullanıcı verilerini ayrı alanlar olarak tutmak için bir belge oluşturmaktır.
JSON’daki nesnelerde olduğu gibi, MongoDB’deki belgeler kaşlı ayraçlarla ( {
ve }
) başlar ve biter. Bir kullanıcı eklemeye başlamak için, bir açılış kaşlı ayraç girin:
Notdb.createUser
: Mongo, siz kapatma parantezi girene kadar yöntemi tamamlanmış olarak kaydetmeyecektir . Siz bunu yapana kadar bilgi istemi büyüktür işaretinden ( >
) üç noktaya ( ...
) dönüşecektir.
{
Ardından, user:
istediğiniz kullanıcı adını çift tırnak içinde ve ardından bir virgülle değer olarak içeren bir alan girin. Aşağıdaki örnek, AdminKerim kullanıcı adını belirtir , ancak istediğiniz kullanıcı adını girebilirsiniz:
user: "AdminKerim",
Ardından, değeri olarak yöntemi pwd
içeren bir alan girin. passwordPrompt()
Yöntemi yürüttüğünüzde, db.createUser
yöntem passwordPrompt()
parolanızı girmeniz için bir istem sağlayacaktır. Bu, kullanıcı adınız için yaptığınız gibi şifrenizi açık metin olarak yazmak olan alternatiften daha güvenlidir.
Not : passwordPrompt()
Yöntem yalnızca MongoDB sürümleriyle uyumludur4.2ve daha yeni. MongoDB’nin daha eski bir sürümünü kullanıyorsanız, kullanıcı adınızı yazdığınıza benzer şekilde parolanızı açık metin olarak yazmanız gerekir:
pwd: "password",
Bu alanı da virgülle takip ettiğinizden emin olun:
pwd: passwordPrompt(),
Ardından yönetici kullanıcınızın sahip olmasını istediğiniz rolleri girin. Bir yönetici kullanıcı oluşturduğunuz için, en azından ona veritabanı userAdminAnyDatabase
üzerindeki rolü vermelisiniz . admin
Bu, yönetici kullanıcının yeni kullanıcılar ve roller oluşturmasına ve değiştirmesine izin verecektir. admin
Yönetici kullanıcının veritabanında bu rolü olduğu için , bu ona tüm kümeye süper kullanıcı erişimi de verir .
Ek olarak, aşağıdaki örnek yönetici kullanıcıya da readWriteAnyDatabase
rol verir. Bu, yönetici kullanıcıya , çoğunlukla dahili kullanım için olan config
ve veritabanları dışında, kümedeki herhangi bir veritabanındaki verileri okuma ve değiştirme yeteneği verir :local
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
Ardından, belgenin sonunu belirtmek için bir kapatma ayracı girin:
}
db.createUser
Ardından, yöntemi kapatmak ve yürütmek için bir kapatma parantezi girin :
)
Hep birlikte, db.createUser
yönteminiz şöyle görünmelidir:
> db.createUser(
... {
... user: "AdminKerim",
... pwd: passwordPrompt(),
... roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
... }
... )
Her satırın sözdizimi doğruysa, yöntem düzgün bir şekilde yürütülür ve sizden bir parola girmeniz istenir:
OutputEnter password:
Seçtiğiniz güçlü bir parola girin. Ardından, kullanıcının eklendiğine dair bir onay alacaksınız:
OutputSuccessfully added user: {
"user" : "AdminKerim",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
"readWriteAnyDatabase"
]
}
Bunu takiben MongoDB istemcisinden çıkabilirsiniz:
exit
Bu noktada, kullanıcınızın kimlik bilgilerini girmesine izin verilecektir. Ancak, siz kimlik doğrulamayı etkinleştirene ve MongoDB arka plan programını yeniden başlatana kadar bunu yapmaları gerekmeyecektir.
Adım 2 — Kimlik Doğrulamayı Etkinleştirme
Kimlik doğrulamayı etkinleştirmek için mongod.conf
MongoDB’nin yapılandırma dosyasını düzenlemelisiniz. Etkinleştirdikten ve Mongo hizmetini yeniden başlattığınızda, kullanıcılar yine de kimlik doğrulaması yapmadan veritabanına bağlanabilecektir. Ancak, doğru bir kullanıcı adı ve parola sağlayana kadar herhangi bir veriyi okuyamaz veya değiştiremezler.
Yapılandırma dosyasını tercih ettiğiniz metin düzenleyiciyle açın. Burada kullanacağız nano
:
sudo nano /etc/mongod.conf
Yorumlanan bölümü bulmak için aşağı kaydırın security
:/etc/mongod.conf
. . .
#security:
#operationProfiling:
. . .
Pound işaretini ( ) kaldırarak bu satırın açıklamasını kaldırın #
:/etc/mongod.conf
. . .
security:
#operationProfiling:
. . .
Ardından authorization
parametreyi ekleyin ve olarak ayarlayın enabled
. İşiniz bittiğinde, çizgiler şöyle görünmelidir:/etc/mongod.conf
. . .
security:
authorization: enabled
. . .
security:
Satırın başında boşluk olmadığına dikkat edin, satır authorization:
iki boşlukla girintilidir.
Bu satırları ekledikten sonra dosyayı kaydedip kapatın. Dosyayı önceden açtıysanız , , , ardından nano
düğmelerine basarak açın .CTRL + X
Y
ENTER
Ardından, bu yeni değişiklikleri yürürlüğe koymak için arka plan programını yeniden başlatın:
sudo systemctl restart mongod
Ardından, doğru şekilde yeniden başlatıldığından emin olmak için hizmetin durumunu kontrol edin:
sudo systemctl status mongod
Komut başarılı olursa , hizmetin etkin olduğunu ve yakın zamanda başlatıldığını restart
gösteren bir çıktı alırsınız :mongod
Output● mongod.service - MongoDB Database Server
Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2020-06-09 22:06:20 UTC; 7s ago
Docs: https://docs.mongodb.org/manual
Main PID: 15370 (mongod)
Memory: 170.1M
CGroup: /system.slice/mongod.service
└─15370 /usr/bin/mongod --config /etc/mongod.conf
Jun 09 22:06:20 your_host systemd[1]: Started MongoDB Database Server.
Arka plan programının yedeklendiğini ve çalıştığını doğruladıktan sonra, eklediğiniz kimlik doğrulama ayarının beklendiği gibi çalıştığını test edebilirsiniz.
Adım 3 — Kimlik Doğrulama Ayarlarını Test Etme
Önceki adımda eklediğiniz kimlik doğrulama gereksinimlerinin doğru çalıştığını test etmeye başlamak için, eylemlerinizin gerçekten kısıtlanmış olduğunu doğrulamak için herhangi bir kimlik bilgisi belirtmeden bağlanarak başlayın:
mongo
Artık kimlik doğrulamayı etkinleştirdiğinize göre, daha önce karşılaştığınız uyarıların hiçbiri görünmeyecek:
OutputMongoDB shell version v4.4.0
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("5d50ed96-f7e1-493a-b4da-076067b2d898") }
MongoDB server version: 4.4.0
>
show dbs
Komutu yeniden çalıştırarak erişiminizin kısıtlanıp kısıtlanmadığını onaylayın :
show dbs
Adım 1’den, sunucunuzda en az birkaç varsayılan veritabanı olduğunu hatırlayın. Ancak bu durumda, ayrıcalıklı bir kullanıcı olarak kimliğinizi doğrulamadığınız için komutun herhangi bir çıktısı olmayacaktır.
Bu komut herhangi bir bilgi döndürmediğinden, kimlik doğrulama ayarının beklendiği gibi çalıştığını söylemek güvenlidir. Ayrıca, önce kimlik doğrulaması yapmadan kullanıcı oluşturamaz veya diğer ayrıcalıklı görevleri gerçekleştiremezsiniz.
Devam edin ve MongoDB kabuğundan çıkın:
Not : Daha önce Adım 1’de yaptığınız gibi aşağıdaki komutu çalıştırmak yerine exit
, kabuğu kapatmanın alternatif bir yolu sadece tuşuna basmaktır CTRL + C
.
exit
mongo
Ardından, yönetici kullanıcınızın bu kullanıcı olarak bağlanmak için aşağıdaki komutu çalıştırarak doğru şekilde kimlik doğrulaması yapabildiğinden emin olun . Bu komut, -u
bağlanmak istediğiniz kullanıcının adından önce gelen bayrağı içerir. AdminKerim’i kendi yönetici kullanıcı adınızla değiştirdiğinizden emin olun . Ayrıca -p
sizden kullanıcının parolasını isteyecek olan bayrağı da içerir ve admin
belirtilen kullanıcı adının oluşturulduğu kimlik doğrulama veritabanı olarak belirtir:
mongo -u AdminKerim -p --authenticationDatabase admin
İstendiğinde kullanıcının şifresini girin ve ardından kabuğa bırakılacaksınız. Oradayken, show dbs
komutu tekrar vermeyi deneyin:
show dbs
Bu sefer, doğru bir şekilde kimlik doğrulaması yaptığınız için, komut sunucuda o anda bulunan tüm veritabanlarının bir listesini başarıyla döndürecektir:
Outputadmin 0.000GB
config 0.000GB
local 0.000GB
Bu, kimlik doğrulamanın başarıyla etkinleştirildiğini onaylar.