Yapışkan bit nasıl çalışır?


148

SUID

Yapışkan bit programı çalıştıran bittikten sonra bellekte programın bir görüntü tutmak için sistem işaretleme çalıştırılabilir programlar uygulanır.

Ama hafızada ne saklandığını bilmiyorum. Ve bu durumda onları nasıl görebilirim?


İşte çalışılmış örnekler ve açıklamalar ile iyi bir öğretici. Bunu anlamanın anahtarı ilgili sekizli sistemdir. Linux Yapışkan Bitleri Çalışılan Örneklerle birlikte Öğretici .
CMP 16

Yanıtlar:


193

Bu muhtemelen insanların her zaman uğraştığı en rahatsız edici şeylerden biri. SUID / GUID biti ve yapışkan biti 2 tamamen farklı şeylerdir.

Bunu yaparsanız man chmodSUID ve yapışkan bitler hakkında okuyabilirsiniz. Adam sayfası burada mevcuttur de.

arka fon

alıntı

RwxXst harfleri , etkilenen kullanıcılar için dosya modu bitlerini seçer: okuma (r), yazma (w), yürütme (veya dizinleri arama) (x), yalnızca dosya bir dizinse veya yürütme / arama için bazılarına izin verme kullanıcı (X), kullanıcı veya grup kimliğini yürütme (ler) , sınırlı silme bayrağı veya yapışkan bit (t) olarak ayarlayın .

SUID / GUID

Yukarıdaki man sayfasının anlatmaya çalıştığı şey, x bitinin kullanıcı sekizlik (1. grup rwx) ve grup sekizlik (2. grup rwx) için rwxrwxrwx'te aldığı pozisyonun, x'in olduğu yere ek bir durum alabilir. bir s. Bu dosya oluştuğunda bu dosya çalıştırıldığında (eğer bir program ve sadece bir kabuk betiği değilse), sahibi veya dosya grubunun izinleriyle çalışacaktır.

Bu nedenle, dosya root aittir ve SUID biti açıksa, program root olarak çalışacaktır. Normal bir kullanıcı olarak çalıştırsanız bile. Aynı şey GUID biti için de geçerlidir.

alıntı

SETUID VE SETGID BITS

chmod, dosyanın grup kimliği, kullanıcının uygun grup kimliğiyle veya kullanıcının uygun grup kimlikleriyle eşleşmiyorsa, kullanıcının uygun yetkilerine sahip değilse, normal bir dosyanın set-grup kimliğini temizler. Ek kısıtlamalar, MODE veya RFILE set-kullanıcı kimliği ve set-grup kimliği bitlerinin göz ardı edilmesine neden olabilir. Bu davranış, alttaki chmod sistemi çağrısının politikasına ve işlevselliğine bağlıdır. Şüphe durumunda, temel sistem davranışını kontrol edin.

chmod, aksi belirtilmedikçe, bir yönetmenin set-kullanıcı kimliği ve set-grup kimliği bitlerini korur. Bitleri, u + s ve gs gibi sembolik modlarla ayarlayabilir veya temizleyebilirsiniz ve bitleri sayısal modda ayarlayabilir (ancak netleştiremezsiniz).

SUID / GUID örnekleri

suid / guid yok - sadece rwxr-xr-x bitleri ayarlanır.

$ ls -lt b.pl
-rwxr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid ve kullanıcının çalıştırılabilir biti etkin (küçük harf s) - bitler rwsr-xrx ayarlanır.

$ chmod u+s b.pl 
$ ls -lt b.pl 
-rwsr-xr-x 1 root root 179 Jan  9 01:01 b.pl

suid etkin ve çalıştırılabilir bit devre dışı (büyük S harfi) - rwSr-xr-x bitleri ayarlanır.

$ chmod u-x b.pl
$ ls -lt b.pl 
-rwSr-xr-x 1 root root 179 Jan  9 01:01 b.pl

guid & group'un çalıştırılabilir biti etkin (küçük harf s) - bitler rwxr-sr-x ayarlanır.

$ chmod g+s b.pl
$  ls -lt b.pl 
-rwxr-sr-x 1 root root 179 Jan  9 01:01 b.pl

guid etkin ve çalıştırılabilir bit devre dışı (büyük S harfi) - rwxr-Sr-x bitleri ayarlanır.

$ chmod g-x b.pl
$  ls -lt b.pl 
-rwxr-Sr-x 1 root root 179 Jan  9 01:01 b.pl

yapışkan bit

Öte yandan yapışkan bit dizinde tolduğu gibi belirtilir /tmp:

$ ls -l /|grep tmp
drwxrwxrwt. 168 root root 28672 Jun 14 08:36 tmp

Bu bit, her zaman "sınırlı silme biti" olarak adlandırılmış olmalıydı, çünkü gerçekten neye benzediğini. Bu mod biti etkinleştirildiğinde, kullanıcıların yalnızca sahiplerinin bulunduğu dosyaları ve dizinleri silebilecekleri bir dizin oluşturur.

alıntı

SINIRLI SİLME BAYRAĞI VEYA ÇIKIŞLI BİT

Sınırlı silme bayrağı veya yapışkan bit, yorumu dosya türüne bağlı olan tek bir bittir. Dizinler için,
yetkisiz kullanıcıların, dosyanın veya dizinin sahibi olmadıkça dizindeki bir dosyayı kaldırmasını veya yeniden adlandırmasını önler; buna dizin için sınırlı silme bayrağı denir ve genellikle / tmp gibi dünyaca yazılabilir dizinlerde bulunur. Bazı eski sistemlerdeki normal dosyalar için, bit programın metin görüntüsünü takas cihazına kaydeder, böylece çalıştırıldığında daha hızlı yüklenir; Bu yapışkan bit denir.


43
Aslında, yapışkan-bit daha önce çalıştırıldıktan sonra uygulanabildi ve bu, ilk yüklendikten sonra takas durumunda kalmasına neden oldu. Bu, çok sayıda gereksiz disk / ağ (NFS) ve çok kullanılan programlar için CPU kullanımı kurtarabilir. Ancak, ne Linux ne de çoğu (tümü?) Unix sistemleri bunu artık desteklememektedir (çekirdekten çıkarılmıştır). Bu "yapışkan", çünkü çalıştırılabilir takas takıldı. Ek olarak, tanımladığınız gibi dizinler için kullanıldı.
Baard Kopperud,

4
Aslında "çok kullanılan ya da çok büyük" daha iyi bir açıklama olurdu. Üniversitemin Netscape web tarayıcısına 1995 yılında HP-UX bilgisayarlarında "yapışkan" olduğunu hatırlayın. Çok sık kullanılan küçük programlar (örneğin, sistem komutları cron tarafından sıkça kullanıldı) ve büyük programlar (örn. Netscape) "yapışkan" hale getirilmesi gereken en önemli adaylardı. Her iki durumda da, sürekli olarak diskten / NFS'den yeniden yükleme boşa harcanır.
Baard Kopperud

8
Yapışkan bit programların RAM'de yerleşik olması amaçlanmıştır, takas yerine değil (takas dosyasından bir görüntü yüklemek, onu bir dosya sistemi diskinden yüklemekten çok daha hızlı değildir). Gibi temel OS seviyesi komutları için tasarlanmıştır ls. Açıkçası, sadece süper kullanıcı yapışkan bit'i bir dosyaya koyabilirdi. Sanal bellek ve paylaşılan kütüphaneler tanıtıldıktan sonra daha da önemli hale geldi ve özellikle çağrı cihazları daha akıllı hale geldikçe ve hangi sayfaların yerleşik olarak tutulacağına dinamik olarak karar verebilir.
alexis

4
Yapışkan özellik bir dizin için bir anlam ifade etmediğinden, izin maskesinin aynı biti daha sonra dizinler için geleneksel dosya oluşturma anlambilimini değiştirmek için yorumlandı.
alexis

5
@alexis: Başlangıçta, yapışkan bit programları takas alanında tutuldu. Bu, dosya sisteminden okumaktan çok daha hızlıydı, çünkü takas dosyası görüntülerinin okunması bitişik sektörlerdi ve çoğunlukla asenkronize olarak okunabiliyordu. İlk dosya sistemlerinde, sektör "çalışma uzunlukları" yoktu ve çoğu dosya sistemi sürücüsü, sektörler ardı ardına gelse bile bir kerede bir sektörü okuyordu. Bir PDP-40'taki sonuç, yapışkan programların normal ikinci ya da ikisini alırken anında yüklendiği görülüyordu. Sanırım sadece edyapışkan olduk .
wallyk

8

"Yapışkan bit, programın çalışması bittikten sonra programın görüntüsünü bellekte tutmak için sistemi işaretleyen yürütülebilir programlara uygulanır."

Bunun oldukça eski bilgiler olduğunu düşünüyorum, bugün çoğu modern Unix bunu görmezden geliyor. Linux'ta, yapışkan bit yalnızca dizinlerle ilgilidir. Bkz burada ve oldukça bilgilendirici Wikipedia makalesi .

Her neyse, bu eski davranışta görüntü (sadece "kod", veri değil) sadece sanal bellekte tutuldu - normalde değiştirildi, gerçek bellekte değil, bir dahaki sefer daha hızlı çalıştırmak için.


3

Yapışkan bit nedir?

Yapışkan bir bit, yalnızca o klasördeki dosyanın sahibinin veya kök kullanıcının dosyayı silmesine veya yeniden adlandırmasına izin veren bir dizinde ayarlanan bir izin bitidir. Başka hiçbir kullanıcı tarafından oluşturulan dosyayı silmek için başka hiçbir kullanıcının gerekli yetkisi yoktur.

Bu, diğer kullanıcıların tam izinlerine sahip olmasına rağmen, kritik klasörlerin ve içeriğinin (alt dizinler ve dosyalar) silinmesini önlemek için bir güvenlik önlemidir.


1
AB

7
@ AB Bana oldukça doğru görünüyor, neredeyse alıntı yaptığınız Wikpedia makalesinin başlangıcını felç etme noktasına geliyor. Bunun nesi var?
roaima

Cevabın eksik olduğunu söyleyebilirim. "Yapışkan" aynı zamanda, yürütülebilir dosyanın daha hızlı çalışmasını sağlamak için takas alanında tutulacağını belirtir. Şimdi, bu eski bir tarihtir, ancak eski dosya sistemlerinde sürücüler arka arkaya olsa bile, bir anda bir sektörü okurlardı. Bu yapışkan olmayan çalıştırılabilirleri yavaşlattı, yapışkanlık o zamanlar çok anlamlıydı.
GhostCode
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.