GNU/Linux >> Linux Esercitazione >  >> Linux

Come consentire agli utenti di modificare i file in modo sicuro utilizzando sudoedit su Linux

Supponiamo che tu sia un amministratore di sistema in un'azienda in cui i team lavorano principalmente su Linux con privilegi limitati. Immagina ora una situazione in cui i membri di uno dei team, come parte di un nuovo lavoro, devono modificare frequentemente un file che richiede privilegi di superutente. Cosa faresti?

Un'opzione è dare loro l'accesso "sudo", ma sarebbe come dare a un estraneo l'accesso alla tua casa completa quando tutto ciò di cui hanno bisogno è di trovarsi solo in una delle tue stanze - intendo dire che l'accesso "sudo" predefinito sarà lascia che facciano qualsiasi cosa che richieda i privilegi di root, quando tutto ciò che è richiesto è la capacità di modificare un determinato file di sistema.

Dato il tipo di flessibilità che offre 'sudo', l'altra opzione che hai è modificare la politica 'sudo' in modo che sia concesso solo il privilegio di modificare il file in questione. Ad esempio, qualcosa del genere:

%newsudo ALL = vim /path/to/file

Anche se questa è senza dubbio una soluzione di gran lunga migliore rispetto a fornire l'accesso completo sudo, c'è ancora una scappatoia che qualcuno potrebbe sfruttare.

Per capire di cosa sto parlando, considera uno scenario in cui il suddetto accesso limitato viene fornito al gruppo e qualcuno apre il file in questione per la modifica utilizzando il comando 'sudo'.

Ora, una mente intelligente con una buona conoscenza di vim saprebbe che possono lanciare una nuova shell dall'interno dell'editor - tutto ciò che devono fare è eseguire il seguente comando vim:

:shell

Questo ti collocherà immediatamente in una shell interattiva. Se stai provando questi passaggi sulla tua macchina, esegui semplicemente il comando 'whoami' e capirai di quale scappatoia stavo parlando: Sì, sei nella shell come root.

Ecco uno screenshot di esempio:

Inutile dire che lo scopo di fornire l'accesso in modifica a un solo file è stato vanificato e l'utente può fare QUALSIASI COSA ora.

Vediamo se c'è qualche altra opzione che abbiamo. Esiste un tag NOEXEC che puoi utilizzare nella voce sudoers:

%newsudo ALL = NOEXEC: vim /path/to/file

NOEXEC fondamentalmente ti consente di impedire a un programma eseguito da sudo di eseguire altri programmi. Quindi, è questa la soluzione definitiva? Purtroppo no. Per quanto riguarda i motivi, ecco come il manuale sudoers spiega questo tag:

noexec

Many systems that support shared libraries have the ability to override default library functions by pointing an environment variable (usually LD_PRELOAD) to an alternate shared library. On such systems, sudo's noexec functionality can be used to prevent a program run by sudo from executing any other programs. Note, however, that this applies only to native dynamically-linked executables. Statically-linked executables and foreign executables running under binary emulation are not affected.

The noexec feature is known to work on SunOS, Solaris, *BSD, Linux, IRIX, Tru64 UNIX, MacOS X, HP-UX 11.x and AIX 5.3 and above.
...
...
...
To enable noexec for a command, use the NOEXEC tag as documented in the User Specification section above. Here is that example again:

aaron shanty = NOEXEC: /usr/bin/more, /usr/bin/vi

This allows user aaron to run /usr/bin/more and /usr/bin/vi with noexec enabled. This will prevent those two commands from executing other commands (such as a shell). If you are unsure whether or not your system is capable of supporting noexec you can always just try it out and check whether shell escapes work when noexec is enabled.

Note that restricting shell escapes is not a panacea. Programs running as root are still capable ofmany potentially hazardous operations (such as changing or overwriting files) that could lead to unintended privilege escalation.
...
...
...

Se leggi attentamente il testo evidenziato in grassetto, saprai che NOEXEC ha i suoi limiti.

Allora, qual è la soluzione più affidabile allora? Bene, è sudoedit . Anche sudoers manual consiglia questo strumento:

In the specific case of an editor, a safer approach is to give the user permission to run sudoedit.

Sudoedit è un comando integrato che consente agli utenti di modificare i file in modo sicuro. Secondo la pagina man di sudo, 'sudoedit' equivale a eseguire 'sudo' con l'opzione della riga di comando '-e'.

Perché è meglio

Con "sudoedit", gli utenti possono scegliere di utilizzare il loro editor preferito, che è diverso dalla soluzione che abbiamo discusso all'inizio di questo tutorial in cui gli utenti sono costretti a utilizzare l'editor Vim, consentendo loro di godere delle proprie personalizzazioni. E la ragione principale di tutte, con "sudoedit", l'utente modificherà il file come se stesso e non come "root".

Come funziona Sudoedit

Per utilizzare sudoedit, la voce nei sudoers dovrebbe essere, ad esempio, qualcosa del genere:

%newsudo ALL = sudoedit /path/to/file

E gli utenti che fanno parte del gruppo 'newsudo' potranno modificare il file eseguendo il seguente comando:

sudoedit /path/to/file

Quindi, ciò che farà questo comando sarà prima di creare una copia temporanea del file che desideri modificare. Quindi, il comando cercherà nelle variabili di ambiente SUDO_EDITOR, VISUAL ed EDITOR (in quest'ordine) per determinare quale editor deve essere richiamato per aprire la copia temporanea appena creata. Dopo che l'utente ha terminato il lavoro di modifica, le modifiche vengono copiate nel file originale.

Ecco la spiegazione dettagliata dalla pagina man del comando 'sudo':

-e, --edit 
Edit one or more files instead of running a command. In lieu of a path name, the string "sudoedit" is used when consulting the security policy. If the user is authorized by the policy, the followingsteps are taken:

1. Temporary copies are made of the files to be edited with
the owner set to the invoking user.

2. The editor specified by the policy is run to edit the
temporary files. The sudoers policy uses the
SUDO_EDITOR, VISUAL and EDITOR environment variables (in
that order). If none of SUDO_EDITOR, VISUAL or EDITOR
are set, the first program listed in the editor
sudoers(5) option is used.

3. If they have been modified, the temporary files are
copied back to their original location and the temporary
versions are removed.

If the specified file does not exist, it will be created. Note that unlike most commands run by sudo, the editor is run with the invoking user's environment unmodified. If, for some reason, sudo is unable to update a file with its edited version, the user will receive a warning and the edited copy will remain in a temporary file.

A questo punto, dovresti avere un'idea di base su "sudoedit", incluso quando usarlo e perché è meglio che usare "sudo" quando tutto ciò che vuoi è modificare un file o alcuni file. Ovviamente, come qualsiasi altro strumento relativo alla sicurezza, 'sudoedit' ha avuto la sua parte di exploit, ma è ancora una soluzione consigliata in molti casi d'uso.


Linux
  1. Come eseguire il confronto riga per riga dei file in Linux usando il comando diff

  2. Come scrivere file di registro nella RAM usando Log2ram in Linux

  3. Come copiare in modo sicuro file tra host Linux utilizzando SCP e SFTP

  4. Come trasferire file in modo sicuro utilizzando SCP

  5. Come rinominare più file insieme in Linux usando 3 metodi

Come modificare più file usando Vim Editor

Come eseguire il backup di file e directory utilizzando Rsync in Linux

Come bloccare una porta utilizzando un firewall in Linux

Come sincronizzare i file in due modi utilizzando Osync Script in Linux

Come eliminare file e directory utilizzando la riga di comando di Linux

Come eliminare in modo sicuro i file utilizzando il comando Shred in Debian 11