IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Changer date/heure utilisateur non-root


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2007
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2007
    Messages : 344
    Par défaut Changer date/heure utilisateur non-root
    Bonjour,

    Est-il possible de donner des droits d'accès à un user non root afin de changer la date/heure grâce à la commande date ?

    Je dois faire une tâche cron qui:

    - Arrête un service
    - Change la date
    - Change l'heure
    - Démarre le service

    Le problème est que pour arrêter/démarrer le service c'est un script custom spécifiquement fait pour cet user non root, pas possible de le lancer en root.

    Ou alors dans mon cron, si je lance depuis root, je peux exécuter une commande avec un autre user?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 635
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Bonjour,

    Citation Envoyé par nesswaw Voir le message
    Est-il possible de donner des droits d'accès à un user non root afin de changer la date/heure grâce à la commande date ?
    autant que je sache puisse le dire, non.

    Ou alors dans mon cron, si je lance depuis root, je peux exécuter une commande avec un autre user?
    oui, avec su.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par nesswaw Voir le message
    Est-il possible de donner des droits d'accès à un user non root afin de changer la date/heure grâce à la commande date ?
    C'est en général possible mais pas recommandé du tout pour des raisons de fiabilité et de sécurité (copie du binaire date dans un répertoire protégé accessible uniquement par l'utilisateur et application du suid bit au fichier), en revanche, avec "sudo", on peut autoriser un utilisateur à exécuter la commande date avec les droits root et donc l'autoriser à changer l'heure du système.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 802
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par nesswaw Voir le message
    Est-il possible de donner des droits d'accès à un user non root afin de changer la date/heure grâce à la commande date ?
    Bonjour
    Si tu veux bien comprendre ton OS, il te faut alors être précis. Déjà donc les droits ne s'appliquent jamais aux users mais aux fichiers. Ainsi donc, un user n'a pas d'autre droit que celui d'exister.

    Ce qui se passe, en revanche, quand un user commence une intéraction avec un fichier (lequel fichier possède des droits d'accès), c'est que l'OS compare les droits donnés au fichier par rapport à celui qui tente l'accès. Et si les droits l'y autorisent alors l'OS autorise l'action demandée. Avec une exception si l'user a un uid à 0. Dans ce cas exceptionnel, l'OS ne vérifie pas les droits.

    Toutefois une intéraction avec un fichier ne peut se faire que par l'intermédiaire d'une commande. Par exemple un cp fic1 fic2 tente de lire fic1 et d'écrire un fichier fic2 par la commande cp. Or la commande cp possède elle-aussi des droits d'accès ainsi qu'un propriétaire X et un groupe Y. Généralement cela ne change rien ; les droits sont vérifiés par rapport au user qui lance la commande et non à l'user propriétaire de la commande ; sauf dans un cas très particulier quand ladite commande possède un setuid (il apparait un petit "s" à la place du "x" dans le ls -l). Dans ce cas très particulier, le processus qui est lancé par la commande prend alors l'appartenance du propriétaire de la commande et non plus l'appartenance du user qui l'invoque. Et donc dans ce cas très particulier, l'accès au fichier est alors vérifié par rapport au propriétaire de la commande et non plus par rapport à l'appelant de la commande.
    On trouve très peu de commandes ayant un setuid. A froid comme ça je peux citer /bin/su, /bin/sudo. On en trouve au total une dizaine.
    Le même mécanisme existe aussi avec le setgid qui donne à l'appelant le gid du gid de la commande. Et dans 99% des cas, la commande appartient à root (quitte à changer de uid, autant prendre le best-of).

    Donc si ta commande /bin/date a un setuid, et si elle appartient à root, alors quiconque l'exécute lancera son processus sous le compte root et non sous le sien et pourra alors modifier l'heure système.
    Pour mettre un setuid sur une comande, il faut déjà être celui a qui appartient la commande (normal, seul le propriétire d'un fichier peut lui donner ou lui enlever des droits) et exécuter l'action suivante: chmod u+s commande ou bien, en mode octal, chmod 4XYZ commande (le XYZ étant les chiffres habituels du chmod classique).
    Même méthode pour un gid mais ce sera "g+s" ou bien "2XYZ".

    Ceci dit, question sécurité, ce n'est pas conseillé car, comme tu le vois, tu ne peux pas cibler un user particulier. Si ta commande /bin/date possède un setuid, alors ce sont tous les user qui l'exécuteront qui auront les privilèges de root sur cette commande.
    Mieux vaut donc que ton user passe par un su -c date (il lui faut alors connaitre le mot de passe root) ou un sudo date (tu peux configurer qui a le droit d'appeler sudo) plutôt que d'autoriser tout le monde à lancer la commande date sous le compte de root...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Si tu veux bien comprendre ton OS, il te faut alors être précis. Déjà donc les droits ne s'appliquent jamais aux users mais aux fichiers. Ainsi donc, un user n'a pas d'autre droit que celui d'exister.
    Il existe cependant sous Linux les "capabilities" qui permettent d'accorder à des utilisateurs non root des privilèges spécifiques, par exemple dans ce cas précis, la capability souhaitée est CAP_SYS_TIME. C'est plus complexe à mettre en oeuvre que sudo, c'est pourquoi j'ai préféré ne conseiller cette dernière approche.

    Ceci dit, question sécurité, ce n'est pas conseillé car, comme tu le vois, tu ne peux pas cibler un user particulier. Si ta commande /bin/date possède un setuid, alors ce sont tous les user qui l'exécuteront qui auront les privilèges de root sur cette commande.
    Oui mais tu peux copier la commande date dans un répertoire qui n'est accessible que par l'utilisateur ciblé et lui mettre le bit setuid de root. C'est du bricolage mais ça marche aussi.

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 802
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Oui mais tu peux copier la commande date dans un répertoire qui n'est accessible que par l'utilisateur ciblé et lui mettre le bit setuid de root. C'est du bricolage mais ça marche aussi.
    Oui. J'y avais pas pensé mais c'est possible.
    Attention toutefois que certains FS (par exemple le FS qui contient /home) sont montés avec l'option "nosuid" dans /etc/fstab (c'est par exemple le cas chez-moi). Dans ce cas, pas de setuid possible sur les fichiers de ce FS.
    On peut même rajouter aussi l'option "noexec" (pour les environnements paranoiaques)...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Lister des fichiers sous Linux pour un utilisateur non root
    Par identifiant_bidon dans le forum Général Java
    Réponses: 4
    Dernier message: 18/10/2011, 15h53
  2. Comment changer la date système sans changer l'heure?
    Par pointer dans le forum Langage
    Réponses: 7
    Dernier message: 18/05/2010, 09h55
  3. SDL probleme utilisateur non root
    Par enzo28240 dans le forum SDL
    Réponses: 1
    Dernier message: 19/09/2008, 20h00
  4. Impossible de changer un mot de passe utilisateur en root
    Par Orbiplanax dans le forum Administration système
    Réponses: 2
    Dernier message: 21/09/2007, 18h01
  5. Réponses: 3
    Dernier message: 05/09/2007, 09h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo