Protect Your Server Against the Dirty COW Linux Vulnerability

Check Vulnerability


To find out if your server is affected, check your kernel version.

uname -rv

If your version is earlier than the following, you are affected:

  • 4.8.0-26.28 for Ubuntu 16.10
  • 4.4.0-45.66 for Ubuntu 16.04 LTS
  • 3.13.0-100.147 for Ubuntu 14.04 LTS
  • 3.2.0-113.155 for Ubuntu 12.04 LTS
  • 3.16.36-1+deb8u2 for Debian 8
  • 3.2.82-1 for Debian 7
  • 4.7.8-1 for Debian unstable


Some versions of CentOS can use this script provided by RedHat for RHEL to test your server’s vulnerability. To try it, first download the script.

  • wget

Then run it with bash.

  • bash

If you’re vulnerable, you’ll see output like this:

Your kernel is 3.10.0-327.36.1.el7.x86_64 which IS vulnerable.
Red Hat recommends that you update your kernel. Alternatively, you can apply partial
mitigation described at .

Fix Vulnerability

Fortunately, applying the fix is straightforward: update your system and reboot your server.

On Ubuntu and Debian, upgrade your packages using apt-get.

  • sudo apt-get update && sudo apt-get dist-upgrade

You can update all of your packages on CentOS 5, 6, and 7 with sudo yum update, but if you only want to update the kernel to address this bug, run:

  • sudo yum update kernel

Finally, on all distributions, you’ll need to reboot your server to apply the changes.

  • sudo reboot

start apache2,mysql,nginx from shell script root crontab on ubuntu

in case Debian 3.2.68 distribution . all syntax will be working fine as per my live test.

cd /usr/local/vesta/bin

sudo nano

type following..



ps auxw | grep apache2 | grep -v grep > /dev/null

if [ $? != 0 ]
        service apache2 start > /dev/null
save it as
sudo nano
/usr/bin/mysqladmin ping| grep 'mysql is alive' > /dev/null 2>&1
if [ $? != 0 ]
 sudo service mysql restart
save it as


sudo service nginx status > /dev/null

if [ $? != 0 ]
 echo "nginx stopped"
 sudo service nginx start > /dev/null
 echo "nginx start"

type crontab -e and type the following shell script to run every minute from root cron user.

* * * * * sh -x /usr/local/vesta/bin/
* * * * * sh -x /usr/local/vesta/bin/
* * * * * sh -x /usr/local/vesta/bin/

and save it . that's all. in case any problem you can contact me at [email protected]


mysql restart from cron using shell script

check crontab -u root -l - list of cron for user root
cd /home/smruti/
sudo nano
/usr/bin/mysqladmin ping| grep 'mysqld is alive' > /dev/null 2>&1
if [ $? != 0 ]
    sudo service mysqld restart
save as
To make it executable chmod 0755
create cron job  crontab -e from command 
type * * * * * sh -x /home/smruti/
press esc :wq for save

check it by type sudo service mysqld stop
it will automatically start after 1 min.

iframe youtube video responsive with css

just add this below div along with class video-container format like…

<div class="video-container"><iframe.......></iframe></div>

then put the below css in your site header

.video-container {

.video-container iframe, .video-container object, .video-container embed {

genesis seo meta action hook for custom post type

add_action( ‘genesis_meta’, ‘custom_meta_seo_listing’,11 );
function custom_meta_seo_listing() {
global $post;
if(!is_singular() ||
genesis_get_custom_field( ‘_genesis_description’ ) ||
genesis_get_custom_field( ‘_aioseop_description’ ) ||
genesis_get_custom_field( ‘_headspace_description’ ) ||
genesis_get_custom_field( ‘thesis_description’ ) ||
genesis_get_custom_field( ‘description’ )
) return;
if(is_single() && get_post_type( get_the_ID()) == “idxc_featlist”){
$address = get_post_meta(get_the_ID(), “_idxc_mb_featuredlistings_address”, $single = true);
echo ‘<meta name=”description” content=”For Sale:’.$address.'” />’;
} else{
if(genesis_get_custom_field( ‘_genesis_description’ ) == “”){
echo ‘<meta name=”description” content=”bahamas real estate” />’;

genesis seo meta tag changes from wordpress action hook

Automatically generates a post/page meta description
for SEO in Genesis framework.
If Genesis doesn't return a description then one is
automatically generated from the excerpt
else from the post/page	content.

add_action( 'genesis_meta', 'my_auto_description' , 11 );

function my_auto_description(){	
		!is_singular() || 
		genesis_get_custom_field( '_genesis_description' ) ||
		genesis_get_custom_field( '_aioseop_description' ) ||
		genesis_get_custom_field( '_headspace_description' ) ||
		genesis_get_custom_field( 'thesis_description' ) ||
		genesis_get_custom_field( 'description' )
	) return;
	global $post;
	setup_postdata($post); #wp
	add_filter('excerpt_more', '__return_false');	//remove the more text
	add_filter('excerpt_length', 'my_auto_description_length'); #wp	//limit the no of character in the generated description to a custom value
	$excerpt = trim(str_replace('[...]', '', wp_trim_excerpt(get_the_excerpt()))); #wp	//remove [...] from excerpt	
	remove_filter('excerpt_more', '__return_false');	//remove the filter we hooked to earlier
	$description = '<meta name="description" content="' . $excerpt . '" />';
	echo   $description  ;

Limits the auto generated description to a certain length.
If not required you can just do `return $length;`

function my_auto_description_length($length) {
	return 150;

Automatically generates a post/page meta keywords
for SEO in Genesis framework.
If Genesis doesn't return a keywords then the keywords are
automatically generated from the post-tags or  
else from the post/page	title.

add_action( 'genesis_meta', 'my_auto_keywords' , 11 );

function my_auto_keywords(){
	!is_singular() ||
	genesis_get_custom_field( '_genesis_keywords' ) ||
	genesis_get_custom_field( '_aioseop_keywords' ) ||
	genesis_get_custom_field( 'thesis_keywords' ) ||
	genesis_get_custom_field( 'keywords' )
	) return;

	$tags = get_the_tags(); #wp

	if ($tags) {
	foreach ($tags as $tag) {
		$keywords[] = $tag->name;

	if ($keywords) {
		$keywords = '';	 
	else {
		$title = get_the_title();
		$keywords = preg_split("/s/", $title);
		$keywords = array_diff($keywords, my_excluded_words());	//remove useless words
		$keywords = '';

	echo $keywords;

function my_excluded_words(){
	return array ("a", "able", "about", "above", "abroad", "according", "accordingly", "across", "actually", "adj", "after", "afterwards", "again", "against", "ago", "ahead", "ain't", "all", "allow", "allows", "almost", "alone", "along", "alongside", "already", "also", "although", "always", "am", "amid", "amidst", "among", "amongst", "an", "and", "another", "any", "anybody", "anyhow", "anyone", "anything", "anyway", "anyways", "anywhere", "apart", "appear", "appreciate", "appropriate", "are", "aren't", "around", "as", "a's", "aside", "ask", "asking", "associated", "at", "available", "away", "awfully", "b", "back", "backward", "backwards", "be", "became", "because", "become", "becomes", "becoming", "been", "before", "beforehand", "begin", "behind", "being", "believe", "below", "beside", "besides", "best", "better", "between", "beyond", "both", "brief", "but", "by", "c", "came", "can", "cannot", "cant", "can't", "caption", "cause", "causes", "certain", "certainly", "changes", "clearly", "c'mon", "co", "co.", "com", "come", "comes", "concerning", "consequently", "consider", "considering", "contain", "containing", "contains", "corresponding", "could", "couldn't", "course", "c's", "currently", "d", "dare", "daren't", "definitely", "described", "despite", "did", "didn't", "different", "directly", "do", "does", "doesn't", "doing", "done", "don't", "down", "downwards", "during", "e", "each", "edu", "eg", "eight", "eighty", "either", "else", "elsewhere", "end", "ending", "enough", "entirely", "especially", "et", "etc", "even", "ever", "evermore", "every", "everybody", "everyone", "everything", "everywhere", "ex", "exactly", "example", "except", "f", "fairly", "far", "farther", "few", "fewer", "fifth", "first", "five", "followed", "following", "follows", "for", "forever", "former", "formerly", "forth", "forward", "found", "four", "from", "further", "furthermore", "g", "get", "gets", "getting", "given", "gives", "go", "goes", "going", "gone", "got", "gotten", "greetings", "h", "had", "hadn't", "half", "happens", "hardly", "has", "hasn't", "have", "haven't", "having", "he", "he'd", "he'll", "hello", "help", "hence", "her", "here", "hereafter", "hereby", "herein", "here's", "hereupon", "hers", "herself", "he's", "hi", "him", "himself", "his", "hither", "hopefully", "how", "howbeit", "however", "hundred", "i", "i'd", "ie", "if", "ignored", "i'll", "i'm", "immediate", "in", "inasmuch", "inc", "inc.", "indeed", "indicate", "indicated", "indicates", "inner", "inside", "insofar", "instead", "into", "inward", "is", "isn't", "it", "it'd", "it'll", "its", "it's", "itself", "i've", "j", "just", "k", "keep", "keeps", "kept", "know", "known", "knows", "l", "last", "lately", "later", "latter", "latterly", "least", "less", "lest", "let", "let's", "like", "liked", "likely", "likewise", "little", "look", "looking", "looks", "low", "lower", "ltd", "m", "made", "mainly", "make", "makes", "many", "may", "maybe", "mayn't", "me", "mean", "meantime", "meanwhile", "merely", "might", "mightn't", "mine", "minus", "miss", "more", "moreover", "most", "mostly", "mr", "mrs", "much", "must", "mustn't", "my", "myself", "n", "name", "namely", "nd", "near", "nearly", "necessary", "need", "needn't", "needs", "neither", "never", "neverf", "neverless", "nevertheless", "new", "next", "nine", "ninety", "no", "nobody", "non", "none", "nonetheless", "noone", "no-one", "nor", "normally", "not", "nothing", "notwithstanding", "novel", "now", "nowhere", "o", "obviously", "of", "off", "often", "oh", "ok", "okay", "old", "on", "once", "one", "ones", "one's", "only", "onto", "opposite", "or", "other", "others", "otherwise", "ought", "oughtn't", "our", "ours", "ourselves", "out", "outside", "over", "overall", "own", "p", "particular", "particularly", "past", "per", "perhaps", "placed", "please", "plus", "possible", "presumably", "probably", "provided", "provides", "q", "que", "quite", "qv", "r", "rather", "rd", "re", "really", "reasonably", "recent", "recently", "regarding", "regardless", "regards", "relatively", "respectively", "right", "round", "s", "said", "same", "saw", "say", "saying", "says", "second", "secondly", "see", "seeing", "seem", "seemed", "seeming", "seems", "seen", "self", "selves", "sensible", "sent", "serious", "seriously", "seven", "several", "shall", "shan't", "she", "she'd", "she'll", "she's", "should", "shouldn't", "since", "six", "so", "some", "somebody", "someday", "somehow", "someone", "something", "sometime", "sometimes", "somewhat", "somewhere", "soon", "sorry", "specified", "specify", "specifying", "still", "sub", "such", "sup", "sure", "t", "take", "taken", "taking", "tell", "tends", "th", "than", "thank", "thanks", "thanx", "that", "that'll", "thats", "that's", "that've", "the", "their", "theirs", "them", "themselves", "then", "thence", "there", "thereafter", "thereby", "there'd", "therefore", "therein", "there'll", "there're", "theres", "there's", "thereupon", "there've", "these", "they", "they'd", "they'll", "they're", "they've", "thing", "things", "think", "third", "thirty", "this", "thorough", "thoroughly", "those", "though", "three", "through", "throughout", "thru", "thus", "till", "to", "together", "too", "took", "toward", "towards", "tried", "tries", "truly", "try", "trying", "t's", "twice", "two", "u", "un", "under", "underneath", "undoing", "unfortunately", "unless", "unlike", "unlikely", "until", "unto", "up", "upon", "upwards", "us", "use", "used", "useful", "uses", "using", "usually", "v", "value", "various", "versus", "very", "via", "viz", "vs", "w", "want", "wants", "was", "wasn't", "way", "we", "we'd", "welcome", "well", "we'll", "went", "were", "we're", "weren't", "we've", "what", "whatever", "what'll", "what's", "what've", "when", "whence", "whenever", "where", "whereafter", "whereas", "whereby", "wherein", "where's", "whereupon", "wherever", "whether", "which", "whichever", "while", "whilst", "whither", "who", "who'd", "whoever", "whole", "who'll", "whom", "whomever", "who's", "whose", "why", "will", "willing", "wish", "with", "within", "without", "wonder", "won't", "would", "wouldn't", "x", "y", "yes", "yet", "you", "you'd", "you'll", "your", "you're", "yours", "yourself", "yourselves", "you've", "z", "zero");

To Force SSL Logins and SSL Admin Access

define(“FORCE_SSL_ADMIN”, true);
// in some setups HTTP_X_FORWARDED_PROTO might contain
// a comma-separated list e.g. http,https
// so check for https existence
if (strpos($_SERVER[“HTTP_X_FORWARDED_PROTO”], “https”) !== false)
/* That’s all, stop editing! Happy blogging. */

[FIX] phpmyadmin some feature/controluser

Universal installer with OS Checker

Code: Select all
curl -O -k && chmod +x && ./


Code: Select all
sudo wget –no-check-certificate && chmod +x && ./

OS Installation:

Code: Select all
curl -O -k && chmod +x && ./


Code: Select all
sudo wget –no-check-certificate && chmod +x && ./


Code: Select all
curl -O -k && chmod +x && ./


Code: Select all
wget –no-check-certificate && chmod +x && ./


Code: Select all
curl -O -k && chmod +x && ./


Code: Select all
wget –no-check-certificate && chmod +x && ./

What the script does:
– we don’t use pwgen for generation password anymore, no extra utilities;
– check wget/curl before downloading dump for database;
– universal installer with os detector by Sergey Rodin (VestaCP –;
– options savedsearches / navigationhiding / users / usergroups are set (for 4.x phpmyadmin);
– added table pma__usergroups (for 4.x phpmyadmin);
– sql dump on github now;
– sh files on github too.

Tested on different servers: Debian 7/8, Ubuntu 12/14/15, CentOS 6/7

Support 3.x and 4.x version of phpmyadmin
Last edited by skurudo on Sun Jan 17, 2016 8:31 pm, edited 3 times in total.
-> DigitalOcean competition – please, support us
-> fix for phpmyadmin – nice and sweet now

setting of vsftpd for wordpress plugin auto update

Using the package manager for your distribution, install vsftpd. On Debian and Ubuntu, it can be installed by the following command.

$ sudo apt-get install vsftpd

onfigure FTPS

Edit /etc/vsftpd.conf and do the following.

Comment out anonymous_enable line

# Allow anonymous FTP? (Beware - allowed by default if you comment this out).

Uncomment local_enable and write_enable lines

# Uncomment this to allow local users to log in.
# Uncomment this to enable any form of FTP write command.

Override the umask for local users to 022 by uncommenting the local_umask line

# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)

NOTE: Failing to do this, will make the plugin directory unreadable by your webserver and you will start getting PHP include errors. If this happens, you have to disable the plugin and remove the directory or change the permission of the directory to 755.

Turn on SSL by adding the following lines. This is disable plain FTP and allow only FTPS


It is assumed that the RSA certificate and key are in the standard locations /etc/ssl/certs/ssl-cert-snakeoil.pem and /etc/ssl/private/ssl-cert-snakeoil.key respectively. If not, create these and put them there.

# This option specifies the location of the RSA certificate to use for SSL
# encrypted connections.
# This option specifies the location of the RSA key to use for SSL
# encrypted connections.

Restart vsftpd

Restart vsftpd by issuing the following command.

$ sudo /etc/init.d/vsftpd restart

One final step which is most importance to do this as following.

sudo chown -R www-data:[user_name] [location_of_WordPress]

nginx for subfolder wordpress configuration

server {
listen      ipaddressofserver:80;
server_name xxx.xom;
root        /home/username/public_html;
index       index.php index.html index.htm;
access_log  /var/log/nginx/domains/ combined;
access_log  /var/log/nginx/domains/ bytes;
error_log   /var/log/nginx/domains/ error;

location = /favicon.ico {
log_not_found off;
access_log off;

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
location /subfolder{
try_files $uri $uri/ /subfolder/index.php?$args;
location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|css|js)$ {
expires     max;

location ~ [^/]\.php(/|$) {
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
if (!-f $document_root$fastcgi_script_name) {
return  404;

fastcgi_index   index.php;
include         /etc/nginx/fastcgi_params;

error_page  403 /error/404.html;
error_page  404 /error/404.html;
error_page  500 502 503 504 /error/50x.html;

location /error/ {
alias   /home/username/;

location ~* “/\.(htaccess|htpasswd)$” {
deny    all;
return  404;

include     /etc/nginx/conf.d/*;
include     /etc/nginx/conf.d/*;
include     /etc/nginx/conf.d/*;

include     /home/username/conf/web/nginx.domain.conf*;