Saya memiliki server standar cantik yang menjalankan Apache dan PHP. Aplikasi yang saya jalankan membuat file dan ini dimiliki oleh pengguna Apache www-data. File yang saya unggah melalui SFTP dimiliki oleh pengguna saya sendiri charlesr. Semua file adalah bagian dari www-datagrup. Masalah saya adalah bahwa saya tidak dapat memodifikasi atau menimpa file apa pun melalui SFTP yang dimiliki oleh www-data, meskipun charlesrmerupakan bagian dari www-datagrup. Saya dapat memodifikasi file tanpa masalah melalui sesi SSH.
Jadi saya tidak yakin apa yang harus saya lakukan. Bagaimana cara saya memberikan izin sesi SFTP saya untuk memodifikasi www-datafile yang dimiliki?
Untuk sedikit latar belakang, ini adalah catatan yang saya tulis sendiri ketika mengatur server:
Now set up permissions on `/var/www` where your files are served from by
default:
$ sudo adduser $USER www-data
$ sudo chgrp -R www-data /var/www
$ sudo chmod -R g+rw /var/www
$ sudo chmod -R g+s /var/www
Now log out and log in again to make the changes take hold.
The previous set of commands does the following:
1. adds the current user ($USER) to the `www-data` group;
2. changes `/var/www` to belong to the `www-data` group;
3. adds read/write permissions to the group that `/var/www` belongs to;
4. sets the SGID bit on `/var/www`; this final point bears some explaining.
Dan kemudian saya menjelaskan kepada diri saya sendiri apa arti pengaturan bit SGID (yaitu semua file yang dibuat /var/wwwmenjadi bagian dari www-datagrup secara otomatis).
MEMPERBARUI
Tampaknya masalah itu disebabkan oleh aplikasi itu sendiri atau, lebih khusus, kerangka kerja aplikasi ( Kohana ) mengatur file-file tertentu yang ditulisnya ke 0644 (rw-r - r--); yaitu tidak dapat ditulis kelompok. Ini, ditambah dengan fakta bahwa file-file tersebut juga dimiliki oleh www-databerarti bahwa saya tidak dapat mengedit file melalui SFTP ketika login sebagai charlesr. Saya tidak yakin mengapa saya bisa mengedit file melalui SSH. Dugaan saya adalah bahwa saya harus menggunakan sudo.
Berikut ini adalah strategi perizinan yang saya gunakan sekarang berkat bantuan tak kenal lelah dari Marty Fried , yang menunjukkan kelemahan dalam strategi saya sebelumnya dan juga membantu saya merendam dalam dunia perizinan Linux sampai akhirnya saya mengerti. Marty terima kasih!
Ikhtisar
- File dan direktori di
/var/wwwharus dimiliki olehroot:webmasters - Semua dev harus menjadi anggota
webmastersgrup - Semua direktori di
/var/wwwharus diatur ke:2775atauu=rwx,g=rwxs,o=rx(rwxrwx-rx) - Semua file di
/var/wwwharus diatur ke:0664atauug=rw,o=r(rw-rw-r--)
Yang berikut harus dimiliki oleh www-data:webmasters(yaitu ini adalah direktori yang harus dapat ditulis oleh Apache):
- aplikasi / cache
- aplikasi / log
- unggah
- client_helpers / unggah
HOWTO
Untuk mengatur izin /var/wwwtempat file Anda dilayani secara default:
sudo addgroup webmasterssudo adduser $USER webmasterssudo chown -R root:webmasters /var/wwwsudo find /var/www -type f -exec chmod 664 {} \;sudo find /var/www -type d -exec chmod 775 {} \;sudo find /var/www -type d -exec chmod g+s {} \;sudo chown -R www-data:webmasters application/cache/[dll ...]
Sekarang, logout dan masuk lagi untuk melakukan perubahan.
Set perintah sebelumnya melakukan hal berikut:
- Buat grup baru bernama
webmasters; semua pengguna yang membutuhkan akses tulis ke file aplikasi akan ditambahkan ke grup ini. - menambahkan pengguna saat ini (
$USER) kewebmastersgrup. - mengubah pemilik
/var/wwwkerootdan grup kewebmastersgrup. - menambahkan 664 izin (-rw-rw-r--) ke semua file di
/var/www. - menambahkan 775 izin (drwxrwxr-x) ke semua direktori di
/var/www. - mengaktifkan bit SGID
/var/wwwdan semua direktori di dalamnya; poin terakhir ini memuat beberapa penjelasan. Perhatikan juga bahwa Anda juga dapat meletakkan angka 2 di depan oktal chmod Anda (mis. 2644) untuk melakukan hal yang sama. - set pemilik ke
www-data(pengguna Apache) dan kelompok direktori yang disediakan untukwebmaster. Ini memastikan direktori dapat ditulis oleh Apache dan siapa pun dalamwebmastersgrup. Lakukan hal yang sama untuk semua direktori lain yang perlu ditulis.
/var/wwwtanpa menambahkannya ke grup itu?