chown hakkında açıklama (1) POSIX spec


18

POSIX spektrumu chownprogramı kendi içinde söz mantık bölümü ile ilgili chown user:groupsözdizimi (eski chown user.group) (vurgu benim):

Hem sahibi hem de grubu belirtmek için 4.3 BSD yöntemi POSIX.1-2008 bu cildine dahil edilmiştir, çünkü:

  • Chgrp ve chown (yalnızca kullanıcı kimliğini değiştiren) yardımcı programları kullanılarak istenen son koşula ulaşılamayan durumlar vardır. (Geçerli sahip istenen grubun üyesi değilse ve istenen sahip geçerli grubun üyesi değilse, hem sahip hem de grup aynı anda değiştirilmedikçe chown () işlevi başarısız olabilir.)

user:groupSözdiziminin kolaylık olduğunu düşündüm . Şimdi yukarıdaki, yapamayacağınız şeylerle ilgili olduğunu ima chown user:groupediyorchgrp group; chown user

Şimdi bu metin benim için bir anlam ifade etmiyor. 4.3BSD'de, yalnızca kök dosyayı bir dosyayı değiştirebilir, bu nedenle her durumda ne yapabileceği konusunda bir kısıtlama yoktur.

SysV ve diğer birkaç sistem, bir dosyanın sahibinin bir dosyanın kullanıcı ve grubunu herhangi bir şeye değiştirmesine izin verir (veya izin vermek için kullanılır), ancak bu sistemde bile, yukarıdaki metin benim için anlamlı değildir. Tamam, eğer bir dosya chown someone-else the-fileyaparsa chgrp something-else the-file, dosya artık dosyanın sahibi olmadığından daha sonra yapılamaz , ancak chgrpilkini (dosyanın sahibi olarak kalmasını) ve chownsonra yapmasını engelleyen hiçbir şey yoktur ve Yukarıdaki metin aynen söylüyor.

Ben anlamıyorum ve istenen sahibinin cari grubunun üyesi değildir sorunla ilgisi var.

Peki hem sahip hem de grup aynı anda ve hangi sistemde değiştirilmezse chown () işlevinin başarısız olabileceği koşullar nelerdir?


1
@ Robert, bu kurallar hangi sisteme uygulanır? Bildiğim sistemlerde, ya köksünüz ve istediğinizi yapabilirsiniz ya da kullanıcı değil1 ve hiçbir şey yapamazsınız. Eğer kullanıcı1 iseniz, sisteme bağlı olarak, ya sahibini yine de değiştiremezsiniz ya da ne zaman yapabiliyorsanız, grubu istediğiniz gibi ve ardından kullanıcıyı istediğiniz gibi değiştirebilirsiniz.
Stéphane Chazelas

Sahip olduğum bir dizinde varsa, başkasına ait bir dosya ve gruba üye değilim, ancak diğer izinler nedeniyle okuyabilirim. Sonra beni sahibi yapmak için kopyalamak mümkün ve yeni bir grup var (üyesi olduğum). Bu nedenle chown me:my-group file, dosya okuma / yazma erişimim olan bir konumdaysa (yapışkan değil) işletim sisteminin bana root olmayan olarak izin vermesi için kaydetmesi gerekir . Ben ilk değil sahibi olarak chgrp olamazdı. Bu oluşturamadım dosyaya neden olacağı için ilk chown olamazdı: ben üyesi değilim grubuyla bir dosya sahibi.
ctrl-alt-delor

@richard, hayır o kadar güvenli olmazdı . Bu dosya, erişiminiz olmayan başka bir dizine bağlanabilir. Sahip olmadığınız dosyaları (varsayılan olarak Linux gibi) bağlayabileceğiniz sistemlerde, bu, yazma erişimine sahip olduğunuz bir dizine bağlayarak herhangi bir dosyanın sahipliğini talep edebileceğiniz anlamına gelir.
Stéphane Chazelas

Bu metni buldum, neden yanıldığımı da açıklıyor (o kadar güvenli değil): “Dosyayı uygun hale getirmenize izin verildiyse, bu bir güvenlik açığı olurdu. Örneğin, kullanıcı dosyayı açabilir, daha sonra sahipliğini ve izinlerini doğrulayabilir (açık dosya tanıtıcısında fstat'ı çağırarak) ve yalnızca biri olarak çalışan bir programın bu verileri üretmiş olabileceği sonucuna varabilir. Dosyayı uygun hale getirebildiyseniz, içeriğini birinin isteklerine göre değiştirebilirsiniz. ”- unix.stackexchange.com/questions/68439/…
ctrl-alt-delor

Yanıtlar:


5

Microsoft ınterix Unix alt sistemi (şimdi emekli) onun NT çekirdeği için bazı diğerlerine göre daha kullanıcı ve grup izinleri ile biraz farklı ele:

Kullanıcı ve grup bilgileri Güvenlik Erişimi veritabanında depolanır . Hem kullanıcılar hem de gruplar aynı veritabanında depolanır, ancak grup ve kullanıcı adları benzersiz olmalıdır; hiçbir grubun bir kullanıcı adı olamaz veya tam tersi. (Bu veritabanı UNIX içindeki /etc/passwdve /etc/groupsdosyalarının yerini alır .) Kullanıcılar ve gruplar uygun Windows yöntemi (Kullanıcı Yöneticisi, Active Directory Kullanıcıları ve Bilgisayarları veya Yerel Kullanıcılar ve Gruplar) veya Win32 net userkomutuyla oluşturulur. (Kullanıcı oluşturmak ve kaldırmak için örnek kabuk komut dosyaları dizinde bulunur /usr/examples/admin.) Kullanıcılar birçok gruba ait olabilir.

İşte daha spesifik bazı manuel alıntılar:

Windows'da, bir kullanıcının veya grubun bir nesnesi olabilir. Bu, yalnızca bir kullanıcının bir nesneye sahip olduğu UNIX'ten farklıdır.

Windows tüm kullanıcıları ve grupları bir güvenlik tanımlayıcısı (SID) kullanarak dahili olarak tanımlar . Bir karma algoritması benzersiz olan SID değerleri üretir; hiçbir iki kullanıcı veya grup aynı SID'ye sahip olmayacaktır.

Bir nesneye erişim izni olan kullanıcılar ve gruplar SID'leri tarafından tanımlanır. Windows tarafından güvence altına alınabilen tüm nesneler, erişim denetim girdileri (ACE) adı verilen ayrı girişlerden oluşan isteğe bağlı bir erişim denetim listesine (DACL) sahiptir. Bir ACE iki önemli bilgi parçası içerir: bir kullanıcı veya grup SID'si ve tek tek kullanıcının veya grubun bir nesneye ne kadar erişebileceğinin açıklaması.

chgrp

... Dosyanın grup kimliğini değiştirin ... chgrp (1) 'i çağıran kullanıcının belirtilen gruba ait olması ve dosyanın sahibi olması veya uygun yetkilere sahip olması gerekir.

CHOWN

... Sahip ve grup işlenenlerinin her ikisi de isteğe bağlıdır; ancak belirtilmelidir. Grup işlenen belirtilmişse, öncesinde iki nokta üst üste (:) bulunmalıdır.

Sahip, sayısal bir kullanıcı kimliği veya bir kullanıcı adıyla belirtilebilir. Bir kullanıcı adı aynı zamanda sayısal bir kullanıcı kimliğiyse, işlenen kullanıcı adı olarak kullanılır. Grup, sayısal bir grup kimliği veya bir grup adı olabilir. Bir grup adı aynı zamanda sayısal bir grup kimliğiyse, işlenen bir grup adı olarak kullanılır.

Güvenlik nedeniyle, bir dosyanın sahipliği yalnızca uygun ayrıcalıklara sahip bir işlemle değiştirilebilir.

Bunu okuduğumda, kullanıcı hesabınız, bir dosyanın o gruba ait izinlerini değiştirmek için yeterli ayrıcalığa sahip bir Windows grubuna aitse, chgrpbu dosyayı kullanıcı hesabınızın kontrolü dışında etkili bir şekilde değiştirmek mümkündür . Bu, sahip olabileceğinizden chownve açık user:groupparametrelerden daha az kontrole eşittir . İlan etme olasılığı olmaksızın bu kapsamda user: ve :group aksi takdirde aynı sonuçları elde edebiliriz olmadı.

İşte bir bağlantı Böyle bir bilgi Unix türevleri diğer yanda Samba dosya sistemlerine nasıl uygulandığı konusunda odaklanarak, Windows ACL ile nasıl ınterix karşılıklı bölümlerle bir ayrıntılı görünüm.

İşte şimdi eski Solaris belgesine bir bağlantırstchown ...

chown(2)Sistem çağrısı için POSIX semantiğinin geçerli olup olmadığını gösterir ...

Görünüşe göre, parametre 0...

... POSIX semantiğini kapatmak, çeşitli güvenlik açıkları potansiyelini açar. Ayrıca kullanıcının bir dosyanın sahipliğini başka bir kullanıcıya değiştirme ve dosyayı kullanıcıdan veya sistem yöneticisinden müdahale etmeden geri alamama olasılığını da açar .

Böyle bir seçenek Solaris'in POSIX uyumluluğunu geçersiz kılmaz . Sadece bir seçenek olması onu uygun olarak nitelendirir :

POSIX.1-2008 ile uyumlu tüm uygulamalar aşağıda açıklanan tüm özellikleri desteklese de, sisteme veya dosya sistemine bağlı yapılandırma yordamlarını kaldırabilir veya değiştirebilir , bu özelliklerin herhangi birini veya tümünü . Sıkı uyumluluk gerekiyorsa bu tür yapılandırmalar yapılmamalıdır.

Aşağıdaki sembolik sabitler -1 dışında bir değerle tanımlanmalıdır. Bir sabit değer sıfır ile tanımlanırsa, uygulamalar kullanmalıdır sysconf(), pathconf()ya da fpathconf()fonksiyonlarını ya da getconfo anda veya söz konusu özel için yol adı, sistemde mevcut olan özellikleri belirlemek için, yardımcı.

_POSIX_CHOWN_RESTRICTED

Öğesinin kullanımı, chown()uygun ayrıcalıklara sahip bir işlemle ve bir dosyanın grup kimliğini yalnızca işlemin etkin grup kimliğiyle veya ek grup kimliklerinden biriyle değiştirmekle sınırlıdır.

chown()Sistem fonksiyonu - her iki tarafından yapılan belgelenmiş sistemi çağrı chownve chgrpkabuk programları - olduğu başarısız belirtilen çeşitli nedenlerle. Onların arasında:

EACCES Yol önekinin bir bileşeninde arama izni reddedildi.

ELOOP Yol bağımsız değişkeninin çözümlenmesi sırasında karşılaşılan sembolik bağlantılarda bir döngü vardır.

EPERM Etkili kullanıcı kimliği dosyanın sahibiyle eşleşmiyor veya arama işleminin uygun ayrıcalıkları yok ve _POSIX_CHOWN_RESTRICTED bu ayrıcalığın gerekli olduğunu gösteriyor.

Bununla birlikte, kök olmayan kullanıcılara izin değiştirme hakları verme davranışı, Solaris'e özgü olmamıştır. Orada çok mükemmel - biraz tarihli eğer - Unix dosya izinlerinin kapsama Bu forum yazı hangi yazar şöyle der:

Başlangıçta, Unix bir dosya sahibinin bir dosyayı vermesine izin verdi. Bir dosyanın sahibi, sahibini başka biriyle değiştirebilir. Kök olmayan bir kullanıcının bu işlemi geri almasının bir yolu yoktu ... BSD [daha sonra]chown kök olmayan kullanıcılardan kaldırıldı ... [kısmen çünkü] ... ne kadar disk alanı sınırlayabilecek disk kotaları uyguladı? kullanıcı bir dosya sistemine sahip olabilir ... Yaramaz kullanıcılar kotaları aşan büyük dosyaları sneek verebilir.

Bugün, kök olmayan chownbir dosyanın bir dosya yapıp yapamayacağını söylemek kolay değildir . Unix'in birçok sürümü her iki davranışa da izin verir ...

Bir başka iyi - ve daha yakın zamanda - posta listesi yayını bunu alıntılar ve devam eder:

Çoğu işletim sistemi için varsayılan, chownyalnızca root ile sınırlandırılmak içindir. Güvenlik hususları için bu şekilde kalması gerektiği konusunda fikir birliği vardır. Kök olmayan bir kullanıcı dosyanın sahibini değiştirirse ve yürütme bitleri açıksa, SUIDve SGIDbitlerinin temizlenmesi gerekir. Bu olabilir veya olmayabilir root.

Bence son paragraf güzel söylüyor.

Bu makale aynı zamanda CAP_CHOWNLinux'taki (yalnızca POSIX_CHOWN_RESTRICTEDdavranışı etkilemesi gereken) bu tesisi denetlemeye yöneliktir . Bir de CAP_FOWNERyetenek var, bu davranışta biraz farklı.

Ve 2003'te belirttiğiniz gibi :

En azından HPUX'ta, ayrıcalıklı bir kullanıcı olmasanız bile dosyalarınızın sahibini ( rootörneğin) değiştirebileceğinizi unutmayın ...

... bir yapılandırma setprivgroupparametresine bağlıydı .

Bahsedildiği gibi kök olmayan kullanıcı dosya izinlerini işleyebilirsiniz Her durumda o, düşünülebilir gerekçe sorunuzu alıntı, bir kullanıcı o olabilir chowno kullanıcı başka bir kullanıcı tarafından sahip olunan, böylece sahibi bir dosya. Dosyanın grup sahipliği ve chowning kullanıcı grupları hizalanmazsa, kullanıcı artık bu dosyayı değiştiremez.

Bu senaryoda chown sonra chgrp ise artık bu dosyanın izinlerini değiştirmek için gerekli izinlere sahip olacaktır kullanıcı olarak başarısız olur chown user:groupmüddetçe - grup arasında yer alıyor kullanıcı kendi - başarılı olacaktır.

Orada muhtemelen dizin içerebilir benzer neden olabilir sayısız diğer niş durumları, Sabit ve / veya setgid bit, dosya sistemi ve / veya uygulama özgü erişim denetimi listelerini. Örneğin, bu konu ilginçtir. Sayısız permütasyon kendi zayıf kavrayışımın çok ötesinde - bu yüzden bu cevap wikied. Bunu okuyorsanız, gelişmeye değer olduğuna inanıyorsunuz ve nasıl yapacağınızı bildiğinize inanıyorsunuz - lütfen yapın .

Ayrıca burada -Recursive chownuygulamalarla ilgili benzer bir hatayı etkileyebilecek dosya izinleri, ağaçta gezinme ve sembolik bağlantıların çeşitli olası etkileri hakkında kapsamlı belgeler vardır :

Gönderen POSIX XRAT bölümün başlıkları Üçüncü ve Dördüncü Domains :

Genel olarak, bir dosya hiyerarşisi geçişi için tek bir fiziksel hiyerarşi üzerinde çalışma isteği belirten kullanıcılar ve dolayısıyla hiyerarşinin dışındaki dosyalara başvurabilecek sembolik bağlantılar göz ardı edilir. Örneğin, chown owner dosyası, -R seçeneğinin belirtildiği aynı komuttan farklı bir işlemdir. Bu örnekte, komutun davranışı chown owner fileburada açıklanırken, komut chown -Rsahibi dosyasının davranışı üçüncü ve dördüncü alanlarda açıklanmaktadır.

... Mantıksal bir yürüyüşe geçmeyle ilgili bir güvenlik sorunu var. Tarihsel olarak, komut chown -Rdosyası, süper sahip için güvenlidir çünkü dosyanın sahipliği değiştirildiğinde setuid ve setgid bitleri kayboldu. Yürüyüş mantıklı olsaydı, kullanıcı ağaçtaki herhangi bir dosyayı işaret eden sembolik bir bağlantı ekleyebileceğinden, sahipliğin değiştirilmesi artık güvenli olmazdı. Yine, bu, hiyerarşi geçişi yapan komutlara sembolik bağlantılar yoluyla dolaylı olmamak için bir seçenek eklenmesini gerektirecek ve özyinelemeli yürüyüşler yapan tarihsel komut dosyaları anında güvenlik sorunları haline gelecektir. Bu çoğunlukla sistem yöneticileri için bir sorun olsa da, farklı kullanıcı sınıfları için farklı varsayılan değerlerin olmaması tercih edilir.

...

4.3 BSD'de, chgrpağaç geçişi sırasında sembolik bağın grubunu değiştirdi, hedefi değil. 4.4 BSD'deki sembolik bağlantıların sahibi, grubu, modu veya diğer standart UNIX sistem dosyası öznitelikleri yoktu.

POSIX chgrpsayfasından, olası bir eksikliğe işaret eden bu var.-R ecursive eylem, ya da en azından ne kullanılır olması:

Sistem V ve BSD sürümleri farklı çıkış durum kodları kullanır. Bazı uygulamalar, çıkış durumunu, oluşan hataların sayısı olarak kullandı; geçerli çıkış durumu değerleri aralığını aşabileceğinden bu uygulama kullanılamaz. Standart geliştiriciler, çıkış değerleri olarak yalnızca 0 ve> 0 belirterek bunları maskelemeyi seçtiler.


1
@StephaneChazelas - anladığınıza sevindim. Kindthat∆ kinduva karışıklığıdır çünkü tüm izinlerle pek iyi değilim - özellikle SE özellikleri söz konusu olduğunda. Bağlantı gevşek - bağlantılar! = Ch {grp, kendi} ama POSIX adamları bunu hecelemek için çok fazla sorun çıkarırsa (sayfada da büyük bir grafik var) anladım, aynı nedenle bir bağlantı olabilir o zaman sorunlara neden olabilir -R eylemleri. Her iki ayağınızı da - kullanıcı ve grup - söylediğiniz gibi bir şey kırmaz, ama zaten 1 kapalı iseniz .. Neyse, ben bir nedenle wikied. Gerçekten benim forte'm değil. Afedersiniz.
mikeserv

1
İyi bir nokta, -R'yi düşünmemiştim. Biri, chgrp üzerinde oradaki dosyaların izinlerini değiştirmenizi engelleyecek bir dizine arama veya okuma erişimini kaybedebileceğinizi, ancak daha sonra sahiplik veya izinleri işlemek için geleneksel Unix yollarıyla nasıl göründüğünüzü göremiyorum. Bunun olmasını sağlamak. Araştırmaya değer başka bir alan, onu destekleyen sistemlerde NFSv4 ACL'leri olacağını düşünüyorum (Solaris, FreeBSD, SUSE ...)
Stéphane Chazelas

@ StéphaneChazelas - bu yayının cevap vermediği bir sorunuz var mı?
mikeserv

bu kapsamlı araştırma için çok teşekkürler. POSIX metninin geçerli olduğu NT Unix alt sistemine bir örnek ekleyebilmeniz iyi olur. Ödüllerin topluluk wiki cevaplarıyla nasıl çalıştığından emin değilim. Bir deneyeceğim.
Stéphane Chazelas

@ StéphaneChazelas - Puanları umursamadım ve asla almadım. Sadece berbat etmemi umuyordum. Ben bunun güzel bir parçası olurdu emin değilim - NT Unix 4 demek? Microsoft'un resmi dokümanları en azından hala Interix iken POSIX uyumluluğunu iddia ediyor, ben ve biraz garip bir şekilde chgrp chown
belirtiyorlar

1

Varsayım 1: chownHedef kullanıcının ve grup parçalarının bağımsız olarak kontrol edilmesinin başarılı olup olmadığının belirlenmesi için kurallar , yani bunlar formdadır user_condition(target_uid, other_environment_parameters) && group_condition(target_gid, other_environment_parameters).

Varsayım 2: chown(file, -1, -1)başarılı.

Varsayım 3: chown Başarılı , dosyanın şu anda hangi gruba ait olduğuna bağlı değildir.

Sonuç: eğer chown(file, uid, gid)başarılı olursachown(file, -1, gid) && chown(file, uid, -1) .

Bu varsayımlardan herhangi birini ihlal edecek bir Unix varyantı bilmiyorum, oldukça güvenli görünüyorlar.

Bu cümle, komite üzerindeki birisinin, bir psçağrının başına kaç seçeneğin sığabileceğini - ya da sekreterin yanlış tercüme edildiğini - ve sekreterin yanlış yorumladığını - tartıştıktan sonra saatlerce yorulduklarında söylediği ve gözden geçirme sırasında kimsenin yakalamadığı bir şeye benziyor . Sonuçta, kullanıcı ve grubun otomatik olarak değiştirilmesine izin vermek için başka iyi nedenler de var, bunlar POSIX mantığında da belirtilen performans nedeni ve atomisite (ah, sahiplik ve izinleri değiştirmek için tek bir çağrı varsa) ).


Varsayım 3'ün yanlış olabileceği bir durum, bir işlemin dosya sahiplerini değiştirme yeteneğine sahip olabileceği ancak yalnızca dosyaya yazma iznine sahip oldukları bir sistemdir. Biraz gerçekçi olsa da, durumun nerede olduğu konusunda hiçbir sistem bilmiyorum. Daha sonra chgrp, ne kök ne de dosyanın sahibi olan kullanıcı tarafından çalıştırılan bir işlemden sonraki bir grup dosyayı daha sonra devre dışı bırakabilirchown .


Özyinelemeli bir çağrı için, tek bir geçiş başarılı olduğunda chgrptüm bir geçişin ardından tüm geçişin chownbaşarısız olabileceği uç durumlar vardır . Bu çok inandırıcı bir argüman değildir, çünkü sahibinin geçiş yapma iznine sahip olmadığı dizinleri içerir ve bu tür tüm durumlara karşı korumak isteyen bir uygulamanın yine de izinlerle uğraşması gerekir. Bununla birlikte, teknik olarak bu mantığın durumunu karşılamaktadır. Çalışan işlemin etkili kullanıcı alice, etkili grup staffve dosya sahiplerini keyfi olarak değiştirme yeteneğine sahip olduğunu varsayalım (yalnızca onları vermek için değil; kök olmayan işlemlere nadiren verildiği halde, birkaç unix varyantı böyle bir yeteneğe sahiptir).

$ ls -ld dir dir/file
d---rwx---  2 charlie  staff        1024 Apr  1  1970 dir
drw-rw----  2 charlie  staff          42 Apr  1  1970 file
$ chgrp -R students dir
$ chown -R bob dir
chown: dir: permission denied

POSIX'in yalnızca Unix ile ilgili olmadığını unutmayın. POSIX alt sistemi / API'sı olan birçok Unix olmayan işletim sistemi vardır (örneğin Microsoft Windows NT). Bu koşulların sonucu iddia etmek için yeterli olduğundan emin değilim. chgrpVeya chowndiğerini yapmak yeteneğini etkileyebilir yan etkileri olabilir. Örneğin , bu chownyeteneği ortadan kaldırır chgrp, bu bir gerçektir. chgrpsetuid / setgid bitini temizler, bir çeşit ACL veya başka bir güvenlik bağlamını
temizleyebilir

@ StéphaneChazelas chownTakip chgrpedenlerin başarısız olabileceği konusunda hemfikiriz , ancak sorunun chgrpardından gelmesi bekleniyor chown. Hmmm, güvenlik bağlamı ... belki zorunlu erişim kontrolü olan bir sistemde, chgrpbir dosyayı bozabilir ve artık seçilemez hale getirebilir mi? Bu çok zorlanmış gibi görünüyor.
Gilles 'SO- kötü olmayı kes'

Belki çok uzak değil. NFSv4 / WinNT ACL'leri hakkında fazla bir şey bilmiyorum ama orada bu tür şeylerin gerçekleşmesini sağlayabilecek bir şey olduğundan şüpheleniyorum (ve / veya 3. varsayımınızı geçersiz kılabilir). Yine de, bu metin oldukça belirgindir ve her kim yazmışsa akılda belirli bir örnek olurdu. Belki bazı Microsoft insanları tarafından yazılmıştır.
Stéphane Chazelas

son düzenlemeniz. Chown -R bob: öğrencilerle, alice hala arama izinlerini kaybeder dir, bu yüzden çalışması chowniçin önce dosya derinliğini işlemesi gerekir ve bunu yapan herhangi bir uygulama bilmiyorum. Bu yüzden chmod u: g'nin yapamadığı yerlerde chgrp + chown'un başarısız olacağı neredeyse geçerli bir durumdur, ancak bu mantıksal metnin gerçekten bir parçası değildir.
Stéphane Chazelas

İncelenmemiş sekreter yanlış transkripsiyonu ve son vaka özyinelemeli chownteorileri çelişkilidir.
mikeserv
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.