Yeni bir kullanıcının tehlikeli bir şey yapmasını nasıl önleyebilirim?


31

Linux'u yeni bir kullanıcı olarak denemek için yakın zamanda Ubuntu sunucusunu sunucum üzerine kurdum. chmod 777Yazılabilir olması için web sunucusu dizinine ihtiyacım olduğunu söyleyen web sunucusunu nasıl kuracağımı öğreten bir rehber izledim .

Her neyse, sunucuda kendi dizinine yerleştirdiğim bazı dosyaları görmesine izin vermek için bir arkadaşım için yeni bir hesap oluşturdum:

adduser francis

Hesabı oluşturduktan sonra neye sahip olduğunu kontrol ettim.

groups francis

"Francis: francis" dedi, bu yüzden bir sorun değil diye düşündüm, ubuntu varsayılan olarak hiçbir gruba dahil etmedi, bu mantıklı, güvenlik açısından fazladan izin almadan onu yarattı, bu yüzden her şey yolunda ve zekice. Bir hafta sonra, mutlak ve kesin bir korku içinde, SUDO veya sistem dizinlerinde karışıklık yaratan şeyler yapmasa da, sunucudaki hemen hemen her şeye tam erişebildiğini öğrendim. Örneğin, / dizin / dizininde (ve dolayısıyla php configs dosyalarında saklanan parolalar) web sunucusu dosyalarıma tam okuma / yazma erişimine sahipti; bu dizine erişmediğimde, ona ekleyiciyi yaptıktan sonra hiçbir şeye özel erişim izni vermedim.

Herneyse, burada neler oluyor? Önemli bir şeye erişimini nasıl öldürürüm? / Media veya / var / www gibi şeylere erişememelidir. Yeni kullanıcıların varsayılan olarak tehlikeli bir şey yapmasını ya da nerede olmamalıydıklarını engellemenin yasak olduğunu düşündüm.

Sonuç olarak, sadece + el ile belirttiğim dizinlere, düzgün çalışması gereken dizinlere erişmesine izin vermem gerekiyor (kendi ana dizini, vim, nano vb.)

teşekkür ederim


30
777 numaralı chmod yapıyor ve neden herkesin oraya yazma okuyabildiğini mi soruyorsunuz? chmod man sayfasını oku
Anwar

16
Evet, 777 senin problemin, birçok nedenden dolayı.
Android Dev

21
@Askerman - Hayır, 777 verdiğinizde, herkes her şeye erişebilir , lütfen bunu okuyun: linux.com/learn/understanding-linux-file-permissions
Android Dev

11
Özellikle de tamamen yeni bir ortamda öğrenirken hepimiz hata yaparız. Bu, öğrenmek için iyi bir şey, kesinlikle Linux tabanlı bir işletim sistemi kullanırken Windows'ta işlerin nasıl yürüdüğü hakkındaki düşüncelerinizi aktarmanız akıllıca olacaktır. İzinlerinizi geri aldıktan sonra, kullanıcının yapmaması gereken hiçbir şeyi değiştiremeyeceğini fark etmelisiniz. Başka bir chmodyerde kullandıysanız , başka sorunlarınız olabilir.
Arronical

8
Bilginize - Bu soruyu kızdırıyorum, çünkü bu yeni insanların bulması için gerçekten iyi bir soru. Ve bu yanlış anlama muhtemelen bizim düşündüğümüzden daha yaygındır. Bu aynı zamanda neden internette (burada bile) bulduklarını, ne yaptıklarını bilmeden kopyalamamanın iyi bir örneğidir.
Aaron,

Yanıtlar:


40

Bu tasarlandığı gibi. Ve daha kötüsü. chmod 777 ... "Sahibi, grubundaki herkes ve herkesin okuma, yazma ve izinlerini okumasını istiyorum."

Bu oldukça korkunç.

Ve bir web sunucusu için, 777 optimal değildir. 755 (Sahip tam izin grubuna sahip ve diğerleri okuma + yürütme) ortak bir varsayılandır, ancak sahip olduğunuz (web sunucusu kullanıcısı) için belki de en azından okuma-yazma veya okuma-yazma yürütmek istediğiniz dediğiniz gibi Grup ve kullanıcı için izin yok. Hangi uygun izin seviyelerinin sunucu arızasında olduğu konusunda daha eksiksiz sorular var, ancak 640 veya 740 gibi bir şey düşünün.

kullanıcıyı tutmak chroot'u kurma - o da kendi küçük dünyasında kullanıcıyı koyabilirsiniz söyledi yılında sistemde kendi alanı. Bunu yapmak için etrafında yüzen kılavuzlar var - örneğin oli, burada gereksinimlerinize bağlı olarak bir seçenek olabilecek mükemmel cevabı .


4
Küçük nokta: "sahibi, grubundaki herkes ..." - dosya sahibinin mutlaka dosya grubuna ait olması gerekmez.
alex_d

2
Güzel. Servfault'daki kanonik cevaba değinmeni seviyorum.
Elder Geek

3
Bu durum için tarihi jargon " dünyaca okunabilir / yazılabilir" dir.
Kaz

19

Temel olarak, bu şekilde parçalanır:

R = 4 (read)
W = 2 (write)
X = 1 (execute)

Yani, okuma izinleri sadece 4, okuma ve yazma 6, okuma ve yürütme 5 ve hepsi (okuma, yazma, yürütme) 7'dir. veya herkes.

Bu izinleri chmodbir dosya veya dizin konumuna uygularken , yukarıda hesaplanan sayılar bu şekilde uygulanır, her biri sahibi, grubu ve herkes için bir oktet içerir:

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

Bu yüzden kendime ve grubuma okuduğum, sahip olduğum bir klasöre izinler yazıp uygulayabilseydim ama herkesin okuyabilmesini bile istemedim , şunu kullanırdım:

$ chmod 770 myDirectory

Daha fazla bilgi için chmod man sayfasına bakınız :

$ man chmod

Doğru izinleri doğru sırayla yapmak için bir araya getirilen bitleri hatırlayamıyorsanız, okunması daha kolay bir şekilde kullanabilirsiniz chmod ugo+rwx <...>. Karakterler için beklemeye u ser, g RUBU, O Ther; R EAD, ağırlık ayin, örneğin X ecute. Kaldırmak için '-' kullanabilirsiniz (örneğin:) chmod go-wx <...>. Bunun sadece yazdıklarınızı tam olarak eklediğini veya kaldırdığını unutmayın. chmod ugo+rwx <file>; chmod u+rwx <file> gelmez grubun / diğer kullanıcıların erişimini kaldıracak.
ReactiveRaven

@ReactiveRaven Bu harika bir nokta. Fakat OP'nin ne chmod 777yaptığı konusunda kafası karışıktı , bu yüzden açıklamalarımı yönlendirdim.
Aaron,

@Zanna İyi arama!
Aaron

6

Diğerlerinin de söylediği gibi, 777 olarak ayarlanmış izinlere sahip olmamanız gerekir.

İşte kullandığım yardımcı bir referans sayfası.

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+

1
Güzel! Bu, görsel öğrenen insanlara (benim gibi) büyük bir yardımdır.
Aaron,

3

Giriş yaptığınız bir kişiyle dosya paylaşmak için özel bir şey yapmanıza gerek yoktur. Varsayılan bir Debian kurulumunda, kullanıcılar birbirlerinin giriş dizinlerine erişebilirler.

Örneğin,

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

Ana dizindeki izinler sistemimdeki herhangi bir kullanıcı için okunuyor (r) ve erişiliyor (x) . Sadece ek olarak ben yazdım (w) erişimine .

Ayrıca, umaskUbuntu'daki varsayılan , kullanıcıların oluşturduğu dosya ve dizinlerin varsayılan olarak dünya tarafından okunabileceği şekildedir . Sen ayarlayabilirsiniz umaskiçin077 bunu istemiyorsa.

Bunun anlamı, varsayılan kurulumda, kullanıcı youbelgeyi ~/README.txtbenimle paylaşmak istiyorsa, youyapılması gereken hiçbir şey yoktur. Basitçe görüntüleyebilirim:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

Dosyayı düzenleyemiyorum veya kaldıramıyorum, ancak yazma iznimin olduğu bir yere kopyalayabilirim. O zaman nüsha bende:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

AskUbuntu'da bir başka cevapta açıkladığım gibi, sistemin çoğunun varsayılan olarak dünya tarafından okunabilir olmasının iyi nedenleri vardır . Ancak, paylaşılan bir sistemde, ev dizinlerini sahip olmayanlara erişilemez duruma getirmek mantıklı olabilir:

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

... görünüşe göre birçok kullanıcı varsayılanın farkında değil - QED ;-). Kullanıcıların dosya izinlerinin sırları korumadığının farkında olmaları daha akıllıca olacaktır.


1

Ubuntu'da, herhangi bir kullanıcının 'sudo' grubuna eklenmiş süper kullanıcı imtiyazı vardır. Lütfen bu gruba başka kullanıcı eklenmemesini sağlamak için kontrol edin.

Dosyalarınızı ve dizini diğer kullanıcılardan korumak için yukarıdaki cevabınızdaki Sayın Journeyman Geek tarafından önerilen izinleri belirleyebilirsiniz.

Dosyalarınızı ve dizinlerinizi diğerlerinden korumak için özel izinler de kullanabilirsiniz.

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.