Belge

Linux Kullanıcıları için 7 Sudo İpucu

Sudo’yu biliyorsunuz, değil mi?  Mutlaka bir ara kullanmışsınızdır.

Ç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. 

Sudo mutlak bir komut değildir,  sudo ihtiyacınıza ve beğeninize göre yapılandırılabilen bir araçtır.

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.

🚧
Lütfen bahsedilen tüm ince ayarları körü körüne takip etmeye başlamayın.  Yanlış yaparsanız sudo’yu çalıştıramayan berbat bir sistemle karşılaşabilirsiniz.  Çoğunlukla sadece okuyun ve keyfini çıkarın.  Bazı ince ayarları denemeye karar verirseniz, sistem ayarlarının yedeğini alın, böylece işleri normale döndürebilirsiniz.

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.

Save the file in the nano editor

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.

visudo checks the syntax before saving the changes to the sudoers file

Tamam! Artık bazı sudo yapılandırma değişikliklerini görebilirsiniz.

💡
/etc/sudoers dosyasının yedeğini almanızı tavsiye ederim. Böylece hangi değişiklikleri yaptığınızdan emin değilseniz veya varsayılan sudo yapılandırmasına geri dönmek istiyorsanız, onu yedekten kopyalarsınız.

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
Add sudo password asterisk display
💡
Arch gibi bazı dağıtımlarda Defaults env_reset satırını bulamayabilirsiniz. Bu durumda, Defaults env_reset, pwfeedback metnini içeren yeni bir satır eklemeniz yeterlidir.

Şimdi, sudo kullanmayı denerseniz ve bir şifre isterse, şifreyi girdiğinizde yıldız işaretleri görmelisiniz.

Show asterisk while entering sudo password
Yazılım merkezi gibi grafik uygulamalarda doğru olsa bile parolanın kabul edilmemesiyle ilgili herhangi bir sorun fark ederseniz, bu değişikliği geri alın. Bazı eski forum gönderileri bundan bahsetti. Yine de karşılaşmadım.

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
💡
Benzer şekilde, parola yeniden deneme sınırını da denetleyebilirsiniz. Bir kullanıcının kaç kez yanlış parola girebileceğini değiştirmek için passwd_tries=N kullanın.

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:

custom sudo log file

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:

Let sudo insult you

Yazının orijinalini buradan okuyabilirsiniz.