LinuxOpen Source

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 dbskomutunu ç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 adminveritabanı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.createUsermethod, yöntemin çalıştırıldığı veritabanı üzerinde yeni kullanıcılar oluşturmak için kullanılır.

db.createUserYö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 pwdiçeren bir alan girin. passwordPrompt()Yöntemi yürüttüğünüzde, db.createUseryö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 . adminBu, yönetici kullanıcının yeni kullanıcılar ve roller oluşturmasına ve değiştirmesine izin verecektir. adminYö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 readWriteAnyDatabaserol verir. Bu, yönetici kullanıcıya , çoğunlukla dahili kullanım için olan configve 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.createUserArdından, yöntemi kapatmak ve yürütmek için bir kapatma parantezi girin :

)

Hep birlikte, db.createUseryö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.confMongoDB’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 authorizationparametreyi 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 nanodüğmelerine basarak açın .CTRL + XYENTER

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ı restartgö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 dbsKomutu 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

mongoArdı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, -ubağ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 -psizden kullanıcının parolasını isteyecek olan bayrağı da içerir ve adminbelirtilen 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 dbskomutu 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.

Muhammed Kerim Koç

1996 yılında Giresun Şebinkarahisarda dünyaya geldim. İlk ve orta öğretimi Şebinkarahisarda tamamladım. Liseyi Şebinkarahisar Anadolu Teknik ve Endüstri Meslek Lisesinde bitirdim. Üniversite için de Şebinkarahisar Teknik Bilimler Meslek Yüksek Okulunda Bilgisayar programcılığını okudum. Üniversite stajı için gelmiş olduğum özel bir firmada işe başladım. 5,5 yıl bu firmadan çalıştıktan sonra farklı bir sektör olan inşaat sektöründe Bilgi teknolojileri Uzmanı olarak 8 ay çalıştım. Daha sonra özel bir şirkette Sistem Network Sorumlusu olarak 4 ay çalıştıktan sonra proje sonlandırılmasından dolayı işten ayrıldım. Tekrar dan 5.5 yıl çalışmış olduğum firmaya Sistem ve Network Yöneticisi olarak geri döndüm ve çalışmaya başladım. Kendimi geliştirmek için Bilge Adam Akademi den Sistem Uzmanlığı eğitimi aldım. Sanallaştırma ve Ağ tarafında kendimi sürekli olarak geliştiriyorum.

İlgili Makaleler

Başa dön tuşu