Autorizzazione file eseguita solo


12

Come posso impostare il file in modo che sia eseguibile solo ad altri utenti ma non leggibile / scrivibile, per questo motivo sto eseguendo qualcosa con il mio nome utente ma non voglio dare la password. Provai :

chmod 777 testfile
chmod a=x
chmod ugo+x

Mi viene ancora negata l'autorizzazione durante l'esecuzione come un altro utente.


Che ne dici di eseguirlo NON come un altro utente? E questo è uno script o un programma binario? Gli script devono essere letti dall'interprete.
psusi,

Hai un shebang nella parte superiore del file? #! / bin / sh
J Baron,

Risposte:


10

Per poterlo eseguire sono necessarie sia le autorizzazioni di lettura che quelle di esecuzione su uno script. Se non riesci a leggere il contenuto dello script, non puoi nemmeno eseguirlo.

tony@matrix:~$ ./hello.world
hello world
tony@matrix:~$ ls -l hello.world
-rwxr-xr-x 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ chmod 100 hello.world
tony@matrix:~$ ls -l hello.world
---x------ 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ ./hello.world
bash: ./hello.world: Permission denied

Effettivamente, aggiornato per riflettere che è vero per gli script che, considerando la domanda originale, è quello che sospetto sia il caso.
EightBitTony,

12

C'è una mezza verità nelle dichiarazioni precedenti. È possibile impostare uno script in modo che non sia leggibile dall'utente, ma comunque eseguibile. Il processo è un po 'elaborato, ma è possibile fare un'eccezione in / etc / sudoer in modo che l'utente possa eseguire lo script come se stesso temporaneamente senza che venga richiesta una password. Esempio sotto:

Alcuni script che voglio condividere con un utente:

me@OB1:~/Desktop/script/$ chmod 700 somescript.pl
me@OB1:~/Desktop/script/$ ls -l somescript.pl
-rwx------ 1 me me 4519 May 16 10:25 somescript.pl

Crea uno script shell che chiama 'somescript.pl' e salvalo in / bin /:

me@OB1:/bin$ sudo cat somescript.sh
[sudo] password for me: 
#!/bin/bash
sudo -u me /home/me/Desktop/script/somescript.pl $@

FASE OPZIONALE Crea un link simbolico a somescript.sh in / bin /:

sudo ln -s /bin/somescript.sh /bin/somescript

Assicurarsi che lo script della shell sia leggibile / eseguibile per l'utente (nessun accesso in scrittura):

sudo chmod 755 /bin/somescript.sh
me@OB1:/bin$ ls -l somescript*
lrwxrwxrwx 1 root root  14 May 28 16:11 somescript -> /bin/somescript.sh
-rwxr-xr-x 1 root root 184 May 28 18:45 somescript.sh

Fai un'eccezione in / etc / sudoer aggiungendo queste righe:

# User alias specification
User_Alias  SCRIPTUSER = me, someusername, anotheruser

# Run script as the user 'me' without asking for password
SCRIPTUSER ALL = (me) NOPASSWD: /home/me/Desktop/script/somescript.pl

PROVA NEL PUDDING:

someuser@OB1:~$ somescript
***You can run me, but can't see my private parts!***

someuser@OB1:~$ cat /home/me/Desktop/script/somescript.pl
cat: /home/me/Desktop/script/somescript.pl: Permission denied

Questo metodo dovrebbe essere migliore del tentativo di offuscare con Filter::Cryptoo PAR::Filter::Cryptoo Acme::Bleachche può essere invertito progettato da un utente determinato. Lo stesso vale per la compilazione dello script in binario. Fammi sapere se trovi qualcosa di sbagliato in questo metodo. Per utenti più esperti potresti voler rimuovere completamente la sezione User_Alias ​​e sostituire SCRIPTUSER con '% groupname'. In questo modo puoi gestire i tuoi utenti di script con usermodcomando.


6

Se permetti ad altri utenti di eseguire un programma, allora possono sapere tutto quello che il programma sta facendo, sia che il file del programma sia leggibile o meno. Tutto quello che devono fare è puntare un debugger (o un programma simile al debugger come strace). Un eseguibile binario può essere eseguito se è eseguibile e non leggibile (uno script non può, perché l'interprete deve essere in grado di leggere lo script), ma ciò non fornisce alcuna sicurezza.

Se vuoi che gli altri siano in grado di eseguire il tuo programma come una scatola nera, senza far loro vedere esattamente cosa sta facendo il programma, devi dare al tuo script privilegi elevati: rendilo impostato per il tuo utente. Solo root può usare strumenti di debug su programmi setuid. Nota che scrivere programmi setuid sicuri non è facile e la maggior parte delle lingue non è adatta; vedere Consenti setuid su script shell per ulteriori spiegazioni. Se hai intenzione di scrivere un programma setuid, consiglio vivamente Perl, che ha una modalità (modalità taint) che ha esplicitamente lo scopo di rendere possibili script setuid sicuri.


-1

È possibile impostare le autorizzazioni per i file con il comando chmod. Sia l'utente root che il proprietario del file possono impostare autorizzazioni per i file. chmod ha due modalità, simbolica e numerica.

Innanzitutto, decidi se impostare le autorizzazioni per l'utente (u), il gruppo (g), altri (o) o tutti e tre (a). Quindi, aggiungi un'autorizzazione (+), rimuovila (-) o cancella le autorizzazioni precedenti e ne aggiungi una nuova (=). Successivamente, decidi se impostare l'autorizzazione di lettura (r), l'autorizzazione di scrittura (w) o eseguire l'autorizzazione (x). Infine, dirai a chmod quali autorizzazioni di file vuoi modificare.

Ecco alcuni esempi.

Elimina tutte le autorizzazioni ma aggiungi le autorizzazioni di lettura per tutti:

$ chmod a=r filename

Dopo il comando, le autorizzazioni del file sarebbero -r - r - r--

Aggiungi autorizzazioni di esecuzione per il gruppo:

$ chmod g+x filename

Ora, le autorizzazioni del file sarebbero -r - r-xr--

Aggiungi entrambe le autorizzazioni di scrittura ed esecuzione per il proprietario del file. Nota come è possibile impostare più di un'autorizzazione contemporaneamente:

$ chmod u + wx nomefile

Successivamente, le autorizzazioni per i file saranno -rwxr-xr--

Rimuovere l'autorizzazione di esecuzione sia dal proprietario che dal gruppo del file. Nota, ancora una volta, come puoi impostarli entrambi contemporaneamente:

$ chmod ug-x nomefile

Ora, le autorizzazioni sono -rw-r - r--

Questo è un riferimento rapido per l'impostazione delle autorizzazioni per i file in modalità simbolica:

Which user?
u   user/owner
g   group
o   other
a   all
What to do?
+   add this permission
-   remove this permission
=   set exactly this permission
Which permissions?
r   read
w   write
x   execute

Dalla domanda emerge che l'OP comprende come utilizzare chmod. Questo non risponde alla domanda.
Scott,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.