Masalah izin: bagaimana cara Apache mengakses file di direktori Beranda saya?

33

Saya tahu izin file telah dibahas di sini sebelumnya, tetapi saya berjuang untuk mendapatkan kepala saya di sekitar konsep untuk skenario saya.

  • Saya membuat file pada instalasi ubuntu lama.
  • Saya sudah menyalin file ke instalasi ubuntu baru saya dan meletakkannya di webroot saya.
  • Ketika saya mencoba untuk menjalankan file (file PHP mereka) saya mendapatkan kesalahan yang berkaitan dengan izin

dalam upaya untuk memperbaiki ini, saya berasumsi bahwa mereka masih harus dimiliki oleh pemilik sebelumnya, jadi saya berlari chown -Rpada direktori, dengan nama pengguna saya sebagai argumen, untuk mengambil kepemilikan semua file dalam direktori. Perlu dicatat bahwa nama pengguna antara instalasi ubuntu baru dan lama adalah sama.

Ketika saya mencoba untuk menjalankan file lagi, masalah yang sama: 500 kesalahan karena masalah izin. Adakah yang bisa memberi tahu saya langkah apa yang harus saya ambil?

Webroot untuk instalasi apache saya ada di dalam folder rumah saya. Jika saya membuat file baru di webroot saya, mereka juga berfungsi seperti yang diharapkan, itu hanya file lama yang menyebabkan masalah.

richzilla
sumber
Saya tidak yakin bahwa izin file disalin ketika file tersebut, dapatkah seseorang mengonfirmasi hal itu? Jika tidak, apakah mungkin untuk memberikan file ke pengguna lain (atau root), dan kemudian mengambilnya kembali?
Tagger
Ok, saya telah memecahkan masalah saya pada file yang tidak dieksekusi, tetapi saya melakukannya dengan hanya menjalankan chmod -R 777 dirdirektori yang dimaksud. Saya tidak dapat berpikir bahwa ada cara yang lebih baik untuk melakukannya
richzilla
3
777 izin dalam suatu file akan memungkinkan semua orang untuk menulis file Anda yang dapat mengakibatkan kerusakan pada halaman Anda atau peretasan. Anda harus mencoba dengan 755 yang biasanya digunakan untuk file php. Pastikan Anda tidak perlu mengaktifkan "izinkan eksekusi" untuk file, dalam hal ini Anda dapat menjalankan chmod [nama file] -x. Informasi tentang perintah chmod dapat dihubungi dengan mengklik tautan berikutnya: catcode.com/teachmod/chmod_cmd.html
Geppettvs D'Constanzo
Apa yang ditampilkan oleh log kesalahan Apache?
Kees Cook

Jawaban:

14

Direktori di atas akar web Anda harus memiliki bit eksekusi yang diatur untuk memungkinkan Apache turun ke direktori.

Jika Anda telah webroot Anda berada di /home/user/htdocs, yang /, /home, /home/userdan /home/user/htdocsharus memiliki bit eksekusi set.


Solusi di atas "bekerja", tetapi itu tidak ideal. Jika Anda telah membuat folder, Apache tidak dapat menulisnya. Kebalikannya terjadi juga.

Ini dapat "diperbaiki" dengan menetapkan umask 0007 dan menambahkan diri Anda ke grup Apache (www-data jika saya tidak salah), sehingga file dan folder yang baru dibuat dapat ditulisi oleh grup.

Atau, Anda dapat menginstal Apache MPM alternatif: Apache2 MPM ITK ( info tentang konfigurasi ) dan sesuaikan konfigurasi sehingga Apache berjalan di bawah pengguna Anda.

Lekensteyn
sumber
Untuk instruksi eksplisit tentang cara melakukan ini lihat jawaban Marco di bawah ini
hobs
2
@hobs Bahkan lebih baik, askubuntu.com/a/46371/6969
Lekensteyn
44

Jika dokumen server Anda ada dalam /home/$USER/public_htmldirektori, Anda harus menjalankannya

sudo chown -R www-data:www-data /home/$USER/public_html

untuk memberikan kepemilikan folder DocumentRoot kepada pengguna www-datadan grup www-data.

Kemudian Anda dapat menambahkan diri Anda ke grup www-data

sudo adduser $USER www-data

Terakhir, Anda perlu membuat folder DocumentRoot dapat ditulis oleh pemilik (pengguna data-www) dan ke diri Anda (sebagai bagian dari www-datagrup):

sudo chmod -R 775 /home/$USER/public_html

Untuk kenyamanan Anda dapat membuat skrip public_html_fix.shdengan nama konten:

#!/bin/bash

sudo adduser $USER www-data
sudo chown -R www-data:www-data /home/$USER/public_html
sudo chmod -R 775 /home/$USER/public_html

Simpan di dalam /home/$USER/bindan jalankan dengan:

sudo chmod +x /home/$USER/bin/public_html_fix.sh

Kemudian Anda menyebutnya kapan pun Anda butuhkan, dari mana saja pada sistem file Anda menemukan diri Anda seperti ini:

public_html_fix.sh
Marko
sumber
1
bekerja untuk saya ....
Emmanuel Okeke
Jawaban Hebat! - Dengan Contoh dan bahkan skrip kenyamanan dan cara menggunakan / menginstal Unggul!
Andre
2
Jika ini dilakukan pada host bersama, bagaimana Anda menghentikan pengguna lain dalam www-datagrup membaca file Anda, atau menulis untuk hal itu?
jozxyqk
Jawaban yang benar-benar luar biasa ... Anda menyelamatkan hidup saya
NullPoiиteя
1
chmod -R 775 /home/$USER/public_htmlsangat mengerikan. find /home/$USER/public_html -type d -exec chmod 775 {} \;dan find /home/$USER/public_html -type f -exec chmod 664 {} \;jauh lebih baik
iharob
1

Terlepas dari chmoding file dan mengedit file .conf apache, saya ingin mengatakan bahwa tidak ada yang berhasil bagi saya karena file saya ada di partisi yang telah saya instal secara otomatis melalui nautilus. Ini membatasi partisi hanya untuk pengguna Anda.

Untuk memeriksa apakah file Anda terlihat oleh www-rootatau apache pengguna yang dijalankan (jalankan ps -aux | grep apache2untuk memeriksa), jalankan perintah berikut:

sudo su -l www-data -s /bin/bash

dan mencoba membaca file dari root dokumen Anda.

Jika file tidak dapat dibaca periksa bahwa:

1) Anda telah mengatur semua izin file lainnya

2) Anda telah menggunakan file FollowSymlinksAnda .confjika diperlukan

3) Anda telah mengatur DocumentRoot

3) pasang partisi Anda untuk semua pengguna. Saya harus mengedit /etc/fstabdan menentukan partisi saya melalui UUID-nya:

UUID=afdee1d3-5bb8-4652-892f-e83a9b5ff72e /mnt/4tb      ext4    rw,nosuid,nodev,errors=remount-ro

Kemudian unmount partisi Anda melalui nautilus dan lakukan a sudo mount -a. Jika semua berjalan dengan baik file Anda sekarang di bawah /mnt. Perbarui symlink Anda dan Anda siap melakukannya.

alexg
sumber
1

Cara terbaik yang saya temukan untuk selalu mengatur ini adalah cara VirtualMin melakukannya.

buat pengguna dan grup "myhome"

Jadikan pengguna apache sebagai anggota grup "myhome". Bukan sebaliknya seperti beberapa penjelasan di sini menjelaskan

Jadi sekarang apache telah membaca dan menjalankan akses ke / home / myhome selain / home / myhome / www

"Myhome" pengguna memiliki akses tulis

pengguna458431
sumber
Saya suka konsep ini, tetapi sepertinya tidak berhasil untuk saya. Pengguna www-datamilik grup myhome. Semua file dan direktori memiliki izin menulis grup dan menjadi miliknya myhome:myhome. Saya memulai kembali apache. Apache masih tidak dapat menulis file dan folder baru. (Script PHP menggunakan www-data: www-data pengguna / grup)
squarecandy