Je veux faire fonctionner un serveur Shell de la vieille école pour un couple de personnes, à savoir. un où les utilisateurs obtiennent un accès ssh afin de pouvoir exécuter un logiciel (le leur ou fourni). Ma préoccupation est la séparation appropriée entre les utilisateurs.
Je ne veux pas qu'ils se voient mutuellement des processus, accèdent à leurs fichiers respectifs (sauf autorisation explicite), etc. Il serait bien de ne pas se faire piquer par chaque bogue d'élévation de privilèges ou de redémarrer le serveur à chaque mise à jour mineure du noyau. Il serait parfait de conserver la possibilité d’exécuter des services communs (tels que l’hébergement Web et la messagerie) avec ces mesures de sécurité en place.
À l’époque, j’utilisais grsec, mais cela nécessite de rester sur un noyau plus ancien et de gérer lui-même les tracas de la compilation. Existe-t-il un moyen plus moderne et plus Ubuntu d’assurer la séparation des utilisateurs sur un serveur partagé?
Peut-être que vous pouvez faire quelque chose avec AppArmor à cet effet? Ou peut-être existe-t-il un référentiel de noyaux préconfiguré pour les environnements partagés? Ou une solution basée sur des conteneurs? Ceux-ci ont été en vogue ces derniers temps.
hidepid
procfs
sous Linux prend désormais en charge l'option hidepid
. De man 5 proc
:
_hidepid=n (since Linux 3.3)
This option controls who can access the information in
/proc/[pid] directories. The argument, n, is one of the
following values:
0 Everybody may access all /proc/[pid] directories. This is
the traditional behavior, and the default if this mount
option is not specified.
1 Users may not access files and subdirectories inside any
/proc/[pid] directories but their own (the /proc/[pid]
directories themselves remain visible). Sensitive files
such as /proc/[pid]/cmdline and /proc/[pid]/status are now
protected against other users. This makes it impossible to
learn whether any user is running a specific program (so
long as the program doesn't otherwise reveal itself by its
behavior).
2 As for mode 1, but in addition the /proc/[pid] directories
belonging to other users become invisible. This means that
/proc/[pid] entries can no longer be used to discover the
PIDs on the system. This doesn't hide the fact that a
process with a specific PID value exists (it can be learned
by other means, for example, by "kill -0 $PID"), but it
hides a process's UID and GID, which could otherwise be
learned by employing stat(2) on a /proc/[pid] directory.
This greatly complicates an attacker's task of gathering
information about running processes (e.g., discovering
whether some daemon is running with elevated privileges,
whether another user is running some sensitive program,
whether other users are running any program at all, and so
on).
gid=gid (since Linux 3.3)
Specifies the ID of a group whose members are authorized to
learn process information otherwise prohibited by hidepid
(ie/e/, users in this group behave as though /proc was mounted
with hidepid=0. This group should be used instead of approaches
such as putting nonroot users into the sudoers(5) file.
_
Donc, monter _/proc
_ avec _hidepid=2
_ suffit à cacher les détails des processus des autres utilisateurs sous Linux> 3.3. Ubuntu 12.04 est livré avec 3.2 par défaut, mais vous pouvez installer de nouveaux noyaux. Ubuntu 14.04 et les versions ultérieures répondent facilement à cette exigence.
Dans un premier temps, supprimez les autorisations rwx
pour les autres utilisateurs de chaque répertoire de base (et pour le groupe également, si vous en avez besoin). Bien entendu, je suppose que le ou les dossiers contenant les répertoires de départ ne sont pas autorisés en écriture, sauf pour le compte root.
Ensuite, accordez aux services tels que le serveur Web et le serveur de messagerie l'accès aux répertoires appropriés à l'aide des ACL. Par exemple, pour accorder au processus de serveur Web l'accès aux pages d'accueil de l'utilisateur, supposons que _www-data
_ soit l'utilisateur et que _~/public_html
_ soit l'emplacement dans lequel la page d'accueil est conservée:
_setfacl u:www-data:X ~user
setfacl d:u:www-data:rX ~user/public_html
_
De même, ajoutez des ACL pour les processus de messagerie et les répertoires de boîtes aux lettres.
Les ACL sont activées par défaut sur ext4 au moins sur Ubuntu 14.04 et les versions ultérieures.
/tmp
_ et umask
Un autre problème est _/tmp
_. Définissez la variable umask
de sorte que les fichiers ne soient pas lisibles par groupe ou par tout le monde, de sorte que les fichiers temporaires des utilisateurs ne soient pas accessibles aux autres utilisateurs.
Avec ces trois paramètres, les utilisateurs ne devraient pas pouvoir accéder aux fichiers d’autres utilisateurs ni examiner leurs processus.