Wie kann verhindert werden, dass ein neuer Benutzer etwas Gefährliches tut?

31

Ich habe vor kurzem Ubuntu Server auf meinem Server installiert, um Linux als neuen Benutzer auszuprobieren. Ich folgte einem Tutorial zum Einrichten des Webservers, in dem angegeben wurde, dass ich das Verzeichnis chmod 777des Webservers benötige, in das geschrieben werden kann.

Wie auch immer, ich habe ein neues Konto für einen Typen erstellt, damit er einige Dateien auf dem Server sehen kann, die ich in seinem Heimverzeichnis abgelegt habe:

adduser francis

Nach dem Erstellen des Kontos habe ich überprüft, über welchen Zugriff er verfügt

groups francis

Es hieß "francis: francis", also kein Problem, dachte ich, das Ubuntu hat ihn standardmäßig nicht in Gruppen aufgenommen, was Sinn macht, es hat ihn sicherheitstechnisch ohne zusätzliche Berechtigungen erstellt, also ist alles in Ordnung und gut. Eine Woche später fand ich in absolutem Entsetzen heraus, dass er, obwohl er keine Dinge wie SUDO ausführen oder in Systemverzeichnissen herumspielen konnte, vollen Zugriff auf fast alles andere auf dem Server hatte. Zum Beispiel hatte er vollen Lese- / Schreibzugriff auf meine Webserver-Dateien unter / var / www (und damit auf Passwörter, die in PHP-Konfigurationsdateien usw. gespeichert sind), obwohl sich dieses Verzeichnis NICHT in seinem Home-Verzeichnis befindet und ich ihn niemals einer Gruppe hinzugefügt habe, die dies könnte Ich habe ihm auch keinen besonderen Zugriff auf irgendetwas gewährt, nachdem ich den Adduser ausgeführt habe.

Wie auch immer, was ist hier los? Wie kann ich seinen Zugang zu etwas Wichtigem töten? Er sollte nicht in der Lage sein, auf Dinge wie / media oder / var / www zuzugreifen. Ich dachte, dass neue Benutzer standardmäßig daran gehindert werden, etwas Gefährliches zu tun oder zu schnüffeln, wo sie nicht sein sollten.

Zusammenfassend muss ich ihm nur den Zugriff auf Verzeichnisse erlauben, die ich manuell spezifiziere + auf Verzeichnisse, die er benötigt, um richtig zu funktionieren (sein Heimatverzeichnis, vim, nano usw.).

Vielen Dank

Askerman
quelle
30
Du machst chmod 777 und fragst, warum jeder dort lesen und schreiben kann?
Anwar
16
Ja, 777 ist aus mehreren Gründen Ihr Problem.
Android Dev
21
@Askerman - Nein, wenn du 777 gibst, kann jeder auf alles zugreifen . Bitte lies: linux.com/learn/understanding-linux-file-permissions
Android Dev
11
Wir alle machen Fehler, besonders wenn wir in einer völlig neuen Umgebung lernen. Dies ist eine gute Methode, um daraus zu lernen. Es ist auf jeden Fall ratsam, sich ein Bild davon zu machen, wie die Dinge unter Windows funktionieren, wenn Sie ein Linux-basiertes Betriebssystem verwenden. Nach dem Zurücksetzen Ihrer Berechtigungen sollten Sie feststellen, dass der Benutzer nichts ändern kann, was er nicht ändern kann. Wenn Sie chmodanderswo verwendet haben, können Sie jedoch andere Probleme haben.
Arronical
8
Zu Ihrer Information: Ich stimme dieser Frage zu, weil es für neue Leute gut ist, sie zu finden. Und dieses Missverständnis ist wahrscheinlich häufiger als wir denken. Dies ist auch ein gutes Beispiel dafür, warum Sie Befehle, die Sie im Internet finden (auch hier), nicht einfach kopieren sollten, ohne zu wissen, was sie tun.
Aaron

Antworten:

40

Dies ist wie vorgesehen. Und noch schlimmer. chmod 777 bedeutet ... "Ich möchte, dass der Eigentümer, jeder in seiner Gruppe und jeder überhaupt Berechtigungen zum Lesen, Schreiben und Ausführen hat."

Welches ist ziemlich schrecklich.

Und für einen Webserver ist 777 nicht optimal. 755 (Eigentümer hat die vollständige Berechtigungsgruppe und andere haben Read + Execute) ist eine übliche Standardeinstellung, aber von der Sie sagten, dass Sie mindestens Read-Write- oder Read-Write-Execute für den Eigentümer (den Webserver-Benutzer) und möglicherweise möchten die Gruppe und keine Berechtigungen für den Benutzer. Es gibt eine umfassendere Frage zu den entsprechenden Berechtigungsstufen für Serverfehler, Sie sollten jedoch 640 oder 740 in Betracht ziehen.

Sie können den Benutzer jedoch auch in seine eigene kleine Welt versetzen. Richten Sie chroot ein, um den Benutzer an seinem Platz im System zu halten. Hierfür gibt es Guides, zum Beispiel die exzellente Antwort von oli, die je nach Ihren Bedürfnissen eine Option sein kann.

Geselle Geek
quelle
4
Kleiner Punkt: "der Besitzer, jeder in seiner Gruppe ..." - der Dateibesitzer muss nicht unbedingt zur Dateigruppe gehören.
alex_d
2
Nett. Es gefällt mir, dass Sie sich auf die kanonische Antwort zu servfault bezogen haben.
Elder Geek
3
Der historische Jargon für diese Situation ist " Welt lesbar / beschreibbar".
Kaz
19

Im Wesentlichen bricht es so zusammen:

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

Leseberechtigungen sind also nur 4, Lese- und Schreibberechtigungen sind 6, Lese- und Ausführungsberechtigungen sind 5 und alle (Lesen, Schreiben, Ausführen) sind 7. Auf diese Weise berechnen Sie einen Berechtigungsoktettwert für einen Eigentümer oder eine Eigentümergruppe oder alle.

Wenn Sie diese Berechtigungen chmodauf einen Datei- oder Verzeichnisspeicherort anwenden , werden die oben berechneten Zahlen wie folgt angewendet:

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

Wenn ich mir und meiner Gruppe Lese-, Schreib- und Ausführungsberechtigungen für einen Ordner geben wollte, den ich besitze, aber nicht wollte, dass alle ihn lesen können, würde ich Folgendes verwenden:

$ chmod 770 myDirectory

Weitere Informationen finden Sie in der Manpage zu chmod :

$ man chmod
Aaron
quelle
Wenn Sie sich nicht an die Bits erinnern können, die addiert werden müssen, um die richtigen Berechtigungen in der richtigen Reihenfolge zu erhalten, können Sie auch die verwenden, die möglicherweise einfacher zu lesen sind chmod ugo+rwx <...>. Die Zeichen stehen für u ser, g ruppe, o ther; r ead, w rite, e x ecute. Sie können '-' verwenden, um zu entfernen (zB:) chmod go-wx <...>. Beachten Sie nur, dass dies nur genau das hinzufügt oder entfernt, was Sie eingeben. chmod ugo+rwx <file>; chmod u+rwx <file> nicht Zugang für Gruppe entfernen / andere.
ReactiveRaven
@ ReactiveRaven Das ist ein großartiger Punkt. Aber das OP war offensichtlich verwirrt über das chmod 777, was es tat, und hier leitete ich meine Erklärung.
Aaron
@ Zanna Guter Anruf!
Aaron
6

Wie andere erwähnt haben, sollten Sie keine Berechtigungen auf 777 festgelegt haben

Hier ist ein hilfreiches Referenzblatt, das ich verwende.

+-----+---+--------------------------+
| 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 |
+------------+------+-------+
WhyAyala
quelle
1
Nett! Dies ist eine große Hilfe für Menschen (wie ich), die visuell lernen.
Aaron
3

Um Dateien für eine Person freizugeben, bei der Sie sich angemeldet haben, müssen Sie nichts Besonderes tun. Bei einer Standard-Debian-Installation haben Benutzer Zugriff auf die Home-Verzeichnisse der jeweils anderen Benutzer.

Zum Beispiel,

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

Die Berechtigungen für mein Basisverzeichnis sind für jeden Benutzer auf meinem System Lese- (r) und Zugriffsberechtigungen (x) . Nur ich habe zusätzlich Schreibzugriff (w) .

Außerdem ist die Standardeinstellung umaskunter Ubuntu so, dass Dateien und Verzeichnisse, die Benutzer erstellen, standardmäßig weltweit lesbar sind . Sie könnten das umaskauf setzen , 077wenn Sie das nicht wollten.

Was dies bedeutet, dass in einer Standardkonfiguration nichts zu tun ist , wenn der Benutzer ein youDokument ~/README.txtfür mich youfreigeben möchte. Ich kann es mir einfach ansehen:

$ 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.

Ich kann die Datei nicht bearbeiten oder entfernen, aber ich kann sie an einen Ort kopieren, an dem ich Schreibberechtigung habe. Dann besitze ich die Kopie:

$ 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

Es gibt gute Gründe, warum der Großteil des Systems standardmäßig weltweit lesbar ist, wie ich in einer anderen Antwort auf AskUbuntu erklärt habe . Auf einem gemeinsam genutzten System kann es jedoch sinnvoll sein, private Verzeichnisse für Nichtbesitzer unzugänglich zu machen:

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

... da viele Benutzer die Standard-QED anscheinend nicht kennen ;-). Es wäre jedoch klüger, Benutzer darauf aufmerksam zu machen, dass Dateiberechtigungen keine Geheimnisse schützen.

zwets
quelle
1

In Ubuntu hat jeder Benutzer das Superuser-Privileg, das in der Gruppe 'sudo' hinzugefügt wurde. Bitte überprüfen Sie dies, um sicherzustellen, dass kein anderer Benutzer in dieser Gruppe hinzugefügt wurde.

Um Ihre Dateien und Ihr Verzeichnis vor anderen Benutzern zu schützen, können Sie in der obigen Antwort die von Herrn Journeyman Geek vorgeschlagene Berechtigung festlegen.

Sie können auch spezielle Berechtigungen verwenden, um Ihre Dateien und Verzeichnisse vor anderen zu schützen.

Puneet Dixit
quelle