Saya perlu wget
sesuatu (menghasilkan file terkompresi dalam cwd), maka saya harus mengekstraknya, kemudian melakukan beberapa hal copy / pindah / modifikasi dan mungkin akhirnya menjalankan skrip (dari arsip yang diunduh).
Sekarang semua tugas ini baik secara langsung ( wget
, ekstrak dll.) Atau secara tidak langsung (menjalankan skrip) menghasilkan pembuatan file dan direktori (semua dalam direktori kerja saat ini). Saya melakukan semua hal ini sebagai root
(tidak ada cara untuk melakukannya dengan pengguna akhir yang diinginkan).
Masalahnya adalah: Apa pun yang dibuat dalam proses dimiliki oleh root atau pengguna sudo. Ketika saya selesai (dan kadang-kadang di tengah jalan), saya harus mengeluarkan serangkaian chmod
dan chown
perintah untuk memperbaikinya.
Sekarang akan lebih baik jika entah bagaimana bisa memberi tahu sistem bahwa "Mulai sekarang, file atau dir yang Anda buat ketika saya mengeluarkan perintah sebagai root, Anda akan membuat dengan kepemilikan dan izin ini dan itu".
chown
file ke pengguna yang berbeda, dan pengaturan default seperti ini memiliki potensi kesalahan pengguna, memberikan izin pengguna lain tanparoot
disadari pengguna.Ada cara lain, menurut saya cukup elegan. Menggunakan install (1)
Sebagai contoh, zabbix-agentd membutuhkan subfolder di dalam / var / run, tetapi distribusi baru-baru ini menggunakan tmpfs untuk / var / run, sehingga direktori tidak selamat dari reboot. Saya menyelesaikannya dengan membuat file / etc / sysconfig / zabbix-agentd yang mengandung:
sumber
-m 0700
misalnya. The jawaban.install
membuat direktori dan kemudian mengubah pemilik / grup. Jadi ada waktu singkat di mana direktori tidak memiliki pemilik / grup yang ditentukan. Dalam beberapa konteks, itu bisa berarti.Pada sistem mirip Unix, file dan direktori yang baru dibuat dimiliki oleh pemilik proses yang membuatnya. Utilitas standar biasanya tidak memiliki opsi untuk mengubah pemilik file yang dibuat.
Variabel dengan UID dan GID dari pengguna asli
Jika Anda menjalankan beberapa perintah berulang kali, Anda bisa menggunakan variabel
$SUDO_UID
dan$SUDO_GID
untuk merujuk ke pengguna yang dipanggilsudo
:Mendapatkan daftar file dan direktori yang dibuat secara otomatis
Jika Anda ingin mendapatkan daftar file dan direktori yang dibuat (dan mungkin dimodifikasi) secara otomatis, Anda dapat menjalankan perintah Anda di bawah
strace
pengawasan yang didasarkan padaptrace()
syscall:atau Anda dapat menggunakan misalnya Installwatch yang didasarkan pada
LD_PRELOAD
mekanisme.Gagasan untuk pekerjaan lebih lanjut
Berdasarkan metode yang disebutkan di atas dimungkinkan untuk membuat alat yang secara otomatis akan mengubah pemilik dan mungkin mengakses hak dari file yang dibuat / dimodifikasi. Penggunaannya bisa sesederhana:
sumber