An Auditor’s Checklist for Securing WooCommerce Backends on DigitalOcean
DigitalOcean Droplet Hardening for WooCommerce
Securing a WooCommerce backend on DigitalOcean begins with a robustly hardened Droplet. This section outlines essential steps for initial server setup and ongoing maintenance, focusing on minimizing the attack surface and enforcing least privilege.
1. Initial Droplet Setup & User Management
Upon provisioning a new Droplet, the first critical step is to disable direct root login and establish a secure, non-privileged user account for administration. This mitigates brute-force attacks targeting the root user.
1.1. Create a New User and Grant Sudo Privileges
Log in to your Droplet via SSH using the root user and the provided password. Immediately create a new user (e.g., deployer) and assign it to the sudo group.
adduser deployer usermod -aG sudo deployer
Next, copy your SSH public key to the new user’s authorized_keys file. This allows passwordless SSH login for the new user, which is crucial for disabling password authentication later.
mkdir -p /home/deployer/.ssh cp ~/.ssh/authorized_keys /home/deployer/.ssh/authorized_keys chown -R deployer:deployer /home/deployer/.ssh chmod 700 /home/deployer/.ssh chmod 600 /home/deployer/.ssh/authorized_keys
Log out of the root session and log back in as the new user (deployer) to verify access.
ssh deployer@your_droplet_ip
1.2. Disable Root SSH Login
Edit the SSH daemon configuration file to disallow root logins. This is a fundamental security measure.
sudo nano /etc/ssh/sshd_config
Locate or add the following lines, ensuring they are uncommented:
PermitRootLogin no PasswordAuthentication no
After saving the changes, restart the SSH service to apply them.
sudo systemctl restart sshd
Crucially, before logging out, open a *new* terminal window and attempt to SSH in as the deployer user. If you cannot log in, you will be locked out of your server.
2. Firewall Configuration (UFW)
A properly configured firewall is essential to restrict network access to only necessary ports. Uncomplicated Firewall (UFW) is a user-friendly front-end for iptables.
2.1. Install and Enable UFW
sudo apt update sudo apt install ufw -y sudo ufw enable
2.2. Define Allowed Ports
For a typical WooCommerce setup, you’ll need to allow SSH (port 22), HTTP (port 80), and HTTPS (port 443). If you are using a specific port for SSH, adjust accordingly.
sudo ufw allow ssh sudo ufw allow http sudo ufw allow https
If your WooCommerce site uses a custom port for any service, add it here. For example, if your SSH is on port 2222:
sudo ufw allow 2222/tcp
2.3. Deny All Other Incoming Traffic
Ensure that by default, all other incoming connections are denied. UFW’s default policy is usually to deny, but it’s good practice to explicitly set it.
sudo ufw default deny incoming sudo ufw default allow outgoing
2.4. Check UFW Status
sudo ufw status verbose
The output should confirm that SSH, HTTP, and HTTPS are allowed, and other incoming traffic is denied.
3. System Updates and Package Management
Keeping your system and all installed packages up-to-date is paramount for patching known vulnerabilities. Automate this process where feasible and monitor for critical security advisories.
3.1. Automatic Security Updates
Install the unattended-upgrades package to automatically install security updates. Configure it to apply updates without user intervention.
sudo apt install unattended-upgrades -y sudo dpkg-reconfigure --priority=low unattended-upgrades
You can further configure unattended-upgrades by editing its configuration file. For instance, to ensure only security updates are applied:
# /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
// Extended Security Maintenance; doesn't necessarily exist for
// every release and not enabled by default.
// "${distro_id}:${distro_codename}-esm";
// "${distro_id}:${distro_codename}-updates";
}
3.2. Regular Manual Audits
While automatic updates handle security patches, perform periodic manual checks for available updates and review system logs for any unusual activity. A simple command to check for available upgrades:
sudo apt list --upgradable
4. Secure PHP Configuration
WooCommerce runs on PHP. Securing the PHP interpreter is vital. This involves disabling dangerous functions, limiting resource usage, and enabling error logging for auditing.
4.1. PHP Configuration File Location
The primary PHP configuration file is php.ini. Its location varies depending on your PHP version and installation method. Common locations include:
# For PHP 7.x /etc/php/7.x/fpm/php.ini /etc/php/7.x/cli/php.ini # For PHP 8.x /etc/php/8.x/fpm/php.ini /etc/php/8.x/cli/php.ini
Use php -i | grep "Loaded Configuration File" to find the exact path for your CLI configuration, and php-fpm -i | grep "Loaded Configuration File" for your FPM configuration.
4.2. Key Security Directives in php.ini
Edit the relevant php.ini file (typically the one for PHP-FPM, as it’s used by web servers) and apply the following settings:
; Disable dangerous functions that can be exploited for remote code execution disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,pcntl_exec,pcntl_fork,pcntl_wait,pcntl_waitpid,pcntl_signal,pcntl_sigprocmask,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror,pcntl_strerror