Bagaimana cara mengatur izin file sehingga file baru mewarisi izin yang sama? [duplikat]

35

Pertanyaan ini sudah ada jawabannya di sini:

Saya memiliki folder tempat subfolder dan file baru akan dibuat secara otomatis, dengan skrip.

Saya ingin mempertahankan izin pengguna dan grup secara rekursif untuk semua folder dan file baru yang ditempatkan di direktori induk. Saya tahu ini melibatkan pengaturan sedikit lengket, tetapi saya tidak bisa menemukan perintah yang menunjukkan apa yang saya butuhkan.

Inilah yang telah saya lakukan sejauh ini:

sudo mkdir -p /path/to/parent
sudo chmod -R 660 myself:somegroup /path/to/parent

Setelah itu, saya ingin 660 izin diatur secara rekursif ke folder dan file apa pun yang ditempatkan /path/to/parent.

Namun, semua yang saya coba sejauh ini telah gagal. Bisakah seseorang membantu?

Sebenarnya bendera oktal 660 bahkan mungkin tidak benar. Izin yang saya inginkan adalah:

  1. Direktori yang ditempatkan di bawah /path/to/parentdapat dieksekusi oleh pengguna dengan izin
  2. file dibaca / dapat ditulis oleh pengguna sendiri dan anggota somegroup
  3. File dan folder di /path/to/parentBUKAN dunia dibaca

Saya menjalankan Ubuntu 10.0.4 LTS.

Bisakah seseorang membantu?

oompahloompah
sumber

Jawaban:

10

Grawity memberikan jawaban yang sangat baik tetapi saya menduga pertanyaan yang diedit mungkin telah mengubah sedikit hal.

Saya akan menyarankan untuk meninggalkan direktori yang dimiliki oleh pengguna / grup apache. Ini mungkin apache atau httpd tergantung pada distribusi Anda.

misalnya

chown -R apache:apache /path/to/parent

Anda kemudian dapat melakukan sesuatu seperti https://serverfault.com/questions/164078/is-adding-users-to-the-group-www-data-safe-on-debian atau bahkan menambahkan diri Anda ke grup apache untuk memastikan Anda memiliki akses grup ke direktori. (Sesuatu seperti usermod -aG apache username)

Saya tidak akan chmod -Rseluruh direktori karena Anda tidak ingin skrip html atau jpg atau hal-hal lain yang dapat dieksekusi secara acak. Anda harus mengubah izin seperti yang diminta. (meskipun mengatur ulang ke 660 mungkin bukan ide terburuk.)

Sesuatu yang mungkin ingin Anda coba adalah:

chmod o+w file

Kata 'o' berarti 'lain' & 'w' berarti 'tulis'. Anda juga dapat memiliki 'u' untuk 'pengguna' & 'g' untuk 'grup', serta 'r' & 'x' yang mudah-mudahan cukup jelas. Anda dapat menghapus izin menggunakan '-' daripada '+'.

Mahal
sumber
Solusi paling sederhana yang saya pikir, adalah menambahkan diri saya ke grup pengguna apache. Terima kasih telah menyarankan itu. Saya tidak tahu mengapa saya tidak memikirkan itu sendiri!
oompahloompah
1
Apakah o+wpilihan yang baik di sini? Bukankah perubahan harus dibatasi udan g? Kalau tidak, apa gunanya mencoba menjaga keamanan pada direktori dan sub-direktori?
jww
61

Bit izin yang Anda cari adalah 0770 dan 0660.

  • rw-izin → 110biner → 6oktal

The kelompok kepemilikan dapat diwariskan oleh file baru dan folder yang dibuat dalam folder / path / ke / orang tua dengan menetapkan bit setgid menggunakan chmod g+sseperti ini:

chmod g+s /path/to/parent

Sekarang, semua file dan folder baru yang dibuat di bawah / path / ke / parent akan memiliki grup yang sama seperti yang diatur pada / path / ke / parent.


Izin file POSIX tidak diwarisi; mereka diberikan oleh proses pembuatan dan dikombinasikan dengan nilai umask saat ini.

Namun, Anda dapat menggunakan ACL POSIX untuk mencapai ini. Tetapkan ACL default pada direktori:

setfacl -d -m u::rwX,g::rwX,o::- /path/to/parent

Ini akan berlaku setfaclke direktori / path / ke / orang tua, -modifying yang -dILIHAN OLEH ACL - mereka yang akan diterapkan pada barang-barang yang baru dibuat. (Huruf besar Xberarti hanya direktori yang akan menerima +xbit.)

(Jika perlu, Anda dapat menambahkan u:someuser:rwXatau g:someuser:rwX- lebih disukai grup - ke ACL.)


Catatan: Pada sistem yang lebih lama menggunakan ext3 / ext4, Anda harus memasang sistem file dengan aclopsi, jika tidak maka akan mengabaikan semua ACL dan melarang pengaturan yang baru.

mount -o remount,acl /

Untuk mengatur ini secara permanen, gunakan tune2fs -o acl <device>atau edit /etc/fstab.

grawity
sumber
5
Terima kasih telah meluangkan waktu untuk menjawab. Sayangnya, saya cukup baru dalam hal ini, dan apa yang Anda tulis tidak dapat dibedakan dari bahasa Yunani kepada saya (maaf untuk semua pelanggan Yunani!). Saya tidak mengerti sebagian besar dari apa yang Anda tulis. Saya memiliki proses web dan saya ingin memberi Apache kemampuan untuk membuat folder dan file dalam folder induk di mana hanya Apache (pemilik) dan saya (grup) memiliki kemampuan untuk menemukan file dan mengubah ke direktori. Semua orang dilarang. hanya itu yang saya coba lakukan. Apache harus dapat membuat sub folder dan menyimpan file di dalamnya.
oompahloompah
Ini tidak berhasil unzip?
datan.io
2

Saya pikir Anda terlalu memperumit masalah ini. Jika direktori tingkat atas tidak dapat diakses oleh orang lain, maka orang lain tidak akan dapat membuat file di dalam struktur pohon. Akses menulis grup tidak diperlukan jika hanya apache yang melakukan penulisan.

Langkah-langkah ini harus melakukan apa yang Anda inginkan (ganti direktori dalam perintah dengan direktori yang ingin Anda gunakan):

  • tambahkan umask 027ke skrip default apache /etc/default/apache. Ini akan mencegah orang lain mengakses file atau direktori apache yang dibuat.
  • jalankan chown www-data:www-data directorypada direktori yang Anda inginkan agar apache dapat menulis.
  • jalankan chmod 750 directorypada direktori yang Anda inginkan agar apache dapat menulis.

Mengizinkan apache untuk menulis ke direktori membuka kemampuan untuk menyuntikkan semua jenis malware ke konten yang Anda sajikan. Pantau isi pohon direktori ini dengan tepat.

BillThor
sumber