- How to enable exec function in php.ini : Let’s figure it out
- What is the exec function?
- Security risk in enabling exec function
- How we enable exec function in PHP?
- Using php.ini to enable exec function
- MultiPHP INI Editor
- Conclusion
- PREVENT YOUR SERVER FROM CRASHING!
- 2 Comments
- Отключение опасных функций в PHP
- Disabled function php ini
How to enable exec function in php.ini : Let’s figure it out
Exec is a PHP function used to execute an external program like a script.
But the execution of external programs creates a security risk that attackers can misuse.
At Bobcares, we often get requests to enable PHP functions, as part of our Server Management Services.
Today, let’s see how our Support Engineers enable this function. We’ll also discuss the security risk related to the exec function.
What is the exec function?
The exec is an inbuilt PHP function. It replaces a currently running process with the new program. PHP uses the function to execute a program and it returns the last line of the output.
Many WordPress image optimization plugins make use of this function. Hence WordPress users often approach us to enable this function.
Security risk in enabling exec function
PHP has certain dangerous functions that can make a server vulnerable to attacks. These functions include system, passthru, shell_exec, exec, etc.
Hence our Support Engineers always recommend our customers to disable these functions in the server. And these functions will be listed in the disable_functions directive in a php.ini file.
By enabling exec function there is a possible security threat. Attacks may use this function to run programs in servers that can lead to data corruption and data loss.
Considering the security risks, we suggest customers enabling the exec function on a per-account basis. Thus, it gives better tracking of user activity.
How we enable exec function in PHP?
One of the wisest choices is to enable the exec function in dedicated or VPS servers.
Usually, we enable this function via the php.ini file. But for cPanel accounts, we can do this via WHM. Now, let’s see how our Support Engineers enable it.
Using php.ini to enable exec function
To enable this function, we login to the server as the root user.
Then we open the php.ini file and search for exec function. Usually, this function will be disabled. So, we check the disable_functions directive which appears as,
disable_functions = "show_source, system, shell_exec, exec"
Hence we remove exec from the line and save the file. Thus we enabled the exec function in the server.
In addition, if the PHP handler is suPHP or LSPHP, then we have to add the directive in the .htaccess file also.
MultiPHP INI Editor
For cPanel customers we enable the exec function from the WHM. But the change will reflect in all cPanel accounts in WHM. So we don’t use this method to enable exec in one cPanel account.
- To enable the function in all the accounts, we log in to the WHM.
- Then we select the MultiPHP INI Editor from the Software section.
- Next, we enter into the Editor Mode and choose the corresponding PHP version.
- There we remove the exec function from disable_functions directive.
- Finally, we save the changes.
Hence it enables the function server-wide.
[Need more help to enable PHP functions? – We’re available 24/7.]
Conclusion
In short, exec function is usually disabled in a server, as it allows attackers to execute external programs that can crack a server. Today, we saw how our Support Engineers enable exec function in php.ini.
PREVENT YOUR SERVER FROM CRASHING!
Never again lose customers to poor server speed! Let us help you.
Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.
2 Comments
hello, is there any other ways to enable this function without touching php.ini ? i dont have access to php.ini in my host. Reply
Hello Erfan,
Enabling the exec function needs access to the php.ini file. Considering security risks, most Hosting providers control this function at the root access level.
A VPS server with root access allows you to do such customization. Reply
Отключение опасных функций в PHP
Если Вы хоть немного задумываетесь о безопасности своего веб-сервера, то следует отключить некоторые функции PHP, которые несут в себе потенциальную угрозу. Например, такие функции как exec() или system() позволяют выполнять внешние программы в системе, что, согласитесь, в большинстве случаев не требуется для веб-приложений. Данные функции, несомненно, помогают получить практически безграничные возможности для разработчика, однако, в то же время, при несанкционированном доступе к серверу злоумышленник может получить над ним полный контроль.
Это одна из причин, по которой ещё на этапе планирования проекта стоит избегать идей с вызовом внешних программ.
Для отключения функций следует открыть файл php.ini и добавить их в параметр disable_functions, например:
disable_functions = exec,passthru,php_uname,popen,proc_open,shell_exec,show_source,system
После сохранения конфигурации необходимо сообщить Apache об изменениях выполнив команду:
А вот список функций, рекомендуемых к отключению. Описание прилагается.
exec() - вызов внешней программы proc_open() - выполняет команду и открывает файловый указатель для ввода/вывода shell_exec() - выполняет команду в оболочке/shell и возвращает полный вывод в виде строки system() - вызов внешней программы и вывод результата passthru() - вызов внешней программы и вывод "сырых" результата popen() - открывает файловый указатель процесса show_source() - вывод исходного текста текущей веб страницы disk_free_space() - получить размер доступного пространства в каталоге diskfreespace() - псевдоним функции disk_free_space disk_total_space() - возвращает общий размер диска eval() - вычисляет строку, заданную в параметре, как код PHP fileperms() - получить информацию о правах на файл fopen() - открывает файл или URL opendir() - возвращает дескриптор каталога для последующего использования с функциями closedir(), readdir() и rewinddir() phpinfo() - выводит всю информацию о PHP, ОС phpversion() - выводит версию php posix_getpwuid() - возвращает информацию о пользователе по его user id posix_getgrgid() - возвращает информацию о группе по её group id posix_uname() - получает системное имя, возвращает хэш строк с информацией о системе php_uname - возвращает информацию об ОС, на которой php был построен ini_get() - получает значение опции конфигурации ini_get_all() - получает все опции конфигурации parse_ini_file() - разбирает файл конфигурации
Disabled function php ini
В настройках по умолчанию, используя PHP, есть возможность выполнять системные команды через PHP-скрипты. Можно просмотреть содержимое директорий с помощью утилиты ls, выполнить вывод файла с помощью утилиты cat, видеть свои процессы, etc.
Эти возможности серьезно подрывают безопасность сервера, особенно в случае хостинг-сервера. Чтобы повысить безопасность, отключим некоторые функции. Для этого в файле /etc/php.ini укажем функции, которые хотим запретить, в параметр disable_functions:
apache_note,apache_setenv,chgrp,closelog,debugger_off,debugger_on,define_sys,define_syslog_variables,diskfreespace,dl,escapeshellarg,escapeshellcmd,exec,getmypid,getmyuid,ini_restore,leak,listen,openlog,passthru,pclose,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_getpriority,pcntl_get_last_error,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerror,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_uname,popen,posix,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,shell_exec,show_source,syslog,system,url_exec,_getppid
disable_functions = fopen, fwrite
После внесения изменений необходимо перезапустить Apache или php-fpm чтобы изменения вступили в силу.
Описание некоторых указанных функций:
exec — вызов внешней программы
ini_get — получает значение опции конфигурации
ini_get_all — получает все опции конфигурации
parse_ini_file — разбирает файл конфигурации
passthru — вызов внешней программы и вывод «сырых» результатов на дисплей
php_uname — возвращает информацию об ОС, на которой php был построен
popen — открывает файловый указатель процесса
proc_open — выполняет команду и открывает файловый указатель для ввода/вывода
shell_exec — выполняет команду в оболочке/shell и возвращает полный вывод в виде строки
show_source — вывод исходного текста текущей веб страницы
system — вызов внешней программы и вывод результата на дисплей
diskfreespace — псевдоним функции disk_free_space
disk_free_space — получить размер доступного пространства в каталоге
disk_total_space — возвращает общий размер диска
eval — вычисляет строку, заданную в code_str, как код PHP (eval ( string code_str))
fileperms — получить информацию о правах на файл
fopen — открывает файл или URL
opendir — возвращает дескриптор каталога для последующего использования с функциями closedir(), readdir() и rewinddir()
phpinfo — выводит всю информацию об php, Ос
phpversion — выводит версию php
posix_getpwuid — возвращает информацию о пользователе по его user id
posix_getgrgid — возвращает информацию о группе по её group id
posix_uname — получает системное имя, возвращает хэш строк с информацией о системе