PHP: çalıştırmak linux sudo olarak?

3 Cevap

Ben sorun biraz yaşıyorum ve php kullanarak sudo gibi bir linux komutu çalıştırmak gerekir. Bu php exec kullanarak mümkün mü (?) Ben denedim ama sudo şifrenizi girin ve ardından aynı exec () çağrısı üzerine, başka bir komut yürütmek olamaz.

edit: i nedeniyle kendi aptallık ssh ile uzaktan sunucu erişemiyor. I web sunucusu aracılığıyla komutları çalıştırmak zorunda yüzden.

3 Cevap

Sen visudo ile (örneğin web sunucusu çalıştıran kullanıcı olarak ...) belirli bir kullanıcı için bazı komut için bazı ayrıcalıklar vermek, ya da çalıştırmak istediğiniz programı setsuid var, ama ben kesinlikle bunu yapmanı disadvise olabilir.

Bir veritabanında veri yazma, örneğin daha güvenli bir şekilde kullanmak ve sık sık iş elde edebilirim, veritabanında görünen bir cini robot inşa ve bu cini root olarak verilmiş olabilir değil mi?

Eğer bir şifre istemek için değil (NOPASSWD:) PHP olarak çalışan kullanıcı için sudoers kurmak gerekir. Tamamen bu kullanıcı sudo çalıştırabilirsiniz komutları kilitlemek için emin olun!

Istendiğinde (kullanıcı parolası) verilerini beslemek için özel bir boru oluşturmanıza olanak proc_open hangi kullanın. Özel bir parola boru oluşturmak için yollar linkten yorumlara bakınız.

Update, since you're not able to read.

05-Haziran-2008 de eğlenerek nokta NOSPAMPLEASE nokta com nokta AU snowleopard tarafından yorumun pasajı önce twice belirtilen linkten 02:46. Sadece kendi durumunuza bu uygulamak gerekir.

    // Set up the descriptors
    $Descriptors = array(
        0 => array("pipe", "r"),
        1 => array("pipe", "w"),
        2 => array("pipe", "w"),
        3 => array("pipe", "r") // This is the pipe we can feed the password into
    );

    // Build the command line and start the process
    $CommandLine = $GPGPath . ' --homedir ' . $HomeDir . ' --quiet --batch --local-user "' . $Identity . '" --passphrase-fd 3 --decrypt -';
    $ProcessHandle = proc_open( $CommandLine, $Descriptors, $Pipes);

    if(is_resource($ProcessHandle)) {
        // Push passphrase to custom pipe
        fwrite($Pipes[3], $PassPhrase);
        fclose($Pipes[3]);