Linux'ta Gruplar: Kullanıcıları Gruplara Ekleme ve Çıkarma

Linux'ta Gruplar: Kullanıcıları Gruplara Ekleme ve Çıkarma

İçindekiler

Bir önceki yazıda tek bir kullanıcının bilgilerini ve parolasını yönettik. Ama gerçek sistemlerde izinler tek tek kullanıcılara verilmez — gruplara verilir.

Sebebi basit: on kişilik bir ekibe bir dizine erişim vereceksiniz. Tek tek kullanıcı yazarsanız on kayıt tutarsınız ve ekibe biri katıldığında hepsini gözden geçirmeniz gerekir. Bir grup açıp izni gruba verirseniz tek kayıt tutarsınız; yeni gelen kişiyi gruba eklemek yeter.

Bu yazıda grup yapısının nasıl çalıştığını, üyelik değiştirmenin doğru yolunu ve tek bir harfi unuttuğunuzda kendinizi sistemden nasıl kilitleyebileceğinizi göreceğiz.

Aşağıdaki çıktılar Debian tabanlı bir test makinesinden alınmış örnek değerlerdir; UID, GID ve kullanıcı adları sizin sisteminizde farklı olacaktır. Komutlar ve kurallar gerçektir.

Birincil Grup ve Ek Gruplar

Linux’ta bir kullanıcının tek bir birincil grubu (primary group) ve istediği kadar ek grubu (supplementary group) olur. Bu ayrım, grup yönetiminin tamamının üstüne kurulduğu temeldir.

En kritik nokta şudur: bu iki üyelik türü farklı dosyalarda tutulur.

flowchart TB
    U["murat<br/>uid=1001"]
    P["birincil grup<br/>murat · gid=1001"]
    A["proje<br/>gid=1500"]
    B["sudo<br/>gid=27"]
    PW["/etc/passwd<br/>satırın 4. alanında GID olarak"]
    GR["/etc/group<br/>grubun üye listesinde adıyla"]
    U --> P
    U --> A
    U --> B
    P -.-> PW
    A -.-> GR
    B -.-> GR
    linkStyle 0 stroke:#16a34a,stroke-width:2.5px
    linkStyle 1,2 stroke:#2563eb,stroke-width:2.5px
    linkStyle 3,4,5 stroke:#94a3b8,stroke-width:1.5px,stroke-dasharray:4 3
    classDef usr fill:#f1f5f9,stroke:#64748b,color:#0f172a
    classDef bir fill:#dcfce7,stroke:#16a34a,color:#14532d
    classDef ek fill:#dbeafe,stroke:#2563eb,color:#1e3a8a
    classDef dosya fill:#fef3c7,stroke:#d97706,color:#78350f
    class U usr
    class P bir
    class A,B ek
    class PW,GR dosya
Birincil grup Ek gruplar
Kaç tane olur? Tam olarak bir tane Sıfır veya daha fazla
Nerede yazılı? /etc/passwd — kullanıcı satırının GID alanı /etc/group — grubun üye listesi
Ne işe yarar? Kullanıcının oluşturduğu dosyalar bu grubu alır Yalnızca erişim verir
Nasıl değişir? usermod -g usermod -aG / gpasswd

Dördüncü satır günlük hayatta en çok hissedilen farktır: murat kullanıcısı bir dosya oluşturduğunda o dosyanın grup sahibi, murat‘ın birincil grubudur. Ek gruplarda olmanız dosyalarınızın grubunu değiştirmez.

Neden herkesin kendi adında bir grubu var?

Debian ve Ubuntu’da adduser ile kullanıcı açtığınızda, aynı adda bir grup da oluştuğunu fark etmişsinizdir. Kullanıcı oluşturma yazısındaki çıktıda tam olarak bunu görüyoruz: Adding new group 'lehisa' (1002).

Buna UPG (User Private Group — kullanıcıya özel grup) denir. Amacı güvenliktir: eğer bütün kullanıcıların birincil grubu ortak bir users grubu olsaydı, herkesin oluşturduğu dosya o ortak grubu alırdı ve varsayılan izinlerle birbirinin dosyalarını okuyabilirlerdi. Herkese kendi grubunu vermek bu sızıntıyı baştan kapatır.

Mevcut Durumu Görüntüleme

Değişiklik yapmadan önce ne olduğunu bilin. Üç komut yeterli.

id — bir kullanıcının bütün üyeliklerini gösterir:

root@debian:~# id murat
uid=1001(murat) gid=1001(murat) groups=1001(murat),27(sudo)

Okunuşu: uid kullanıcı kimliği, gid birincil grup, groups ise birincil grup dâhil tüm gruplar. Yani murat burada iki grupta: kendi UPG’si ve sudo.

groups — aynı bilginin kısa hâli:

root@debian:~# groups murat
murat : murat sudo

getent group — bir grubun kayıtta nasıl durduğunu gösterir:

root@debian:~# getent group sudo
sudo:x:27:murat

Dört alan sırasıyla: grup adı, parola alanı (x, gerçek değer /etc/gshadow dosyasındadır), GID ve üye listesi.

Burada bir tuzak var. Üye listesi yalnızca ek üyeleri içerir. Birincil grubu o grup olan kullanıcılar bu listede görünmez. Bakın:

root@debian:~# getent group murat
murat:x:1001:

Liste boş, ama murat kullanıcısının birincil grubu tam olarak bu grup. “Grubun içinde kimse yok” diye düşünüp grubu silmeye kalkmayın.

Neden getent de cat /etc/group değil? Çünkü getent sistemin kullandığı bütün kaynaklara bakar. Makine bir LDAP veya Active Directory sunucusuna bağlıysa gruplar yerel dosyada değil orada durur; cat onları göremez, getent görür.

Grup Oluşturma, Silme ve Yeniden Adlandırma

root@debian:~# groupadd proje
root@debian:~# getent group proje
proje:x:1500:

groupadd başarılı olduğunda hiçbir şey yazmaz. Sessizlik iyi haberdir; kontrol etmek için getent ile bakın.

Yeniden adlandırmak ve GID değiştirmek groupmod ile olur. Bunları çalışan proje grubumuz üzerinde denemeyelim; sistemde duran eski bir arsiv grubunu kullanalım:

root@debian:~# getent group arsiv
arsiv:x:1400:
root@debian:~# groupmod -n arsiv-2025 arsiv     # adını değiştirir
root@debian:~# groupmod -g 1450 arsiv-2025      # GID'sini değiştirir
root@debian:~# getent group arsiv-2025
arsiv-2025:x:1450:

GID değiştirmek sandığınızdan tehlikelidir. Dosya sistemi grup adını değil numarayı saklar. Grubun GID’sini değiştirdiğinizde o gruba ait mevcut dosyalar eski numarada kalır ve bir anda “sahipsiz” görünür. Değiştirmek zorundaysanız ardından dosyaları da taşımanız gerekir:

find / -gid 1400 -exec chgrp arsiv-2025 {} +

Silmek için groupdel:

root@debian:~# groupdel arsiv-2025

Bir grubun herhangi bir kullanıcının birincil grubu olması silinmesini engeller:

root@debian:~# groupdel murat
groupdel: cannot remove the primary group of user 'murat'

Bu bilinçli bir korumadır: birincil grubu olmayan bir kullanıcı tutarsız bir hesaptır.

Kullanıcıyı Gruba Ekleme — ve -a Tuzağı

Bu yazının en önemli bölümü burası. Ekleme komutu şudur:

root@debian:~# usermod -aG proje murat
root@debian:~# id murat
uid=1001(murat) gid=1001(murat) groups=1001(murat),27(sudo),1500(proje)

-G seçeneği kullanıcının ek grup listesini belirler. -a ise append, yani ekle demektir.

-a olmadan -G, listeyi eklemez — listenin tamamının yerine geçer.

Ne demek olduğunu görelim. Aynı kullanıcıda -a‘yı unutalım:

root@debian:~# usermod -G proje murat
root@debian:~# id murat
uid=1001(murat) gid=1001(murat) groups=1001(murat),1500(proje)

27(sudo) gitti. Kullanıcı sudo yetkisini kaybetti. Bu makinede yönetici erişimi olan tek hesap murat idiyse ve root parolası bilinmiyorsa, sisteme yönetici olarak giremezsiniz. Kurtarmak için konsol erişimi veya kurtarma modu gerekir.

Toparlamak yine tek komut, yeter ki yetkiniz kalmış olsun:

root@debian:~# usermod -aG sudo murat
root@debian:~# id murat
uid=1001(murat) gid=1001(murat) groups=1001(murat),27(sudo),1500(proje)

Bu yüzden pratik bir alışkanlık edinin: usermod ile grup eklerken -aG‘yi tek bir kalıp gibi yazın, -G‘yi tek başına yalnızca “bu kullanıcının ek grupları tam olarak şunlar olsun” demek istediğinizde kullanın.

Riski tamamen ortadan kaldırmanın yolu ise başka bir komut kullanmaktır. Ekibin ikinci üyesi elif‘i bu komutla ekleyelim:

root@debian:~# gpasswd -a elif proje
Adding user elif to group proje

gpasswd -a her zaman ekler, hiçbir şeyi silmez ve ne yaptığını yazar. Diğer üyeliklere dokunmadığı için betiklerde ve otomasyonda daha güvenlidir.

Komut Davranış Ne zaman
usermod -aG grup kullanici Ek gruplara ekler Elle iş yaparken, en yaygın
usermod -G g1,g2 kullanici Ek grup listesini sıfırlayıp yazar Yalnızca tam listeyi dayatmak istiyorsanız
gpasswd -a kullanici grup Ekler, asla silmez Betik ve otomasyonda tercih edin
usermod -g grup kullanici Birincil grubu değiştirir Ayrı bir iş — aşağıya bakın

Son satıra dikkat: -g ile -G bir harf farkla tamamen farklı iki iştir. Küçük -g birincil grubu değiştirir, büyük -G ek gruplarla ilgilenir.

Kullanıcıyı Gruptan Çıkarma

root@debian:~# gpasswd -d elif proje
Removing user elif from group proje

Debian ve Ubuntu’da aynı işi deluser de yapar:

root@debian:~# deluser elif proje

deluser her dağıtımda bulunmaz; gpasswd -d taşınabilir olduğu için betiklerde onu tercih edin.

Sonucu mutlaka doğrulayın:

root@debian:~# id elif
uid=1003(elif) gid=1003(elif) groups=1003(elif)

Birincil Grubu Değiştirme

Bunun için yedek adlı bir servis hesabını örnek alalım:

root@debian:~# id yedek
uid=1002(yedek) gid=1002(yedek) groups=1002(yedek)
root@debian:~# usermod -g proje yedek
root@debian:~# id yedek
uid=1002(yedek) gid=1500(proje) groups=1500(proje)

Çıktıyı dikkatle okuyun: uid değişmedi. usermod -g kullanıcının kimliğine dokunmaz, yalnızca gid alanını, yani birincil grubu değiştirir. Eski birincil grup olan yedek (1002) listeden düştü, çünkü kullanıcı o gruba yalnızca birincil grubu olduğu için üyeydi.

Bunu yaparken iki şeyi hesaba katın. Birincisi, kullanıcının bundan sonra oluşturacağı dosyalar yeni grubu alır — eskiden oluşturduğu dosyalar değişmez. İkincisi, eski birincil grup artık boşta kalır ve UPG düzenini kırarsınız.

Birincil grubu değiştirmek, ekip erişimi vermenin doğru yolu değildir. Ekip erişimi için ek grup kullanın. Birincil grubu yalnızca burada olduğu gibi, bir servis hesabının ürettiği dosyaların belirli bir grupta doğması gerektiğinde değiştirin.

Değişiklik Ne Zaman Etkili Olur?

Yeni eklediğiniz grup hemen çalışmıyorsa panik yapmayın. Grup üyelikleri kullanıcının kimlik bilgilerine oturum açarken yazılır. Açık olan bir oturum eski üyeliklerle çalışmaya devam eder.

Ve burada, bu blogda sık tekrarlanan bir tuzağın küçük bir örneği var: yanlış komutla doğrulama yaparsanız hiçbir şey öğrenmezsiniz.

murat@debian:~$ id murat
uid=1001(murat) gid=1001(murat) groups=1001(murat),27(sudo),1500(proje)

murat@debian:~$ id
uid=1001(murat) gid=1001(murat) groups=1001(murat),27(sudo)

İki komut aynı makinede, aynı saniyede, farklı cevap veriyor. Sebebi şu: id murat kullanıcı veritabanına bakar, orada proje yazıyor. Argümansız id ise o anki oturumun gerçek yetkilerini çekirdekten okur; o oturum proje grubu eklenmeden önce açıldığı için orada proje yok.

Yani dizine erişip erişemeyeceğinizi belirleyen şey id murat çıktısı değil, argümansız id çıktısıdır.

Çözüm oturumu tazelemektir — çıkıp yeniden girmek en temizidir. Hemen denemek isterseniz:

murat@debian:~$ newgrp proje

newgrp, belirtilen grubu birincil grup yapan yeni bir kabuk başlatır. Geçicidir; exit ile çıktığınızda eski kabuğunuza dönersiniz.

Grafik oturumlarda çıkıp girmek genelde yetmez, oturumu tamamen kapatmak gerekir. Sunucularda ise SSH bağlantısını kapatıp yeniden bağlanmak yeterlidir.

Pratik Senaryo: Ekip İçin Paylaşımlı Dizin

Bütün parçaları birleştirelim. proje ekibinin ortak çalışacağı bir dizin kuracağız. Grubu yukarıda oluşturmuş, murat‘ı da eklemiştik; elif‘i çıkarma örneğinde silmiştik, onu geri alalım:

root@debian:~# gpasswd -a elif proje
Adding user elif to group proje
root@debian:~# getent group proje
proje:x:1500:murat,elif
root@debian:~# mkdir /srv/proje
root@debian:~# chgrp proje /srv/proje
root@debian:~# chmod 2775 /srv/proje

Sonucu okuyalım:

root@debian:~# ls -ld /srv/proje
drwxrwsr-x 2 root proje 4096 Aug  9 10:12 /srv/proje

İzin dizesindeki grup bölümünde x yerine s var. Bu setgid bitidir ve chmod komutundaki baştaki 2 ile geldi. Yaptığı iş şudur: bu dizinde oluşturulan her yeni dosya, oluşturan kişinin birincil grubunu değil dizinin grubunu (proje) alır.

Setgid olmasaydı murat‘ın oluşturduğu dosya murat grubuna ait olurdu ve elif onu düzenleyemezdi — grup izni işe yaramazdı. Dosya izinleri yazısında anlatılan rwx mantığının, grup yönetimiyle birleştiği yer tam olarak burasıdır.

Doğrulayalım. murat oturumunu tazeledikten sonra:

murat@debian:/srv/proje$ touch rapor.txt
murat@debian:/srv/proje$ ls -l rapor.txt
-rw-rw-r-- 1 murat proje 0 Aug  9 10:15 rapor.txt

Dosyanın sahibi murat, grubu ise proje. elif de proje grubunda olduğu ve grup izni rw olduğu için bu dosyayı düzenleyebilir. Hedeflenen buydu.

Sistem Grupları: Üyelik Vermeden Önce Düşünün

Bazı grupların üyeliği sıradan bir erişim değil, doğrudan yetki anlamına gelir:

Grup Ne verir
sudo (Debian/Ubuntu) · wheel (RHEL/Fedora) sudo ile komut çalıştırma hakkı
docker Pratikte tam root yetkisi
adm Sistem günlüklerini okuma
disk Blok aygıtlara doğrudan erişim — dosya izinlerini tamamen atlar

docker satırı özellikle önemli ve sıkça hafife alınır. Docker soketine erişebilen bir kullanıcı, kök dosya sistemini bağlayan bir konteyner başlatabilir; bu da o kullanıcının parola sorulmadan root olabilmesi demektir. Birine docker grubu vermek, sudo vermekle aynı ağırlıkta bir karardır — üstelik sudo‘nun aksine günlüğe düzgün düşmez.

Genel kural: bir kullanıcıya sistem grubu eklemeden önce “bu grup ne yapabiliyor?” sorusunu cevaplayın. GID’si 1000’in altındaki gruplar sistem gruplarıdır ve neredeyse hepsinin bir yetki karşılığı vardır.

Özet Komut Tablosu

İş Komut
Üyelikleri görme id kullanici · groups kullanici
Grup kaydını görme getent group grup
Grup oluşturma groupadd grup
Grup adı / GID değiştirme groupmod -n yeni grup · groupmod -g GID grup
Grup silme groupdel grup
Ek gruba ekleme usermod -aG grup kullanici · gpasswd -a kullanici grup
Ek gruptan çıkarma gpasswd -d kullanici grup · deluser kullanici grup
Birincil grubu değiştirme usermod -g grup kullanici
Oturumu tazelemeden denemek newgrp grup

Sonuç

Grup yönetiminin tamamı üç cümlede toplanır:

  • Birincil grup bir tanedir ve oluşturduğunuz dosyaların grubunu belirler; ek gruplar yalnızca erişim verir. İkisi farklı dosyalarda tutulur, farklı komutlarla değişir.
  • usermod -G, -a olmadan mevcut üyelikleri siler. Elle çalışırken -aG‘yi tek kalıp olarak yazın, betikte gpasswd -a kullanın.
  • Değişiklik açık oturumlara yansımaz. id kullanici ile id farklı şeyler söyler; erişimi belirleyen ikincisidir.

Yol haritasının bu adımıyla kullanıcı yönetimi bölümünü tamamlamış olduk. Serinin tamamına ve sıradaki konulara GNU/Linux Öğrenme Yolculuğu sayfasından ulaşabilirsiniz.

Paylaş :

İlgili Yazılar

Linux'da Yeni Kullanıcılar Oluşturma ve Silme

Linux'da Yeni Kullanıcılar Oluşturma ve Silme

Linux işletim sistemi, çok sayıda kullanıcı hesabının oluşturulmasını ve yönetilmesini kolaylaştıran güçlü bir kullanıcı yönetim sistemine sahiptir. Bu makalede, Linux’ta yeni kullanıcılar oluşturmanın ve gerektiğinde kullanıcıları nasıl sileceğinizin ayrıntılı bir rehberini sunacağız.

Linux'da Dosya İçeriğini Görüntüleme: Less, Tail, Head Komutları

Linux'da Dosya İçeriğini Görüntüleme: Less, Tail, Head Komutları

Linux işletim sistemi, dosya içeriğini görüntülemek ve incelemek için kullanabileceğiniz çeşitli komutlar sunar. Bu komutlar, hem metin dosyalarını okumak hem de büyük dosyaları hızlı bir şekilde tarayabilmek için oldukça kullanışlıdır. Bu yazıda, Linux‘da dosya içeriğini görüntülemek için sıkça kullanılan “cat”, “less”, “tail” ve “head” komutlarını öğreneceksiniz.

Dosya Türleri ve İzinleri: Linux Dosya Yönetiminin Temelleri

Dosya Türleri ve İzinleri: Linux Dosya Yönetiminin Temelleri

Linux işletim sistemi, dosyaları ve dizinleri düzenlerken her birine özgü izinler ve türler kullanır. Bu, kullanıcıların verilere erişimini düzenlemek ve güvenliği sağlamak için önemlidir. Bu makalede, Linux’ta dosya türleri ve izinlerinin nasıl çalıştığını ve bunları nasıl yönetebileceğinizi öğreneceksiniz.