"Basit" bir sorum var: Apache root ayrıcalıkları vermeden ya da diğer çılgın güvenlik açıklarını vermeden bir PHP betiğinden bir kullanıcının parolasını güvenli bir şekilde nasıl değiştirebilirim?Linux'u değiştirin PHP betiğinden kullanıcı parolası
Geçmiş: CentOS 6, Apache 2.2.13 PHP 5.3.3
Ben PECL PAM kitaplığının parçası olan pam_chpasswd() komutu, farkındayım. Ancak, ana makine işlemi (httpd)/etc/shadow dosyasına erişimi okumadığı sürece bu işlev başarısız olur. (KÖTÜ IDEA! Bu kütüphanenin bu kadar yüksek ayrıcalık gerektiriyorsa nasıl yardımcı olabileceğinden emin değil misiniz ...)
Görebildiğim kadarıyla, 'sudo -u [username ile PHP'nin kabuk betiğini çağırması ideal bir durumdur. kullanıcının parolasını değiştirmesi] ' Bu kullanıcı "AS" betiğini çalıştıracak, böylece kendi parolasını değiştirme iznine sahip olmalıdır. Ve sudo, kullanıcının kimlik doğrulaması için mevcut şifresini göndermesini ve böylece bir kullanıcının başka bir kullanıcının şifresini değiştirmesini engellemesini gerektirecektir.
Ama bu bir sebepten ötürü işe yaramaz ... işlemi, popen ile açarken, işlem asla yürütülmez. Bazı metinleri/tmp içindeki herkese açık yazılabilir bir dosyaya dökmek için kurulmuş kabuk komut dosyası var. Ama asla bu noktaya ulaşmaz.
$cmd = "/usr/bin/sudo -S -u$username /file_to_execute.sh";
$handle = popen ($cmd, "w"); // Open the process for writing
fwrite ($handle, "$current_password\n"); // Send the user's current password to sudo (-S option)
fwrite .... (write the username, current password, and new password, so the script can change it)
$result = pclose($handle);
bu php komut dosyası erişmek (http: //server/script.php), işlev hemen başarısız olur ve $ sonuç = 1
Ben Sudoers dosyası (visudo) değiştirmek ve varsa eklemek bir satır:
$
Varsayılan:
komut yaklaşık 10 saniye boyunca donar apache requiretty sonra başarısız ($ sonuç = 1) bu iş için
Herhangi bir öneri büyük takdir!
bu işin Herhangi? http://stackoverflow.com/questions/127459/using-shell-execpasswd-to-change-a-users-password?rq=1 – Aknosis