2010-09-28 2 views
0

Est-il possible de désactiver complètement l'accès de certains programmes aux fichiers? Parce que je ne veux pas qu'il ait un quelconque accès aux fichiers sur le système, est-il possible de le compiler pour qu'il n'ait pas accès au flux de fichier ou pour l'exécuter de toute façon il ne peut pas accéder aux fichiers?c/C++ désactiver l'accès aux fichiers

+0

Malheureusement, le système d'exploitation est un singleton que vous ne pouvez rien faire. :-(Voir: http://www.object-oriented-security.org/lets-argue/singletons A mon avis, Linux a besoin d'un moyen de supprimer toutes les permissions pour un processus afin de pouvoir le forcer à utiliser IPC (via un pipe préexistante) pour demander un autre processus ouvrir des fichiers pour cela et ainsi de suite – Omnifarious

Répondre

6

Le plus proche que vous seriez en mesure d'obtenir est de lancer votre programme dans une prison chroot.

+0

comment pourrais-je chrooter un programme afin qu'il puisse être encore exécutable, j'ai essayé quelques façons, mais il truirait des erreurs parce que certaines bibliothèques ne pouvaient pas être trouvées – srolija

+1

@ user460907 : Si vous avez accès à la source, vous devriez pouvoir le faire sans trop de problèmes: exécutez le programme depuis l'extérieur de la prison, puis placez le programme dans la prison et chroot lui-même. la prison, mais les bibliothèques nécessaires pour le programme doivent être présents dans la prison Google, il existe des tutoriels pour cela – Thanatos

+0

Ou utiliser SELinux ... –

1

Dans un environnement non géré, le code ne peut pas se dire de ne pas faire ce qu'il ne devrait pas faire. CAS fait uniquement partie des environnements gérés, où le runtime fournit un niveau supplémentaire de contrôle d'accès. C'est au système d'exploitation d'empêcher les applications de faire des choses que l'utilisateur qu'ils utilisent pour le compte de ne peut pas faire. Vous devriez être capable d'exécuter l'application comme si vous étiez un utilisateur différent, plus limité; ensuite, vous pouvez limiter les droits d'accès de l'utilisateur à la ressource et le système d'exploitation empêchera le code d'y accéder.

1

Sous Linux, vous pouvez remplacer le propriétaire du processus par personne. Ce n'est pas grande augmentation de la sécurité, car personne ne peut encore accéder à des fichiers, etc., mais il vaut mieux que de courir comme un utilisateur local ou racine:

 struct passwd *pw = getpwnam("nobody"); 
     if (!pw) 
     printf("Error: Unable to look up info about user nobody"); 
     else{ 
     setuid(pw->pw_uid); 
     setgid(pw->pw_gid); 
     } 
0

En théorie, vous pouvez diriger l'éditeur de liens de ne pas lier fopen et ainsi de suite. Vous devrez probablement utiliser une liaison statique. Mais, souvent, lorsque vous répondez à une exigence comme celle-ci, vous abordez le problème dans la mauvaise direction. Qu'est-ce que vous essayez d'accomplir avec ce hack? Pourquoi voulez-vous cela?

+0

Même si des fonctions comme 'fopen()' ne sont pas liées, le processus peut toujours effectuer directement des appels système sans nécessiter de code de bibliothèque externe. – caf

0

Sous Windows, vous pouvez commencer le processus sous un restricted token

Cela nécessite plus qu'une simple connaissance de base de l'API Windows, mais il est possible.