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-data
grup. Masalah saya adalah bahwa saya tidak dapat memodifikasi atau menimpa file apa pun melalui SFTP yang dimiliki oleh www-data
, meskipun charlesr
merupakan bagian dari www-data
grup. 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-data
file 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/www
menjadi bagian dari www-data
grup 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-data
berarti 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/www
harus dimiliki olehroot:webmasters
- Semua dev harus menjadi anggota
webmasters
grup - Semua direktori di
/var/www
harus diatur ke:2775
atauu=rwx,g=rwxs,o=rx
(rwxrwx-rx) - Semua file di
/var/www
harus diatur ke:0664
atauug=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/www
tempat file Anda dilayani secara default:
sudo addgroup webmasters
sudo adduser $USER webmasters
sudo chown -R root:webmasters /var/www
sudo 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
) kewebmasters
grup. - mengubah pemilik
/var/www
keroot
dan grup kewebmasters
grup. - 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/www
dan 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 dalamwebmasters
grup. Lakukan hal yang sama untuk semua direktori lain yang perlu ditulis.
/var/www
tanpa menambahkannya ke grup itu?