rss
twitter
  • Showcase
  • Carrières
  • Support
  • GitLab
  • Espace client
  • Contact

Crontab avec Sudoers pour Apache (sous CentOS)

0

INDEX

Récupérer les tweets chaque heure dans un fichier JSON

L’environnement

[root@host monclient]# uname -a
Linux hostname.monclient.com 2.6.32-16-pve #1 SMP Mon Oct 22 08:38:13 CEST 2012 x86_64 x86_64 x86_64 GNU/Linux
[root@host monclient]# cat /etc/issue
CentOS release 5.5 (Final)
Kernel \r on an \m

Le path

[root@host monclient]# pwd
/usr/local/www/monclient

Le user : apache

[root@host monclient]# nano whoami.php
<h1><?php echo exec('whoami') ?></h1>

img1

 

Bon OK il semble clair que c’est bien le user apache qui fait tourner le serveur Apache…

Le script à faire tourner

<?php
ini_set('display_errors', 1);
// create file
$twitterCachedFile = "twitter.json";
if (file_exists($twitterCachedFile)) {
        unlink($twitterCachedFile);
}
// connect to the twitter api
require_once('twoauth/twitteroauth/twitteroauth.php');
define('CONSUMER_KEY', '');
define('CONSUMER_SECRET', '');
define('ACCESS_TOKEN', '');
define('ACCESS_TOKEN_SECRET', '');
$twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET);
$twitter->host = "https://api.twitter.com/1.1/";
// get the monclient's timeline
$json = $twitter->get("statuses/user_timeline.json?count=30&screen_name=monclient");
// create and populate a json copy
$fd = fopen($twitterCachedFile, "w+");
fwrite($fd, json_encode($json));
fclose($fd);
?>

Compte tenu des restrictions de sécurité en place sur la machine, le script nécessite un accès root pour créer/modifier/supprimer des fichiers du filesystem.

sudoers ?

Les autorisations de sudo sont définies dans le fichier /etc/sudoers. Ce fichier doit être édité à l’aide de la commande visudo.

https://fr.wikipedia.org/wiki/Sudoers

Nous allons demander à sudoers d’autoriser un script .sh à appeler un ou plusieurs scripts PHP.

Création d’un script bash basique

[root@host monclient]# nano get_twitter.sh
#!/usr/bin/php
<?php
include('get_twitter.php');
exit();
?>

Puis donner les droits d’exécution :

[root@host monclient]# chmod +x get_twitter.sh

Et on teste :
[root@host monclient]# ./get_twitter.sh
ok !

Exécution en root sans password

ATTENTION : le fichier des sudoers doit impérativement être modifié avec la commande visudo !!!

On trouve actuellement en fin de fichier les permissions suivantes :

nagios ALL= (root) NOPASSWD: /usr/lib64/nagios/plugins/check_raid
Defaults:nagios !requiretty
root ALL=(ALL) ALL

On ajoute celle pour notre script (en premier dans la liste) :

apache ALL= (root) NOPASSWD: /usr/local/www/monclient/get_twitter.sh

Rappel : commandes basiques de vi

  • i = insert
  • esc = quitter le mode insert
  • : = saisie de commande
  • w = commande write
  • q = commande quit

En cas d’erreur, visudo vous préviendra :

[root@host monclient]# visudo
>>> /etc/sudoers: syntax error near line 100 <<<
What now?
Options are:
  (e)dit sudoers file again
  e(x)it without saving changes to sudoers file
  (Q)uit and save changes to sudoers file (DANGER!)
What now? x

Tâche programmée (crontab)

Pour lister les taches existantes :

[root@host monclient]# crontab -l
28 21 * * * /etc/webmin/cron/tempdelete.pl
45 * * * * /etc/init.d/daemon_intf restart 1>/dev/null 2>/dev/null

Pour éditer le crontab :

[root@host monclient]# crontab -e

On ajoute cette ligne pour une exécution du script toutes les heures :

0 * * * * /usr/local/www/monclient/get_twitter.sh

Cette fois encore, la syntaxe de vi s’applique.
Une fois vos modifications enregistrées :

crontab: installing new crontab

Et voilà…

DATE 14 Nov 2012
by : Germain
Author / Auteur

Social Share / Partager

    Leave a Reply / Répondre Annuler la réponse

    *
    *

    More in Sysadmin : Linux, Apache, GIT

    • Recevoir un mail lors de la connexion root à un serveur
    • Maildev : tester l'envoi de mails durant ses développements
    • Quel php.ini (MAMP ou Linux), quelle valeur de phpinfo() ?
    • Pense-bête Apache Server-Side Includes (SSI)
    • Ubuntu 14 chroot sftp et rsync

    Search the blog

    Blog categories

    • Workflow (1)
    • Front-end : HTML, CSS (13)
    • Front-end : javascript, jQuery (33)
    • Back-end : PHP, CMS (42)
    • Back-end : SQL, MySQL (20)
    • Sysadmin : Linux, Apache, GIT (75)
    • Designers : tools, advice (2)
    • Desktop : OS X (37)
    • Desktop : Microsoft (12)
    • Uncategorized (8)

    ITALIC™ Resources

    • Paramètres de connexion au serveur mail
    • Graphistes : séduire un développeur web
    • Dév front : nos bonnes pratiques
    • Mailing : nos (bonnes ?) pratiques
    • Environnement de travail Mac

    Recent posts

    • Autoriser le chargement de contenus mixtes non-https dans Chrome (Mac)
    • Afficher les logs MySQL
    • Recevoir un mail lors de la connexion root à un serveur
    • Changer l’interclassement de plusieurs tables MySQL à la fois (ou presque
    • Maildev : tester l’envoi de mails durant ses développements
    © 2008-2017 ITALIC™ • 8 bis rue Abel • 75012 PARIS • Tel +33 (0)1 48 44 46 35 • RCS PARIS 508 228 772 • Powered by WordPress & GoodLayers
    Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site web.
    Cookie settingsACCEPTER
    Manage consent

    Privacy Overview

    This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
    Necessary
    Toujours activé
    Necessary cookies are absolutely essential for the website to function properly. This category only includes cookies that ensures basic functionalities and security features of the website. These cookies do not store any personal information.
    Non-necessary
    Any cookies that may not be particularly necessary for the website to function and is used specifically to collect user personal data via analytics, ads, other embedded contents are termed as non-necessary cookies. It is mandatory to procure user consent prior to running these cookies on your website.
    Enregistrer & appliquer