Saya memiliki direktori tertentu di mana ada proyek yang dibagikan oleh banyak pengguna. Para pengguna ini menggunakan SSH untuk mendapatkan akses ke direktori ini dan memodifikasi / membuat file.
Proyek ini seharusnya hanya dapat ditulisi ke grup pengguna tertentu: sebut saja "mygroup". Selama sesi SSH, semua file / direktori yang dibuat oleh pengguna saat ini harus secara default dimiliki oleh grup "mygroup" dan memiliki izin grup-dapat ditulis.
Saya dapat memecahkan masalah izin dengan umask
:
$ cd project
$ umask 002
$ touch test.txt
File "test.txt" sekarang dapat ditulis grup, tetapi masih milik grup default saya ("mislav", sama dengan nama pengguna saya) dan bukan "mygroup". Saya dapat chgrp
secara rekursif untuk mengatur grup yang diinginkan, tetapi saya ingin tahu apakah ada cara untuk mengatur beberapa grup secara implisit seperti umask mengubah izin default selama sesi.
Direktori khusus ini adalah git repo bersama dengan copy yang berfungsi dan saya ingin git checkout
dan git reset
operasi untuk mengatur mask dan grup yang benar untuk file baru yang dibuat dalam copy pekerjaan. OSnya adalah Ubuntu Linux.
Pembaruan: seorang kolega menyarankan saya untuk melihat getfacl / setfacl dari POSIX ACL tetapi solusi di bawah ini yang dikombinasikan dengan umask 002
sesi saat ini cukup baik untuk saya dan jauh lebih sederhana.
Jika Anda ingin melakukan ini dengan folder yang ada, Anda perlu memastikan bit setgid diaktifkan untuk semua subfolder juga. Namun, Anda tidak memerlukannya di file, dan Anda mungkin juga tidak menginginkannya di file. Berikut adalah cara mengaturnya untuk semua subfolder secara rekursif.
sumber
Saya tidak dapat menemukan sumbernya kembali, tetapi menggunakan
setgid
untuk menyelesaikan masalah ini untuk repositori bare git, yang saya asumsikan adalah kasus Anda, sudah usang, dan dapat menyebabkan masalah dalam beberapa kasus.Git dapat mengatasi semua ini melalui
core.sharedRepository
flag. Saya memiliki masalah yang sama dan menyelesaikannya sebagai berikut:Dengan asumsi
repogroup
adalah grup Anda, dan Anda haruscd
ke direktori repo:Pertama-tama ubah bendera yang dibagikan menjadi
group
:Catatan: di sini Anda harus menggunakan kata kunci
group
, bukan nama grup. Ini sama dengan membuat repositori kosong dengan opsi--shared=group
.Kemudian ubah grup untuk seluruh repositori:
Untuk memastikan bahwa direktori yang ada dapat ditulis-grup (
g+w
), dan executable yang ada juga menjadi executable grup (g+X
) Anda juga perlu:Setelah Anda melakukan ini, git akan menghormati
shared=group
bendera dan mengurus izin grup sebagai berikut, baik untuk file yang ada dan baru, sehingga Anda tidak perlu lagiumask
atauchgrp
.Saya akan memasukkan sumber dalam komentar jika saya menemukannya kembali.
sumber
Saya tidak terlalu ahli dalam hal * nix, tapi saya pikir apa yang Anda cari disebut setgid.
Lihat di sini .
sumber
Sulit untuk mewarisi izin direktori induk di Linux / UNIX tanpa menggunakan ACL. tetapi ada cara untuk menetapkan izin file default, periksa tautan di bawah
Bisakah Anda mewarisi izin direktori induk.
sumber