Differenze tra le versioni di "Inserire le password per lanciare comandi"
(6 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 14: | Riga 14: | ||
Esempio: | Esempio: | ||
Desktop.RunAsRoot("<FONT color=#B22222>cat</font> /dev/input/mouse0") | Desktop.RunAsRoot("<FONT color=#B22222>cat</font> /dev/input/mouse0") | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Dare una volta sola la password di root per aprire un file protetto=== | ===Dare una volta sola la password di root per aprire un file protetto=== | ||
Riga 123: | Riga 57: | ||
Public Sub Button1_Click() | Public Sub Button1_Click() | ||
− | Shell "xterm -e sudo | + | Shell "xterm -e sudo <I>comando_da_lanciare</i>" |
<FONT color=gray>' ''oppure usando "x-terminal-emulator":''</font> | <FONT color=gray>' ''oppure usando "x-terminal-emulator":''</font> | ||
− | <FONT Color=gray>'''Shell "x-terminal-emulator -e sudo | + | <FONT Color=gray>'''Shell "x-terminal-emulator -e sudo <I>comando_da_lanciare</i>"'''</font> |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
+ | <FONT color=gray>' ''oppure usando "terminator":''</font> | ||
+ | <FONT Color=gray>'''Shell "terminator -x sudo <I>comando_da_lanciare</i>"'''</font> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
End | End | ||
− | |||
− | |||
− | ====Lanciando "sudo" da un Terminale appositamente aperto | + | ==Dare una volta sola la password di root per aprire un file protetto== |
+ | L'immissione della propria password di root con "Shell" può servire anche - come è noto - ad esempio per cambiare i permessi dei ''file-device'', ottenendone così libero accesso. | ||
+ | |||
+ | ===Lanciando "sudo" da un Terminale appositamente aperto=== | ||
Il comando ''sudo'' potrà essere utilizzato all'interno di un terminale, per sbloccare così sino alla chiusura della sessione un file protetto: | Il comando ''sudo'' potrà essere utilizzato all'interno di un terminale, per sbloccare così sino alla chiusura della sessione un file protetto: | ||
Shell "xterm -e sudo chmod 666 <FONT Color=darkgreen>''/percorso/del/file/protetto/da/sbloccare''</font>" | Shell "xterm -e sudo chmod 666 <FONT Color=darkgreen>''/percorso/del/file/protetto/da/sbloccare''</font>" | ||
oppure richiamando "x-terminal-emulator": | oppure richiamando "x-terminal-emulator": | ||
Shell "x-terminal-emulator -e sudo chmod 666 <FONT Color=darkgreen>''/percorso/del/file/protetto/da/sbloccare''</font>" | Shell "x-terminal-emulator -e sudo chmod 666 <FONT Color=darkgreen>''/percorso/del/file/protetto/da/sbloccare''</font>" | ||
+ | o "terminator": | ||
+ | Shell "terminator -x sudo chmod 666 <FONT Color=darkgreen>''/percorso/del/file/protetto/da/sbloccare''</font>" | ||
Si aprirà la finestra del terminale, <SPAN Style="text-decoration:underline">nella quale inserire la propria parola-chiave di sistema</span>. Anche in questo caso gli eventuali dati, restituiti dal comando, saranno mostrati all'interno della finestra del terminale. | Si aprirà la finestra del terminale, <SPAN Style="text-decoration:underline">nella quale inserire la propria parola-chiave di sistema</span>. Anche in questo caso gli eventuali dati, restituiti dal comando, saranno mostrati all'interno della finestra del terminale. | ||
− | + | ===Lanciando "sudo" senza far aprire la finestra del Terminale per l'inserimento della password=== | |
Se non si vuole far aprire la finestra del terminale per l'inserimento della password, allora si potrà utilizzare la seguente modalità che prevede anche l'uso del comando "echo"; come quando si deve lanciare un comando ''bash'' che necessita di ''sudo'': | Se non si vuole far aprire la finestra del terminale per l'inserimento della password, allora si potrà utilizzare la seguente modalità che prevede anche l'uso del comando "echo"; come quando si deve lanciare un comando ''bash'' che necessita di ''sudo'': | ||
Shell "echo <FONT Color=gray>''MIA-PASSWORD''</font> | sudo -S <FONT Color=gray>''comando-da-lanciare''</font>" | Shell "echo <FONT Color=gray>''MIA-PASSWORD''</font> | sudo -S <FONT Color=gray>''comando-da-lanciare''</font>" | ||
Riga 220: | Riga 132: | ||
End | End | ||
− | + | ||
+ | ===Uso dell'istruzione ''Input'' per passare la password=== | ||
+ | Si potrà usare l'istruzione ''Input'' seguita da una semplice variabile di tipo ''Stringa'', che dovrà contenere la password immessa nello spazio sottostante la console del progetto, oppure nel Terminale. | ||
+ | <BR>L'istruzione ''Input'' bloccherà lo scorrimento del programma sino a quando non sarà stata immessa, come prima descritto, e inviata (premendo il tasto "Invio" della tastiera) la nostra password: | ||
Public Sub Main() | Public Sub Main() | ||
Riga 230: | Riga 145: | ||
End | End | ||
+ | |||
+ | ===Uso del Controllo grafico ''InputBox'' per passare la password=== | ||
+ | In ambiente grafico si potrà usare il Controllo ''InputBox'': | ||
+ | Dim s As String | ||
+ | |||
+ | s = InputBox("Inserire la propria password...") | ||
+ | |||
+ | Shell "echo " & s & " | sudo -S chmod 666 /dev/tty0" | ||
Versione attuale delle 14:28, 18 ott 2024
A volte può capitare che per poter utilizzare alcuni comandi o per eliminare la protezione ad alcuni file, sia necessario inserire la propria parola-chiave (password ) di root.
A seconda delle circostanze vi sono alcune modalità.
Indice
- 1 Utilizzo del Metodo Gambas: "Desktop.RunAsRoot()"
- 2 Uso diretto di comandi bash lanciati mediante "Shell"
- 3 Lanciare i comandi bash senza uso di Shell
- 4 Note
Utilizzo del Metodo Gambas: "Desktop.RunAsRoot()"
Innanzitutto possiamo lanciare un comando bash attraverso il Metodo ".RunAsRoot()" della Classe statica Desktop.
Esso presuppone che sia stato attivato il Componente "gb.desktop".
Nel primo argomento del Metodo "Desktop.RunAsRoot()" va scritta l'intera linea di comando da lanciare e non il solo comando:
Public Sub Button1_Click() Desktop.RunAsRoot("Intera_linea_di_comando") End
Esempio:
Desktop.RunAsRoot("cat /dev/input/mouse0")
Dare una volta sola la password di root per aprire un file protetto
Per dare una volta sola la password di root per aprire un file protetto si utilizza il comando chmod [1] e il codice - ad esempio - 4777 [2] (corrispondente a: rwsrwxrwx) per impostare il setUID. Tale comando consentirà con effetto temporaneo, ossia limitato alla sola attuale sessione di sistema, di modificare i permessi del file, in modo tale ad esempio che tutti possano eseguire tranquillamente un programma o accedere ad un file che di norma richiede i permessi di root.
In sostanza, la password verrà sì inserita, ma una volta soltanto.
Esempio:
Private pr as Process Public Sub Form_Open() ' Se il file non possiede i più ampi permessi... If Stat("/dev/input/mouse0").Auth <> "rwsrwxrwx" Then ' ...allora modificheremo in quel senso i permessi del file: Desktop.RunAsRoot("chmod 4777 /dev/input/mouse0") ' Restiamo in attesa fino a che i permessi non vengono modificati, come desiderato: Repeat Wait 0.01 Until Stat("/dev/input/mouse0").Auth = "rwsrwxrwx" Endif ' Modificati i permessi, passiamo, dunque, avanti per gestire il file: pr = Shell "cat /dev/input/mouse0" For Read As "Processo" End Public Sub Processo_Read() Dim b As Byte Read #pr, b Print b End
Uso diretto di comandi bash lanciati mediante "Shell"
Far aprire un terminale per inserire la propria password con sudo
La seguente riga di comando farà aprire una finestra di Terminale, nella quale si potrà inserire la propria parola-chiave:
Public Sub Button1_Click() Shell "xterm -e sudo comando_da_lanciare" ' oppure usando "x-terminal-emulator": Shell "x-terminal-emulator -e sudo comando_da_lanciare" ' oppure usando "terminator": Shell "terminator -x sudo comando_da_lanciare" End
Dare una volta sola la password di root per aprire un file protetto
L'immissione della propria password di root con "Shell" può servire anche - come è noto - ad esempio per cambiare i permessi dei file-device, ottenendone così libero accesso.
Lanciando "sudo" da un Terminale appositamente aperto
Il comando sudo potrà essere utilizzato all'interno di un terminale, per sbloccare così sino alla chiusura della sessione un file protetto:
Shell "xterm -e sudo chmod 666 /percorso/del/file/protetto/da/sbloccare"
oppure richiamando "x-terminal-emulator":
Shell "x-terminal-emulator -e sudo chmod 666 /percorso/del/file/protetto/da/sbloccare"
o "terminator":
Shell "terminator -x sudo chmod 666 /percorso/del/file/protetto/da/sbloccare"
Si aprirà la finestra del terminale, nella quale inserire la propria parola-chiave di sistema. Anche in questo caso gli eventuali dati, restituiti dal comando, saranno mostrati all'interno della finestra del terminale.
Lanciando "sudo" senza far aprire la finestra del Terminale per l'inserimento della password
Se non si vuole far aprire la finestra del terminale per l'inserimento della password, allora si potrà utilizzare la seguente modalità che prevede anche l'uso del comando "echo"; come quando si deve lanciare un comando bash che necessita di sudo:
Shell "echo MIA-PASSWORD | sudo -S comando-da-lanciare"
Ad esempio per sbloccare un file protetto:
Shell "echo MIA-PASSWORD | sudo -S chmod 666 /percorso/del/file/protetto/da/sbloccare"
Mostriamo un esempio pratico:
Public Sub Main() Dim fl As File Shell "echo MIA-PASSWORD | sudo -S chmod 666 '/dev/tty0'" ' Compie il ciclo, finché i permessi del file-device non sono cambiati: Repeat Wait 0.01 Until Stat("/dev/tty0").Auth = "rw-rw-rw-" fl = Open "/dev/tty0" For Write fl.Close End
o anche usando la funzione "Access()":
Public Sub Main() Dim fl As File Shell "echo MIA-PASSWORD | sudo -S chmod 666 '/dev/tty0'" ' Compie il ciclo, finché i permessi del file-device non sono cambiati: Repeat Wait 0.01 Until Access("/dev/tty0", gb.Write) fl = Open "/dev/tty0" For Write fl.Close End
oppure, anziché un ciclo, più semplicemente ponendo "Wait" a destra dell'istruzione con Shell:
Public Sub Main() Dim fl As File ' Resta in attesa, finché i permessi del file-device non sono cambiati: Shell "echo MIA-PASSWORD | sudo -S chmod 666 '/dev/tty0'" Wait fl = Open "/dev/tty0" For Write fl.Close End
Uso dell'istruzione Input per passare la password
Si potrà usare l'istruzione Input seguita da una semplice variabile di tipo Stringa, che dovrà contenere la password immessa nello spazio sottostante la console del progetto, oppure nel Terminale.
L'istruzione Input bloccherà lo scorrimento del programma sino a quando non sarà stata immessa, come prima descritto, e inviata (premendo il tasto "Invio" della tastiera) la nostra password:
Public Sub Main() Dim s As String Input s Shell "echo " & s & " | sudo -S chmod 666 /dev/tty0" End
Uso del Controllo grafico InputBox per passare la password
In ambiente grafico si potrà usare il Controllo InputBox:
Dim s As String s = InputBox("Inserire la propria password...") Shell "echo " & s & " | sudo -S chmod 666 /dev/tty0"
Lanciare i comandi bash senza uso di Shell
E' possibile lanciare i comandi bash senza l'uso della funzione Shell di Gambas, ma utilizzando la funzione esterna "system()", dichiarata nel file header di sistema /usr/include/stdlib.h, la quale passa il nome del comando o del programma specificato perché sia eseguito.
Di seguito mostriamo un esempio con sudo:
Library "libc:6" ' int system (const char *__command) ' Execute the given line as a shell command. Private Extern system_C(__command As String) As Integer Exec "system" Public Sub Main() Dim i As Integer ' Con il parametro -S (maiuscolo) non verrà richiesta l'immissione la password da Console o Terminale. ' Con il parametro -s (minuscolo) verrà, invece, comunque richiesta l'immissione la password da Console o Terminale. i = system_C("echo 'MIA_PASSWORD' | sudo -S chmod 666 /dev/tty0") If i < 0 Then Error.Raise("Impossibile lanciare il comando !") End
Note
[1] Va sottolineato che il comando chmod andrà scritto tutto in minuscolo !
[2] Come impostare il valore per cambiare i permessi dei file con chmod: chmod può prendere argomenti del tipo alfabetico, ad esempio, g + wr, u + x, a-w, laddove:
a = all (ossia per tutte e tre le classi: proprietario del file, gruppo, altri); o = "others" (altri); g = "group" (gruppo) u = "user" (proprietario) r = lettura w = scrittura x = esecuzione
È possibile utilizzare l'operatore - per rimuovere un privilegio, per esempio, a-w rimuove il permesso di scrittura per tutti;
È possibile utilizzare l'operatore + per aggiungere un privilegio, ad esempio, g+w aggiunge permessi di scrittura per il gruppo;
È possibile utilizzare l'operatore = per impostare il privilegio in modo identico per , ad esempio, a=rw imposterà il permesso di [rw-rw-rw-]
chmod può anche assumere argomenti numerici di "modalità" (mode), che così rappresentiamo: nnn
laddove:
- il primo numero è la modalità per il proprietario del file;
- il secondo numero è la modalità per il gruppo;
- il terzo numero è la modalità per ogni altro utente.
Per specificare i permessi attribuiti a ciascuna delle predette tre modalità, viene assegnato dato dalla eventuale somma dei seguenti numeri:
4 = lettura 2 = scrittura 1 = esecuzione
Così, ad esempio 765 significa:
alla classe "proprietario" sono modificati i permessi attribuendo: 4 (lettura) + 2 (scrittura) + 1 (esecuzione) = 7 (sono, dunque, modificati tutti e tre i permessi)
alla classe "gruppo" sono sono modificati i permessi attribuendo: 4 (lettura) + 2 (scrittura) + 0 (esecuzione) = 6 (assegnando 0 al permesso per l'esecuzione, esso viene negato)
alla classe "altri" sono sono modificati i permessi attribuendo: 4 (lettura) + 0 (scrittura) + 1 (esecuzione) = 5 (assegnando 0 al permesso per la scrittura, esso viene negato)
Assegnando ad una classe utente del file il valore 0 (zero) per i tre permessi, viene negata alla classe ovviamente ogni tipo di permesso.
Esempi:
000 nega ogni permesso a tutte e tre le classi di utenti;
604 nega ogni permesso alla sola classe "gruppo";
700 nega ogni permesso alle classi "gruppo" ed "altri".