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
08.10.2024

Linux’ta Bir Kullanıcıyı Root Grubuna Nasıl Eklenir ve Ayrıcalıklar Nasıl Verilir

Linux’ta yükseltilmiş ayrıcalıklar vermek, bir kullanıcı hesabına süper kullanıcı düzeyinde erişim gerektiren komutları çalıştırma yeteneği kazandırmak anlamına gelir — bunu ya `sudo` ya da `wheel` gibi ayrıcalıklı bir gruba ekleyerek, ya da `/etc/sudoers` dosyasında açıkça girişler yapılandırarak gerçekleştirebilirsiniz. En güvenli ve denetlenebilir yöntem her zaman `sudo` tabanlı yetkilendirmedir; doğrudan `root` grubuna üyelik değil.

Bu kılavuz her pratik yolu kapsamaktadır: kullanıcıları `sudo` veya `wheel` grubuna ekleme, `sudoers` dosyasını `visudo` ile düzenleme, ayrıcalıkları belirli komutlarla sınırlama, erişimi temiz bir şekilde iptal etme ve doğrudan `root` grubu üyeliğinin neden üretim ortamlarında bir güvenlik açığı olduğunu anlama.

Linux Ayrıcalık Modelini Anlamak

Linux, ayrıcalıklı ve ayrıcalıksız yürütme bağlamları arasında katı bir ayrım uygular. Her işlem bir UID (Kullanıcı Kimliği) altında çalışır ve UID 0 — `root` kullanıcısı — çekirdek tarafından uygulanan neredeyse tüm izin denetimlerini atlar. Bu yalnızca bir kural değildir; syscall düzeyinde uygulanır.

Anlamanız gereken temel ayrıcalık mekanizmaları:

  • Root kullanıcısı (UID 0): Tüm dosyalara, aygıtlara, çekirdek parametrelerine ve sistem çağrılarına sınırsız erişim. Root olarak çalıştırılan yanlış yapılandırılmış tek bir komut, çalışan bir sisteme geri dönüşü olmayan zararlar verebilir.
  • sudo: İzin verilen bir kullanıcının, `/etc/sudoers` dosyasında tanımlanan politikaya tabi olarak başka bir kullanıcı (genellikle root) olarak komut çalıştırmasına olanak tanıyan bir setuid ikili dosyasıdır. Her çağrı syslog veya journald’a kaydedilir.
  • `sudo` grubu (Debian/Ubuntu): Bu grubun üyelerine, `/etc/sudoers` dosyasındaki varsayılan bir kural aracılığıyla tam sudo erişimi verilir.
  • `wheel` grubu (RHEL/CentOS/Fedora/AlmaLinux): Red Hat tabanlı dağıtımlarda `sudo` grubunun işlevsel eşdeğeri.
  • `root` grubu (GID 0): Buradaki üyelik, root düzeyinde komut yürütme yetkisi VERMEZ. Yalnızca `root` grubunun grup okuma veya grup yazma izinlerine sahip olduğu dosyalara erişim sağlar. Bu sıkça yanlış anlaşılmaktadır.

Root Grubu ile sudo Grubu: Kritik Bir Ayrım

Özellik`root` grubu (GID 0)`sudo` / `wheel` grubu
UID 0 yürütmesi sağlarHayırEvet (sudo aracılığıyla)
Root’a ait grup tarafından okunabilir dosyaların okunmasına izin verirEvetHayır (aynı zamanda root değilse)
Denetim izinde kayıtlıHayırEvet (syslog/journald)
Parola onayı gerektirirHayırEvet (varsayılan olarak)
Yönetici yetkilendirmesi için önerilirHayırEvet
Risk düzeyiYüksek (sessiz dosya erişimi)Kontrollü
Tipik kullanım durumuEski kurulumlar, belirli dosya ACL’leriTüm modern yönetici yetkilendirmeleri

Bir kullanıcıyı `root` grubuna eklemek onu root yapmaz. Yanlış yapılandırılmış bir sistemde hassas yapılandırma dosyalarını, özel anahtarları veya cron dizinlerini içerebilecek `root` grubunun izinlere sahip olduğu herhangi bir dosyaya sessizce okuma/yazma erişimi verir. Bu nedenle tehlikelidir ve nadiren doğru çözümdür.

Ön Koşullar

Devam etmeden önce aşağıdakileri doğrulayın:

  • Root veya sudo ayrıcalıklarıyla aktif bir oturumunuz var.
  • Hedef kullanıcı hesabı zaten mevcut. Mevcut değilse oluşturun:

“`bash

sudo adduser username

“`

Minimal sistemlerde veya RHEL tabanlı dağıtımlarda, açık seçeneklerle `useradd` kullanın:

“`bash

sudo useradd -m -s /bin/bash username

sudo passwd username

“`

  • Dağıtımınızın ayrıcalıklı grup adını biliyorsunuz (Debian/Ubuntu’da `sudo`, RHEL/CentOS/AlmaLinux/Fedora’da `wheel`).

Bir VPS Hosting ortamı yönetiyorsanız, bu adımlar ister bare metal sunucuda ister sanal makinede olun aynı şekilde geçerlidir — Linux ayrıcalık modeli işletim sistemi düzeyindedir, hipervizör düzeyinde değil.

Adım 1: Kullanıcıyı sudo veya wheel Grubuna Ekleme

Bu, tüm modern Linux dağıtımlarında yönetimsel erişim vermek için doğru ve önerilen yöntemdir.

Debian, Ubuntu ve Türevlerinde

`sudo` grubu, `/etc/sudoers` dosyasında tam sudo erişimi veren bir kuralla önceden yapılandırılmıştır:

“`bash

sudo usermod -aG sudo username

“`

`-aG` bayrağı kritiktir: `-a` ekle anlamına gelir (mevcut grup üyeliklerini kaldırma) ve `-G` ek grubu belirtir. `-a` atlanması, tüm ek grupların yalnızca belirtilen grupla değiştirilmesine neden olur — yaygın ve yıkıcı bir hatadır.

RHEL, CentOS, AlmaLinux, Rocky Linux ve Fedora’da

Bunun yerine `wheel` grubunu kullanın:

“`bash

sudo usermod -aG wheel username

“`

Eski CentOS 6 sistemlerinde, `wheel` grubunun `/etc/sudoers` dosyasındaki kuralı yorum satırı haline getirilmiş olabilir. Etkin olduğunu doğrulayın:

“`bash

sudo grep -i wheel /etc/sudoers

“`

Şuna benzer yorum satırı olmayan bir satır görmelisiniz:

“`

%wheel ALL=(ALL) ALL

“`

Yorum satırı haline getirilmişse, `visudo` kullanarak yorumu kaldırın (Adım 2’de ele alınmaktadır).

Grup Üyeliğini Doğrulama

Grup değişiklikleri bir sonraki girişte geçerli olur. Oturumu kapatmadan hemen doğrulamak için:

“`bash

groups username

“`

Ya da doğrudan `/etc/group` dosyasını inceleyin:

“`bash

grep -E '^sudo:|^wheel:' /etc/group

“`

Yeni grubu yeniden giriş yapmadan mevcut oturuma uygulamak için kullanıcı şunu çalıştırabilir:

“`bash

newgrp sudo

“`

`newgrp` komutunun güncellenmiş grup bağlamıyla yeni bir kabuk başlattığını unutmayın — üst oturumu değiştirmez.

Adım 2: sudoers Dosyası Aracılığıyla Ayrıntılı Ayrıcalıkları Yapılandırma

Üretim sistemleri için tam kısıtlamasız sudo erişimi çoğunlukla fazla kapsamlıdır. `/etc/sudoers` dosyası, ayrıcalıkları komuta, hedef kullanıcıya, ana bilgisayara ve parola istemleriyle veya istemi olmadan tam olarak kapsamlandırmanıza olanak tanır.

`/etc/sudoers` dosyasını her zaman `visudo` kullanarak düzenleyin. Bu araç, dosyayı eş zamanlı düzenlemelere karşı kilitler ve kaydetmeden önce sözdizimi doğrulaması yapar. `/etc/sudoers` dosyasındaki bir sözdizimi hatası, sistemdeki her kullanıcının sudo erişimini engelleyebilir — `visudo` bunu önler.

“`bash

sudo visudo

“`

Belirli Bir Kullanıcıya Tam sudo Erişimi Verme

Bu satırı dosyanın sonuna ekleyin (veya `/etc/sudoers.d/` altındaki bir drop-in dosyasına):

“`

username ALL=(ALL:ALL) ALL

“`

Sözdiziminin açıklaması:

  • `username` — bu kuralın uygulandığı hesap.
  • İlk `ALL` — tüm ana bilgisayar adlarında geçerlidir (yapılandırma yönetimi aracılığıyla dağıtılan paylaşılan sudoers dosyaları için geçerlidir).
  • `(ALL:ALL)` — kullanıcı komutları herhangi bir kullanıcı (ilk `ALL`) ve herhangi bir grup (ikinci `ALL`) olarak çalıştırabilir.
  • Son `ALL` — tüm komutlara izin verilir.

Yalnızca Belirli Komutlara Erişim Verme (En Az Ayrıcalık)

Üretimde kullanmanız gereken desen budur. Örneğin, bir kullanıcının yalnızca Nginx’i yeniden başlatmasına izin vermek için:

“`

username ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx

“`

Ya da parola onayıyla belirli bir servisi yönetmeye izin vermek için:

“`

username ALL=(root) /usr/bin/systemctl restart nginx, /usr/bin/systemctl stop nginx

“`

Tuzak: sudoers kurallarında her zaman mutlak yollar kullanın. Göreli yollar sudo tarafından reddedilir ve sessizce başarısız olur ya da hatalara neden olur.

/etc/sudoers.d/ İçindeki Drop-in Dosyalarını Kullanma

Ana `sudoers` dosyasını doğrudan düzenlemek yerine, kullanıcıya özgü kuralları `/etc/sudoers.d/` dizinine yerleştirin:

“`bash

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

“`

Kuralınızı ekleyin, kaydedin ve dosyanın doğru izinlere sahip olduğunu doğrulayın:

“`bash

sudo chmod 440 /etc/sudoers.d/username

“`

Bu yaklaşım, Ansible, Puppet ve Chef gibi yapılandırma yönetimi araçlarıyla temiz bir şekilde entegre olur ve ayrıcalık denetimini önemli ölçüde kolaylaştırır.

NOPASSWD Erişimi Verme (Dikkatli Kullanın)

Etkileşimli istemler olmadan ayrıcalıklı komutlar çalıştırması gereken otomatik betikler veya servis hesapları için:

“`

deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart myapp

“`

Güvenlik notu: `NOPASSWD` kimlik doğrulama engelini ortadan kaldırır. Yalnızca güçlü SSH anahtar tabanlı kimlik doğrulamasına sahip hesaplarda sıkı kapsamlı komutlar için kullanın. Üretim sunucusunda hiçbir zaman `NOPASSWD: ALL` vermeyin.

Adım 3: Yapılandırmayı Test Etme

Değişiklikler yaptıktan sonra, mevcut ayrıcalıklı oturumunuzu sonlandırmadan önce test edin — bir hata yaptıysanız, düzeltmek için hâlâ mevcut oturumunuz var.

Hedef kullanıcıya geçin ve doğrulayın:

“`bash

su – username

sudo whoami

“`

Beklenen çıktı: `root`

Kullanıcının çalıştırmasına izin verilen tüm komutları listelemek için:

“`bash

sudo -l -U username

“`

Bu temel bir tanılama komutudur. Onlar olarak giriş yapmanızı gerektirmeden herhangi bir kullanıcı için geçerli sudoers politikasını gösterir.

Adım 4: Kullanıcıyı root Grubuna Ekleme (Açık Uyarı)

Belirli bir eski uygulama veya dosya izni gereksinimi gerçekten `root` grubu üyeliği gerektiriyorsa — ve ACL’ler ile yetenek kümeleri gibi alternatifleri tükettiyseniz — komut şudur:

“`bash

sudo usermod -aG root username

“`

Bunun gerçekte ne yaptığı: Kullanıcı, `root` grubunun okuma veya yazma izinlerine sahip olduğu dosyalara erişim kazanır. Varsayılan bir Linux kurulumunda bu, dağıtıma özgü paketleme kararlarına bağlı olarak `/etc/`, `/root/` ve potansiyel olarak `/var/` içindeki dosyaları kapsar.

Bunun yapmadığı şey: Komutları root olarak çalıştırma yeteneği vermez. `sudo`’ı etkinleştirmez. Kullanıcının UID’sini değiştirmez.

Önerilen alternatif: Kullanıcıyı `root` grubuna eklemek yerine belirli bir dosyaya erişim vermek için POSIX ACL kullanın:

“`bash

sudo setfacl -m u:username:r /etc/specific-config-file

“`

Bu, herhangi bir grup düzeyinde maruz kalma olmaksızın tam olarak bir dosyaya okuma erişimi verir.

Adım 5: Ayrıcalıkları İptal Etme

Ayrıcalık iptali anında ve doğrulanabilir olmalıdır. Kullanıcının oturumu kapatmasına güvenmeyin — grup üyeliğini kaldırın ve doğrulayın.

sudo Grubundan Kaldırma (Debian/Ubuntu)

“`bash

sudo deluser username sudo

“`

Ya da taşınabilir `gpasswd` yöntemiyle (tüm dağıtımlarda çalışır):

“`bash

sudo gpasswd -d username sudo

“`

wheel Grubundan Kaldırma (RHEL tabanlı)

“`bash

sudo gpasswd -d username wheel

“`

sudoers.d Drop-in Dosyasını Kaldırma

“`bash

sudo rm /etc/sudoers.d/username

“`

İptali Hemen Doğrulama

“`bash

sudo -l -U username

“`

Çıktı, eşleşen giriş göstermemeli veya kullanıcının sudo çalıştıramayacağını açıkça belirtmelidir.

Uç durum: Kullanıcının aktif bir oturumu varsa, grup üyeliği değişiklikleri oturumu kapatıp yeniden açana kadar o oturumu etkilemez. Anında etkili olmak için aktif oturumlarını sonlandırın:

“`bash

sudo pkill -u username

“`

Birden fazla eş zamanlı yöneticiye sahip Dedicated Servers çalıştıran sistemlerde, ayrılan bir ekip üyesinin erişimini iptal ederken bu adım zorunludur.

Adım 6: sudo Kullanımını Denetleme

Her `sudo` çağrısı kaydedilir. systemd tabanlı sistemlerde:

“`bash

sudo journalctl -u sudo

“`

Ya da geleneksel syslog aracılığıyla:

“`bash

sudo grep sudo /var/log/auth.log # Debian/Ubuntu

sudo grep sudo /var/log/secure # RHEL/CentOS

“`

Tipik bir günlük girişi şöyle görünür:

“`

Jan 15 14:32:01 hostname sudo: username : TTY=pts/0 ; PWD=/home/username ; USER=root ; COMMAND=/bin/systemctl restart nginx

“`

Bu, kaynak kullanıcıyı, terminali, çalışma dizinini, hedef kullanıcıyı ve tam komutu kaydeder. Bu denetim izi, olay müdahalesi ve uyumluluk gereksinimleri için son derece değerlidir.

Gelişmiş denetim için, `/etc/sudoers` dosyasına ekleyerek `sudo` günlüğünü özel bir günlük dosyasına yönlendirmeyi düşünün:

“`

Defaults logfile="/var/log/sudo.log"

Defaults log_input, log_output

“`

`log_input` ve `log_output`, her sudo oturumunun tam G/Ç’sini kaydeder — özellikle ayrıcalıklı bir kullanıcının oturum sırasında gerçekte ne yaptığını araştırırken kullanışlıdır.

Güvenlik Sertleştirme: Temel sudo Yapılandırmasının Ötesinde

VPS with cPanel veya özel Linux yığınlarını yöneten yöneticiler bu ek kontrolleri uygulamalıdır:

sudo’yu belirli TTY’lerle kısıtlama:

“`

Defaults requiretty

“`

Bu, sudo’nun açıkça izin verilmedikçe etkileşimli olmayan betiklerden veya cron işlerinden çağrılmasını engeller.

sudo oturum zaman aşımı ayarlama:

“`

Defaults timestamp_timeout=5

“`

Bu, kimlik bilgisi önbelleğini 5 dakikaya ayarlar. `0` olarak ayarlamak, her sudo çağrısı için parola gerektirir.

sudo’yu belirli kaynak IP’lerle sınırlama (çok kullanıcılı sunucular için):

“`

username 192.168.1.0/24=(ALL) ALL

“`

Ortam temizleme ile `sudo` kullanma:

Varsayılan olarak, sudo ortamı güvenli bir duruma sıfırlar. sudoers dosyanızda `env_reset`’ın etkin olduğunu doğrulayın:

“`

Defaults env_reset

“`

Root SSH girişini devre dışı bırakma: sudo yapılandırıldıktan sonra, `/etc/ssh/sshd_config` dosyasında SSH aracılığıyla doğrudan root girişini devre dışı bırakın:

“`

PermitRootLogin no

“`

Bu, tüm yönetimsel eylemleri anonim root girişleri yerine denetlenebilir sudo oturumları üzerinden zorlar. Bu, Shared Web Hosting yığınları veya çok kiracılı ortamlar çalıştıranlar dahil internete açık herhangi bir sunucu için temel bir gerekliliktir.

Dağıtımlar Genelinde Ayrıcalık Yönetimi: Hızlı Başvuru

DağıtımAyrıcalıklı GrupVarsayılan sudoers Kuralı Etkinsudo için Paket
Ubuntu 20.04+`sudo`Evet`sudo` (önceden yüklü)
Debian 11+`sudo`Evet`sudo` (manuel olarak yükleyin)
CentOS 7/8`wheel`Evet`sudo` (önceden yüklü)
AlmaLinux 8/9`wheel`Evet`sudo` (önceden yüklü)
Rocky Linux 8/9`wheel`Evet`sudo` (önceden yüklü)
Fedora 38+`wheel`Evet`sudo` (önceden yüklü)
Arch Linux`wheel`Hayır (yorumu kaldırılmalı)`sudo` (manuel olarak yükleyin)
openSUSE`wheel`Evet`sudo` (önceden yüklü)

Arch Linux’ta `sudo` yükledikten sonra, grup üyeliğinin herhangi bir etkisi olmadan önce `visudo` aracılığıyla `/etc/sudoers` dosyasındaki `%wheel` satırının yorumunu açıkça kaldırmanız gerekir.

Pratik Karar Matrisi: Hangi Yöntemi Kullanmalı

SenaryoÖnerilen Yaklaşım
Geliştirici, bir geliştirme VPS’inde tam yönetici erişimine ihtiyaç duyuyor`sudo`/`wheel` grubuna ekle
Servis hesabının bir arka plan programını yeniden başlatması gerekiyorO komutla kapsamlandırılmış `NOPASSWD` içeren `sudoers` girişi
Bir yüklenici için geçici yönetici erişimi`sudoers.d` drop-in dosyası (kaldırması kolay)
Eski uygulama root grubu dosya erişimi gerektiriyorBelirli dosyalarda POSIX ACL (`setfacl`)
CI/CD hattının ayrıcalıklı dağıtım komutlarına ihtiyacı varKapsamlı `NOPASSWD` kurallarına sahip özel servis hesabı
Paylaşılan hosting ortamı, birden fazla kullanıcısudo verme; kontrol paneli rol tabanlı erişimini kullan
Tam denetim izi gerektiren uyumluluk ortamı`log_input`/`log_output` etkin sudo

Temel Kontrol Listesi

Herhangi bir Linux sisteminde ayrıcalık yükseltmeyi tamamlanmış saymadan önce aşağıdakilerin her birini doğrulayın:

  • [ ] Kullanıcı `sudo` (Debian/Ubuntu) veya `wheel` (RHEL tabanlı) grubuna eklendi — doğrudan `root` grubuna değil.
  • [ ] Tüm `/etc/sudoers` düzenlemeleri için `visudo` kullanıldı — asla düz metin düzenleyici değil.
  • [ ] Ayrıcalık kapsamı mümkün olduğunca dardır — uygulanabilir olduğunda `ALL` yerine belirli komutlar.
  • [ ] `sudo -l -U username`, tam olarak amaçlanan izinleri ve başka hiçbir şeyi doğrular.
  • [ ] İnternete açık sunucularda `PermitRootLogin no`, `/etc/sshd_config` dosyasında ayarlandı.
  • [ ] sudo denetim günlüğü etkin ve günlük dosyaları izleniyor veya bir SIEM’e iletiliyor.
  • [ ] `pkill -u` ile aktif oturumların sonlandırılması dahil bir iptal prosedürü belgelendi ve test edildi.
  • [ ] `/etc/sudoers.d/` içindeki drop-in dosyaları `440` izinlerine sahip — dünya tarafından okunabilir sudoers dosyaları sudo tarafından reddedilir.
  • [ ] `timestamp_timeout`, güvenlik politikanıza uygun bir değere ayarlandı.
  • [ ] Ayrıcalık izinleri belirlenmiş bir takvimde (aylık veya erişim inceleme döngüsü başına) gözden geçirildi.

Birden fazla sunucuyu yöneten ekipler için — ister VPS Control Panels üzerinde ister bare metal üzerinde — bu yapılandırmayı Ansible veya benzeri araçlar aracılığıyla merkezileştirmek tutarlılığı sağlar ve manuel sapmaları ortadan kaldırır.

Sıkça Sorulan Sorular

Kullanıcıyı root grubuna eklemek ile sudo erişimi vermek arasındaki fark nedir?

Kullanıcıyı `root` grubuna (GID 0) eklemek, o gruba ait dosyalara erişim sağlar — komutları root olarak çalıştırmaya izin vermez. sudo erişimi vermek (`sudo` veya `wheel` grubu ya da sudoers girişi aracılığıyla), kullanıcının politika ve parola kimlik doğrulamasına tabi olarak UID 0 ayrıcalıklarıyla komut çalıştırmasına olanak tanır.

Neden `visudo` kullanmalıyım, nano veya vim ile `/etc/sudoers` dosyasını doğrudan düzenlemek yerine?

`visudo`, eş zamanlı düzenlemeleri önlemek için dosyayı kilitler ve kaydetmeden önce sözdizimi doğrulaması yapar. Doğrudan `/etc/sudoers` dosyasına kaydedilen bir sözdizimi hatası, sudo’yu tüm kullanıcılar için tamamen işlevsiz hale getirebilir ve sisteme yönetimsel erişimi tamamen engelleyebilir.

Belirli bir komut için parola gerektirmeden sudo erişimini nasıl verebilirim?

`/etc/sudoers` dosyasına veya bir drop-in dosyasına tam komutla kapsamlandırılmış bir `NOPASSWD` kuralı ekleyin: `username ALL=(ALL) NOPASSWD: /path/to/command`. Her zaman mutlak yol kullanın ve bunu gereken minimum komutlarla kısıtlayın.

Grup üyeliği değişiklikleri oturum açmış kullanıcılar için hemen geçerli olur mu?

Hayır. Bir kullanıcının ek grupları giriş sırasında değerlendirilir. Halihazırda oturum açmış bir kullanıcı, yeni bir oturum başlatana kadar grup tabanlı sudo erişimi kazanmaz veya kaybetmez. Anında iptali zorlamak için `sudo pkill -u username` kullanarak aktif oturumlarını sonlandırın.

Onlar olarak giriş yapmadan bir kullanıcının şu anda sahip olduğu sudo izinlerini nasıl doğrulayabilirim?

Root veya başka bir sudo kullanıcısı olarak `sudo -l -U username` komutunu çalıştırın. Bu komut, izin verilen tüm komutlar, NOPASSWD bayrakları ve geçerli varsayılanlar dahil olmak üzere belirtilen kullanıcı için tam geçerli sudoers politikasını görüntüler.

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