15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
10.11.2023

Linux’ta Sudo Komutu için Parola İstemini Devre Dışı Bırakma

sudo komutu — superuser do‘nun kısaltması — yetkili Linux kullanıcılarına yönetimsel görevleri gerçekleştirmek için geçici root düzeyinde ayrıcalıklar verir. Varsayılan olarak, her sudo çağrısı, arayanın kimliğini doğrulamak için parola kimlik doğrulaması gerektirir. Bu parola istemini, visudo aracılığıyla /etc/sudoers dosyasını değiştirerek veya timestamp_timeout yönergesini ayarlayarak bir kullanıcı için genel olarak, belirli komutlar için seçici olarak ya da bir oturum için geçici olarak devre dışı bırakabilirsiniz.

Devam etmeden önce: sudo parola kimlik doğrulamasını devre dışı bırakmak, sisteminizin derinlemesine savunma duruşunu zayıflatır. Bu değişiklikleri yalnızca güvenilir hesaplara uygulayın; tercihen kapsamlı ALL ayrıcalıkları yerine belirli komutlarla sınırlı tutun. Herhangi bir üretim VPS Hosting ortamında, parolasız sudo’yu bir kolaylık varsayılanı olarak değil, hesaplanmış bir takas olarak değerlendirin.

Sudo Kimlik Doğrulamasının Nasıl Çalıştığını Anlamak

Bir kullanıcı sudo komutunu çalıştırdığında, Linux PAM (Pluggable Authentication Modules) yığını isteği /etc/sudoers dosyasında tanımlanan kurallara göre doğrular. Başarılı kimlik doğrulamasının ardından, çekirdek /run/sudo/ts/ (veya eski dağıtımlarda /var/db/sudo/) dizininde bir kimlik bilgisi zaman damgası kaydeder. timestamp_timeout penceresi içindeki — varsayılan olarak 15 dakika — sonraki sudo çağrıları yeniden kimlik doğrulamayı tamamen atlar.

Bu mimari, kullanabileceğiniz iki temel farklı kaldıraç olduğu anlamına gelir:

  • Kimlik bilgisi önbellekleme — kullanıcının bir kez kimlik doğrulaması yapması ve kimlik bilgisinin daha uzun süre geçerli kalması için zaman aşımı penceresini uzatın veya ortadan kaldırın.
  • NOPASSWD yönergesisudo‘a zamanlama ne olursa olsun belirli komutlar veya kullanıcılar için kimlik doğrulamayı tamamen atlamasını bildirin.

Bu ayrımı anlamak kritik öneme sahiptir. timestamp_timeout‘ı büyük bir değere uzatmak hâlâ bir ilk kimlik doğrulama gerektirir. NOPASSWD yönergesi hiçbir zaman kimlik doğrulama gerektirmez. Bunlar güvenlik açısından eşdeğer değildir.

sudoers Dosyası: Mimari ve Güvenli Düzenleme

Birincil yapılandırma dosyası /etc/sudoers‘dır. Standart bir metin düzenleyiciyle asla doğrudan düzenlenmemelidir. Her zaman şunları yapan visudo‘ı kullanın:

  • Dosyayı eş zamanlı düzenlemelere karşı kilitler
  • Kaydetmeden önce sözdizimini doğrular
  • Hatalı biçimlendirilmiş bir sudoers dosyasının tüm kullanıcıları sudo‘dan kilitlemesini önler
sudo visudo

Modern Debian/Ubuntu sistemlerinde, /etc/sudoers bir eklenti dizini içerir:

/etc/sudoers.d/

Ana dosyayı doğrudan değiştirmek yerine buraya ayrı kural dosyaları yerleştirebilirsiniz. Bu, üretim sistemleri için önerilen yaklaşımdır — özel kurallarınızı izole tutar ve denetimi kolaylaştırır.

sudo visudo -f /etc/sudoers.d/custom_nopasswd

/etc/sudoers.d/ içindeki dosyalar adlarında . içermemeli (örn. custom.conf‘dan kaçının) ve izinleri 0440 olarak ayarlanmalıdır:

sudo chmod 0440 /etc/sudoers.d/custom_nopasswd

Yöntem 1: Tek Bir Oturum İçin Parola İstemini Geçici Olarak Atlamak

-S bayrağı, sudo‘a parolayı terminalden değil standart girişten (stdin) okumasını bildirir. Bu, parolayı programatik olarak aktardığınız etkileşimsiz betiklerde öncelikli olarak kullanışlıdır:

echo "your_password" | sudo -S apt update

Kritik uyarı: Betiklere veya kabuk geçmişine düz metin parolalar gömmek önemli bir güvenlik riskidir. Bu yöntem, parolanın bir gizli yönetici veya ortam değişkeni aracılığıyla enjekte edildiği izole otomasyon ardışık düzenleri için uygundur — bir betik dosyasına sabit kodlanmış değil. Bir sunucuda gözetimsiz otomasyon için, aşağıda açıklanan NOPASSWD yönergesi mimari açıdan daha temiz bir çözümdür.

Yöntem 2: Belirli Bir Kullanıcı İçin Tüm Komutlarda Parola İstemini Devre Dışı Bırakmak

Bu yöntem, adlandırılmış bir kullanıcıya herhangi bir sudo komutunu parolasız çalıştırma yeteneği verir. Bunu tutumlu kullanın — genellikle özel hizmet hesapları veya otomasyon kullanıcıları için, insan operatör hesapları için değil.

Adım 1: sudoers dosyasını açın:

sudo visudo

Adım 2: username‘ı gerçek Linux hesap adıyla değiştirerek aşağıdaki satırı ekleyin:

username ALL=(ALL) NOPASSWD: ALL

Adım 3: Kaydedin ve çıkın. nano tabanlı visudo‘da Ctrl+X‘a, ardından Y‘a, ardından Enter‘a basın. vi tabanlı visudo‘da :wq yazın.

Bu kuralın anlamı, ayrıştırılmış:

AlanDeğerAnlam
usernameHedef kullanıcıKuralın kime uygulandığı
ALL (birinci)Herhangi bir ana bilgisayarKural tüm makinelerde geçerlidir (paylaşılan sudoers yapılandırmaları için kullanışlı)
(ALL)Herhangi bir hedef kullanıcıRoot dahil herhangi bir kullanıcı olarak komut çalıştırabilir
NOPASSWD: ALLTüm komutlar, parola yokHerhangi bir komut için kimlik doğrulama gerekmez

Yöntem 3: Yalnızca Belirli Komutlar İçin Parola İstemini Devre Dışı Bırakmak

Parolasız yürütme gerçekten gerekli olduğunda bu, en güvenlik bilincine sahip yaklaşımdır. Kapsamlı NOPASSWD: ALL vermek yerine, muafiyeti kesin bir ikili yoluyla sınırlandırırsınız.

Adım 1: sudoers dosyasını açın:

sudo visudo

Adım 2: Defaults bölümünü bulun ve altına hedeflenmiş bir kural ekleyin:

username ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt-get update

username‘ı gerçek hesapla değiştirin ve her komutun tam, mutlak yolunu belirtin. Tek bir satırda birden fazla komutu virgülle ayırabilirsiniz.

Adım 3: Kaydedin ve çıkın.

Mutlak yolların önemi: sudo, komutları sudoers kurallarına göre tam ikili yolu kullanarak çözümler. apt-get‘ı yol olmadan belirtirseniz, kural eşleşmeyebilir ya da daha kötüsü, $PATH‘da daha önce yerleştirilen kötü amaçlı bir ikili çağrılabilir. Yolları her zaman which ile doğrulayın:

which systemctl
# /usr/bin/systemctl

Gerçek dünya kullanım senaryosu: deploy kullanıcısı olarak çalışan bir dağıtım ardışık düzeni, her sürümden sonra uygulama hizmetlerini yeniden başlatması gerekiyor. Yalnızca systemctl restart myapp için NOPASSWD vermek, ardışık düzenin tam root erişimini açığa çıkarmadan özerk olarak çalışabileceği anlamına gelir.

Yöntem 4: Kimlik Bilgisi Zaman Damgası Zaman Aşımını Uzatmak

Kimlik doğrulamayı tamamen ortadan kaldırmak yerine, sudo‘ın başarılı bir kimlik doğrulamayı ne kadar süre hatırladığını uzatabilirsiniz. Bu, tek bir çalışma oturumunda birden fazla yönetimsel komut çalıştıran etkileşimli kullanıcılar için en az müdahaleci seçenektir.

Adım 1: sudoers dosyasını açın:

sudo visudo

Adım 2: Defaults bloğu altındaki timestamp_timeout yönergesini değiştirin veya ekleyin:

Defaults    timestamp_timeout=60

Bu, kimlik bilgisi önbelleğini 60 dakikaya ayarlar. Kullanıcı bir kez kimlik doğrular ve bu pencere içindeki sonraki sudo komutları parola gerektirmez.

Özel değerler:

DeğerDavranış
0Her sudo çağrısında parola gerekli
-1Kimlik bilgisi hiçbir zaman sona ermez (ilk kimlik doğrulamanın ardından etkin olarak parolasız)
15Çoğu dağıtımda varsayılan
60Aktif yönetici oturumları için makul

Adım 3: Kaydedin ve çıkın.

Sistem genelinde değil, yalnızca belirli bir kullanıcı için zaman aşımı geçersiz kılması uygulamak için:

Defaults:username    timestamp_timeout=60

Yöntem 5: sudoers Eklenti Dosyası Kullanmak (Üretim En İyi Uygulaması)

/etc/sudoers‘ı doğrudan düzenlemek yerine, kapsamlı bir eklenti dosyası oluşturun. Bu yaklaşım idempotent, denetlenebilir ve Ansible, Puppet veya Chef gibi yapılandırma yönetimi araçlarıyla yönetmek için güvenlidir.

sudo visudo -f /etc/sudoers.d/deploy_nopasswd

Dosyanın içinde:

# Allow the deploy user to restart services without a password
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

Doğru izinleri ayarlayın:

sudo chmod 0440 /etc/sudoers.d/deploy_nopasswd

sudoers yapılandırmasının tüm dosyalarda geçerli olduğunu doğrulayın:

sudo visudo -c
# sudoers file: /etc/sudoers, parsed OK
# sudoers file: /etc/sudoers.d/deploy_nopasswd, parsed OK

Tüm Yöntemlerin Karşılaştırması

YöntemKapsamİlk Kimlik Doğrulama GerektirirGüvenlik RiskiEn İyi Kullanım Senaryosu
stdin ile sudo -STek komutEvet (aktarılan)Sabit kodlanmışsa yüksekGizli yönetici ile CI/CD
NOPASSWD: ALLTüm komutlar, tek kullanıcıHayırÇok Yüksekİzole otomasyon hesapları
NOPASSWD: /path/cmdYalnızca belirli komutlarHayırDüşük-OrtaDağıtım ardışık düzenleri, betikler
timestamp_timeout uzantısıTüm komutlar, zaman sınırlıEvet (bir kez)DüşükEtkileşimli yönetici oturumları
Eklenti /etc/sudoers.d/ dosyasıYapılandırılabilirYapılandırılabilirKurala bağlıÜretim, IaC yönetimli sunucular

Güvenlik Sertleştirme Değerlendirmeleri

Sudo parola istemlerini devre dışı bırakmak gerçek saldırı yüzeyi oluşturur. Bu azaltıcı önlemleri uygulayın:

  • Sudo kullanımını denetleyin: sudoers yapılandırmanıza Defaults logfile="/var/log/sudo.log" ekleyerek sudo günlüğünü etkinleştirin. Bu günlüğü düzenli olarak inceleyin.
  • Komut ve argümana göre kısıtlayın: NOPASSWD: /usr/bin/systemctl restart nginx, NOPASSWD: /usr/bin/systemctl‘dan çok daha güvenlidir — ikincisi kullanıcının herhangi bir hizmeti durdurmasına, devre dışı bırakmasına veya maskelemesine olanak tanır.
  • Özel hizmet hesapları kullanın: NOPASSWD: ALL‘ı asla bir insan operatörün birincil hesabına uygulamayın. Minimal bir komut beyaz listesiyle amaca özel bir hesap oluşturun (örn. deploy, monitor).
  • Yalnızca SSH anahtar kimlik doğrulamasıyla birleştirin: Bir sunucuda parolasız sudo yapılandırılmışsa, SSH erişiminin kendisinin anahtar tabanlı kimlik doğrulama gerektirdiğinden emin olun. Kamuya açık bir sunucuda hem SSH parolalarını hem de sudo parolalarını aynı anda devre dışı bırakmak kritik bir yanlış yapılandırmadır.
  • Döndürün ve inceleyin: /etc/sudoers.d/‘ı, kullanımdan kaldırılmış hesaplara veya eski betiklere bağlı eski kurallar için periyodik olarak denetleyin.

Tam donanım kontrolüne sahip olduğunuz Dedicated Servers‘da bu yapılandırmalar çok daha fazla ağırlık taşır — özel bir makinede parolasız sudo ile ele geçirilmiş bir hesap, hiper yönetici düzeyinde kapsama olmaksızın tam, tartışmasız root erişimi anlamına gelir.

Yapılandırmanızı Doğrulama

Değişiklik yaptıktan sonra, root’a geçmeden her zaman kuralı hedef kullanıcı olarak test edin:

# Switch to the target user
su - username

# Test a specific command
sudo /usr/bin/systemctl restart nginx

# Verify sudo privileges without executing a command
sudo -l

sudo -l, mevcut kullanıcının çalıştırmasına izin verilen tüm komutları, hangilerinin NOPASSWD olduğu dahil olmak üzere listeler. Bu, bir kural beklendiği gibi davranmadığında birincil hata ayıklama aracınızdır.

Bir root oturumundan belirli bir kullanıcı için geçerli sudoers kurallarını kontrol etmek için:

sudo -l -U username

Bir Web Sunucusu Dağıtım Ardışık Düzeni İçin Pratik Yapılandırma

Aşağıdaki, bir web sunucusundaki dağıtım kullanıcısı için eksiksiz, üretime hazır bir yapılandırmadır — VPS with cPanel‘de veya özel bir LEMP/LAMP yığınında kullanacağınız türden bir kurulum:

1. Dağıtım kullanıcısını oluşturun:

sudo useradd -m -s /bin/bash deploy
sudo passwd deploy

2. sudoers eklenti kuralını oluşturun:

sudo visudo -f /etc/sudoers.d/deploy
# Deployment pipeline: passwordless service management only
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart php8.2-fpm
deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload nginx
deploy ALL=(ALL) NOPASSWD: /usr/bin/chown -R www-data /var/www/html

3. İzinleri ayarlayın ve doğrulayın:

sudo chmod 0440 /etc/sudoers.d/deploy
sudo visudo -c

4. Dağıtım kullanıcısı olarak test edin:

su - deploy
sudo systemctl restart nginx
# Should execute without a password prompt

Bu model, GitHub Actions, GitLab CI, Jenkins veya SSH üzerinden tetiklenen özel bir kabuk betiği kullanıyor olsanız da herhangi bir otomatik dağıtım iş akışına doğrudan uygulanabilir.

Altyapınız yönetilen VPS Control Panels içeriyorsa, panelin kendi sistem kullanıcısının (örn. cpanel, plesk) sudoers’a eklediğiniz kapsamlı NOPASSWD: ALL kurallarından istemeden etkilenmediğini doğrulayın.

Temel Çıkarım Kontrol Listesi

Herhangi bir parolasız sudo yapılandırması uygulamadan önce, bu karar matrisini gözden geçirin:

  • Bu bir insan hesabı mı yoksa hizmet hesabı mı? Hizmet hesapları NOPASSWD‘ı tolere edebilir; insan hesapları bunun yerine timestamp_timeout uzantısını kullanmalıdır.
  • Muafiyeti belirli komutlarla sınırlayabilir misiniz? Her zaman NOPASSWD: ALL yerine NOPASSWD: /path/to/command‘ı tercih edin.
  • SSH erişimi anahtar tabanlı kimlik doğrulamayla güvence altına alındı mı? Değilse, sudo gereksinimlerini gevşetmeden önce önce bunu düzeltin.
  • Sudo etkinliği günlüğe kaydediliyor mu? Henüz mevcut değilse Defaults logfile="/var/log/sudo.log" ekleyin.
  • /etc/sudoers.d/‘da eklenti dosyaları kullanıyor musunuz? Sürdürülebilirlik için /etc/sudoers‘ı doğrudan düzenlemek yerine bunu tercih edin.
  • Sözdizimini doğrulamak için sudo visudo -c çalıştırdınız mı? Bu adımı asla atlamamayın — sudoers’daki bir sözdizimi hatası sizi yönetimsel erişimden tamamen kilitleyebilir.
  • Bant dışı bir kurtarma yönteminiz var mı? Bulut VPS örneklerinde, sudoers değişiklikleri yapmadan önce konsol erişiminizin veya bir kurtarma anlık görüntünüzün olduğundan emin olun.

SSS

Belirli bir betik için parolasız sudo’ya izin vermenin en güvenli yolu nedir?

Sabit bir mutlak yola sahip bir sarmalayıcı betik oluşturun, onu bir sistem dizinine yerleştirin (örn. /usr/local/bin/deploy-restart.sh) ve /etc/sudoers.d/‘da yalnızca o belirli yol için NOPASSWD verin. Bu, argüman enjeksiyonunu önler ve hesap ele geçirilirse hasar yarıçapını sınırlar.

Sudo parola istemini devre dışı bırakmak tüm terminal oturumlarını hemen etkiler mi?

Evet. /etc/sudoers veya /etc/sudoers.d/‘daki dosyalarda yapılan değişiklikler, tüm yeni sudo çağrıları için hemen geçerli olur. Herhangi bir hizmeti yeniden başlatmaya veya oturumu kapatmaya gerek yoktur. Mevcut önbelleğe alınmış kimlik bilgileri sona erene kadar etkilenmez.

sudoers dosyasında sözdizimi hatası yaparsam ne olur?

visudo kullandıysanız, kaydetmeden önce hatayı yakalar ve düzeltmenizi ister. visudo‘ı bir şekilde atladıysanız ve sözdizimi hatası girdiyseniz, sudo tamamen çalışmayı reddeder. Kurtarma, tek kullanıcı modunda önyükleme yapmayı veya dosyayı düzeltmek için bant dışı konsol erişimini kullanmayı gerektirir.

NOPASSWD‘ı bireysel kullanıcı yerine bir gruba uygulayabilir miyim?

Evet. %groupname sözdizimini kullanın: %developers ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx. Bu, her yeni ekip üyesi için sudoers’ı düzenlemeden erişimi ölçekte yönetmeyi kolaylaştırarak kuralı developers grubunun tüm üyelerine uygular.

timestamp_timeout=-1, NOPASSWD: ALL ile aynı şekilde davranır mı?

Hayır. timestamp_timeout=-1, ilk başarılı kimlik doğrulamanın ardından kimlik bilgisinin hiçbir zaman sona ermediği anlamına gelir — ancak bu ilk kimlik doğrulama hâlâ parola gerektirir. NOPASSWD: ALL, ilk çağrı dahil olmak üzere kimlik doğrulamayı tamamen atlar. Birincisi, etkileşimli kullanıcılar için önemli ölçüde daha güvenlidir.

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın