Creazione di file e directory con un determinato proprietario (utente / gruppo) durante l'esecuzione


22

Ho bisogno di wgetqualcosa (si traduce in un file compresso in cwd), quindi devo estrarlo, quindi fare alcune cose di copia / spostamento / modifica e forse finalmente eseguire uno script (dall'archivio scaricato).

Ora tutte queste attività direttamente ( wget, estraggono ecc.) O indirettamente (eseguendo lo script) portano alla creazione di file e directory (tutti nella directory di lavoro corrente). Faccio tutte queste cose come root(nessun modo per farlo con l'utente finale desiderato).

Il problema è: tutto ciò che è stato creato nel processo è di proprietà dell'utente root o sudo. Quando ho finito (e talvolta a metà strada), devo emettere una serie di chmode chowncomandi per sistemare le cose.

Ora sarebbe bello se in qualche modo potesse dire al sistema che "D'ora in poi, qualsiasi file o directory che crei quando invio comandi come root, creeresti con tali e tali proprietà e permessi".

Risposte:


26

Puoi sempre sudo -u username touch filenamequando lo script viene eseguito come root. Di solito non richiede password, a seconda della sudoersconfigurazione.

In alternativa, esegui su username -c touch filename. Gli argomenti aggiuntivi vengono forniti alla shell dell'utente e l' -copzione per la shell esegue i comandi specificati per convenzione.


Alcuni comandi (come mkdir) supportano argomenti per specificare le autorizzazioni:

mkdir -m 0700 foo

Per impostazione predefinita, le operazioni sui file rispettano il umaskset per la shell. Definisce quali autorizzazioni sono negate . Una umaskdi 0022per esempio fa non permessi di scrittura fissi per gruppo e gli altri. Impostare per 0077impedire a gruppi e ad altri di ottenere autorizzazioni.


Puoi impostare le setgiddirectory on in modo che tutti i file creati ereditino l'appartenenza al gruppo:

chmod g+s someDir

Alcuni Unix supportano lo stesso comportamento per setuid( chmod u+s), ma non per Linux.


1
Penso che sia sicuro supporre che non ci sia supporto dedicato per quello che stai chiedendo. Solo il superutente può chownfile per un altro utente e l'impostazione di un valore predefinito come questo ha il potenziale di errori dell'utente, dando ad altri utenti le autorizzazioni senza che l' rootutente se ne accorga.
Daniel Beck

10

C'è un altro modo, penso piuttosto elegante. Utilizzando install (1)

Ad esempio, zabbix-agentd necessita di una sottocartella all'interno di / var / run, ma le distribuzioni recenti utilizzano tmpfs per / var / run, quindi la directory non sopravvive ai riavvii. L'ho risolto creando un file / etc / sysconfig / zabbix-agentd contenente:

install -g zabbix -o zabbix -d /var/run/zabbix

1
Aggiungi anche -m 0700per esempio. La risposta.
Anello Ø

3
Si noti che installcrea la directory e quindi cambia il proprietario / gruppo. Quindi c'è un breve periodo in cui la directory non ha il proprietario / gruppo specificato. In alcuni contesti può essere importante.
user368507,

Funziona su Alpine Linux
Mauricio Sánchez il

3

Su sistemi simili a Unix, i file e le directory appena creati sono di proprietà del proprietario del processo che li ha creati. Le utility standard normalmente non hanno l'opzione per cambiare il proprietario dei file creati.

Variabili con UID e GID dell'utente originale

Se si eseguono ripetutamente alcuni comandi, è possibile utilizzare le variabili $SUDO_UIDe $SUDO_GIDfare riferimento all'utente che ha invocato sudo:

sudo sh -c "do_something ; chown -R \"\$SUDO_UID:\$SUDO_GID\" files and directories"

Ottenere automaticamente l'elenco dei file e delle directory creati

Se si desidera ottenere automaticamente l'elenco dei file e delle directory creati (e possibilmente modificati), è possibile eseguire i comandi sotto stracesorveglianza che si basa sulla ptrace()syscall:

strace -qqfe open,creat,mkdir,link,symlink,mknod -o '|your_processing_of_strace_output' do_something

oppure puoi usare ad esempio Installwatch che si basa sul LD_PRELOADmeccanismo.

Idee per ulteriori lavori

Sulla base dei metodi sopra menzionati è possibile creare uno strumento che cambierebbe automaticamente il proprietario e possibilmente accedesse ai diritti dei file creati / modificati. L'uso potrebbe essere semplice come:

sudo watch-chown do_something
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.