Ubuntu 22.04’te Redis Nasıl Kurulur
Adım 1 — Redis’i Yükleme ve Yapılandırma
Resmi Ubuntu depolarından redis yüklemek için APT paket yöneticisini kullanacağız. Bu yazı itibariyle, varsayılan depolarda bulunan sürüm şu şekildedir: 6.0.16.
apt
Yerel paket önbelleğinizi güncelleyerek başlayın :
sudo apt update
Ardından şunu yazarak Redis’i yükleyin:
sudo apt install redis-server
Bu, Redis’i ve bağımlılıklarını indirip yükleyecektir. Bunu takiben, kurulum sırasında otomatik olarak oluşturulan Redis yapılandırma dosyasında yapılacak önemli bir yapılandırma değişikliği vardır.
Bu dosyayı tercih ettiğiniz metin düzenleyiciyle açın:
sudo nano /etc/redis/redis.conf
Dosyanın içinde supervised
yönergeyi bulun. Bu yönerge, Redis’i bir hizmet olarak yönetmek için bir init sistemi bildirmenize izin vererek, işleyişi üzerinde size daha fazla kontrol sağlar. Yönerge varsayılan supervised
olarak ayarlanmıştır . systemd
no
init sistemini kullanan Ubuntu’yu çalıştırdığınız için bunu şu şekilde değiştirin: systemd
/etc/redis/redis.conf
. . .
# If you run Redis from upstart or systemd, Redis can interact with your
# supervision tree. Options:
# supervised no - no supervision interaction
# supervised upstart - signal upstart by putting Redis into SIGSTOP mode
# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET
# supervised auto - detect upstart or systemd method based on
# UPSTART_JOB or NOTIFY_SOCKET environment variables
# Note: these supervision methods only signal "process is ready."
# They do not enable continuous liveness pings back to your supervisor.
supervised systemd
. . .
Bu noktada Redis yapılandırma dosyasında yapmanız gereken tek değişiklik budur, bu nedenle işiniz bittiğinde kaydedin ve kapatın. Dosyayı düzenlemek için kullandıysanız nano
, bunu CTRL + X
, Y
, ardından tuşlarına basarak yapın ENTER
.
Ardından, yapılandırma dosyasında yaptığınız değişiklikleri yansıtmak için Redis hizmetini yeniden başlatın:
sudo systemctl restart redis.service
Bununla, Redis’i kurdunuz ve yapılandırdınız ve makinenizde çalışıyor. Yine de kullanmaya başlamadan önce, Redis’in doğru çalışıp çalışmadığını kontrol etmek akıllıca olacaktır.
Adım 2 — Redis’i Test Etme
Yeni yüklenen tüm yazılımlarda olduğu gibi, yapılandırmasında herhangi bir değişiklik yapmadan önce Redis’in beklendiği gibi çalıştığından emin olmak iyi bir fikirdir. Bu adımda Redis’in doğru çalışıp çalışmadığını kontrol etmenin birkaç yolunu gözden geçireceğiz.
Redis hizmetinin çalışıp çalışmadığını kontrol ederek başlayın:
sudo systemctl status redis
Herhangi bir hata olmadan çalışıyorsa, bu komut aşağıdakine benzer bir çıktı üretecektir:
Output● redis-server.service - Advanced key-value store
Loaded: loaded (/lib/systemd/system/redis-server.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-06-28 20:40:52 UTC; 4s ago
Docs: http://redis.io/documentation,
man:redis-server(1)
Main PID: 2899 (redis-server)
Status: "Ready to accept connections"
Tasks: 5 (limit: 2327)
Memory: 2.5M
CPU: 65ms
CGroup: /system.slice/redis-server.service
└─2899 "/usr/bin/redis-server 127.0.0.1:6379
. . .
Bu çıktı, Redis’in çalıştığını ve zaten etkin olduğunu, yani sunucu her önyüklendiğinde başlayacak şekilde ayarlandığını gösterir.
Not: Bu ayar, Redis’in birçok yaygın kullanım durumu için arzu edilir. Ancak, sunucunuz her önyüklendiğinde Redis’i manuel olarak başlatmayı tercih ederseniz, bunu aşağıdaki komutla yapılandırabilirsiniz:
sudo systemctl disable redis
Redis’in düzgün çalıştığını test etmek için redis-cli
, Redis’in komut satırı istemcisini kullanarak sunucuya bağlanın:
redis-cli
Aşağıdaki komut isteminde, şu ping
komutla bağlantıyı test edin:
ping
Output
PONG
Bu çıktı, sunucu bağlantısının hala canlı olduğunu doğrular. Ardından, aşağıdakileri çalıştırarak anahtarları ayarlayabildiğinizi kontrol edin:
set test "It's working!"
Output
OK
Yazarak değeri alın:
get test
Her şeyin çalıştığını varsayarsak, sakladığınız değeri geri alabilirsiniz:
Output"It's working!"
Değeri alabileceğinizi onayladıktan sonra, kabuğa geri dönmek için Redis isteminden çıkın:
exit
Son bir test olarak, Redis’in durdurulduktan veya yeniden başlatıldıktan sonra bile verileri sürdürüp sürdüremeyeceğini kontrol edeceğiz. Bunu yapmak için önce Redis örneğini yeniden başlatın:
sudo systemctl restart redis
Ardından komut satırı istemcisine tekrar bağlanın:
redis-cli
Ve test değerinizin hala mevcut olduğunu onaylayın
get test
Anahtarınızın değerine hala erişilebilir olmalıdır:
Output"It's working!"
İşiniz bittiğinde tekrar kabuğa çıkın:
exit
Bununla, Redis kurulumunuz tamamen çalışır durumda ve kullanıma hazırdır. Ancak, varsayılan yapılandırma ayarlarından bazıları güvenli değildir ve kötü niyetli aktörlere sunucunuza ve verilerine saldırma ve bunlara erişim sağlama fırsatları sunar. Bu eğitimdeki geri kalan adımlar, resmi Redis web sitesinde belirtildiği şekilde bu güvenlik açıklarını azaltmaya yönelik yöntemleri kapsar . Bu adımlar isteğe bağlı olsa ve Redis bunları izlememeyi seçerseniz çalışmaya devam edecek olsa da , sisteminizin güvenliğini güçlendirmek için bunları tamamlamanız şiddetle önerilir.
Adım 3 — localhost’a bağlanma
Varsayılan olarak, Redis’e yalnızca localhost’tan erişilebilir . Ancak, Redis’i bundan farklı bir öğretici izleyerek kurup yapılandırdıysanız, yapılandırma dosyasını herhangi bir yerden bağlantılara izin verecek şekilde güncellemiş olabilirsiniz. Bu, localhost’a bağlanmak kadar güvenli değildir .
Bunu düzeltmek için, düzenlemek üzere Redis yapılandırma dosyasını açın:
sudo nano /etc/redis/redis.conf
Bu satırı bulun ve yorumsuz olduğundan emin olun ( #
varsa kaldırın):/etc/redis/redis.conf
. . .
bind 127.0.0.1 ::1
. . .
Bitirdiğinizde dosyayı kaydedin ve kapatın ( CTRL + X
, Y
, ardından ‘a basın ENTER
).
Ardından, systemd’nin değişikliklerinizi okuduğundan emin olmak için hizmeti yeniden başlatın:
sudo systemctl restart redis
Bu değişikliğin yürürlüğe girdiğini kontrol etmek için aşağıdaki netstat
komutu çalıştırın:
sudo netstat -lnp | grep redis
Output
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN 14222/redis-server
tcp6 0 0 ::1:6379 :::* LISTEN 14222/redis-server
Not : netstat
Komut, varsayılan olarak sisteminizde bulunmayabilir. Bu durumda, aşağıdaki komutla (bir dizi başka kullanışlı ağ aracıyla birlikte) yükleyebilirsiniz:
sudo apt install net-tools
Bu çıktı, yapılandırma dosyasında az önce yaptığınız değişikliği yansıtan programın localhost’a ( ) redis-server
bağlı olduğunu gösterir. Bu sütunda başka bir IP adresi varsa ( , örneğin), o zaman doğru satırın yorumunu kaldırdığınızı iki kez kontrol etmeli ve Redis hizmetini yeniden başlatmalısınız. 127.0.0.10.0.0.0
Artık Redis kurulumunuz yalnızca localhost’ta dinlendiğinden , kötü niyetli kişilerin sunucunuza istekte bulunması veya erişim sağlaması daha zor olacaktır. Ancak, Redis şu anda kullanıcıların yapılandırmasında veya içerdiği verilerde değişiklik yapmadan önce kimliklerini doğrulamalarını gerektirecek şekilde ayarlanmamıştır. Bunu düzeltmek için Redis, Redis istemcisi ( redis-cli
) aracılığıyla değişiklik yapmadan önce kullanıcıların bir parola ile kimlik doğrulamasını zorunlu kılmanıza olanak tanır.
Adım 4 — Redis Parolasını Yapılandırma
Bir Redis parolasının yapılandırılması, iki yerleşik güvenlik özelliğinden birini etkinleştirir – auth
istemcilerin veritabanına erişmek için kimlik doğrulaması yapmasını gerektiren komut. Parola doğrudan Redis’in yapılandırma dosyasında yapılandırılır /etc/redis/redis.conf
, bu nedenle o dosyayı tercih ettiğiniz düzenleyiciyle yeniden açın:
sudo nano /etc/redis/redis.conf
Bölüme gidin ve aşağıdakileri SECURITY
okuyan yorumlanmış bir yönerge bulun: /etc/redis/redis.conf
. . .
# requirepass foobared
. . .
Kaldırarak yorumunu kaldırın ve güvenli bir parola #
ile değiştirin .foobared
Not:
requirepass
Dosyadaki yönergenin üstünde redis.conf
yorumlu bir uyarı vardır: /etc/redis/redis.conf
. . .
# Warning: since Redis is pretty fast an outside user can try up to
# 150k passwords per second against a good box. This means that you should
# use a very strong password otherwise it will be very easy to break.
#
. . .
Bu nedenle, parolanız olarak çok güçlü ve çok uzun bir değer belirlemeniz önemlidir. Kendiniz bir şifre oluşturmak yerine openssl
, aşağıdaki örnekte olduğu gibi rastgele bir şifre oluşturmak için komutu kullanabilirsiniz. Burada gösterildiği gibi , ilk komutun çıktısını ikinci openssl
komuta aktararak, bu ilk komut tarafından üretilen tüm satır sonlarını kaldıracaktır:
openssl rand 60 | openssl base64 -A
Bu komut şöyle bir çıktı döndürür:
OutputRBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE
Bu komutun çıktısını yeni değer olarak kopyalayıp yapıştırdıktan sonra requirepass
şöyle olmalıdır:
/etc/redis/redis.confrequirepass RBOJ9cCNoGCKhlEBwQLHri1g+atWgn4Xn4HwNUbtzoVxAYxkiYBi7aufl4MILv1nxBqR4L6NNzI0X6cE
Şifreyi ayarladıktan sonra dosyayı kaydedip kapatın. Ardından Redis’i yeniden başlatın:
sudo systemctl restart redis.service
Parolanın çalışıp çalışmadığını test etmek için Redis istemcisini açın:
redis-cli
Aşağıda, Redis parolasının çalışıp çalışmadığını test etmek için kullanılan bir dizi komut gösterilmektedir. İlk komut, kimlik doğrulamadan önce bir değere bir anahtar ayarlamaya çalışır:
set key1 10
Kimlik doğrulaması yapmadığınız için bu işe yaramaz, bu nedenle Redis bir hata döndürür:
Output(error) NOAUTH Authentication required.
Sonraki komut, Redis yapılandırma dosyasında belirtilen parolayla kimlik doğrulaması yapar:
auth your_redis_password
Redis şunları kabul eder:
Output
OK
Bundan sonra, önceki komutu tekrar çalıştırmak başarılı olacaktır:
set key1 10
Output
OK
get key1
yeni anahtarın değeri için Redis’i sorgular.
get key1
Output"10"
Kimlik doğrulamasından sonra Redis istemcisinde komutları çalıştırabileceğinizi onayladıktan sonra aşağıdakilerden çıkabilirsiniz redis-cli
:
quit
Ardından, yanlışlıkla veya kötü niyetli bir kişi tarafından girilirse verileriniz üzerinde ciddi etkileri olabilecek Redis komutlarını yeniden adlandırmayı gözden geçireceğiz.
Adım 5 — Tehlikeli Komutları Yeniden Adlandırma
Redis’te yerleşik olarak bulunan diğer güvenlik özelliği, tehlikeli olarak kabul edilen belirli komutların yeniden adlandırılmasını veya tamamen devre dışı bırakılmasını içerir.
Yetkisiz kullanıcılar tarafından çalıştırıldığında, bu tür komutlar verilerinizi yeniden yapılandırmak, yok etmek veya başka bir şekilde silmek için kullanılabilir. Kimlik doğrulama parolası gibi, komutları yeniden adlandırma veya devre dışı bırakma, dosyanın aynı SECURITY
bölümünde yapılandırılır. /etc/redis/redis.conf
Tehlikeli olarak kabul edilen komutlardan bazıları şunlardır: FLUSHDB
, FLUSHALL
, KEYS
, PEXPIRE
, DEL
, CONFIG
, SHUTDOWN
, BGREWRITEAOF
, BGSAVE
, SAVE
, SPOP
, SREM
, RENAME
ve DEBUG
. Bu kapsamlı bir liste değildir, ancak bu listedeki tüm komutları yeniden adlandırmak veya devre dışı bırakmak, Redis sunucunuzun güvenliğini artırmak için iyi bir başlangıç noktasıdır.
Bir komutu devre dışı bırakmanız veya yeniden adlandırmanız gerekip gerekmediği, özel gereksinimlerinize veya sitenizin gereksinimlerine bağlıdır. Suistimal edilebilecek bir komutu asla kullanmayacağınızı biliyorsanız, devre dışı bırakabilirsiniz. Aksi takdirde, yeniden adlandırmak sizin yararınıza olabilir.
Redis komutlarını yeniden adlandırmak veya devre dışı bırakmak için yapılandırma dosyasını bir kez daha açın:
sudo nano /etc/redis/redis.conf
Uyarı: Komutların nasıl devre dışı bırakılacağını ve yeniden adlandırılacağını gösteren aşağıdaki adımlar örnektir. Yalnızca sizin için anlamlı olan komutları devre dışı bırakmayı veya yeniden adlandırmayı seçmelisiniz. Redis.io/commands adresinde komutların tam listesini kendiniz gözden geçirebilir ve bunların nasıl kötüye kullanılabileceğini belirleyebilirsiniz .
Bir komutu devre dışı bırakmak için, onu aşağıda gösterildiği gibi boş bir dizeyle (aralarında karakter olmayan bir çift tırnak işaretiyle gösterilir) yeniden adlandırın: /etc/redis/redis.conf
. . .
# It is also possible to completely kill a command by renaming it into
# an empty string:
#
rename-command FLUSHDB ""
rename-command FLUSHALL ""
rename-command DEBUG ""
. . .
Bir komutu yeniden adlandırmak için aşağıdaki örneklerde gösterildiği gibi başka bir ad verin. Yeniden adlandırılan komutların başkaları tarafından tahmin edilmesi zor, ancak sizin için hatırlaması kolay olmalıdır: /etc/redis/redis.conf
. . .
# rename-command CONFIG ""
rename-command SHUTDOWN SHUTDOWN_MENOT
rename-command CONFIG ASC12_CONFIG
. . .
Değişikliklerinizi kaydedin ve dosyayı kapatın.
Bir komutu yeniden adlandırdıktan sonra, Redis’i yeniden başlatarak değişikliği uygulayın:
sudo systemctl restart redis.service
Yeni komutu test etmek için Redis komut satırına girin:
redis-cli
Ardından, kimlik doğrulaması yapın:
auth your_redis_password
Output
OK
Önceki örnekte olduğu gibi CONFIG
komutu yeniden adlandırdığınızı varsayalım . ASC12_CONFIG
İlk önce, orijinal CONFIG
komutu kullanmayı deneyin. Başarısız olmalı, çünkü yeniden adlandırdınız:
config get requirepass
Output(error) ERR unknown command `config`, with args beginning with:
Ancak yeniden adlandırılan komutu çağırmak başarılı olacaktır. Büyük/küçük harfe duyarlı değildir:
asc12_config get requirepass
Output1) "requirepass"
2) "your_redis_password"
Son olarak, şuradan çıkabilirsiniz redis-cli
:
exit
Redis komut satırını zaten kullanıyorsanız ve ardından Redis’i yeniden başlattıysanız, yeniden kimlik doğrulaması yapmanız gerekeceğini unutmayın. Aksi takdirde, bir komut yazarsanız bu hatayı alırsınız:
OutputNOAUTH Authentication required.
UyarıSECURITY
: Komutları yeniden adlandırma uygulamasıyla ilgili olarak, bölümün sonunda şu uyarıyı içeren bir uyarı ifadesi vardır /etc/redis/redis.conf
: /etc/redis/redis.conf
. . .
# Please note that changing the name of commands that are logged into the
# AOF file or transmitted to replicas may cause problems.
. . .