GNU/Linux >> Belajar Linux >  >> Linux

Memberikan Izin Grup ke File Pengguna Lain?

Saya menggunakan Debian 7 dan telah membuat pengguna baru (situs web) dengan direktori htdocs seperti ini:

$ sudo adduser website
$ sudo mkdir -p /home/website/htdocs
$ sudo chown -R website /home/website

Sekarang saya ingin pengguna grup lain (pengembang) memiliki akses ke direktori pengguna. Saya sudah mencoba:

$ sudo chown -R :developers /home/website

Saya dapat melihat bahwa grup tersebut ditetapkan (dengan ls -la atau stat ) dan bahwa pengguna ada di grup, tetapi mereka tidak memiliki akses, kan?

drwxr-xr-x     3     website     developers     4096 May 3 09:09     website

Saya juga ingin:

  • Izinkan grup lain, akses 'kontraktor' ke file situs web

  • Batasi akses pengguna situs web ke direktori beranda saja

  • Pastikan file situs web baru mewarisi izin ini

Apakah Anda harus menggunakan daftar kontrol akses – atau adakah cara yang lebih baik untuk melakukannya (seperti tidak menggunakan pengguna terpisah untuk setiap situs)?

Jawaban yang Diterima:

Sulit untuk memberikan perintah yang tepat tanpa mengetahui O/S atau distribusinya; dan ya! ACL akan berfungsi, tetapi ada juga cara standar.

Ada adduser dan useradd , salah satunya di distribusi Anda dapat membuat direktori home pengguna secara otomatis. Jika sudah, maka isi dari /etc/skel/ direktori akan disalin ke direktori home pengguna, izin ditetapkan, dan mungkin beberapa tindakan lain yang sesuai mungkin dilakukan.

Mungkin ada grup yang telah ditentukan sebelumnya untuk berbagi, seperti 'staf'; tapi, jika kita ingin membuat grup sendiri untuk berbagi, tidak ada salahnya. Jadi, buat grup baru atau gunakan grup yang sudah ada. Pastikan bahwa pengguna yang menjadi anggota grup telah ditentukan dengan usermod , moduser , atau vigr mungkin, menurut sistem operasi. Setiap pengguna yang saat ini masuk harus keluar dan masuk kembali untuk menjadi anggota grup baru.

Buat direktori umum untuk semua pengguna, seperti /home/share_directory/ atau direktori lain yang paling masuk akal untuk situasi Anda. Praktik terbaik yang relevan adalah tidak menggunakan direktori di dalam direktori home pengguna mana pun. Jika tidak ada seorang pun kecuali pemilik dan grup yang dapat melihat file di direktori, maka ubah izin direktori menjadi 0770. Jika membaca ok oleh "orang lain", gunakan 0775. Pemilik direktori hampir pasti harus root.

chown root:group_name /home/share_directory/

Selanjutnya, ubah bit setuid.

chmod +s /home/share_directory/

Jika tidak ada pengguna yang dapat memodifikasi file pengguna lain, atur juga bit sticknya.

chmod +t /home/share_directory/

Contoh-contoh ini mengatur bit setuid dan sticky secara bersamaan menggunakan notasi oktal.

chmod 5775 /home/share_directory/

atau

chmod 5770 /home/share_directory/

Untuk pertanyaan yang diperbarui, sepertinya ACL adalah alat yang tepat. Sebagian besar distribusi Linux sekarang menyertakan acl opsi di defaults pilihan. Jika distribusi Anda tidak menyertakan acl opsi secara default, maka ini sedikit kerja diperlukan untuk mulai menggunakannya. Pertama-tama pasang sistem file dengan acl pilihan di /etc/fstab.

sudo vim /etc/fstab
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx / ext4 defaults,acl 0 1

Jika perlu, remount sistem file:sudo mount -o remount,acl / . Kemudian buat grup tempat pengguna mungkin berada untuk tujuan ini. Anda mungkin juga perlu menginstal alat ACL:apt-get install acl .

sudo groupadd developers
sudo usermod -a -G developers $username

(Atau grup tersebut mungkin adalah "kontraktor".) Pengguna yang saat ini masuk harus keluar dan masuk kembali untuk menjadi anggota grup baru. Tentu saja, jangan lakukan ini jika Anda memiliki konten di direktori /var/www yang ingin Anda simpan, tetapi hanya untuk mengilustrasikan pengaturannya untuk memulai:

sudo rm -rf /var/www
sudo mkdir -p /var/www/public
sudo chown -R root:developers /var/www/public
sudo chmod 0775 /var/www/public
sudo chmod g+s /var/www/public
sudo setfacl -d -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g::rwx,o::r-x /var/www/public
sudo setfacl -d -m u::rwx,g:contractors:rwx,o::r-x /var/www/public
sudo setfacl -m u::rwx,g:contractors:rwx,o::r-x /var/www/public

Di atas, perbedaan antara setfacl perintahnya adalah sebagai berikut:contoh pertama menggunakan grup default (pemilik grup direktori) sedangkan yang kedua menentukan grup secara eksplisit. -d switch menetapkan topeng default (-m ) untuk semua objek sistem file baru di dalam direktori. Namun, kita juga perlu menjalankan perintah lagi tanpa -d beralih untuk menerapkan ACL ke direktori itu sendiri. Kemudian ganti referensi ke “/var/www” dengan “/var/www/public” di file konfigurasi dan muat ulang.

sudo vim /etc/apache2/sites-enabled/000-default
sudo /etc/init.d/apache2 reload

Jika kami ingin membatasi hapus dan ganti nama dari semua kecuali pengguna yang membuat file:sudo chmod +t /var/www/public . Dengan cara ini, jika kita ingin membuat direktori untuk kerangka kerja yang ada di luar root dokumen Apache atau mungkin membuat direktori yang dapat ditulis server, itu masih mudah.

Terkait:Debian – Bagaimana cara mengubah sistem berbasis Debian 32-bit (x86) ke 64-bit?

Direktori log yang dapat ditulis oleh Apache:

sudo mkdir /var/www/logs
sudo chgrp www-data /var/www/logs
sudo chmod 0770 /var/www/logs

Direktori perpustakaan yang dapat dibaca Apache:

sudo mkdir /var/www/lib
sudo chgrp www-data /var/www/logs
sudo chmod 0750 /var/www/logs

Sedikit "bermain" di direktori yang tidak penting akan membantu membuat ini tepat untuk situasi Anda.

Pada pembatasan, saya menggunakan dua pendekatan berbeda:shell, rssh , dibuat untuk menyediakan akses SCP/SFTP tetapi tidak ada akses SSH; atau, untuk membatasi penggunaan ke direktori home, Anda dapat menggunakan subsistem internal-sftp, yang dikonfigurasi di /etc/ssh/sshd_config .

Subsystem sftp internal-sftp

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

Buat grup bernama, misalnya, sftponly. Jadikan pengguna sebagai anggota grup sftponly. Ubah direktori home mereka menjadi / karena chroot. Direktori, /home/username, harus dimiliki oleh root. Anda juga dapat mengatur shell pengguna ke /bin/false untuk mencegah akses SSH. Sebagian besar saya khawatir tentang akses interaktif, jadi umumnya gunakan rssh jalur. (Mereka tidak dapat menulis di mana pun kecuali di mana saya telah mendefinisikan kemampuan menulis.)


Linux
  1. Menggunakan Sudo untuk mendelegasikan izin di Linux

  2. Saya Menambahkan Pengguna Ke Grup, Tetapi Izin Grup Pada File Masih Tidak Berpengaruh?

  3. Jadikan Semua File Baru Dalam Direktori Dapat Diakses Oleh Grup?

  1. Linux – Bagaimana Cara Mengatur Izin File Default Untuk Semua Folder / File Di Direktori?

  2. Mendapatkan File Baru Untuk Mewarisi Izin Grup Di Linux?

  3. Diutamakan Pengguna Dan Pemilik Grup Dalam Izin File?

  1. Linux – Masalah Izin Untuk Direktori Bersama Di Server?

  2. Bagaimana Mengurutkan File Berdasarkan Izinnya Menggunakan Ls?

  3. Paksa Izin Baru Pada File Setelah Rsync Dari Seedbox?