Bagaimana mengkonfigurasi PHP CLI di linux ubuntu untuk dijalankan sebagai www-data?

12

Saya memiliki aplikasi symfony2 di ubuntu saya. Symfony memiliki banyak perintah konsol yang berguna (seperti php app/console cache:clearatau php app/console assets:install web).

Masalahnya adalah jika saya menjalankannya sebagai rootpengguna, file-file yang baru dibuat akan memiliki root:rootpengguna / grup, dan jika saya mengakses situs web saya, saya mendapatkan kesalahan (apache karena tidak dapat membaca / memodifikasi file-file ini -> mereka seharusnya memiliki www-data:www-data).

Menjalankan chown www-data:www-datamemecahkan masalah, tetapi menjalankannya setiap kali saya membersihkan cache bukanlah solusi.

Bagaimana saya bisa mengkonfigurasi PHP CLI untuk selalu berjalan sebagai pengguna / grup www-data?

atau

Bagaimana saya bisa menjalankan perintah sebagai pengguna lain (menjadi root, menjalankannya sebagai www-data)?

loostro
sumber

Jawaban:

23

Jalankan perintah sebagai pengguna lain sekali:

sudo -u www-data php script.php

Ini akan berhasil jika Anda root.

Adapun untuk selalu menjalankan php www-data, ada beberapa kemungkinan. Anda bisa membuat shellscript wrapper sederhana. Jika /usr/bin/phphanya tautan lunak /usr/bin/php5atau serupa, itu membuatnya lebih sederhana. Ganti saja tautan lunak (BUKAN file php5) dengan skrip seperti ini:

#!/bin/sh

sudo -u www-data php5 $*

return $?

Itu belum diuji. Perlu diketahui juga bahwa ini akan SELALU mencoba untuk dijalankan php5sebagai pengguna www-data, bahkan jika pengguna mungkin tidak rootdan mungkin tidak memiliki izin untuk melakukannya. Dan itu mungkin juga bukan apa yang Anda inginkan. Beberapa layanan yang diinstal mungkin mengalami masalah ketika mencoba menjalankan php.

Solusi (mungkin lebih baik) untuk hanya menerapkan itu ke root mungkin dengan membiarkan soft-link itu /usr/bin/phpsendiri dan menempatkan skrip di /root/bindalamnya. Kemudian tambahkan folder itu ke PATH via .bashrc, .profileatau serupa. Jika sudah /etc/skel/.profile, itu mungkin menunjukkan bagaimana hal itu dilakukan:

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

Setelah ini ada di Anda .bashrc, .profileatau serupa, setiap shell baru yang Anda buka akan memungkinkan Anda untuk langsung mengeksekusi semua executable (+ x) di $HOME/bin( /root/binuntuk root).

Petunjuk: Anda mungkin ingin memberi nama skrip pembungkus dengan sesuatu seperti phpwwwsehingga Anda secara eksplisit menentukan php script.phpatau phpwww script.phpmemutuskan apakah Anda ingin php biasa atau sudo'ed.

Solusi lain adalah alias sederhana. Tempatkan ini di Anda .bashrc, .profileatau serupa:

alias phpwww='sudo -u www-data php'
riha
sumber
Lucu, setengah pendengaran telah berlalu dan saya menemukan pertanyaan saya sendiri lagi =) Sepertinya saya lupa menerima jawaban Anda terakhir kali - saya baru saja memperbaikinya, terima kasih!
loostro
Metode alias sangat masuk akal, dan itu memecahkan masalah saya yang sebenarnya
RedactedProfile
1

Dijawab oleh mwargh di ## linux (IRC Freenode.net)


Untuk menjalankan perintah sebagai pengguna lain -> beralih ke pengguna yang menggunakan:

su www-data

Saya masih tertarik (jika mungkin) mengkonfigurasi PHP agar berjalan:

root@mycomp php (php script creating a file)

sebagai pengguna root

akan menghasilkan pembuatan file dengan www-data: www-data pengguna / grup

(dengan cara ini saya tidak perlu beralih dari root ke www-data untuk menjalankan perintah saya)

loostro
sumber
1

Saya akan mencoba membuat / usr / bin / php yang dimiliki oleh www-data dan mengatur izin suid, yang memaksa perintah untuk dieksekusi oleh pemilik file. Anda akan melakukan ini dengan:

chmod u+s /usr/bin/php

Anda menyukai notasi oktal:

chmod 4755 /usr/bin/php

Meskipun saya harus mengatakan itu harus membuat orang gelisah setiap kali Anda membuat www-data pemilik apa pun, karena tujuan dari akun www-data adalah untuk memiliki sesedikit mungkin.

rebus
sumber
Itulah sebabnya saya akan menjawab
riha
1

jika Anda mendapatkan php-fpm (FastCGI Process Manager)
Anda dapat mengaturnya di file konfigurasi yang terletak di (atleast for centos): /etc/php-fpm.d/www.conf
pada baris 39 Anda dapat mengatur pengguna dan 49 Anda mengatur grup

VeXii
sumber
Itu tidak berlaku untuk php-cli, bukan?
riha
1

buat file skrip:

touch /usr/bin/phpuid
chmod +x /usr/bin/phpuid

tambah isi:

#!/bin/bash

UIDX="#"`stat -c '%u' $1`
sudo -u $UIDX php5 $*

jalankan skrip Anda dari root:

phpuid /path/to/script.php

atau gunakan juru bahasa dalam skrip Anda

#!/usr/bin/phpuid
<?php
phpinfo();

catatan: diuji pada debian 7 Anda mungkin perlu menginstal sudo

apt-get install sudo

semua file yang dibuat oleh script.php akan memiliki uid yang sama dari skrip itu

palmer
sumber