Meydan okuma
Bir dosyanın UNIX izninin sembolik gösterimini ve sahipliğini (kullanıcı kimliği ve grup kimliği) gösteren bir dize verildiğinde A
, belirli bir kullanıcının dosyayı okuma / yazma / yürütme iznine sahip olup olmadığına karar verin .
İlgili .
UNIX sistemindeki izinler
UNIX'te, her dosya üç izin sınıfına ( kullanıcı , grup ve diğerleri ) ve sahipliğine, hangi kullanıcıya ve hangi gruba ait olduğunu içerir.
Sembolik gösterim on karakterden oluşur. Bu meydan okumada ilk karakter önemli değil. Kalan dokuz karakter, kullanıcı, grup ve diğer sınıfların izinlerini temsil eden üç karakterlik üç set halinde yer alır. Her gruptaki karakterler okuma / yazma / yürütmeye izin verilip verilmediğini gösterir. İzin verilirse r
, w
veya olur x
. Aksi halde olacak -
.
Bu Not setuid , setgid ve yapışkan bit için her bir grubu üçüncü karakterini değişebilir s
, S
, t
ya da T
. İşte basit bir kural: karakter küçük harfse, izin ayarlanır; aksi halde değildir.
(Sembolik izin gösterimi ile ilgili ayrıntılar için lütfen buraya bakın .)
Her kullanıcının kendi kullanıcı kimliği vardır ve her grubun kendi grup kimliği vardır. Tüm kimlikler negatif olmayan tamsayılar olacaktır. Bir kullanıcı en az bir gruba ait olacaktır. Bir kullanıcı A
bir dosyaya erişmek istiyorsa, sistem izinlerini aşağıdaki gibi kontrol edecektir:
Dosya kullanıcıya aitse
A
, kullanıcı sınıfı izinlerini kontrol edin .Dosya ait değilse
A
ancakA
dosyanın ait olduğu gruba aitse grup sınıfının izinlerini kontrol edin .Aksi takdirde, diğer sınıfların izinlerini kontrol edin .
Ancak, bir istisna vardır: kullanıcı kimliği 0 ise (süper kullanıcı), herhangi bir şey yapma iznine sahiptirler !
Özellikler
- Programınız / işleviniz bunları herhangi bir makul biçimde girdi olarak almalıdır:
- Sembolik gösterimde izinler .
- Dosyanın ait olduğu kullanıcı kimliği ve grup kimliği.
- Ait kullanıcı kimliği
A
veA
ait olan grup kimliklerinin listesi . - Erişim türü. Okuma, yazma ve yürütme için üç farklı tek basamaklı veya tek karakterlik değeri kullanabilirsiniz.
- Dosyaya
A
erişim izni varsa doğruluk değeri veya değilse yanlış bir değer döndürme / çıktı alma . - Gösterimin ilk karakterinin her zaman
-
(normal dosya) olacağını varsayabilirsiniz . - Bu kod golf , yani bayt en kısa kazanır!
Test Durumları
Buradaki biçim [permissions, user ID of file, group ID of file, user ID of A, group IDs of A, type(r/w/x)]
.
[-rwx------, 13, 15, 13, [15, 24], r]: True # user
[-rwxr-xr-x, 13, 24, 24, [15, 24], w]: False # group
[-rwxr-Sr-T, 13, 15, 24, [15, 35], x]: False # group
[-rwsr-xr-t, 13, 15, 24, [24, 35], x]: True # others
[----------, 13, 15, 0, [0, 1, 2], r]: True # superuser
[----------, 13, 15, 1, [0, 1, 2], r]: False # others
[----rwxrwx, 13, 15, 13, [15, 24], r]: False # user