GNU/Linux >> Linux Esercitazione >  >> Linux

Dare autorizzazioni di gruppo ai file di altri utenti?

Sto usando Debian 7 e ho creato un nuovo utente (sito web) con una directory htdocs come questa:

$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website

Ora vorrei che gli utenti di un altro gruppo (sviluppatori) avessero accesso alla directory dell'utente. Ho provato:

$ sudo chown -R :developers /home/website

Vedo che il gruppo è assegnato (con ls -la o stat ) e che gli utenti sono nel gruppo, ma non hanno accesso giusto?

drwxr-xr-x     3     website     developers     4096 May 3 09:09     website

Voglio anche:

  • Consenti a un altro gruppo, "appaltatori" di accedere ai file del sito web

  • Limita l'accesso degli utenti del sito web solo alle loro home directory

  • Assicurati che i nuovi file del sito web ereditino queste autorizzazioni

Devi usare gli elenchi di controllo degli accessi o c'è un modo migliore per farlo (come non utilizzare un utente separato per ogni sito)?

Risposta accettata:

È difficile dare comandi precisi senza conoscere il sistema operativo o la distribuzione; e sì! ACL funzionerebbe, ma esiste anche un modo standard.

C'è adduser e useradd , uno di loro sulla tua distribuzione potrebbe creare automaticamente la home directory dell'utente. Se è così, allora il contenuto di /etc/skel/ la directory verrebbe copiata nella home directory dell'utente, le autorizzazioni impostate e forse potrebbero essere eseguite altre azioni appropriate.

Potrebbero esistere gruppi predefiniti per la condivisione, come "personale"; ma, se vogliamo creare il nostro gruppo per la condivisione, non c'è niente di sbagliato in questo. Quindi, crea un nuovo gruppo o usa un gruppo esistente. Assicurati che gli utenti che devono essere membri del gruppo siano stati definiti come tali con usermod , moduser o vigr forse, a seconda del sistema operativo. Ogni utente attualmente connesso deve disconnettersi e riconnettersi per diventare un membro di un nuovo gruppo.

Crea una directory comune a tutti gli utenti, come /home/share_directory/ o qualsiasi altra directory che abbia più senso per la tua situazione. Una best practice pertinente è quella di non utilizzare una directory all'interno directory home di qualsiasi utente. Se nessuno tranne il proprietario e il gruppo dovrebbe essere in grado di vedere i file nella directory, cambia i permessi della directory in 0770. Se la lettura è ok da "altri", usa 0775. Il proprietario della directory dovrebbe quasi sicuramente essere root.

chown root:group_name /home/share_directory/

Quindi, cambia il bit setuid.

chmod +s /home/share_directory/

Se nessun utente dovrebbe essere in grado di modificare il file di un altro utente, imposta anche il bit stick.

chmod +t /home/share_directory/

Questi esempi impostano contemporaneamente i bit setuid e sticky usando la notazione ottale.

chmod 5775 /home/share_directory/

o

chmod 5770 /home/share_directory/

Per la domanda aggiornata, sembra che ACL sia lo strumento giusto. La maggior parte delle distribuzioni Linux ora include acl opzione nei defaults opzione. Se la tua distribuzione non include acl opzione per impostazione predefinita, quindi è necessario un piccolo lavoro per iniziare a usarlo. Per prima cosa monta i file system con acl opzione in /etc/fstab.

sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1

Se necessario, rimontare il filesystem:sudo mount -o remount,acl / . Quindi crea un gruppo a cui un utente può appartenere per questo scopo. Potrebbe essere necessario installare anche gli strumenti ACL:apt-get install acl .

sudo groupadd developers
sudo usermod -a -G developers $username

(Oppure il gruppo potrebbe essere "appaltatori".) Un utente attualmente connesso deve disconnettersi e riconnettersi per diventare un membro del nuovo gruppo. Ovviamente, non farlo se hai contenuto nella directory /var/www che vuoi conservare, ma solo per illustrare la configurazione per iniziare:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public

Sopra, la differenza tra il setfacl i comandi sono questi:la prima istanza utilizza il gruppo predefinito (gruppo proprietario della directory) mentre la seconda specifica un gruppo in modo esplicito. Il -d switch stabilisce la maschera predefinita (-m ) per tutti i nuovi oggetti del filesystem all'interno della directory. Tuttavia, dobbiamo anche eseguire nuovamente il comando senza -d passare per applicare l'ACL alla directory stessa. Quindi sostituisci i riferimenti a "/var/www" con "/var/www/public" in un file di configurazione e ricarica.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Se volessimo limitare l'eliminazione e la ridenominazione a tutti tranne all'utente che ha creato il file:sudo chmod +t /var/www/public . In questo modo, se vogliamo creare directory per framework che esistono al di fuori della root del documento Apache o magari creare directory scrivibili dal server, è ancora facile.

Correlati:Debian – Come convertire un sistema basato su Debian a 32 bit (x86) a 64 bit?

Directory dei log scrivibili da Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Directory della libreria leggibile da Apache:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

Un po' di "riproduzione" in una directory che non ha importanza dovrebbe aiutarti a farlo proprio per la tua situazione.

Sulle restrizioni, utilizzo due diversi approcci:la shell, rssh , è stato creato per fornire l'accesso SCP/SFTP ma non l'accesso SSH; oppure, per limitare l'uso a una home directory è possibile utilizzare il sottosistema internal-sftp, configurato in /etc/ssh/sshd_config .

Subsystem sftp internal-sftp

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

Crea un gruppo chiamato, ad esempio, sftponly. Rendi gli utenti un membro del gruppo sftponly. Cambia le loro directory home in / a causa del chroot. La directory, /home/nomeutente, dovrebbe essere di proprietà di root. Puoi anche impostare la shell dell'utente su /bin/false per impedire l'accesso SSH. Per lo più sono preoccupato per l'accesso interattivo, quindi generalmente vai con rssh il percorso. (Non possono scrivere da nessuna parte tranne dove ho definito la capacità di scrittura.)


Linux
  1. Utilizzo di sudo per delegare le autorizzazioni in Linux

  2. Rendere tutti i nuovi file in una directory accessibili a un gruppo?

  3. Ottenere nuovi file per ereditare le autorizzazioni di gruppo su Linux?

  4. Precedenza dell'utente e del proprietario del gruppo nelle autorizzazioni dei file?

  5. Forzare nuove autorizzazioni sui file dopo Rsync da Seedbox?

Come modificare ricorsivamente le autorizzazioni dei file in Linux

Come trovare file in base alle loro autorizzazioni in Linux

Ottimizza i file PDF (con Ghostscript o altro)

Problema di autorizzazioni con Laravel su CentOS

Come posso forzare il gruppo e le autorizzazioni per i file creati all'interno di una directory specifica?

Configurazione di sudo senza password su distribuzioni Linux