Comment empêcher un nouvel utilisateur de faire quelque chose de dangereux?

31

J'ai récemment installé le serveur Ubuntu sur mon serveur pour essayer le linux en tant que nouvel utilisateur. J'ai suivi un tutoriel sur la façon de configurer le serveur Web qui a dit que j'avais besoin chmod 777du répertoire du serveur Web pour qu'il puisse être écrit.

Quoi qu'il en soit, j'ai créé un nouveau compte pour un mec pour lui permettre de voir certains fichiers sur le serveur que j'ai placé dans son répertoire personnel:

adduser francis

Après avoir créé le compte, j'ai vérifié quel accès il a avec

groups francis

Il disait "francis: francis", donc ce n'était pas un problème, je pense, l'ubuntu ne l'a inclus dans aucun groupe par défaut, ce qui est logique, il l'a créé sans autorisation supplémentaire sur le plan de la sécurité, donc tout va bien et dandy. Une semaine plus tard, dans une horreur absolue et totale, j'ai découvert que même s'il ne pouvait pas faire des choses comme SUDO ou jouer dans les répertoires système, il avait un accès complet à presque tout le reste sur le serveur. Par exemple, il avait un accès complet en lecture / écriture à mes fichiers de serveur Web dans / var / www (et donc les mots de passe stockés dans les fichiers de configuration php, etc.) même si ce répertoire n'est PAS dans son répertoire personnel et je ne l'ai jamais ajouté à aucun groupe qui pourrait accéder à ce répertoire, ni lui ai accordé un accès spécial à quoi que ce soit après avoir fait l'adduser.

Quoi qu'il en soit, que se passe-t-il ici? Comment puis-je tuer son accès à quelque chose d'important? Il ne devrait pas pouvoir accéder à des choses comme / media ou / var / www. Je pensais que les nouveaux utilisateurs étaient par défaut empêchés de faire quoi que ce soit de dangereux ou d'espionner là où ils ne devraient pas être.

Donc, pour résumer, je n'ai qu'à lui permettre d'accéder aux répertoires que je spécifie manuellement + aux répertoires dont il a besoin pour fonctionner correctement (son répertoire personnel, vim, nano, etc.)

Merci

Askerman
la source
30
Vous faites du chmod 777 et vous demandez pourquoi tout le monde peut lire y écrire? lire la page de manuel de chmod
Anwar
16
Oui, le 777 est votre problème, pour plusieurs raisons.
Android Dev
21
@Askerman - Non, quand vous donnez 777, tout le monde peut accéder à tout , veuillez lire ceci: linux.com/learn/understanding-linux-file-permissions
Android Dev
11
Nous faisons tous des erreurs, surtout lorsque nous apprenons dans un environnement entièrement nouveau. C'est une bonne chose à apprendre, il est certainement sage de jeter vos notions sur le fonctionnement des choses dans Windows lorsque vous utilisez un système d'exploitation basé sur Linux. Après avoir rétabli vos autorisations, vous devez remarquer que l'utilisateur ne peut rien changer qu'il ne devrait pas pouvoir faire. Si vous avez utilisé chmodailleurs, vous pourriez avoir d'autres problèmes.
Arronical
8
FYI- Je vote pour cette question parce que c'est en fait une bonne pour les nouvelles personnes à trouver. Et cette idée fausse est probablement plus courante que nous ne le pensons. C'est aussi un bon exemple de pourquoi vous ne devriez pas simplement copier les commandes que vous trouvez sur Internet (même ici) sans savoir ce qu'elles font.
Aaron

Réponses:

40

C'est comme prévu. Et pire. chmod 777 signifie ... "J'aimerais que le propriétaire, quiconque dans son groupe et quiconque ait des autorisations de lecture, d'écriture et d'exécution"

Ce qui est assez terrible.

Et pour un serveur Web, 777 n'est pas optimal. 755 (le propriétaire dispose d'un groupe d'autorisations complet et d'autres ont lu + exécuté) est un défaut courant, mais d' après ce que vous avez dit, vous voulez au moins lire-écrire ou exécuter en lecture-écriture pour le propriétaire (l'utilisateur du serveur Web), et peut-être le groupe et aucune autorisation pour l'utilisateur. Il y a des questions plus complètes sur les niveaux d'autorisations appropriés en cas de défaillance du serveur, mais considérez quelque chose comme 640 ou 740.

Cela dit, vous pouvez également placer l'utilisateur dans son propre petit monde - en configurant chroot pour garder l'utilisateur dans son propre espace dans le système. Il y a des guides qui flottent pour faire cela - par exemple l'excellente réponse d'oli ici qui peut être une option en fonction de vos besoins.

Compagnon geek
la source
4
Point mineur: "le propriétaire, n'importe qui dans son groupe ..." - le propriétaire du fichier ne doit pas nécessairement appartenir au groupe de fichiers.
alex_d
2
Agréable. J'aime que vous vous référiez à la réponse canonique sur la panne de service.
Elder Geek
3
Le jargon historique de cette situation est « monde accessible en lecture / écriture ».
Kaz
19

Essentiellement, il se décompose comme ceci:

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

Ainsi, les autorisations de lecture seulement seraient 4, la lecture et l'écriture seraient 6, la lecture et l'exécution seraient 5, et tout (lecture, écriture, exécution) est 7. C'est ainsi que vous calculez une valeur d'octet d'autorisation pour un propriétaire, un groupe de propriétaires ou tout le monde.

Lorsque vous appliquez ces autorisations chmodà un emplacement de fichier ou de répertoire, les nombres calculés ci-dessus sont appliqués comme ceci, avec un octet chacun pour le propriétaire, le groupe et tout le monde:

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

Donc, si je voulais me donner, ainsi qu'à mon groupe, des autorisations de lecture, d'écriture et d'exécution sur un dossier que je possédais, mais je ne voulais même pas que tout le monde puisse le lire, j'utiliserais:

$ chmod 770 myDirectory

Pour plus d'informations, consultez la page de manuel de chmod :

$ man chmod
Aaron
la source
Si vous ne vous souvenez pas des bits à additionner pour créer les bonnes autorisations dans le bon ordre, vous pouvez également utiliser le sans doute plus facile à lire chmod ugo+rwx <...>. Les personnages représentent u ser, g roup ou autre; r ead, w rite, e x ecute. Vous pouvez utiliser '-' pour supprimer (par exemple:) chmod go-wx <...>. Notez simplement que cela n'ajoute ou supprime que ce que vous tapez. chmod ugo+rwx <file>; chmod u+rwx <file> ne supprime pas l' accès au groupe / autre.
ReactiveRaven
@ReactiveRaven C'est un excellent point. Mais le PO était manifestement confus quant à ce qui chmod 777s'est passé, c'est donc là que j'ai dirigé mon explication.
Aaron
@Zanna Bon appel!
Aaron
6

Comme d'autres l'ont mentionné, vous ne devriez pas avoir d'autorisations définies sur 777

Voici une feuille de référence utile que j'utilise.

+-----+---+--------------------------+
| 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
la source
1
Agréable! C'est une grande aide pour les gens (comme moi) qui sont des apprenants visuels.
Aaron
3

Pour partager des fichiers avec une personne à laquelle vous vous êtes connecté, vous n'avez rien à faire en particulier. Sur une installation Debian par défaut, les utilisateurs ont accès aux répertoires personnels de chacun.

Par exemple,

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

Les autorisations sur mon répertoire personnel sont lues (r) et accessibles (x) pour tout utilisateur de mon système. Seulement, j'ai en plus un accès en écriture (w) .

En outre, la valeur par défaut umasksur Ubuntu est telle que les fichiers et répertoires que les utilisateurs créent sont lisibles par défaut par le monde . Vous pouvez régler la umaskà 077si vous ne voulez pas.

Cela signifie que dans une configuration par défaut, si l'utilisateur yousouhaite partager un document ~/README.txtavec moi, il n'y a rien youà faire. Je peux simplement le voir:

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

Je ne peux pas modifier ou supprimer le fichier, mais je peux le copier vers un emplacement où j'ai l'autorisation d'écriture. Ensuite, je possède la copie:

$ 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

Il y a de bonnes raisons pour lesquelles la plupart du système est lisible dans le monde par défaut, comme je l'ai expliqué dans une autre réponse sur AskUbuntu . Cependant, sur un système partagé, il peut être judicieux de rendre les répertoires personnels inaccessibles aux non-propriétaires:

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

... car de nombreux utilisateurs ne sont apparemment pas au courant de la valeur par défaut - QED ;-). Il serait cependant plus sage de faire comprendre aux utilisateurs que les autorisations de fichiers ne protègent pas les secrets.

zwets
la source
1

Dans Ubuntu, tout utilisateur a des privilèges de superutilisateur qui sont ajoutés dans le groupe 'sudo', veuillez le vérifier pour vous assurer qu'aucun autre utilisateur n'est ajouté dans ce groupe.

Pour sécuriser vos fichiers et votre répertoire des autres utilisateurs, vous pouvez définir l'autorisation comme suggéré par M. Journeyman Geek dans la réponse ci-dessus.

Vous pouvez également utiliser des autorisations spéciales pour sécuriser vos fichiers et répertoires des autres.

Puneet Dixit
la source