Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    14

    Funzione system() in superuser mode C

    Salve a tutti,
    Sto cercando di compilare un programmino in cui devo inserire una password. Se la inserisco giusta, si va avanti, altrimenti si spegne il computer. Il comando che userei per far spegnere il computer è
    codice:
    shutdown -h now
    Il codice del programmino risulterebbe quindi qualcosa come:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main ()
    {
    char password [10]="password";
    
    prinf("Inserisci la password: ");
    scanf("%s", &password);
    if (strcmp("password", password)=0){
    system(*path);
    }
    else {
    system("shutdown -h now);
    }
    }
    Come OS sto usando OS x. so che su Windows non c'è questo problema perchè il comando non prevede di essere un superutente, ma in Mac, e anche in Linux se non sbaglio, ho la necessità di esserlo mentre eseguo il comando. Ora se inserisce sudo prima (sudo shutdown -h now), mi restituisce:
    codice:
    sudo: no tty present and no askpass program specified
    Se invece provo a eseguire prima sudo -s, e poi shutdown, mi si blocca sempre con lo stesso errore.
    Qualcuno può aiutarmi?
    P.S. Tralasciando il fatto che la funzione scanf non è la migliore per questo genere di cose
    Grazie

  2. #2
    Scusa ma che senso ha l'intera faccenda? L'utente per evitare di far spegnere il computer semplicemente non inserirà la password... Spiega un po' meglio il contesto...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    14
    È per evitare che "intrusi" accedano al programma,

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Quote Originariamente inviata da icosac Visualizza il messaggio
    È per evitare che "intrusi" accedano al programma,
    E spegni il computer per una password sbagliata?
    Visualizza un avviso e non fai partire il programma... Se ad ogni password sbagliata si dovesse spegnere il sistema sarebbe tutto molto ridicolo...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    14
    Io volevo solo sapere se c'era un modo per usare comandi come shutdown, o altri del genere con system(), non iniziare una discussione su cosa sia meglio fare o meno..

  6. #6
    Quote Originariamente inviata da icosac Visualizza il messaggio
    È per evitare che "intrusi" accedano al programma,
    Sì, ma quello che ti sto dicendo è che sudo, anche a farlo funzionare correttamente, chiede la password all'utente per poter spegnere il PC, per cui sei comunque in mano all'utente (che paradossalmente se sbaglia la password del tuo programma deve inserire la password del computer per fare sì che il tuo programma si "difenda"). Per questo dicevo che non ha molto senso come sistema.
    Ci sono diverse configurazioni per gestire questo tipo di problemi (ad esempio: se è un programma che parte in automatico in modalità kiosk lo si può fare girare con credenziali o configurazioni di sudo particolari, in modo che possa fare quello che gli serve senza necessità di ulteriori autenticazioni), ma per darti consigli utili cercavo di capire qual era il caso d'uso.
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    14
    Grazie per l'informazione ��
    Scusatemi per la reazione di prima

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2013
    Messaggi
    14
    La soluzione più semplice che ho trovato dopo altri giorni di ricerca, è di modificare il file sudoers, abilitando i permessi per shutdown (prendo sempre questo commando come esempio, ma controllando nella cartella /sbin/ si trovano altri commandi).
    Per fare questo si digita sudo visudo nel terminale del proprio OS
    una volta dentro si va fino a
    codice:
    Cmnd alias specification
    Qui si aggiunge
    codice:
    Cmnd_Alias NOME_DA_RICHIAMARE_DOPO1= percorso_file
    Nel caso di shutdown ad esempio:
    codice:
    Cmnd_Alias SPEGNIMENTO= /sbin/shutdown
    A questo punto si va sotto
    codice:
    User alias specification
    E si aggiunge:
    codice:
    User_alias NOME_DA_RICHIAMARE_DOPO2=nome_utente
    Nel mio caso:
    codice:
    Usera_alias ME=Icosac
    Infine per togliere la password andiamo sotto
    codice:
    User privilege specification
    E aggiungiamo:
    codice:
    NOME_DA_RICHIAMARE_DOPO2 ALL=NOPASSWD: NOME_DA_RICHIAMARE_DOPO1
    Dove NOME_DA_RICHIAMARE_DOPO2 è il secondo che abbiamo inserito quindi relativo all'utente e NOME_DA_RICHIAMARE_DOPO1 è quello per il comando. Sempre nel mio caso:
    codice:
    ME ALL=NOPASSWD: SPEGNIMENTO
    Così facendo, digitando il comando:
    codice:
    sudo shutdown -h now
    il computer non vi chiederà più la password di root, ma farà da solo. Logicamente inserendo questo in system() funzionerà:
    codice:
    system(shutdown -h now)
    Mi raccomando dove ho messo maiuscolo, la parola va maiuscola!
    Per uscire dal file:
    - Se siete su OS X premere esc e quindi :wq (salva ed esci) :q (esci soltanto)
    - Se siete su Linux, c'è messo in basso comunque ^x (ctrl x) se non sbaglio

    Tre cose ancora:
    1. Si può togliere la password di root per qualsiasi comando che ne abbia bisogno. Per fare questo andiamo sotto
    codice:
    User privilege specification
    e cambiamo da
    codice:
    root ALL=(ALL) ALL
    %admin ALL=(ALL) ALL
    con:
    codice:
    root ALL=NOPASSWD: ALL
    %admin ALL=NOPASSWD: ALL
    Non so però quanto sicura sia una cosa del genere, in quanto tutti possono a quel punto accedervi.

    2. Non ne sono sicuro perchè non ho controllato/non ne sono a conoscenza, ma potrebbe esserci un'altra/altre cartella/e dove sono contenuti altri comandi, quindi non solo /sbin, cercate

    3. Vi rimando al link che mi ha aiutato: https://ubuntrucchi.wordpress.com/2008/03/25/eseguire-un-programma-come-root-senza-la-richiesta-di-password/

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.