Linux'ta izinler (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Herkese selam. Bu, RedHat RHCSA RHCE 7 RedHat Enterprise Linux 7 EX200 ve EX300 kitabından bir makalenin çevirisidir.

Kendimden: Makalenin yalnızca yeni başlayanlar için değil, aynı zamanda daha deneyimli yöneticilerin bilgilerini düzene koymalarına da yardımcı olacağını umuyorum.

Hadi, gidelim.

Linux'ta izinler (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Linux'ta dosyalara erişmek için izinler kullanılır. Bu izinler üç nesneye atanır: dosya sahibi, grup sahibi ve başka bir nesne (yani, diğer herkes). Bu makalede, izinlerin nasıl uygulanacağını öğreneceksiniz.

Bu makale, temel kavramlara genel bir bakışla başlar, ardından Özel izinler ve Erişim Kontrol Listeleri (ACL'ler) tartışılır. Bu makalenin sonunda, umask aracılığıyla varsayılan izinlerin ayarlanmasını ve genişletilmiş kullanıcı özniteliklerinin yönetimini ele alıyoruz.

Dosya sahipliği yönetimi

İzinleri tartışmadan önce, dosya ve dizin sahibinin rolünü bilmelisiniz. Dosyaların ve dizinlerin mülkiyeti, izinlerle uğraşmak için çok önemlidir. Bu bölümde öncelikle sahibini nasıl görebileceğinizi öğreneceksiniz. Daha sonra dosyalar ve dizinler için grup sahibini ve kullanıcıyı nasıl değiştireceğinizi öğreneceksiniz.

Bir dosya veya dizinin sahibini görüntüleme

Linux'ta her dosyanın ve her dizinin iki sahibi vardır: bir kullanıcı ve bir grup sahibi.

Bu sahipler, bir dosya veya dizin oluşturulduğunda belirlenir. Dosyayı oluşturan kullanıcı o dosyanın sahibi olur ve aynı kullanıcının ait olduğu birincil grup da o dosyanın sahibi olur. Bir kullanıcı olarak bir dosyaya veya dizine erişim izniniz olup olmadığını belirlemek için, kabuk sahipliği kontrol eder.

Bu, aşağıdaki sırada gerçekleşir:

  1. Kabuk, erişmek istediğiniz dosyanın sahibi olup olmadığınızı kontrol eder. Sahip sizseniz, izinler alırsınız ve kabuk kontrolü durdurur.
  2. Dosyanın sahibi değilseniz, kabuk, dosya üzerinde izinleri olan bir grubun üyesi olup olmadığınızı kontrol edecektir. Bu grubun bir üyesiyseniz, dosyaya grubun belirlediği izinlerle erişirsiniz ve kabuk kontrolü durdurur.
  3. Bir grubun kullanıcısı veya sahibi değilseniz, size diğer kullanıcıların (Diğer) hakları verilir.

Geçerli sahip atamalarını görmek için şu komutu kullanabilirsiniz: ls -l. Bu komut, grubun kullanıcısını ve sahibini gösterir. Aşağıda, /home dizinindeki dizinlerin sahip ayarlarını görebilirsiniz.

[root@server1 home]# ls -l
total 8
drwx------. 3  bob            bob            74     Feb   6   10:13 bob
drwx------. 3  caroline       caroline       74     Feb   6   10:13 caroline
drwx------. 3  fozia          fozia          74     Feb   6   10:13 fozia
drwx------. 3  lara           lara           74     Feb   6   10:13 lara
drwx------. 5  lisa           lisa           4096   Feb   6   10:12 lisa
drwx------. 14 user           user           4096   Feb   5   10:35 user

komutu ile ls belirli bir dizindeki dosyaların sahibini görüntüleyebilirsiniz. Bazen, sahibi olarak belirli bir kullanıcı veya gruba sahip olan sistemdeki tüm dosyaların bir listesini almak yararlı olabilir. Bunun için kullanabilirsiniz bulmak. Argüman Kullanıcı bul bu amaçla kullanılabilir. Örneğin, aşağıdaki komut linda kullanıcısının sahip olduğu tüm dosyaları listeler:

find / -user linda

Ayrıca kullanabilirsiniz bulmak sahibi olarak belirli bir gruba sahip dosyaları aramak için.

Örneğin, aşağıdaki komut gruba ait tüm dosyaları arar. kullanıcılar:

find / -group users

Sahip değişikliği

Uygun izinleri uygulamak için dikkate alınması gereken ilk şey sahipliktir. Bunun için bir komut var chown. Bu komutun sözdizimini anlamak kolaydır:

chown кто что

Örneğin, aşağıdaki komut /home/account dizininin sahibini linda kullanıcısı olarak değiştirir:

chown linda /home/account

Ekip chown biri özellikle kullanışlı olan birkaç seçeneğe sahiptir: -R. Ne yaptığını tahmin edebilirsiniz çünkü bu seçenek diğer birçok komut için de mevcuttur. Bu, geçerli dizinin sahibini ve aşağıdaki her şeyi ayarlamanıza izin veren sahibi yinelemeli olarak ayarlamanıza olanak tanır. Aşağıdaki komut, /home dizininin ve altındaki her şeyin sahipliğini linda kullanıcısına değiştirir:

Şimdi sahipler şöyle görünüyor:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 account account 62 Sep 25 21:41 account
drwx------. 2 lisa    lisa    62 Sep 25 21:42 lisa

Yapalım:

[root@localhost ~]# chown -R lisa /home/account
[root@localhost ~]#

Artık kullanıcı lisa, hesap dizininin sahibi oldu:

[root@localhost ~]# ls -l /home
total 0
drwx------. 2 lisa account 62 Sep 25 21:41 account
drwx------. 2 lisa lisa    62 Sep 25 21:42 lisa

Bir grubun sahibini değiştirme

Bir grubun sahipliğini değiştirmenin iki yolu vardır. Bunu kullanarak yapabilirsiniz chown, ancak adında özel bir komut var. chgrpbu işi yapar. komutunu kullanmak istiyorsanız chown, kullanmak . veya : grup adının önünde.

Aşağıdaki komut, /home/account grubunun herhangi bir sahibini hesap grubu olarak değiştirir:

chown .account /home/account

kullanabilirsiniz chown bir kullanıcının ve/veya grubun sahibini çeşitli şekillerde değiştirmek için. İşte bazı örnekler:

  • chown lisa dosyam1 lisa kullanıcısını dosyam1'in sahibi olarak ayarlar.
  • chown lisa.sales dosyam kullanıcı lisa'yı dosyam dosyasının sahibi olarak ayarlar ve aynı zamanda satış grubunu da aynı dosyanın sahibi olarak ayarlar.
  • chown lisa:satış dosyam önceki komutla aynı.
  • chown .sales dosyam satış grubunu, kullanıcının sahibini değiştirmeden dosyamın sahibi olarak ayarlar.
  • chown : satış dosyam önceki komutla aynı.

komutunu kullanabilirsiniz. chgrpGrubun sahibini değiştirmek için. Kullanabileceğiniz aşağıdaki örneği göz önünde bulundurun chgrp hesap dizininin sahibini satış grubuna ayarlayın:

chgrp .sales /home/account

Davada olduğu gibi chown, seçeneğini kullanabilirsiniz -R с chgrp, grubun sahibini yinelemeli olarak değiştirmenin yanı sıra.

Varsayılan Sahibi Anlamak

Bir kullanıcı bir dosya oluşturduğunda, varsayılan sahipliğin uygulandığını fark etmiş olabilirsiniz.
Dosyayı oluşturan kullanıcı otomatik olarak o dosyanın sahibi olur ve o kullanıcının birincil grubu otomatik olarak o dosyanın sahibi olur. Bu genellikle /etc/passwd dosyasında kullanıcının birincil grubu olarak listelenen gruptur. Ancak kullanıcı birden fazla grubun üyesiyse etkin birincil grubu değiştirebilir.

Geçerli etkin birincil grubu göstermek için kullanıcı şu komutu kullanabilir: gruplar:

[root@server1 ~]# groups lisa
lisa : lisa account sales

Mevcut linda kullanıcısı etkin birincil grubu değiştirmek isterse, şu komutu kullanacaktır: Newgrpardından yeni etkin birincil grup olarak ayarlamak istediği grubun adı gelir. komutunu kullandıktan sonra Newgrp kullanıcı bir komut girene kadar birincil grup etkin olacaktır çıkış veya oturumu kapatma.

Aşağıda, linda kullanıcısının bu komutu, satışları birincil grup olarak nasıl kullandığı gösterilmektedir:

lisa@server1 ~]$ groups
lisa account sales
[lisa@server1 ~]$ newgrp sales
[lisa@server1 ~]$ groups
sales lisa account
[lisa@server1 ~]$ touch file1
[lisa@server1 ~]$ ls -l
total 0
-rw-r--r--. 1 lisa sales 0 Feb 6 10:06 file1

Etkin birincil grubu değiştirdikten sonra, kullanıcı tarafından oluşturulan tüm yeni dosyalar, grubun sahibi olarak bu gruba sahip olacaktır. Orijinal birincil grup ayarına geri dönmek için şunu kullanın: çıkış.

Komutu kullanabilmek için Newgrp, kullanıcı birincil grup olarak kullanmak istediği grubun üyesi olmalıdır. Ek olarak, komut kullanılarak bir grup için bir grup şifresi kullanılabilir. gpasswd. Kullanıcı komutu kullanırsa Newgrpancak hedef grubun bir üyesi değilse, kabuk grubun parolasını ister. Doğru grup parolasını girdikten sonra, yeni bir etkin birincil grup oluşturulacaktır.

Temel haklar yönetimi

Linux izin sistemi 1970'lerde icat edildi. O yıllarda bilgisayar ihtiyaçları sınırlı olduğu için temel izin sistemi oldukça sınırlıydı. Bu izin sistemi, dosyalara ve dizinlere uygulanabilen üç izin kullanır. Bu bölümde, bu izinleri nasıl kullanacağınızı ve değiştireceğinizi öğreneceksiniz.

Okuma, Yazma ve Yürütme İzinlerini Anlama

Üç temel izin, dosyaları okumanıza, yazmanıza ve yürütmenize izin verir. Bu izinlerin etkisi, dosyalara veya dizinlere uygulandığında farklılık gösterir. Bir dosya için okuma izni size dosyayı okumak için açma hakkı verir. Bu nedenle, içeriğini okuyabilirsiniz, ancak bu, bilgisayarınızın dosyayı açıp onunla bir şeyler yapabileceği anlamına gelir.

Örneğin, bir kitaplığa erişmesi gereken bir program dosyasının o kitaplığa okuma erişimi olmalıdır. Buradan, okuma izninin dosyalarla çalışmak için ihtiyacınız olan en temel izin olduğu sonucu çıkar.

Bir dizine uygulandığında, okuma o dizinin içeriğini görüntülemenizi sağlar. Bu iznin dizindeki dosyaları okumanıza izin vermediğini bilmelisiniz. Linux izin sistemi kalıtımı bilmez ve bir dosyayı okumanın tek yolu o dosya üzerinde okuma izinlerini kullanmaktır.

Muhtemelen tahmin edebileceğiniz gibi, bir dosyaya uygulanan yazma izni, dosyaya yazmaya izin verir. Yani mevcut dosyaların içeriğini değiştirmenize olanak sağlar. Ancak, yeni dosyalar oluşturmanıza veya silmenize veya dosya izinlerini değiştirmenize izin vermez. Bunu yapmak için, dosyayı oluşturmak istediğiniz dizine yazma izni vermeniz gerekir. Dizinlerde, bu izin ayrıca yeni alt dizinler oluşturmanıza ve silmenize olanak tanır.

Yürütme izni, dosyayı yürütmek için ihtiyacınız olan şeydir. Asla varsayılan olarak kurulmaz, bu da Linux'u virüslere karşı neredeyse tamamen bağışık hale getirir. Yalnızca dizinde yazma izni olan biri yürütme izni uygulayabilir.

Aşağıda, temel izinlerin kullanımı özetlenmektedir:

Linux'ta izinler (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

chmod'u kullanma

Komut, izinleri yönetmek için kullanılır. chmod... kullanma chmod kullanıcı (kullanıcı), gruplar (grup) ve diğerleri (diğer) için izinler ayarlayabilirsiniz. Bu komutu iki modda kullanabilirsiniz: göreceli mod ve mutlak mod. Mutlak modda, temel izinleri ayarlamak için üç basamak kullanılır.

Linux'ta izinler (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

İzinleri ayarlarken ihtiyacınız olan değeri hesaplayın. Kullanıcı için okuma/yazma/yürütme, grup için okuma/yürütme ve /somefile içindeki diğerleri için okuma/yürütme ayarlamak istiyorsanız, aşağıdaki komutu kullanırsınız. chmod:

chmod 755 /somefile

kullandığınızda chmod bu şekilde mevcut tüm izinler, ayarladığınız izinlerle değiştirilir.

Mevcut izinlere göre izinleri değiştirmek isterseniz, chmod göreceli modda. kullanma chmod göreceli modda, ne yapmak istediğinizi belirtmek için üç göstergeyle çalışırsınız:

  1. Önce kimin için izinleri değiştirmek istediğinizi belirtirsiniz. Bunu yapmak için kullanıcı (u), grup (g) ve diğerleri (o).
  2. Ardından, geçerli kipten izinler eklemek veya kaldırmak veya bunları mutlak olarak ayarlamak için bir ifade kullanırsınız.
  3. sonunda kullanırsın r, w и xayarlamak istediğiniz izinleri belirtmek için.

Göreceli modda izinleri değiştirirken, tüm nesneler için izin eklemek veya kaldırmak için "kime" bölümünü atlayabilirsiniz. Örneğin, bu komut tüm kullanıcılar için yürütme izni ekler:

chmod +x somefile

Göreceli modda çalışırken daha karmaşık komutlar da kullanabilirsiniz. Örneğin, bu komut bir gruba yazma izni ekler ve diğerleri için okuma iznini kaldırır:

chmod g+w,o-r somefile

Kullanırken chmod -R o+rx /veri /data dizinindeki tüm dizinler ve dosyalar için yürütme izni ayarlarsınız. Dosyalar için değil, yalnızca dizinler için yürütme izni ayarlamak üzere şunu kullanın: chmod -R o+ rX /veri.

Büyük X, dosya bazı nesneler için yürütme iznini zaten ayarlamamışsa, dosyaların yürütme izni almamasını sağlar. Bu, X'i yürütme izinleriyle başa çıkmanın daha akıllı bir yolu yapar; bu, gerekli olmadığı dosyalarda bu izni ayarlamaktan kaçınacaktır.

Genişletilmiş haklar

Az önce okuduğunuz temel izinlere ek olarak, Linux ayrıca bir dizi gelişmiş izin içerir. Bunlar, varsayılan olarak belirlediğiniz izinler değildir, ancak bazen yararlı bir ekleme sağlarlar. Bu bölümde, bunların ne olduğunu ve nasıl kurulacağını öğreneceksiniz.

SUID, GUID ve Yapışkan Bit Genişletilmiş İzinlerini Anlama

Üç gelişmiş izin vardır. Bunlardan ilki, bir kullanıcı tanımlayıcısı (SUID) belirleme iznidir. Bazı özel durumlarda, bu izni yürütülebilir dosyalara uygulayabilirsiniz. Varsayılan olarak, bir yürütülebilir dosyayı çalıştıran kullanıcı, bu dosyayı kendi izinleriyle çalıştırır.

Sıradan kullanıcılar için bu genellikle programın kullanımının sınırlı olduğu anlamına gelir. Ancak bazı durumlarda, kullanıcının yalnızca belirli bir görevi gerçekleştirmek için özel izinlere ihtiyacı vardır.

Örneğin, bir kullanıcının parolasını değiştirmesi gereken bir durumu düşünün. Bunun için kullanıcının yeni şifresini /etc/shadow dosyasına yazması gerekmektedir. Ancak, bu dosya root olmayan kullanıcılar tarafından yazılamaz:

root@hnl ~]# ls -l /etc/shadow
----------. 1 root root 1184 Apr 30 16:54 /etc/shadow

SUID izni bu soruna bir çözüm sunar. /usr/bin/passwd yardımcı programı bu izni varsayılan olarak kullanır. Bu, parolayı değiştirirken kullanıcının geçici olarak kök haline geldiği ve bu da onun /etc/shadow dosyasına yazmasına izin verdiği anlamına gelir. SUID iznini şununla görebilirsiniz: ls -l gibi s normalde görmeyi beklediğiniz bir konumda x özel izinler için:

[root@hnl ~]# ls -l /usr/bin/passwd
-rwsr-xr-x. 1 root root 32680 Jan 28 2010 /usr/bin/passwd

SUID izni yararlı görünebilir (ve bazı durumlarda öyledir), ancak aynı zamanda potansiyel olarak tehlikelidir. Doğru uygulanmazsa, yanlışlıkla kök izinlerini verebilirsiniz. Bu nedenle, sadece azami dikkatle kullanmanızı tavsiye ederim.

Çoğu yöneticinin onu hiçbir zaman kullanması gerekmeyecek; onu yalnızca işletim sisteminin varsayılan olarak ayarlaması gereken bazı dosyalarda göreceksiniz.

İkinci özel izin, grup tanımlayıcısıdır (SGID). Bu iznin iki etkisi vardır. Yürütülebilir bir dosyaya uygulandığında, dosyayı yürüten kullanıcıya dosyanın grup sahibinin izinlerini verir. Yani SGID, SUID ile aşağı yukarı aynı şeyi yapabilir. Ancak SGID pratikte bu amaçla kullanılmamaktadır.

SUID izninde olduğu gibi, SGID bazı sistem dosyalarına varsayılan ayar olarak uygulanır.

Bir dizine uygulandığında, SGID yararlı olabilir, çünkü onu o dizinde oluşturulan dosyalar ve alt dizinler için varsayılan grup sahibini ayarlamak üzere kullanabilirsiniz. Varsayılan olarak, bir kullanıcı bir dosya oluşturduğunda, etkin birincil grubu, o dosya için grup sahibi olarak ayarlanır.

Bu, özellikle Red Hat/CentOS kullanıcılarının birincil gruplarını, kullanıcıyla aynı ada sahip ve kullanıcının tek üyesi olduğu bir grup olarak ayarladıkları için her zaman çok kullanışlı değildir. Böylece varsayılan olarak kullanıcının oluşturduğu dosyalar toplu olarak paylaşılacaktır.

Linda ve Lori kullanıcılarının muhasebede çalıştığı ve bir grubun üyesi olduğu bir durum hayal edin. hesap. Varsayılan olarak, bu kullanıcılar, tek üyesi oldukları özel bir grubun üyeleridir. Ancak, her iki kullanıcı da hesap grubunun üyesidir, ancak aynı zamanda ikincil grup parametresidir.

Varsayılan durum, bu kullanıcılardan herhangi biri bir dosya oluşturduğunda, dosyanın sahibi birincil grubun olur. Bu nedenle, varsayılan olarak linda, lori tarafından oluşturulan dosyalara erişemez ve bunun tersi de geçerlidir. Ancak, paylaşılan bir grup dizini oluşturursanız (örneğin /groups/account) ve bu dizine SGID izninin uygulandığından ve grup hesabının o dizinin grup sahibi olarak ayarlandığından emin olursanız, o dizinde oluşturulan tüm dosyalar ve tüm alt dizinlerinden, grup hesabını da varsayılan olarak grup sahibi olarak alın.

Bu nedenle SGID izni, genel grup dizinlerinde ayarlamak için çok yararlı bir izindir.

Çıktıda gösterilen SGID izni ls -l gibi s normalde bir grubu yürütmek için izin bulacağınız konumda:

[root@hnl data]# ls -ld account
drwxr-sr-x. 2 root account 4096 Apr 30 21:28 account

Özel izinlerin üçüncüsü yapışkan bittir. Bu izin, birden çok kullanıcının aynı dizine yazma erişimine sahip olduğu bir ortamda dosyaları yanlışlıkla silinmeye karşı korumak için kullanışlıdır. Yapışkan bit kullanılırsa, bir kullanıcı yalnızca dosyayı içeren dosyanın veya dizinin kullanıcı sahibiyse dosyayı silebilir. Bu nedenle /tmp dizini için varsayılan izin olarak kullanılır ve genel grup dizinleri için de yararlı olabilir.

Yapışkan bit olmadan, kullanıcı bir dizinde dosya oluşturabiliyorsa, o dizinden de dosya silebilir. Herkese açık bir grup ortamında bu can sıkıcı olabilir. Her ikisinin de /data/account dizinine yazma izinlerine sahip olan ve bu izinleri hesap grubunun üyeleri olarak alan linda ve lori kullanıcılarını düşünün. Bu nedenle linda, lori tarafından oluşturulan dosyaları silebilir ve bunun tersi de geçerlidir.

Yapışkan biti uyguladığınızda, kullanıcı yalnızca aşağıdaki koşullardan biri doğruysa dosyaları silebilir:

  • Kullanıcı, dosyanın sahibidir;
  • Kullanıcı, dosyanın bulunduğu dizinin sahibidir.

Kullanırken ls -l, yapışkan parçayı şu şekilde görebilirsiniz: t normalde başkaları için yürütme izni göreceğiniz konumda:

[root@hnl data]# ls -ld account/
drwxr-sr-t. 2 root account 4096 Apr 30 21:28 account/

Genişletilmiş hakları uygulama

SUID, SGID ve sticky bit uygulamak için ayrıca kullanabilirsiniz. chmod. SUID'nin sayısal değeri 4, SGID'nin sayısal değeri 2 ve yapışkan bitin sayısal değeri 1'dir.

Bu izinleri uygulamak istiyorsanız, dört haneli bir argüman eklemeniz gerekir. chmod, ilk rakamı özel izinleri ifade eder. Örneğin, aşağıdaki satır dizine SGID izni ekleyecek ve kullanıcı için rwx'i, grup ve diğerleri için rx'i ayarlayacaktır:

chmod 2755 /somedir

Çalışmadan önce ayarlanan mevcut izinleri görmeniz gerekiyorsa, bu oldukça pratik değildir. chmod mutlak modda. (Bunu yapmazsanız, izinlerin üzerine yazma riskiyle karşı karşıya kalırsınız.) Bu nedenle, özel izinlerden herhangi birini uygulamanız gerekirse göreli modda çalıştırmanızı öneririm:

  1. SUID kullanımı için chmod u+s.
  2. SGID kullanımı için chmod g+s.
  3. Yapışkan uç kullanımı için mod +t, ardından izinlerini ayarlamak istediğiniz dosya veya dizinin adı.

Tablo, özel izinleri yönetme hakkında bilmeniz gereken her şeyi özetlemektedir.

Linux'ta izinler (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Özel haklarla çalışma örneği

Bu örnekte, grup üyelerinin paylaşılan grup dizinindeki dosyaları paylaşmasını kolaylaştırmak için özel izinler kullanıyorsunuz. ID bitini, set grup ID'sinin yanı sıra yapışkan bit'e atarsınız ve bir kez ayarlandıktan sonra, grup üyelerinin birlikte çalışmasını kolaylaştırmak için özelliklerin eklendiğini görürsünüz.

  1. linda kullanıcısı olduğunuz bir terminal açın. komutu ile kullanıcı oluşturabilirsiniz. kullanıcı ekle linda, şifre ekle şifre linda.
  2. Kökte /data dizinini ve /data/sales alt dizinini komutla oluşturun mkdir -p /veri/satış. Tamamlamak cd /veri/satışsatış dizinine gitmek için. Tamamlamak linda1'e dokunma и linda2'e dokunmalinda'ya ait iki boş dosya oluşturmak için.
  3. Yürüt su-lisa geçerli kullanıcıyı aynı zamanda satış grubunun bir üyesi olan lisa kullanıcısına geçirmek için.
  4. Yürüt cd /veri/satış ve bu dizinden yürütün ls -l. Linda kullanıcısı tarafından oluşturulan ve linda grubuna ait iki dosya göreceksiniz. Tamamlamak rm -f linda*. Bu, her iki dosyayı da kaldıracaktır.
  5. Yürüt lisa1'e dokunma и lisa2'e dokunmalisa kullanıcısına ait iki dosya oluşturmak için.
  6. Yürüt su- ayrıcalıklarınızı root'a yükseltmek için.
  7. Yürüt chmod g+s,o+t /veri/satışpaylaşılan grup dizinindeki yapışkan bitin yanı sıra grup tanımlayıcı (GUID) bitini ayarlamak için.
  8. Yürüt su-linda. O zaman yap linda3'e dokunma и linda4'e dokunma. Artık oluşturduğunuz iki dosyanın /data/sales dizininin grup sahibi olan sales grubuna ait olduğunu görmelisiniz.
  9. Yürüt rm -rf lisa*. Yapışkan bit, bu dosyaların sahibi olmadığınız için linda kullanıcısı adına bu dosyaların silinmesini engeller. Linda kullanıcısı /data/sales dizininin sahibiyse, bu dosyaları yine de silebileceğini unutmayın!

Linux'ta ACL yönetimi (setfacl, getfacl)

Yukarıda tartışılan genişletilmiş izinler, Linux'un izinleri işleme biçimine yararlı işlevsellik eklese de, aynı dosyada birden fazla kullanıcı veya gruba izin vermenize izin vermez.

Erişim kontrol listeleri bu özelliği sunar. Ayrıca, yöneticilerin varsayılan izinleri, dizinden dizine değişebilen karmaşık bir şekilde ayarlamasına olanak tanır.

EKL'leri anlama

ACL alt sistemi sunucunuza büyük işlevsellik katsa da bir dezavantajı vardır: tüm yardımcı programlar bunu desteklemez. Bu nedenle, dosyaları kopyaladığınızda veya taşıdığınızda ACL ayarlarınızı kaybedebilirsiniz ve yedekleme yazılımınız ACL ayarlarınızı yedekleyemeyebilir.

tar yardımcı programı ACL'leri desteklemez. Bir yedekleme oluşturduğunuzda ACL ayarlarının kaybolmadığından emin olmak için şunu kullanın: star katran yerine star tar ile aynı seçeneklerle çalışır; sadece ACL ayarları için destek ekler.

ACL'leri şununla da yedekleyebilirsiniz: Getfacl, setfacl komutu kullanılarak geri yüklenebilir. Yedek oluşturmak için şunu kullanın: getfacl -R /dizin > dosya.acls. Ayarları bir yedekleme dosyasından geri yüklemek için şunu kullanın: setfacl --restore=dosya.acl.

Bazı araçların desteğinin olmaması sorun olmamalı. ACL'ler genellikle bireysel dosyalardan ziyade yapısal bir önlem olarak dizinlere uygulanır.
Bu nedenle, dosya sistemindeki akıllı yerlerde uygulanan çok değil, yalnızca birkaçı olacaktır. Bu nedenle, yedekleme yazılımınız desteklemese bile birlikte çalıştığınız orijinal ACL'leri geri yüklemek nispeten kolaydır.

Dosya sistemini ACL'ler için hazırlama

ACL'lerle çalışmaya başlamadan önce dosya sisteminizi ACL'leri destekleyecek şekilde hazırlamanız gerekebilir. Dosya sistemi meta verilerinin genişletilmesi gerektiğinden, dosya sisteminde ACL'ler için her zaman varsayılan destek yoktur. Bir dosya sistemi için ACL'leri ayarlarken "işlem desteklenmiyor" mesajı alırsanız, dosya sisteminiz ACL'leri desteklemiyor olabilir.

Bunu düzeltmek için seçeneği eklemeniz gerekir acl montaj /etc/fstab içinde, böylece dosya sistemi varsayılan olarak ACL desteğiyle bağlanır.

setfacl ve getfacl ile ACL ayarlarını değiştirme ve görüntüleme

Bir ACL ayarlamak için şu komuta ihtiyacınız vardır: setfacl. Geçerli ACL ayarlarını görmek için ihtiyacınız olan Getfacl. Takım ls -l mevcut ACL'leri göstermez; sadece izin listesinden sonra bir + gösterir, bu da ACL'lerin dosya için de geçerli olduğunu gösterir.

ACL'leri kurmadan önce, mevcut ACL ayarlarını ile göstermek her zaman iyi bir fikirdir. Getfacl. Aşağıdaki örnekte, mevcut izinleri ile gösterildiği gibi görebilirsiniz. ls -lve ayrıca ile gösterildiği gibi Getfacl. Yeterince yakından bakarsanız, gösterilen bilgilerin tamamen aynı olduğunu göreceksiniz.

[root@server1 /]# ls -ld /dir
drwxr-xr-x. 2 root root 6 Feb 6 11:28 /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
other::r-x

Komutun yürütülmesi sonucunda Getfacl Aşağıda izinlerin üç farklı nesne için gösterildiğini görebilirsiniz: kullanıcı, grup ve diğerleri. Şimdi satış grubuna da okuma ve yürütme izinleri vermek için bir ACL ekleyelim. bunun için komut setfacl -mg:satış:rx /dir. bu takımda -m mevcut ACL ayarlarının değiştirilmesi gerektiğini gösterir. daha sonrasında g:satış:rx komuta okuma-yürütme ACL'sini ayarlamasını söyler (rx) grup için (g) satış. Aşağıda komutun nasıl göründüğünü ve mevcut ACL ayarlarını değiştirdikten sonra getfacl komutunun çıktısını görebilirsiniz.

[root@server1 /]# setfacl -m g:sales:rx /dir
[root@server1 /]# getfacl /dir
getfacl: Removing leading '/' from absolute path names
# file: dir
# owner: root
# group: root
user::rwx
group::r-x
group:sales:r-x
mask::r-x
other::r-x

Artık bir grup ACL'sinin nasıl kurulacağını anladığınıza göre, kullanıcılar ve diğer kullanıcılar için ACL'leri anlamak kolaydır. Örneğin, komut setfacl -mu:linda:rwx / veri /data dizinindeki kullanıcı linda'ya onu sahip yapmadan veya mevcut sahibin atamasını değiştirmeden izinler verir.

Ekip setfacl birçok özellik ve seçeneğe sahiptir. Bir seçenek özellikle önemlidir, parametre -R. Bu seçenek kullanılırsa, ACL'yi, ACL'yi ayarladığınız dizinde mevcut olan tüm dosyalar ve alt dizinler için ayarlar. Mevcut dizinler için ACL'leri değiştirirken her zaman bu seçeneği kullanmanız önerilir.

Varsayılan ACL'lerle Çalışma

ACL kullanmanın faydalarından biri, bir dizinde birden çok kullanıcıya veya gruba izin verebilmenizdir. Başka bir avantaj da, varsayılan ACL'lerle çalışarak devralmayı etkinleştirebilmenizdir.

Varsayılan ACL'yi ayarlayarak, dizinde oluşturulan tüm yeni öğeler için ayarlanacak izinleri belirlersiniz. Varsayılan ACL'nin mevcut dosya ve alt dizinlerdeki izinleri değiştirmediğini unutmayın. Bunları değiştirmek için normal bir ACL de eklemeniz gerekir!

Bunu bilmek önemlidir. Birden çok kullanıcıyı veya grubu aynı dizine erişmek üzere yapılandırmak için bir ACL kullanmak istiyorsanız, ACL'yi iki kez ayarlamanız gerekir. İlk kullanım setfacl -R -mgeçerli dosyalar için ACL'yi değiştirmek için. Sonra kullan setfacl-md:yaratılacak tüm yeni unsurlarla ilgilenmek.

Varsayılan ACL'yi ayarlamak için seçeneği eklemeniz yeterlidir. d seçenekten sonra -m (sipariş önemlidir!). öyleyse kullan setfacl -md:g:satış:rx / verigrup satışlarının /data dizininde oluşturulmuş her şeyi okumasını ve yürütmesini istiyorsanız.

Varsayılan ACL'leri kullanırken, başkaları için ACL ayarlamak da yararlı olabilir. Bu genellikle pek bir anlam ifade etmez, çünkü başkaları için de izinleri değiştirebilirsiniz. chmod. Bununla birlikte, yapamayacağınız şey chmod, oluşturulan her yeni dosya için diğer kullanıcılara verilmesi gereken hakları belirtmektir. Başkalarının /data içinde oluşturulan herhangi bir şey üzerinde herhangi bir izin almasını önlemek istiyorsanız, örneğin şunu kullanın: setfacl -md:o::- /veri.

ACL'ler ve normal izinler her zaman iyi entegre olmaz. Bir dizine varsayılan bir ACL uygularsanız, ardından bu dizine öğeler eklenir ve ardından normal izinleri değiştirmeye çalışırsanız sorunlar ortaya çıkabilir. Normal izinler için geçerli olan değişiklikler, ACL'ye genel bakışta iyi yansıtılmayacaktır. Sorunlardan kaçınmak için önce normal izinleri ayarlayın, ardından varsayılan ACL'leri ayarlayın (ve bundan sonra bunları bir daha değiştirmemeye çalışın).

ACL'leri Kullanan Yükseltilmiş Hak Yönetimi Örneği

Bu örnekte, daha önce oluşturduğunuz /data/account ve /data/sales dizinleriyle devam edeceksiniz. Önceki örneklerde, satış grubunun /data/sales üzerinde izinlere ve hesap grubunun /data/account üzerinde izinlere sahip olmasını sağladınız.

Öncelikle, hesap grubunun /data/sales dizininde ve satış grubunun /data/account dizininde okuma izinleri aldığından emin olun.

Ardından, tüm yeni dosyaların tüm yeni öğeler için doğru izinlere sahip olduğundan emin olmak için varsayılan ACL'leri ayarlarsınız.

  1. Bir terminal açın.
  2. Yürüt setfacl -mg:hesap:rx /veri/satış и setfacl -mg:satış:rx /veri/hesap.
  3. Yürüt Getfaclizinlerin istediğiniz gibi ayarlandığından emin olmak için.
  4. Yürüt setfacl -md:g:account:rwx,g:sales:rx /veri/satışsatış dizini için varsayılan ACL'yi ayarlamak için.
  5. Kullanarak /data/account dizini için varsayılan bir ACL ekleyin. setfacl -md:g:sales:rwx,g:account:rx /veri/hesap.
  6. /data/sales'e yeni bir dosya ekleyerek ACL ayarlarının geçerli olduğunu doğrulayın. Tamamlamak /veri/satış/yenidosyaya dokunun ve yürütmek getfacl /data/satış/yenidosya Geçerli izinleri kontrol etmek için.

umask ile varsayılan izinleri ayarlama

Yukarıda, varsayılan ACL'lerle nasıl çalışılacağını öğrendiniz. Bir ACL kullanmıyorsanız, alacağınız varsayılan izinleri belirleyen bir kabuk seçeneği vardır: Umask (ters maske). Bu bölümde, varsayılan izinleri nasıl değiştireceğinizi öğreneceksiniz. Umask.

Yeni bir dosya oluşturduğunuzda bazı varsayılan izinlerin ayarlandığını fark etmiş olabilirsiniz. Bu izinler ayar tarafından belirlenir Umask. Bu kabuk ayarı, oturum açan tüm kullanıcılar için geçerlidir. parametrede Umask dosya için otomatik olarak ayarlanabilecek maksimum izinlerden çıkarılan sayısal bir değer kullanılır; dosyalar için maksimum ayar 666 ve dizinler için 777'dir.

Ancak, bu kurala bazı istisnalar uygulanır. Ayarlara eksiksiz bir genel bakış bulabilirsiniz. Umask aşağıdaki tabloda

Kullanılan sayıların Umask, komut için sayısal bağımsız değişkenlerde olduğu gibi chmod, ilk hane kullanıcının izinlerini, ikinci hane grubun izinlerini ve son hane diğerleri için ayarlanan varsayılan izinleri ifade eder. Anlam Umask varsayılan 022, tüm yeni dosyalar için 644 ve sunucunuzda oluşturulan tüm yeni dizinler için 755 verir.

Tüm sayısal değerlere eksiksiz genel bakış Umask ve sonuçları aşağıdaki tabloda.

Linux'ta izinler (chown, chmod, SUID, GUID, sticky bit, ACL, umask)

Umask ayarının nasıl çalıştığını görmenin kolay bir yolu şu şekildedir: dosyanın varsayılan izinleri 666'ya ayarlanmış olarak başlayın ve etkili izinleri almak için umask'ı çıkarın. Dizin ve varsayılan 777 izinleri için de aynısını yapın.

Umask ayarını değiştirmenin iki yolu vardır: tüm kullanıcılar için ve bireysel kullanıcılar için. Umask'ı tüm kullanıcılar için ayarlamak istiyorsanız, kabuk ortamı dosyalarını başlatırken /etc/profile.d içinde belirtildiği gibi umask ayarının dikkate alındığından emin olmalısınız. Doğru yaklaşım, /etc/profile.d dizininde umask.sh adlı bir kabuk betiği oluşturmak ve bu kabuk betiğinde kullanmak istediğiniz umask'ı belirtmektir. Bu dosyada umask değiştirilirse, sunucuya giriş yaptıktan sonra tüm kullanıcılara uygulanır.

Umask'ı /etc/profile ve ilgili dosyalar aracılığıyla ayarlamanın bir alternatifi, oturum açan tüm kullanıcılar için geçerli olduğu yerde, her kullanıcının ana dizininde oluşturulan .profile adlı bir dosyada umask ayarlarını değiştirmektir.

Bu dosyada uygulanan ayarlar yalnızca bireysel kullanıcı için geçerlidir; bu nedenle, daha fazla ayrıntıya ihtiyacınız varsa bu iyi bir yöntemdir. Normal kullanıcılar 027 varsayılan umask ile çalışırken kök kullanıcı için varsayılan umask'ı 022 olarak değiştirmek için bu özelliği kişisel olarak seviyorum.

Genişletilmiş kullanıcı öznitelikleriyle çalışma

Bu, Linux izinleriyle ilgili son bölümdür.

İzinlerle çalışırken, bir kullanıcı veya grup nesnesi ile kullanıcı veya grup nesnelerinin bir dosya veya dizinde sahip olduğu izinler arasında her zaman bir ilişki vardır. Bir Linux sunucusundaki dosyaları korumanın alternatif bir yöntemi, niteliklerle çalışmaktır.
Öznitelikler, dosyaya erişen kullanıcıdan bağımsız olarak işlerini yapar.

ACL'lerde olduğu gibi, dosya özniteliklerinin şu seçeneği içermesi gerekebilir dağ.

bu bir seçenek user_xattr. Genişletilmiş kullanıcı öznitelikleriyle çalışırken "işlem desteklenmiyor" mesajı alırsanız, parametreyi ayarladığınızdan emin olun. dağ /etc/fstab içinde.

Birçok özellik belgelenmiştir. Bazı özellikler mevcut ancak henüz uygulanmadı. Onları kullanmayın; sana hiçbir şey getirmeyecekler.

Aşağıda, uygulayabileceğiniz en yararlı özellikler verilmiştir:

A Bu öznitelik, dosyanın dosya erişim süresinin değişmemesini sağlar.
Tipik olarak, bir dosya her açıldığında, dosyanın erişim zamanı dosyanın meta verilerine kaydedilmelidir. Bu, performansı olumsuz etkiler; bu nedenle, düzenli olarak erişilen dosyalar için öznitelik A Bu özelliği devre dışı bırakmak için kullanılabilir.

a Bu öznitelik, bir dosya eklemenize izin verir, ancak kaldırmanıza izin vermez.

c Birim düzeyinde sıkıştırmayı destekleyen bir dosya sistemi kullanıyorsanız, bu dosya özniteliği, sıkıştırma mekanizması ilk kez etkinleştirildiğinde dosyanın sıkıştırılmasını sağlar.

D Bu öznitelik, dosyalarda yapılan değişikliklerin önce önbelleğe alınması yerine hemen diske yazılmasını sağlar. Bu, dosya önbelleği ile sabit sürücü arasında kaybolmamalarını sağlamak için önemli veritabanı dosyalarında yararlı bir özniteliktir.

d Bu öznitelik, dosyanın dump yardımcı programının kullanıldığı yedeklemelere kaydedilmemesini sağlar.

I Bu öznitelik, etkinleştirildiği dizin için indekslemeyi etkinleştirir. Bu, hızlı dosya erişimi için B-tree veritabanını kullanmayan Ext3 gibi ilkel dosya sistemleri için daha hızlı dosya erişimi sağlar.

i Bu öznitelik, dosyayı sabit hale getirir. Bu nedenle, ek korumaya ihtiyaç duyan dosyalar için yararlı olan dosyada herhangi bir değişiklik yapılamaz.

j Bu öznitelik, bir ext3 dosya sisteminde dosyanın önce günlüğe ve ardından sabit diskteki veri bloklarına yazılmasını sağlar.

s Dosyayı sildikten sonra dosyanın kaydedildiği blokların üzerine 0'lara yazın. Bu, bir dosyanın silindikten sonra geri yüklenememesini sağlar.

u Bu öznitelik, silme hakkında bilgi depolar. Bu, silinen dosyaları kurtarmak için bu bilgilerle çalışan bir yardımcı program geliştirmenizi sağlar.

Nitelikleri uygulamak istiyorsanız, komutu kullanabilirsiniz. sohbet. Örneğin, kullan chattr +s bir dosyanitelikleri bir dosyaya uygulamak için. Bir özelliği kaldırmanız mı gerekiyor? Sonra kullan chattr -s bir dosyave kaldırılacaktır. Halihazırda uygulanmakta olan tüm niteliklere genel bir bakış için şu komutu kullanın: lsattr.

Özet

Bu makalede, izinlerle nasıl çalışılacağını öğrendiniz. Üç temel izni, gelişmiş izinleri ve ACL'lerin bir dosya sistemine nasıl uygulanacağını okudunuz. Varsayılan izinleri uygulamak için umask seçeneğini nasıl kullanacağınızı da öğrendiniz. Bu makalenin sonunda, ek bir dosya sistemi güvenliği katmanı uygulamak için kullanıcı tarafından genişletilmiş öznitelikleri nasıl kullanacağınızı öğrendiniz.

Bu çeviriyi beğendiyseniz, lütfen yorumlara yazın. Yararlı çeviriler yapmak için daha fazla motivasyon olacaktır.

Makaledeki bazı yazım hataları ve dilbilgisi hataları düzeltildi. Daha iyi okunabilirlik için bazı hacimli paragraflar küçültüldü.

"Yalnızca dizinde yönetici haklarına sahip biri yürütme izni uygulayabilir." "Yalnızca dizinde yazma izinleri olan biri yürütme izni uygulayabilir." olarak düzeltildi, bu daha doğru olur.

yorumlar için teşekkürler berez.

Değiştirildi:
Kullanıcının sahibi değilseniz, kabuk dosyanın grubu olarak da bilinen bir grubun üyesi olup olmadığınızı kontrol edecektir.

Için:
Dosyanın sahibi değilseniz, kabuk, dosya üzerinde izinleri olan bir grubun üyesi olup olmadığınızı kontrol edecektir. Bu grubun bir üyesiyseniz, dosyaya grubun belirlediği izinlerle erişirsiniz ve kabuk kontrolü durdurur.

yorumun için teşekkür ederim kriptokorsan

Kaynak: habr.com

Yorum ekle