AWStats: tidak dapat mengakses /var/log/apache2/access.log

14

Saya menginstal awstats pada server Lucid Ubuntu baru saya, tetapi ketika cron mencoba menjalankannya sebagai pengguna www-data, komplain itu cannot access /var/log/apache2/access.log: Permission denied.

Di /usr/share/doc/awstats/README.Debiansana ada paragraf ini:

Secara default, Apache menyimpan (sejak versi 1.3.22-1) file log dengan uid = root dan gid = adm, jadi Anda harus ...

1) Ubah hak file log di /etc/logrotate.d/apache sehingga www-data memiliki setidaknya akses baca.

2) As 1) tetapi ubah menjadi pengguna tertentu, dan gunakan fitur suEXEC dari Apache untuk dijalankan sebagai pengguna yang sama (dan ubah juga hak / var / lib / awstats atau gunakan direktori lain). Ini lebih rumit, tetapi kemudian log umumnya tidak dapat diakses ke server (yang mungkin merupakan titik dari standar Apache).

3) Ubah awstats.pl ke grup adm (tetapi berhati-hatilah bahwa Anda kemudian mengambil risiko mengizinkan akses skrip CGI ke hal-hal admin di mesin!).

Saya akan memilih 1, tetapi izin apa yang disarankan untuk diberikan?

Joril
sumber
Coba ini, tidak bisa berjanji jika itu akan berhasil: chown www-data:www-data <yourFile>dan kemudian chmod 655 <yourFile>.
theTuxRacer
1
Yah untuk membuat awstats berfungsi sudah cukup chmod 755 /var/log/apache2dan chmod 644 access.log, tapi saya ingin "ini adalah praktik terbaik" -jenis jawaban :) Terima kasih telah ikut serta!
Joril
Saya pikir Anda benar untuk pergi dengan # 1 (hanya dengan akses baca, kecuali ada sesuatu yang perlu awstats). Ini memberikan akses ke akun pengguna terbatas, dan tidak memberikan akses baru ke hal lain selain itu.
belacqua

Jawaban:

8

Jika Anda memilih poin 1 dan mengatakan bahwa www-data harus memiliki setidaknya membaca izin maka yang direkomendasikan adalah hibah hanya dibaca.

Anda dapat mengubah baris (dalam file logrotate):

create 640 root adm

untuk

create 644 root adm

Untuk memberikan izin membaca kepada semua pengguna (termasuk www-data).

Anda harus mengubah izin file yang ada di / var / log / apache2 / untuk mencocokkan pengaturan ini

chmod a+r /var/log/apache2/* #or whatever your path is

Maka semua file dapat dibaca oleh semua pengguna dan semua file yang membuat logrotate di masa depan akan memiliki izin yang memadai

teis
sumber
2
Dan untuk "semua pengguna" untuk dapat melihat "/ var / log / apache2 /" lakukan secara aditional: chmod a + x / var / log / apache2 /
alfonx
6

Di sebagian besar pengaturan:

  • awstats berjalan sebagai www-data pengguna apache Anda ;
  • file log apache dimiliki oleh root: adm dan memiliki -rw-r ----- (alias: chmod 640 ) izin; dan
  • pengaturan kepemilikan dan izin dapat ditemukan di file /etc/logrotate.d/apache2 , isinya adalah:

    /var/log/apache2/*.log {
        daily
        missingok
        rotate 60
        compress
        delaycompress
        notifempty
        dateext
        create 640 root adm
        sharedscripts
        postrotate
                /etc/init.d/apache2 reload > /dev/null
        endscript }
    

Solusi paling sederhana adalah dengan:

1) Ubah " buat 640 root adm " menjadi " create 644 root adm " di /etc/logrotate.d/apache2 menggunakan editor teks favorit Anda atau, jika Anda harus menulis semuanya:

sudo sed -i 's/create 640 root adm/create 644 root adm/g' /etc/logrotate.d/apache2

2) Ubah izin pada /var/log/apache2/access.log dan /var/log/apache2/error.log ke 644 .

sudo chmod 644 /var/log/apache2/access.log /var/log/apache2/error.log

3) Mulai ulang apache.

sudo apachectl -k graceful

Saya telah melihat orang menambahkan www-data ke grup pengguna adm sebagai solusi. Itu jauh lebih banyak izin untuk data-www daripada yang nyaman bagi saya.

Opsi lain yang lebih aman melibatkan pembuatan pengguna baru & grup untuk awstats dan membuat awstats dijalankan / dieksekusi sebagai pengguna / grup baru ini.

roberthernandez
sumber
Namun solusi lain adalah mengubah grup /var/log/apache2dan semua yang ada di bawahnya www-dataagar file-file tersebut dapat dibaca oleh grup. Ini sedikit kurang permisif daripada membuatnya mudah dibaca.
Reinier Post