web-dev-qa-db-fra.com

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

J'ai récemment installé le serveur Ubuntu sur mon serveur pour essayer Linux en tant que nouvel utilisateur. J'ai suivi un tutoriel sur la configuration du serveur Web, dans lequel il était indiqué que je devais chmod 777 le répertoire du serveur Web afin 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és dans son répertoire personnel:

adduser francis

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

groups francis

Il disait "francis: francis", donc pas un problème, pensais-je, l'ubuntu ne l'a inclus dans aucun groupe par défaut, ce qui est logique, il l'a créé sans autorisation supplémentaire en termes de sécurité, donc tout va bien et dandy. Une semaine plus tard, dans une horreur absolue et absolue, j'ai découvert que, même s'il ne pouvait pas faire des choses comme Sudo ou faire des bêtises dans les répertoires système, il avait un accès complet à presque tout le reste du serveur. Par exemple, il avait un accès complet en lecture/écriture sur les fichiers de mon serveur Web situés dans/var/www (et donc les mots de passe stockés dans les fichiers de configuration php, etc.), même si ce répertoire ne se trouvait PAS dans son répertoire personnel et que je ne l'ai jamais ajouté à un groupe pouvant le faire. accéder à ce répertoire, ni je 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 éléments tels que/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 où ils ne devraient pas être.

Donc, pour résumer, il ne me reste plus 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.)

Je vous remercie

31
Askerman

C'est comme prévu. Et pire. chmod 777 signifie ... "J'aimerais que le propriétaire, tous les membres de son groupe et quiconque possèdent 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 a le groupe de permissions complet et les autres ont lu + exécuter) est un défaut commun mais d'après ce que vous avez dit vouloir au moins lecture-écriture , ou en lecture-écriture à exécuter 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 sur serverfault mais considérons quelque chose comme 640 ou 740.

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

41
Journeyman Geek

Essentiellement, il se décompose comme suit:

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

Donc, les autorisations de lecture seulement seraient 4, les lectures et les écritures seraient 6, les lectures et les exécutions seraient 5, et tout (lecture, écriture, exécution) est égal à 7. Voici comment 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 avec chmod à un emplacement de fichier ou de répertoire, les nombres calculés ci-dessus sont appliqués comme suit, avec un octet pour chaque propriétaire, groupe et tout le monde:

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

Donc, si je voulais donner à mon groupe et à moi-même les droits de lecture, d'écriture et d'exécution sur un dossier que je possédais, mais que je ne voulais pas tout le monde même être capable de le lire, je voudrais utiliser:

$ chmod 770 myDirectory

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

$ man chmod
19
Aaron

Comme d'autres l'ont mentionné, les autorisations ne doivent pas être 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 |
+------------+------+-------+
6
WhyAyala

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

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 l'accès en lecture (r) et (x) pour tout utilisateur de mon système. Seulement j'ai en plus un accès en écriture (w) .

De plus, la valeur par défaut umask sous Ubuntu est telle que les fichiers et les répertoires créés par les utilisateurs sont lisibles par tout le monde par défaut . Vous pouvez définir le umask à 077 si vous ne le souhaitez pas.

Cela signifie que dans une configuration par défaut, si l'utilisateur you souhaite partager le document ~/README.txt avec moi, il n'y a rien que you doive 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 ni éditer ni supprimer le fichier, mais je peux le copier à un emplacement où je dispose d'une autorisation en é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 que la plupart du système soit lisible par tout le monde par défaut, comme je l'ai expliqué dans autre réponse sur AskUbunt . Toutefois, 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 du paramètre par défaut - QED ;-). Il serait toutefois plus sage de faire savoir aux utilisateurs que les autorisations de fichiers ne protègent pas les secrets.

3
zwets

Dans Ubuntu, tout utilisateur disposant du privilège de superutilisateur est ajouté au groupe "Sudo". Veuillez le vérifier pour vous assurer qu'aucun autre utilisateur n'est ajouté à ce groupe.

Pour sécuriser vos fichiers et répertoires d’autres utilisateurs, vous pouvez définir l’autorisation suggérée 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 de tiers.

1
Puneet Dixit