Impostazione del nome utente e del gruppo predefiniti per i file nella directory


13

Utilizzando questo utile post sono in grado di impostare un gruppo predefinito e autorizzazioni per i file in una cartella.

Ho problemi a impostare un proprietario predefinito (teamlead uid 1234).

setfacl -d -m g::rwx /my/test/folder
setfacl -d -m o::rx /my/test/folder

getfacl /my/test/folder

# file: /my/test/folder
# owner: teamlead
# group: web_prod
# flags: -s-
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::rwx
default:other::r-x

Con quello:

[mary@boxen]# touch /my/test/folder/somefile
[mary@boxen]# ll /my/test/folder/somefile
-rw-rw-r--. 1 mary web_prod 0 Nov  6 08:58 somefile

Quindi viene assegnato il gruppo giusto, ma il nuovo file ha la proprietà dell'utente che crea il file. Vorrei che i file appena creati avessero teamlead: web_prod proprietario / gruppo.

Sembra che setfaclpossa essere utilizzato anche per impostare un utente predefinito. Con la cartella esistente acl config (sopra):

[mary@boxen]# setfacl -d -m u:1234:rwx /my/test/folder

Ora per creare un file come un altro utente. Mi aspetto che abbia teamlead: proprietà web_prod.

[mary@boxen]# touch /my/test/folder/anotherfile
[mary@boxen]# ll /my/test/folder/anotherfile
-rw-rw-r--+ 1 mary web_prod 0 Nov  6 08:58 somefile

Il nuovo file ha ancora la proprietà del proprietario che crea il file, non uid 1234 (teamlead).

Ciò che sto cercando è persino possibile o è sbagliato il modo in cui sto procedendo?

Risposte:


18

Con setfacl è possibile impostare le autorizzazioni predefinite ma non il proprietario / gruppo predefinito per i file appena creati.

Per ottenere nuovi file di proprietà di un utente specifico, è necessario un bit setuid che funzioni come il bit setgid nelle directory. Purtroppo questo non è implementato.

Con setfacl puoi fare qualcosa che è quasi equivalente nella maggior parte degli scenari: puoi impostare un ACL come default:user:teamlead:rwx. In questo modo l'utente nominato può scrivere i nuovi file, anche se qualcun altro lo possiede.


Aggiorna questa risposta con il comando per applicare "default: utente: teamlead: rwx" alla directory "/ pippo"
user319862

10

Viene sempre creato un nuovo file appartenente all'utente in cui è in esecuzione il processo di creazione del file. (L'ID utente effettivo, per essere precisi.) Questo non può essere modificato, perché consentire agli utenti di creare file appartenenti ad altri utenti sarebbe una falla di sicurezza, simile a consentire agli utenti non root di distribuire un file .

Qualunque cosa tu stia cercando di fare, non è necessario farlo. Gli ACL sono sufficienti per garantire che tutto ciò che sarà necessario per leggere il file in seguito disponga di autorizzazioni sufficienti. Lascia il file di proprietà dell'utente che lo ha creato.


"Gli ACL sono sufficienti per garantire che tutto ciò che sarà necessario per leggere il file in seguito disponga di autorizzazioni sufficienti." Falso. Il gruppo del tuo nuovo file sarà il gruppo predefinito dell'utente. Se gli utenti che collaborano hanno gruppi predefiniti diversi, non sarai in grado di accedere ai file degli altri. È necessario setgid per fare in modo che il gruppo della cartella principale "si attacchi" a tutti i bambini.
bviktor,

@bviktor Puoi ottenere lo stesso effetto con ACL.
Gilles 'SO- smetti di essere malvagio' il

Come si specifica il proprietario e il gruppo per i nuovi file con ACL?
bviktor,

@bviktor Il proprietario è chi crea il file, che non cambia. Il gruppo che possiede il file nelle autorizzazioni tradizionali è irrilevante. L'ACL sui nuovi file è l'ACL predefinito della directory, allo stesso modo in cui il gruppo proprietario sui nuovi file è il gruppo proprietario della directory con semantica BSD ( g+s).
Gilles 'SO- smetti di essere malvagio' il

@Gilles no. Il gruppo di nuovi file sarà il "gruppo di accesso iniziale" dell'utente creatore, non il gruppo della cartella principale. Il comportamento che descrivi (ovvero il nuovo file ottiene il gruppo della directory principale) richiede che setgid sia impostato sul padre. E il gruppo è molto rilevante perché quando gli utenti collaborano, non possono accedere ai file degli altri se il gruppo è diverso. A meno che i tuoi file non siano accessibili al mondo, il che non è esattamente una grande idea.
bviktor,

1

Se si desidera che i nuovi file vengano creati con il nuovo gruppo, è necessario modificare il gruppo primario.

Per questo puoi usare usermod e il parametro -g

   -g, --gid GROUP
       The group name or number of the user's new initial login group. The group must exist.
       Any file from the user's home directory owned by the previous primary group of the user will be owned by this new group.
       The group ownership of files outside of the user's home directory must be fixed manually.

per esempio

test2@kinakuta:/tmp$ id
uid=1002(test2) gid=1002(test2) grupos=1002(test2),1003(testgroup)
test2@kinakuta:/tmp$ touch test2
test2@kinakuta:/tmp$ ls -la test2
-rw-r--r-- 1 test2 test2 0 nov 23 22:26 test2
root@kinakuta:/tmp# usermod -g testgroup test2
root@kinakuta:/tmp# su test2
test2@kinakuta:/tmp$ touch test2_1
test2@kinakuta:/tmp$ ls -la test2_1 
-rw-r--r-- 1 test2 testgroup 0 nov 23 22:27 test2_1

0

Su Linux devi avere sgid sulla directory principale per ereditare il gruppo per i file. (Sebbene non sia necessario sgid nella directory sui sistemi BSD.)


La domanda riguarda l'assegnazione della proprietà ai file appena creati. Il gruppo è già assegnato correttamente.
un programmatore
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.