Yeni oluşturulan dosyalara dosya izinleri nasıl uygulanır?


12

Aşağıdaki izinleri ayarlanmış bir dizin var:

drwxr-s---. user group folder

Masaüstünde bu klasöre erişiyorum ve yeni bir dosya araması oluşturmak için sağ tıklıyorum foo.txt. Sonra terminali kullanarak, komutu kullanarak başka bir dosya oluşturdum $ touch bar.txt.

Bu dosyaların izinlerini kontrol ettiğimde:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

Bekliyordum -rw-r-----. user group. Grup için ekstra yazma izni ve başkaları için okuma izni nasıl ortaya çıktı?

Yanıtlar:


16

setguid

Burada işte 2 güç var. Birincisi, klasörde etkinleştirilen setgid bitidir folder.

drwxr-s---. user group folder

Bu ssatırın başındaki karakter paketinin içinde. Bu şekilde gruplandırılırlar:

d - directory
rwx - read/write/execute bits for user
r-s - read/execute/setuid bits for group
--- - nothing for other users

r-sBu klasör içinde oluşturulan tüm dosya ve dizinlerin grup olacaktır araçları otomatik olarak gruba ayarlı group.

Dosyalara neden olan foo.txtve bar.txtbu şekilde yaratılacak şey budur:

-rw-r--r--. user group foo.txt
-rw-rw-r--. user group bar.txt

izinler ve umask

Gördüğünüz izinler başka bir konudur. Bunlar sizin ayarlarınız tarafından yönetilir umask. umaskKomutunuzla nelerin ayarlandığını görebilirsiniz umask:

$ umask
0002

NOT: bu bitlere "mod" bitleri de denir.

Bu bir maskedir, bu nedenle etkinleştirilen izinlerle ilgili bitlerden herhangi birini devre dışı bırakır. Bu örnekte istediğim tek bit, diğerleri için yazma izinleridir.

0 - skipping for this conversation
0 - value of user bits
0 - value of group bits
2 - value of other bits

Bu komuttaki "bitlerin" temsili ondalık biçimdedir. Yani 2, yazma biti olan ikili biçimde 010'a eşittir. 4 (100), okumanın devre dışı bırakılmasını istediğiniz anlamına gelir. 7 (111), tüm devre dışı okuma / yazma / yürütme istediğiniz anlamına gelir. Buradan inşa et:

$ umask 007

Diğer kullanıcılar için okuma / yazma / yürütme bitlerini devre dışı bırakır.

Peki dosyalarınız ne olacak?

Eh umaskyeni bir dosya oluşturulduğunda set alacak izinleri yönetir. Eğer şu umaskseti alsaydık:

$ umask 007

Ve yeni dosyalara dokunmaya başladığımızda, bu şekilde oluşturulduğunu görürüz:

$ touch newfile1.txt newfile2.txt
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:34 newfile2.txt

Başka bir şeyle değiştirirsek, şunu söyleyin:

$ umask 037
$ ls -l |grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:36 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Yine de oluşturduğumuz dosyalar üzerinde herhangi bir etkisi olmayacaktır. Buraya bakın:

$ umask
0037
$ touch newfile1.txt newfile2.txt
$ ls -l | grep newfile
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile1.txt
-rw-rw----   1 saml saml        0 Nov  3 22:37 newfile2.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile3.txt
-rw-r-----   1 saml saml        0 Nov  3 22:35 newfile4.txt

Peki dosya tarayıcısında neler oluyor?

umaskBen bir "yumuşak" ayarı aramıştım şeydir. Hiçbir şekilde mutlak değildir ve Unix'te çeşitli şekillerde kolayca geçirilebilir. Araçların çoğu, izinleri işlemlerinin bir parçası olarak belirtmenize izin veren anahtarlar alır.

Al mkdirörneğin:

$ umask
0037

$ mkdir -m 777 somedir1
$

$ ls -ld somedir1
drwxrwxrwx 2 saml saml 4096 Nov  3 22:44 somedir1

-mAnahtar ile geçersiz kılabiliriz umask. touchYaratıcı bir çalışma yapmak zorunda komut bu tesis bulunmamaktadır. Şu U&L Soru ve Cevap başlıklı makaleye bakın: Komut satırında ayarlanmış izinlerle dosyalar oluşturulabilir mi? sadece bu tür yöntemler için.

Başka yollar? Sadece geçersiz kıl umask. Dosya tarayıcısı büyük olasılıkla bunu yapıyor veya umaskyapmak için yapılandırılmış izinleri kullanarak dosyayı tamamen görmezden geliyor ve bırakıyor.


Umask'ın ayrıcalıkları kaldırması gerektiğini düşündüm, eklemeyin. Yoksa bir şey mi kaçırıyorum?
Question Overflow

@QuestionOverflow - maskeler, dosyalar ve dizinler oluşturulduğunda hangi izinlere izin verildiğini denetler. Dolayısıyla adı. Oluşturma işlemi sırasında bitlerin kullanılmasını maskeler.
slm

Benim umaskım okuyor 0002. Umask, kaldırma izinleri yerine izinleri ayarlarsa, yürütme biti hem kullanıcı hem de grup için yaptığımda ayarlanır touch, ancak ayarlanmaz .
Question Overflow

@QuestionOverflow - bu touchkomutun bir sınırlamasıdır . A'ya eklediğim bağlantıya bakın. Bu bağlantı: unix.stackexchange.com/questions/47178/…
slm

Sadece açıklamalara dayanarak birkaç noktayı açıklığa kavuşturmak için: 1) yeni dosyanın izinleri her zaman umask + dosyayı oluşturmak için kullanılan program tarafından belirlenir, 2) izinler asla üst dizinden devralınmaz.
Question Overflow
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.