Λύση στο PHP που δεν έχει άδεια εκτέλεσης εντολών exec σε Linux

Σχετικές επίσημες αναφορές

PHP exec Linux sudoers file Sudo Commands

Τροποποιήσεις κατά την εκτέλεση σε λειτουργία fastcgi

Όταν η PHP εκτελείται σε λειτουργία fastcgi, τα δικαιώματά της μεταβιβάζονται από το πρόγραμμα υποδοχής της. Παίρνουμε το apache ως παράδειγμα για να το εξηγήσουμε. Αρχικά, πρέπει να βρούμε τον λογαριασμό κάτω από τον οποίο εκτελείται το apache και, στη συνέχεια, να χρησιμοποιήσουμε το vi ή το vim για να επεξεργαστούμε το αρχείο / etc / sudoers και να προσθέσουμε το ακόλουθο παράδειγμα αναφοράς στο αρχείο. Στο ακόλουθο περιεχόμενο, χρησιμοποιήστε πρώτα την εντολή ps για να βρείτε τη διαδικασία apache httpd, κοιτάξτε τις πληροφορίες λογαριασμού στην αριστερή πλευρά του επιστρεφόμενου αποτελέσματος και, στη συνέχεια, επεξεργαστείτε το αρχείο sudoers για να προσθέσετε εξουσιοδότηση στον λογαριασμό apache.

            ps aux | grep httpd
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apache ALL=(ALL) NOPASSWD:ALL
        

Τροποποιήσεις κατά την εκτέλεση σε λειτουργία php-fpm

Όταν εκτελείται σε λειτουργία php-fpm, εκτελείται ως ξεχωριστή διαδικασία. Βρήκαμε λοιπόν τον τρέχοντα λογαριασμό του και μετά εκτελούμε λειτουργίες εξουσιοδότησης όπως παραπάνω.

            ps aux | grep php-fpm
vim /etc/sudoers
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
www ALL=(ALL) NOPASSWD:ALL
        

Βεβαιωθείτε ότι οι αλλαγές ισχύουν

Μετά τις παραπάνω λειτουργίες, τροποποιήσαμε την εξουσιοδότηση, αλλά δεν έχει ακόμη τεθεί σε ισχύ. Πρέπει να επανεκκινήσουμε την υπηρεσία για να τεθεί σε ισχύ η τροποποίησή μας. Ανάλογα με την πραγματική μας κατάσταση, επανεκκινήστε την υπηρεσία apache ή php-fpm. Στη συνέχεια, εκτελέστε την εντολή exec για να δείτε το αποτέλεσμα που επιστρέφεται. Εάν το αποτέλεσμα που επιστρέφεται λαμβάνεται κανονικά, είναι επιτυχές.

            exec('sudo dmidecode -s system-serial-number', $result);
var_dump($result);