J'étudie le fonctionnement de base de SELinux et trouverais utile de déclencher un déni. Ma machine de test exécute CentOS 7, c'est une installation de base du serveur sans aucun service supplémentaire, et getenforce indique «Enforcing». J'étais donc convaincu que rendre lisible / root dans le monde entier et essayer de lire des fichiers à partir de là en tant qu'utilisateur non privilégié ferait l'affaire. Mais pas de chance! Quelqu'un peut-il suggérer des tests rapides? Essayer d'accéder à des chemins, d'ouvrir des ports, etc.
Idéalement, je recherche des commandes shell simples qu'un DAC n'aurait pas restreintes, mais un MAC le remarquera et le refusera. En tant que tel, je ne cherche pas à compiler des programmes sur mesure, ni à installer des services spécifiques (comme un serveur Web) pour y parvenir. Ceci est précieux car il fournit un moyen générique et clair de voir SELinux en action.
Je n'ai aucun problème à modifier le DAC (c'est-à-dire les autorisations du système de fichiers) pour les rendre moins restrictives qu'elles ne le seraient par défaut dans le cadre d'un test.
Réponses:
Pour démontrer l'utilité de SELinux dans la détection de bogue pour un tiers / votre propre code de développeur, voici un test de protection de la mémoire (modification du premier exemple de code ici ):
Compiler et afficher les valeurs par défaut (non capturées)Changez les booléens pour attraper le problème:
la source
Cela démontre clairement une politique MAC où un DAC équivalent aurait pu être contourné sur une installation de base de CentOS 7.
Par défaut (dans CentOS au moment de la rédaction), les utilisateurs non privilégiés non-système sont connectés en tant que rôle 'unconfined_u'. Cependant, nous pouvons changer notre système afin que notre utilisateur non privilégié «alice» soit placé à la place dans le rôle «user_u». Les stratégies par défaut peuvent être définies pour restreindre clairement ce rôle avec seulement une petite quantité de configuration supplémentaire.
Désactivez maintenant la possibilité pour ces utilisateurs d'exécuter des fichiers situés dans leurs répertoires personnels et / tmp. Encore une fois, la valeur par défaut est d'autoriser ce comportement. Cette commande peut prendre un peu de temps .
Maintenant (avec notre utilisateur non privilégié), nous pouvons nous connecter et tenter d'exécuter quelque chose sur l'une de ces zones interdites. Comme vous pouvez le voir, on nous refuse.
Enfin, nous pouvons afficher le journal AVC pour voir notre déni SELinux.
la source
À moins que vous n'ayez changé vos politiques dans l'onglet booléen de system-config-selinux (ou dans / etc / selinux / policy), la valeur par défaut devrait répondre aux éléments suivants (NB, vous pouvez également installer setroubleshoot pour une plongée plus profonde) :
Ensuite, redémarrez votre serveur Web et essayez d'accéder à http: // localhost / ks avec votre navigateur Web. Vous devriez voir un message "Interdit". Si vous suivez
/var/log/audit/audit.log
ou si vous courezausearch -m avc -ts recent
, vous devriez pouvoir voir le message:type=AVC msg=audit(1391277951.222:266): avc: denied { read } for pid=1731 comm="httpd" name="ks" dev=sda1 ino=22351 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined u:object r:default t:s0 tclass=dir
Vous pouvez ensuite modifier le contexte SELinux avec
chcon -Rv --reference /var/www/html /install/ks
si vous ne souhaitez pas désactiver SELinux mais être en mesure d'accéder à la ressource.EDIT: désolé, je n'ai pas vu que vous avez dit "pas un serveur Web". Essayez d'
chcon -u fake_u <filename>
utiliser un compte non privilégié sur un fichier système.la source
installer deux petits packages - pas de dépendances
démarrer un serveur FTP
créer un fichier chez root
déplacer du répertoire racine vers le répertoire FTP.
note: déplacez, ne copiez pas, ou le contexte f du fichier changera
connectez-vous à votre serveur FTP en tant qu'utilisateur client FTP et essayez d'accéder au nouveau fichier.
remarque: la saisie automatique des onglets ne fonctionnera pas ici
afficher le déni dans les journaux bruts
ou si vous avez
setroubleshoot*
installéla source