Ders 14 / 20
Sahiplik Değiştirme
Sahip ve grup değiştirme komutları, sahip devrinin neden ayrıcalık gerektirdiği, özyinelemeli değişiklikte sembolik bağ davranışı ve ağacın gruba açılması.
İçindekiler
İzinler dosyanın sahibine ve grubuna göre uygulanıyorsa, sahiplik ve grubun kendisi nasıl belirlenir? Önceki dersin tablosu eksikti: dokuz bit kimin ne yapabileceğini söylüyordu ama “kim” sorusunun yanıtı dosyanın üstverisinde duran iki sayıydı ve bu sayıların nasıl değiştiği açıklanmadı.
Bu ders o iki alanı değiştiren komutları ve —daha önemlisi— bunları kimin değiştirebileceğini ele alır. Yetki kısıtı keyfi değildir; kaldırılması durumunda izin modelinin kendisi anlamsızlaşır.
Sahip Devri Ayrıcalık İster
Sıradan bir kullanıcı, sahibi olduğu dosyayı bile başkasına devredemez:
$ ls -l veri/ham/olcum-01.csv -rw-r--r-- 1 ogrenci ogrenci 61 Jul 26 19:17 veri/ham/olcum-01.csv $ chown yedek veri/ham/olcum-01.csv chown: changing ownership of 'veri/ham/olcum-01.csv': Operation not permitted
Kısıtın iki gerekçesi vardır.
Disk kotası. Kullanılan alan dosya sahibine yazılır. Sahip devri serbest olsaydı, kotasını dolduran bir kullanıcı dosyalarını başkasının üzerine geçirerek kotayı sıfırlardı. Devir bu nedenle yalnızca kök kullanıcıya bırakılmıştır.
Yetki devri. Özel izin bitleri dersinde görüleceği gibi, bir dosya çalıştırıldığında sahibinin yetkileriyle çalışacak biçimde işaretlenebilir. Sahip devri serbest olsaydı, böyle bir dosya hazırlayıp sahipliğini ayrıcalıklı bir hesaba geçirmek yetki yükseltmenin en kısa yolu olurdu.
Kısıtın yönü tek taraflıdır: dosyayı kendine almak da, başkasına vermek de yasaktır. Kural “sahip değişmez” biçiminde okunabilir; değiştirebilen tek hesap kök kullanıcıdır.
Grup Değişikliği
Grup için kural farklıdır. Dosyanın sahibi, dosyanın grubunu üyesi olduğu herhangi bir gruba çevirebilir:
$ chgrp proje veri/ham/olcum-01.csv $ ls -l veri/ham/olcum-01.csv -rw-r--r-- 1 ogrenci proje 61 Jul 26 19:17 veri/ham/olcum-01.csv
Üyesi olunmayan bir gruba çevirmek yasaktır:
$ chgrp yedek veri/ham/olcum-01.csv chgrp: changing group of 'veri/ham/olcum-01.csv': Operation not permitted
Bu da tutarlı bir kısıttır: kullanıcı yalnızca zaten sahip olduğu bir yetkiyi devredebilir. Üyesi olmadığı bir gruba dosya vermek, o grubun üyelerine kendi verisi üzerinde hak tanımak — ya da onların ad alanını kirletmek — anlamına gelirdi.
Önceki derste groups çıktısında görülen üyelikler burada doğrudan kullanılır: bir
kullanıcının dosyalarını hangi gruplara açabileceğini o liste belirler.
Tek Komutla İki Alan
chown komutu sahip ve grubu birlikte alabilir; iki alan iki nokta üst üste ile ayrılır.
$ chown ogrenci:ogrenci veri/ham/olcum-01.csv $ ls -l veri/ham/olcum-01.csv -rw-r--r-- 1 ogrenci ogrenci 61 Jul 26 19:17 veri/ham/olcum-01.csv $ chown :proje veri/ham/olcum-01.csv $ ls -l veri/ham/olcum-01.csv -rw-r--r-- 1 ogrenci proje 61 Jul 26 19:17 veri/ham/olcum-01.csv
Sahip kısmı boş bırakıldığında yalnızca grup değişir; bu biçim chgrp ile eşdeğerdir. İlk
komut sahibi değiştirmeye çalışmamıştır — verilen değer zaten mevcut sahiptir — bu yüzden
ayrıcalık gerektirmemiştir.
Ad yerine sayısal kimlik de yazılabilir. Ad çözümlemesinin çalışmadığı ortamlarda — kurtarma kabuklarında veya yalın konteyner ortamlarında — tek seçenek budur.
Bir dosyanın sahipliğini başka bir dosyayla eşitlemek için --reference seçeneği vardır;
GNU araçlarına özgüdür ve ağacın tamamını bir örnek dosyaya göre düzeltmekte kullanılır.
Ağacın Gruba Açılması
Proje ağacı bir grupla paylaşıma hazırlanacaktır. -R seçeneği değişikliği özyinelemeli
uygular:
$ chgrp -R proje veri betik belge arsiv $ ls -l total 16 drwxr-xr-x 2 ogrenci proje 4096 Jul 26 19:11 arsiv drwxr-xr-x 2 ogrenci proje 4096 Jul 26 19:03 belge drwxr-xr-x 2 ogrenci proje 4096 Jul 26 18:49 betik drwxr-xr-x 4 ogrenci proje 4096 Jul 26 19:08 veri $ ls -l veri total 8 lrwxrwxrwx 1 ogrenci proje 16 Jul 26 19:08 guncel.csv -> ham/olcum-03.csv drwxr-xr-x 2 ogrenci proje 4096 Jul 26 19:10 ham drwxr-xr-x 2 ogrenci proje 4096 Jul 26 19:03 islenmis
Ağacın tamamı artık proje grubuna aittir. Ancak grup sütununun değişmesi tek başına
paylaşım sağlamaz: grup izin bitleri hâlâ r-x düzeyindedir, yani grup üyeleri okuyabilir
ama yazamaz. Yazma yetkisi için grup bitlerinin de açılması gerekir — iki ayarın birbirinden
bağımsız olduğu, izin modelinin sık atlanan yanıdır.
Yeni oluşturulacak dosyaların da bu grubu alması ayrı bir sorundur ve chgrp ile çözülmez;
çözümü özel izin bitleri dersindedir.
Özyinelemede Sembolik Bağlar
Özyinelemeli değişiklikler ağacı dolaşır ve ağaçta sembolik bağ bulunabilir. Bağın hedefi ağacın dışındaysa, “ağacın grubunu değiştir” komutu ağacın dışına taşabilir.
Varsayılan davranış taşmaz — değişiklik bağın kendisine uygulanır:
$ ls -l /tmp/bt/disarida.txt /tmp/bt/dizin/bag -rw-r--r-- 1 ogrenci ogrenci 2 Jul 26 19:23 /tmp/bt/disarida.txt lrwxrwxrwx 1 ogrenci ogrenci 15 Jul 26 19:23 /tmp/bt/dizin/bag -> ../disarida.txt $ chgrp -R proje /tmp/bt/dizin $ ls -l /tmp/bt/disarida.txt /tmp/bt/dizin/bag -rw-r--r-- 1 ogrenci ogrenci 2 Jul 26 19:23 /tmp/bt/disarida.txt lrwxrwxrwx 1 ogrenci proje 15 Jul 26 19:23 /tmp/bt/dizin/bag -> ../disarida.txt
Bağın grubu değişmiş, hedefin grubu değişmemiştir. Bağların kendi izin bitlerinin kullanılmadığı önceki derste söylenmişti; buradaki değişiklik de bu yüzden pratik bir etki doğurmaz — asıl önemli olan hedefe dokunulmamış olmasıdır.
Bağların izlenmesi açıkça istenirse sonuç değişir:
$ chgrp -R -L proje /tmp/bt/dizin $ ls -l /tmp/bt/disarida.txt /tmp/bt/dizin/bag -rw-r--r-- 1 ogrenci proje 2 Jul 26 19:23 /tmp/bt/disarida.txt lrwxrwxrwx 1 ogrenci proje 15 Jul 26 19:23 /tmp/bt/dizin/bag -> ../disarida.txt
-L seçeneğiyle komut bağı izlemiş ve ağacın dışındaki dosyanın grubunu değiştirmiştir.
Ağaç içinde başkasının yazabildiği bir dizin varsa, oraya yerleştirilen bir bağ, özyinelemeli
komutu istenmeyen hedeflere yöneltebilir.
Üç seçenek ayrımı POSIX’te tanımlıdır ve akılda tutulması gereken şudur: -P bağı izlemez
ve özyinelemeli işlemlerde varsayılandır; -L her bağı izler; -H yalnızca komut satırında
doğrudan verilen bağları izler. Özyinelemeli izin ve sahiplik değişikliklerinde varsayılanı
değiştirmemek genel kuraldır.
Özyineleme olmadan, doğrudan argüman olarak verilen bir bağda davranış terstir: komut bağı
izler ve hedefin sahipliğini değiştirir. Bağın kendisini hedeflemek için -h seçeneği
kullanılır.
Doğrulama
Sahiplik değişiklikleri sessizdir; hata yoksa çıktı da yoktur. Bu nedenle sonuç ayrı bir
komutla doğrulanır. Gezinme dersindeki ls -ld biçimi burada gereklidir: bir dizinin
sahipliği sorulduğunda içeriği değil, dizinin kendi satırı okunmalıdır.
Ağacın tamamında beklenmedik sahiplik kalıp kalmadığı find ile sınanabilir; ölçüt
seçenekleri -user ve -group adlarını taşır ve eşleşmeyen dosyaları listeler.
Bir başka doğrulama noktası, üstveri değişikliğinin zaman damgalarına etkisidir. Gezinme
dersinde ayrılan üç zamandan yalnızca sonuncusu — üstveri değişiklik zamanı — güncellenir.
İçerik değişiklik zamanı korunduğu için ls -lt sıralaması etkilenmez.
Özet
- Sahip devri yalnızca kök kullanıcıya açıktır; kısıt, disk kotasının ve yetki devrinin kötüye kullanılmasını engeller.
- Dosyanın sahibi, grubu yalnızca kendi üyesi olduğu bir gruba çevirebilir.
chownsahip ve grubu iki nokta üst üste ile ayırarak birlikte alır; sahip kısmı boş bırakıldığında yalnızca grup değişir.- Grup sütununu değiştirmek paylaşım sağlamaz; grup izin bitleri ayrıca açılmalıdır.
- Özyinelemeli değişikliklerde sembolik bağlar varsayılan olarak izlenmez;
-Lile izlendiklerinde işlem ağacın dışına taşabilir. - Sahiplik değişikliği yalnızca üstveri zaman damgasını günceller; içerik zamanı korunur.
Sonraki Adım
Sahip devri gibi bazı işlemler kök yetkisi istiyor. Ancak kök hesabıyla oturum açıp çalışmak, tek bir yazım hatasının tüm sistemi etkilemesi anlamına gelir. Sonraki ders yetki yükseltmeyi ele alır: süper kullanıcının ne olduğu, yetkinin nasıl geçici ve sınırlı biçimde devredildiği ve en az yetki ilkesinin uygulamada ne anlama geldiği.
İlerlemeni kaydetmek ve not almak için Giriş yap
Notlarım
Not almak için giriş yapmalısın.