2017-05-02 2 views
0

Hey collègues programmeurs, je travaille sur le projet de mon baccalauréat et obtenu en un peu un problème.</p> <p>sudoers Edition des fichiers ne pas prendre effet

L'objectif est de créer une application web, capable de faire fonctionner et de modifier les E/S d'un WAGO PLC 750-8202 (on peut l'imaginer comme un Raspberry PI industriel) exécutant un linux embarqué avec un serveur web lighttpd . J'ai fait des scripts C qui utilisent les fonctions DAL (HAL) fournies par l'API. Maintenant, je veux lier avec mon application/site web. J'ai une simple page PHP (ignorer le bouton, il ne fait rien):

<html> 
<head> 
    <title>PHP Test</title> 
</head> 
<body> 
<button value="CLICK ME">CLICK ME</button> 
<?php 
echo system("kbusdemo1"); 
?> 
</body> 
</html> 

L'automate exécute kbusdemo1 mais ne pas utiliser les fonctions fournies par DAL correctement, il me donne une erreur. Si je cours ce script en tant que root, cela fonctionne parfaitement. J'ai découvert que le problème réside dans les droits des utilisateurs www (que mon serveur web lighttpd utilise), alors j'ai essayé sudoers d'édition avec

sudo nano /etc/sudoers 

visudo est pas implémentée dans le système Linux PLC donc je devais l'ouvrir directement. Je l'ai changé pour le code posté ci-dessous, mais si j'essaie d'exécuter le script C en tant qu'utilisateur lighttpd (avec su www), cela ne fonctionne toujours pas. Qu'est-ce que je fais mal?

Merci pour vos suggestions.

# sudoers file. 
# 
# This file MUST be edited with the 'visudo' command as root. 
# 
# See the sudoers man page for the details on how to write a sudoers file. 
# 

# Host alias specification 

# User alias specification 

# Cmnd alias specification 

# Defaults specification 

# Runas alias specification 

# User privilege specification 
root ALL=(ALL) SETENV: ALL 
admin ALL=NOPASSWD: /etc/config-tools/get_user_info user 
ALL=NOPASSWD: /etc/config-tools/get_user_info 
www ALL=(ALL) NOPASSWD:ALL 

# Uncomment to allow people in group wheel to run all commands 
# and set environment variables. 
# %wheel ALL=(ALL) SETENV: ALL 

# Same thing without a password 
# %wheel ALL=(ALL) NOPASSWD: SETENV: ALL 

# Samples 
# %users ALL=/sbin/mount /cdrom,/sbin/umount /cdrom 
# %users localhost=/sbin/shutdown -h now 
+0

Je pense que le problème à résoudre est de savoir pourquoi 'kbusdemo1' ne s'exécute que s'il est exécuté en tant que root. Lit-il tous les fichiers qui sont (inutilement) la propriété de root. Avez-vous compilé 'kbusdemo1' en tant que root? (inutilement encore?) Ou l'interaction matérielle que vous avez écrite a besoin de privilèges root? –

+0

Il se peut que l'interaction harware ait besoin des privilèges root. Il doit accéder à la mémoire interne de l'automate, obtenir des informations sur les valeurs des modules d'E/S et les modifier, donc je pense que les scripts doivent être exécutés en tant que root. –

+0

Bon, alors maintenant, au lieu d'essayer d'ajouter le binaire au fichier sudoers, vous pouvez changer le propriétaire du fichier à 'root' et essayer de définir le drapeau' suid' pour le binaire. Cela permettra à n'importe quel utilisateur d'exécuter le binaire en tant que root. –

Répondre

0

Nous vous remercions de votre aide. Je l'ai fait fonctionner, je n'appelais pas le script comme sudo du fichier PHP. Et comme tu l'as suggéré, j'ai changé les lignes dans sudoers pour n'autoriser qu'un seul script, donc pas de failles de sécurité pour moi.