Çoğu Linux kullanıcısı için, herhangi bir komutu root olarak çalıştırma veya root kullanıcıya geçme yeteneği veren sihirli bir araçtır.Ama bu sadece yarı gerçek.
Ubuntu, Debian ve diğer dağıtımlar, herhangi bir komutu root olarak çalıştırmalarına izin verecek şekilde sudo ile önceden yapılandırılmış olarak gelir. Bu, birçok kullanıcının sudo’nun size anında root erişimi sağlayan bir tür sihirli anahtar olduğuna inanmasını sağlar.Örneğin, bir sistem yöneticisi bunu, belirli bir ‘dev’ grubunun parçası olan kullanıcıların sudo ile yalnızca nginx komutunu çalıştırabileceği şekilde yapılandırabilir. Bu kullanıcılar sudo ile başka bir komut çalıştıramaz veya root’a geçemez.
Bu sizi şaşırttıysa, bunun nedeni Sudo’yu sonsuza kadar kullanmış olmanız ancak bunun altında yatan mekanizma hakkında pek düşünmemiş olmanızdır.
Bu derste sudo’nun nasıl çalıştığını açıklamayacağım.
Bu makalede sudo’nun farklı yönlerinin nasıl değiştirilebileceğini göreceksiniz. Bazıları yararlı, bazıları ise oldukça işe yaramaz ama eğlenceli.
1. sudo yapılandırmasını düzenlemek için her zaman visudo kullanın
sudo komutu, /etc/sudoers dosyası aracılığıyla yapılandırılır.
Bu dosyayı Micro, NeoVim vb. gibi favori terminal tabanlı metin düzenleyicinizle düzenleyebilseniz de, bunu YAPMAMALISINIZ.
Neden? Çünkü bu dosyadaki herhangi bir yanlış sözdizimi, sizi sudo’nun çalışmayacağı berbat bir sistemle baş başa bırakacaktır. Bu, Linux sisteminizi işe yaramaz hale getirebilir.
Sadece şu şekilde kullanın:
sudo visudo
visudo komutu geleneksel olarak /etc/sudoers dosyasını Vi düzenleyicisinde açar. Ubuntu bunu Nano’da açacak.
Buradaki avantaj, değişikliklerinizi kaydetmeye çalıştığınızda visudo’nun bir sözdizimi denetimi gerçekleştirmesidir. Bu, yanlış sözdizimi nedeniyle sudo yapılandırmasını bozmamanızı sağlar.
Tamam! Artık bazı sudo yapılandırma değişikliklerini görebilirsiniz.
sudo cp /etc/sudoers /etc/sudoers.bak
2. sudo ile şifre girerken yıldız işaretlerini gösterin
UNIX’ten devralınan bu davranışa sahibiz. Terminalde sudo şifrenizi girdiğinizde hiçbir şey göstermez. Bu görsel geri bildirim eksikliği, yeni Linux kullanıcılarının sistemlerinin askıda kaldığını düşünmelerine neden oluyor.
Yaşlılar bunun bir güvenlik özelliği olduğunu söylüyor. Geçen yüzyılda durum böyle olabilirdi ama artık buna devam etmemiz gerektiğini düşünmüyorum. Bu sadece benim fikrim.
Her neyse, Linux Mint gibi bazı dağıtımlar, şifreyi girdiğinizde yıldız işaretlerini gösterecek şekilde sudo ince ayarına sahiptir.
Şimdi bu, her yerde gördüğümüz davranışlarla daha uyumlu.
Sudo ile yıldız işaretlerini göstermek için sudo visudo’yu çalıştırın ve şu satırı arayın:
Defaults env_reset
Şunu değiştirin:
Defaults env_reset,pwfeedback
Şimdi, sudo kullanmayı denerseniz ve bir şifre isterse, şifreyi girdiğinizde yıldız işaretleri görmelisiniz.
3. Sudo parola zaman aşımını artırın
Yani, sudo’yu ilk kez kullanıyorsunuz ve şifreyi soruyor. Ancak sudo ile sonraki komutlar için belirli bir süre şifre girmeniz gerekmez.
Buna sudo şifre zaman aşımı diyelim (veya SPT, ben uydurdum. Öyle 😁 demeyin :).
Farklı dağıtımların farklı zaman aşımları vardır. 5 dakika veya 15 dakika olabilir.
Davranışı değiştirebilir ve istediğiniz gibi bir sudo parolası zaman aşımı ayarlayabilirsiniz.
Sudoer dosyasını yukarıda gördüğünüz gibi düzenleyin ve Varsayılanlar env_reset olan satırı arayın ve satıra timestamp_timeout=XX ekleyin, böylece şu olur:
Defaults env_reset, timestamp_timeout=XX
Burada XX, dakika cinsinden zaman aşımıdır.
Önceki bölümde gördüğünüz yıldız geri bildirimi gibi başka parametreleriniz varsa, hepsi birleştirilebilir:
Defaults env_reset, timestamp_timeout=XX, pwfeedback
4. Sudo’yu şifre olmadan kullanın
Tamam! Yani sudo şifre zaman aşımını artırdınız (veya SPT. Vay canına! hala öyle 😛 diyorsunuz).
Bu iyi. Demek istediğim, şifreyi birkaç dakikada bir girmeyi sevenler.
Zaman aşımını artırmak bir şeydir. Diğer bir şey ise hepsini kullanmamaktır.
Evet, doğru okudunuz. Şifre girmeden sudo kullanabilirsiniz.
Güvenlik açısından riskli geliyor, değil mi? Öyle ama sudo’yu şifre olmadan kullanmanın (üretken bir şekilde) daha iyi olduğu gerçek durumlar var.
Örneğin, birkaç Linux sunucusunu uzaktan yönetiyorsanız ve her zaman root kullanmaktan kaçınmak için üzerlerinde sudo kullanıcıları oluşturduysanız. Sorun şu ki, çok fazla şifreniz olacak. Tüm sunucular için aynı sudo parolasını kullanmak istemezsiniz.
Böyle bir durumda sunuculara sadece anahtar tabanlı SSH erişimi kurabilir ve sudo’nun şifresiz kullanılmasına izin verebilirsiniz. Bu şekilde, uzak sunucuya yalnızca yetkili kullanıcı erişir ve sudo parolasının hatırlanmasına gerek kalmaz.
Bunu, açık kaynaklı araçları ve hizmetleri test etmek için DigitalOcean’da dağıttığım test sunucularında yapıyorum.
İşin iyi yanı, buna kullanıcı bazında izin verilebilmesidir. Düzenlemek için /etc/sudoer dosyasını şu şekilde açın:
sudo visudo
Ve sonra şöyle bir satır ekleyin:
user_name ALL=(ALL) NOPASSWD:ALL
Tabii ki, user_name yukarıdaki satırdaki gerçek kullanıcı adıyla değiştirmeniz gerekir.
Dosyayı kaydedin ve şifresiz sudo hayatının tadını çıkarın.
5. Ayrı sudo günlük dosyaları oluşturun
Sudo ile ilgili girişler için syslog veya günlük günlüklerini her zaman okuyabilirsiniz.
Ancak, sudo için ayrı bir giriş istiyorsanız, sudo’ya ayrılmış özel bir günlük dosyası oluşturabilirsiniz.
Diyelim ki bu amaçla /var/sudo.log dosyasını kullanmak istiyorsunuz. Yeni günlük dosyasını önceden oluşturmanız gerekmez. Yoksa sizin için oluşturulacaktır.
/etc/sudoers dosyasını visudo kullanarak düzenleyin ve ona aşağıdaki satırı ekleyin:
Defaults logfile="/var/log/sudo.log"
Kaydedin ve bu dosyada hangi komutların sudo tarafından ne zaman ve hangi kullanıcı tarafından çalıştırıldığını görmeye başlayabilirsiniz:
6. Belirli bir kullanıcı grubuna yalnızca sudo ile belirli komutlara izin verin
Bu, sysadmin’in departmanlardaki kişilerin aynı sunucu üzerinde çalıştığı çok kullanıcılı bir ortamda kullandığı gelişmiş bir çözümdür.
Bir geliştiricinin web sunucusunu veya başka bir programı root izniyle çalıştırması gerekebilir, ancak onlara tam sudo erişimi vermek bir güvenlik sorunu olacaktır.
Bu, kullanıcı düzeyinde yapılabilirken, grup düzeyinde yapmanızı öneririm. Diyelim ki kodlayıcılar adında bir grup oluşturdunuz ve /var/www ve /opt/bin/coders dizinlerinden ve inxi komutundan (ikili /usr/bin/inxi) komutları (veya ikilileri) çalıştırmalarına izin verdiniz.
Bu varsayımsal bir senaryodur. Lütfen kelimesi kelimesine almayın.
Şimdi, sudoer dosyasını sudo visudo ile düzenleyin (evet, artık biliyorsunuz). Aşağıdaki satırı ekleyin:
%coders ALL=(ALL:ALL) /var/www,/opt/bin/coders,/usr/bin/inxi
İsterseniz NOPASSWD parametresini ekleyebilirsiniz, böylece yukarıda izin verilen komutlar için sudo, sudo ile ancak parola olmadan çalıştırılabilir.
HEPSİ hakkında daha fazla bilgi, bu zaten normalden daha uzun sürdüğü için başka bir makalede.
7. Bir kullanıcının sudo erişimini kontrol edin
Tamam! Bu, bir ince ayardan çok bir ipucu.
Bir kullanıcının sudo erişimi olup olmadığını nasıl anlarsınız? Sudo grubunun üyesi olup olmadıklarını kontrol edin, diyorsunuz. Ama bu bir garanti değil. Bazı dağıtımlar sudo yerine tekerlek grubu adını kullanır.
Daha iyi bir yol, sudo’nun yerleşik işlevselliğini kullanmak ve bir kullanıcının ne tür sudo erişimine sahip olduğunu görmektir:
sudo -l -U user_name
Kullanıcının bazı komutlar için mi yoksa tüm komutlar için mi sudo erişimi olduğunu gösterecektir.
Yukarıda görebileceğiniz gibi, tüm komutlar için sudo erişiminin yanı sıra özel bir günlük dosyam ve şifre geri bildirimim olduğunu gösteriyor.
Kullanıcının sudo erişimi yoksa şuna benzer bir çıktı görürsünüz:
User prakash is not allowed to run sudo on this-that-server.
🎁 Bonus: Yanlış şifre denemeleri için sudo’nun size linç etmesine izin verin
Bu, bu makalenin başında bahsettiğim ‘işe yaramaz’ ince ayar.
Sanırım geçmişte bir süre sudo kullanırken şifreyi yanlış yazmış olmalısın, değil mi?
Bu küçük ince ayar, sudo’nun yanlış şifreler girdiğiniz için size rastgele bir hakaret atmasına izin verir.
sudo yapılandırma dosyasını düzenlemek için sudo visudo kullanın ve ona aşağıdaki satırı ekleyin:
Defaults insults
Ve sonra yanlış şifreler girerek değişiklikleri test edebilirsiniz:
Yazının orijinalini buradan okuyabilirsiniz.
Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım.
Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum.
Son 6 yıldır sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum.
Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.