Linux ubuntu üzerinde PHP CLI'yi www-data olarak çalışacak şekilde nasıl yapılandırırım?


12

Benim ubuntu bir symfony2 uygulaması var. Symfony çok sayıda kullanışlı konsol komutuna sahiptir ( php app/console cache:clearveya gibi php app/console assets:install web).

Sorun onları rootkullanıcı olarak çalıştırırsanız , yeni oluşturulan dosyalar root:rootkullanıcı / grup olacak ve web siteme erişirseniz hatalar alıyorum (çünkü apache bu dosyaları okuyamaz / değiştiremez -> olmalıdır www-data:www-data).

Çalıştırmak chown www-data:www-datasorunu çözer, ancak önbelleğimi her temizlediğimde çalıştırmak bir çözüm değildir.

PHP CLI'yı her zaman www-data kullanıcısı / grubu olarak çalışacak şekilde nasıl yapılandırabilirim?

veya

Komutu farklı bir kullanıcı olarak nasıl çalıştırabilirim (root olarak, www-data olarak çalıştırın)?

Yanıtlar:


23

Komutu başka bir kullanıcı olarak bir kez çalıştırın:

sudo -u www-data php script.php

Eğer öyleyse çalışmalı root.

Her zaman olduğu gibi php çalışan gelince www-data, birkaç olasılık vardır. Basit bir sarıcı shellscript oluşturabilirsiniz. Eğer /usr/bin/phpsadece bir soft-link /usr/bin/php5veya benzeri, yani daha basit hale getirir. Yazılım bağlantısını (dosya DEĞİL php5) aşağıdaki gibi bir komut dosyasıyla değiştirin:

#!/bin/sh

sudo -u www-data php5 $*

return $?

Bu test değil. Ayrıca php5, kullanıcı her zaman kullanıcı olarak çalıştırılmaya çalışacağını unutmayın , kullanıcı www-dataolmasa da rootve bunu yapma izni olmayabilir. Ve gerçekten istediğiniz şey de olmayabilir. Bazı yüklü hizmetler php yürütmeye çalışırken sorunlarla karşılaşabilir.

Yalnızca kök için geçerli olan (muhtemelen daha iyi) bir çözüm, yumuşak bağlantıyı /usr/bin/phpyalnız bırakmak ve komut dosyasını yerleştirmek olabilir /root/bin. Sonra aracılığıyla PATH bu klasör eklemek .bashrc, .profileya da benzer. Eğer varsa /etc/skel/.profile, bunun nasıl yapıldığına işaret edebilir:

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

Bu ulaştıktan sonra .bashrc, .profileveya benzeri, açmak her yeni kabuk doğrudan (+ x) herhangi çalıştırılabilirleri sağlayacak $HOME/bin( /root/binroot için).

İpucu: Sarıcı komut dosyasını phpwwwaçık bir şekilde belirttiğiniz gibi adlandırmak php script.phpveya phpwww script.phpnormal veya sudo'ed php isteyip istemediğinize karar vermek isteyebilirsiniz.

Başka bir çözüm basit bir takma addır. Senin bu yerleştirin .bashrc, .profileya da benzer:

alias phpwww='sudo -u www-data php'

Komik, yarım bir duruş geçti ve kendi sorumu tekrar tökezledim =) Son kez cevabınızı kabul etmeyi unuttum gibi görünüyor - bunu düzelttim, teşekkür ederim!
loostro

Takma ad yöntemi çok kanlı bir anlam ifade ediyor ve kesin sorunumu çözdü
RedactedProfile

1

Tarafından cevap mwargh ## linux (IRC Freenode.net)


Komutları farklı bir kullanıcı olarak çalıştırmak için -> şu kullanıcıyı kullanan kullanıcıya geçin:

su www-data

Ben hala (böylece mümkünse) PHP yapılandırılması ilginizi çekecek ki çalışan:

root@mycomp php (php script creating a file)

olarak kök kullanıcı

www-data: www-data user / group ile bir dosya oluşturulacak

(bu şekilde komutlarımı çalıştırmak için kökten www-verisine geçmek zorunda kalmam)


1

Ben / usr / bin / php www-data ait yapmak denemek ve dosya sahibi tarafından yürütülecek komutu zorlayan suid izni ayarlayın. Bunu şu şekilde yaparsınız:

chmod u+s /usr/bin/php

sekizli gösterimi beğendin:

chmod 4755 /usr/bin/php

Her ne kadar www-data hesabının sahibi olabildiğince az sahip olmak olduğundan, www-data'yu her şeyin sahibi yaptığınızda huzursuz hale getirmesi gerektiğini söylemeliyim.


Bu yüzden riha'nın cevabı ile gideceğim
loostro

1

php-fpm (FastCGI Process Manager)
aldıysanız (centos için en az) adresinde bulunan yapılandırma dosyasında ayarlayabilirsiniz: /etc/php-fpm.d/www.conf
39 satırında kullanıcıyı ve 49'u grubu ayarlayabilirsiniz


Bu geçerli değil php-cli, değil mi?
riha

1

komut dosyası oluştur:

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

içerik ekle:

#!/bin/bash

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

komut dosyalarınızı kökten çalıştırın:

phpuid /path/to/script.php

veya komut dosyalarınızda tercüman kullanın

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

not: debian 7 üzerinde test edilmiştir sudo yüklemeniz gerekebilir

apt-get install sudo

script.php tarafından oluşturulan tüm dosyalar bu komut dosyasının aynı kullanıcı kimliğine sahip olacaktır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.