Membuat file dan direktori dengan pemilik tertentu (pengguna / grup) saat melakukan sudoing

22

Saya perlu wgetsesuatu (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 chmoddan chownperintah 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".

Ashkan Kh. Nazary
sumber

Jawaban:

26

Anda selalu dapat sudo -u username touch filenamesaat skrip Anda dieksekusi sebagai root. Biasanya tidak memerlukan kata sandi, tergantung pada sudoerskonfigurasi Anda .

Atau, jalankan su username -c touch filename. Argumen tambahan diberikan ke shell pengguna, dan -copsi ke shell mengeksekusi perintah yang ditentukan oleh konvensi.


Beberapa perintah (seperti mkdir) mendukung argumen untuk menentukan izin:

mkdir -m 0700 foo

Secara default, operasi file menghormati umaskset untuk shell. Ini mendefinisikan izin mana yang ditolak . A umaskof 0022misalnya tidak menetapkan izin tulis untuk grup dan lainnya. Tetapkan ke 0077untuk mencegah grup dan orang lain dari mendapatkan izin apa pun.


Anda dapat mengatur setgiddirektori pada agar semua file dibuat di dalam mewarisi keanggotaan grup mereka:

chmod g+s someDir

Beberapa Unix mendukung perilaku yang sama untuk setuid( chmod u+s), tetapi tidak untuk Linux.

Daniel Beck
sumber
1
Saya pikir aman untuk berasumsi bahwa tidak ada dukungan khusus untuk apa yang Anda minta. Hanya pengguna super yang dapat chownfile ke pengguna yang berbeda, dan pengaturan default seperti ini memiliki potensi kesalahan pengguna, memberikan izin pengguna lain tanpa rootdisadari pengguna.
Daniel Beck
10

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:

install -g zabbix -o zabbix -d /var/run/zabbix
Angelo Turetta
sumber
1
Tambahkan juga -m 0700misalnya. The jawaban.
Dering Ø
3
Catatan yang installmembuat 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.
user368507
Ini berfungsi di Alpine Linux
Mauricio Sánchez
3

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_UIDdan $SUDO_GIDuntuk merujuk ke pengguna yang dipanggil sudo:

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

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 stracepengawasan yang didasarkan pada ptrace()syscall:

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

atau Anda dapat menggunakan misalnya Installwatch yang didasarkan pada LD_PRELOADmekanisme.

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:

sudo watch-chown do_something
pabouk
sumber