Contenu | Rechercher | Menus

Annonce

L'équipe des administrateurs et modérateurs du forum vous invite à prendre connaissance des nouvelles règles.
En cas de besoin, vous pouvez intervenir dans cette discussion.

Ubuntu 18.04 LTS
Ubuntu-fr propose des clés USB de Ubuntu et toutes ses « saveurs » ainsi qu'un magnifique t-shirt pour cette toute nouvelle version d'Ubuntu !

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/03/2018, à 12:07

golgoth63

Script d'édition des fichiers du système et lanceur

Bonjour,

je vous propose :
- un script permettant l'édition/modification d'un fichier système et création d'archives pour conserver une trace du changement effectué
- le lanceur (type service) permettant de lancer le script par un clic droit sur le fichier à modifier.

Le lanceur (sous .local/share/kservices5 avec mon OS, à voir sur votre version de linux) :

[Desktop Entry]
Version=1.0
Type=Service
ServiceTypes=KonqPopupMenu/Plugin,inode/directory,application/octet-stream
Icon=kate
Actions=routine_root_edit

[Desktop Action routine_root_edit]
Name=routine_root_edit
Icon=kate
Exec=konsole -e routine_root_edit.sh %f

La ligne "Exec=konsole..." est à modifier en fonction de votre terminal.

Le script :

#!/bin/bash
################################################################################
#
# routine_root_edit.sh
# V1.0
# 
# le chemin d'accès à routine_root_edit.sh (PATH) doit être spécifié dans .profile
#
# --> PATH="chemin/scripts:$PATH"
#
#
# la variable DEF_EDITEUR doit obligatoirement être définie dans .profile ou ci dessous
#
DEF_EDITEUR=kate
#
#
# la variable DEF_REP_ doit être définie dans .profile pour permettre la création d'une archive
# ou ci dessous (sinon, /tmp est utilisé et aucune archive ne sera créée)
#
DEF_REP_=/install/Modif-system_18.04
#
#
# routine_root_edit.sh
#
# --> copie le fichier système passé en argument dans DEP_REP_
#
# --> attribue le fichier copié à $USER avec les droits rw
#
# --> crée une 1ière archive du fichier avant modification
#
# --> édite le fichier
#
# --> crée une 2ième archive du fichier après modification
#
# --> remplace le fichier système par le nouveau fichier
#


# test de la présence d'au moins un argument
if [ $# = 0 ]
then
    echo "Aucun argument recu !" > $HOME/log_routine_root_edit_
    echo "usage : manager.sh arg1 " >> $HOME/log_routine_root_edit_
    exit 1
fi

echo "################################################################################";
echo "";
echo "routine_root_edit.sh";
echo "";
echo "################################################################################";
echo "";
echo "PWD = "$PWD
echo ""

# définition du répertoire tampon si non défini
if [ -z $DEF_REP_ ]
then
    DEF_REP_="/tmp"
    MODE_="ARCHIVE_NO"
else
    MODE_="ARCHIVE_YES"
fi

# analyse de arg1 :
MATCH_=`expr index "$1" '/'`
if [ $MATCH_ = 0 ] # la chaine "/" n'est pas présente dans arg1
then
    # arg1 est le nom du fichier
    NOMFICH_=$1
else
    # arg1 contient le chemin complet
    NOMFICH_=$1
    while [ $MATCH_ != "0" ] # tant que la chaine "/" est présente
    do
        # récupération du nom du fichier
        NOMFICH_=${NOMFICH_:$MATCH_}
        MATCH_=`expr index "$NOMFICH_" '/'`
    done
    LONG_=${#1}-${#NOMFICH_}
    PATH_=${1:0:$LONG_}
fi

# exclusion pour sudoers
if [ $NOMFICH_ = "sudoers" ]
then
    echo "édition de sudoers interdite !"
    echo "créez et utilisez /etc/sudoers.d/XX-sudoers !"
    sleep 10
    exit 1
fi

# copie de arg1 dans DEF_REP_ :
echo -e "-----------> Copie de :\n"$PATH_$NOMFICH_"\ndans --> "$DEF_REP_
sudo /bin/cp $PATH_$NOMFICH_ $DEF_REP_

# si la commande sudo a échoué
if [ -f $DEF_REP_/$NOMFICH_ ]
then
    echo "sudo OK"
else
    echo "echec de la commande sudo !"
    sleep 10
    exit 1
fi

# attribution du fichier et des droits rw à $USER
sudo chown $USER $DEF_REP_/$NOMFICH_
sudo chmod u+rw $DEF_REP_/$NOMFICH_

# création d'une copie du fichier d'origine :
if [ $MODE_ = "ARCHIVE_YES" ]
then
    DATE_=$(date +'%Y-%m-%d-at-%H-%M')
    /bin/cp $DEF_REP_/$NOMFICH_ $DEF_REP_/$NOMFICH_"-"$DATE_"-old"
fi

# édition du fichier temporaire :
echo "-----------> Edition de "$DEF_REP_/$NOMFICH_
$DEF_EDITEUR --new $DEF_REP_/$NOMFICH_ &
wait
echo "";
echo "-----------> Edition terminée"
echo ""
echo ""

# transfert du fichier modifié
echo "-----------> Transfert du fichier"
echo ""
echo "ATTENTION : le fichier système "$NOMFICH_" va être remplacé par le fichier modifié !"
echo "Pour confirmer la modification du fichier source, taper oui :"
read touche;
case $touche in 
    "oui")	
        sudo cp $DEF_REP_/$NOMFICH_ $PATH_$NOMFICH_  # NOTA : l'umask du fichier de destination est préservé
        echo "fichier source modifié"
        echo "archivage du nouveau fichier"
        /bin/mv $DEF_REP_/$NOMFICH_ $DEF_REP_/$NOMFICH_"-"$DATE_"-new"
        ;; 
    *)	
        echo "modification annulée"
        echo "Effacement du fichier temporaire"
        if [ $MODE_ = "ARCHIVE_NO" ]
        then
            /bin/rm $DEF_REP_/$NOMFICH_
        else
            /bin/rm $DEF_REP_/$NOMFICH_
            /bin/rm $DEF_REP_/$NOMFICH_"-"$DATE_"-old"
        fi
        ;; 
esac


# sortie du programme
echo ""
echo "Faites <return> pour quitter...";
read touche;
case $touche in 
    *)	
        echo "End..." 
        ;; 
esac

exit 0

Pensez à adapter en fonction de votre éditeur de texte et du répertoire où vous souhaitez archiver vos modifications.
Le répertoire DEF_REP_ est à positionner de préférence sur un espace disque différent de "/".

Dernière modification par golgoth63 (Le 19/04/2018, à 10:20)


Signaler, confirmer des BUGS Kubuntu 18.04
Un livre de Frédéric Dard à lire : les trolls ! Comme à la maternelle, c'est celui qui dit qui est !
Avis d'un troll : Linux, c'est simple ! A moins de faire le nécessaire pour tout compliquer !

Hors ligne

#2 Le 10/03/2018, à 12:38

Watael

Re : Script d'édition des fichiers du système et lanceur

n'y a-t-il pas une "best practice" qui recommande de ne pas éditer les fichiers systèmes avec une application graphique ? encore plus un traitement de texte ?

àmha, il faudrait ne pas éditer un fichier système de manière "automatique".


eval, c'est mal.

Hors ligne

#3 Le 10/03/2018, à 13:14

golgoth63

Re : Script d'édition des fichiers du système et lanceur

Watael a écrit :

n'y a-t-il pas une "best practice" qui recommande de ne pas éditer les fichiers systèmes avec une application graphique ? encore plus un traitement de texte ?

àmha, il faudrait ne pas éditer un fichier système de manière "automatique".

Remplace "kate" par "/usr/bin/vi" !

De doute façon, tu n'édites qu'une copie du fichier et à aucun moment le fichier en lui même.


Signaler, confirmer des BUGS Kubuntu 18.04
Un livre de Frédéric Dard à lire : les trolls ! Comme à la maternelle, c'est celui qui dit qui est !
Avis d'un troll : Linux, c'est simple ! A moins de faire le nécessaire pour tout compliquer !

Hors ligne

#4 Le 10/03/2018, à 13:53

Watael

Re : Script d'édition des fichiers du système et lanceur

les éditeurs de texte travaillent, eux-mêmes, déjà sur une copie du fichier à traiter...
vim peut être configuré pour faire une sauvegarde avant modification lors de l'enregistrement.

je le dis souvent, mais je vais le répéter :
les variables utilisateurs doivent ne pas être tout en majuscules (c'est réservé, par convention, aux variables d'environnement).
expr est un programme externe inutile, les Remplacements de paramètres font ça plus économiquement.
= est un opérateur lexicographique, pas arithmétique.
case/esac pour deux alternatives... hmm


eval, c'est mal.

Hors ligne

#5 Le 11/03/2018, à 10:58

bruno

Re : Script d'édition des fichiers du système et lanceur

Kate n'est pas un traitement de texte wink C'est un éditeur de texte/code équivalent à gedit.
Kate travaille avec un fichier d'échange (swp), comme vim, ce qui permet entre autres de récupérer le fichier après un plantage. Kate peut être configuré pour créer une copie de sauvegarde avec le préfixe et le suffixe de son choix (par défaut la copie de l'original est enregistrée avec le suffixe ~).
Kate ouvre une boîte de dialogue demandant le mot de passe lorsque l'on tente d'enregistrer un fichier système.

Une bonne pratique consiste à faire systématiquement une copie d'un fichier système d'origine avant de tenter de le modifier.

Du coup je ne comprends pas la démarche du script…

Hors ligne

#6 Le 11/03/2018, à 11:14

golgoth63

Re : Script d'édition des fichiers du système et lanceur

bruno a écrit :

Kate n'est pas un traitement de texte wink C'est un éditeur de texte/code équivalent à gedit.
Kate travaille avec un fichier d'échange (swp), comme vim, ce qui permet entre autres de récupérer le fichier après un plantage. Kate peut être configuré pour créer une copie de sauvegarde avec le préfixe et le suffixe de son choix (par défaut la copie de l'original est enregistrée avec le suffixe ~).
Kate ouvre une boîte de dialogue demandant le mot de passe lorsque l'on tente d'enregistrer un fichier système.

Une bonne pratique consiste à faire systématiquement une copie d'un fichier système d'origine avant de tenter de le modifier.

Du coup je ne comprends pas la démarche du script…

Tu fais comment ta copie et ton édition avec kate pour un fichier en -rw-r----- ?
Et ton fichier en "~" avec un fichier système ???

A quoi sert ce script ?

# --> copie le fichier système passé en argument dans DEP_REP_
#
# --> attribue le fichier copié à $USER avec les droits rw
#
# --> crée une 1ière archive du fichier avant modification
#
# --> édite le fichier
#
# --> crée une 2ième archive du fichier après modification
#
# --> remplace le fichier système par le nouveau fichier

Dernière modification par golgoth63 (Le 11/03/2018, à 11:58)


Signaler, confirmer des BUGS Kubuntu 18.04
Un livre de Frédéric Dard à lire : les trolls ! Comme à la maternelle, c'est celui qui dit qui est !
Avis d'un troll : Linux, c'est simple ! A moins de faire le nécessaire pour tout compliquer !

Hors ligne

#7 Le 11/03/2018, à 12:31

bruno

Re : Script d'édition des fichiers du système et lanceur

golgoth63 a écrit :

Tu fais comment ta copie et ton édition avec kate pour un fichier en -rw-r----- ?

Euh le fichier m'appartient ou pas ? wink
Je suppose que tu veux dire que c'est un fichier appartenant à root.
Je l'ouvre, je le modifie et j'enregistre. S'il appartient à root, kate me demande le mot de passe, et me crée automatiquement une copie de l'original avec le suffixe ~

Sinon j'ouvre le fichier en tant que root (sudo vim, sudo nano, etc.)

Je ne vois aucune justification à cette procédure alambiquée.


golgoth63 a écrit :

Et ton fichier en "~" avec un fichier système ???

Oui ? Quel est le problème ? Si  ~ ne te convient pas c'est configurable.

Hors ligne

#8 Le 11/03/2018, à 14:54

golgoth63

Re : Script d'édition des fichiers du système et lanceur

Trop fort !
Moi je n'y arrive pas. Quand Dolphin affiche le cadenas sur l'icône d'un fichier, Kate refuse de l'ouvrir.
Et quand le fichier est accessible en lecture pour tous, Kate ne peut pas écrire le fichier ~.

Idiot ce script, je clic droit sur le fichier à modifier alors qu'il est plus simple d'ouvrir un terminal, faire un sudo cp, puis sudo "editeur" et encore un sudo cp si je veux conserver une trace de la modif dans une partition qui ne serait pas touchée si je réinstalle ou modifie l'OS.

Dernière modification par golgoth63 (Le 11/03/2018, à 15:04)


Signaler, confirmer des BUGS Kubuntu 18.04
Un livre de Frédéric Dard à lire : les trolls ! Comme à la maternelle, c'est celui qui dit qui est !
Avis d'un troll : Linux, c'est simple ! A moins de faire le nécessaire pour tout compliquer !

Hors ligne

#9 Le 11/03/2018, à 15:14

bruno

Re : Script d'édition des fichiers du système et lanceur

Au temps pour moi. Je n'avais pas compris.
Quand un fichier de configuration a des droits aussi restreints (ne peut être lu que par root ou un autre utilisateur système), ce qui est assez rare, c'est que ce fichier ne doit être en aucun cas modifié directement par root ou autre quelque soit la procédure.
Ce sont des fichiers particuliers qui sont gérés par un processus ou un démon du système, exemple :

/etc/sudoers ⇒ modifiable via visudo
/etc/shadow ⇒ modifiables par les outils de gestions des utilisateurs

Si un fichier ne peut être lu que par root ou par l'utilisateur système tartempion ce n'est pas pour rien ! Cela signifie bien qu'un utilisateur standard ne doit pas intervenir manuellement dessus et encore moins inventer des procédures plus ou moins tordues pour le modifier.

Au fait, est-ce que ton script remet les bon propriétaire/groupe et droits d'accès sur les fichiers système qu'il modifie ?

Dernière modification par bruno (Le 11/03/2018, à 15:33)

Hors ligne

#10 Le 11/03/2018, à 15:26

golgoth63

Re : Script d'édition des fichiers du système et lanceur

bruno a écrit :

Si un fichier ne peut être lu que par root ou par l'utilisateur système tartempion ce n'est pas pour rien ! Cela signifie bien qu'un utilisateur standard ne doit pas intervenir manuellement dessus et encore moins inventer des procédures plus ou moins tordues pour le modifier.

Ca tombe bien puisqu'un utilisateur standard ne pourra rien éditer avec ce script.

bruno a écrit :

Au fait, est-ce que ton script remet les bon propriétaire/groupe et droits d'accès sur les fichiers système qu'il modifie ?

Teste le sur de faux fichiers.

sudo touch /etc/"xxxxxxxxxx"
sudo chmod xxx /etc/"xxxxxxxxxx"

Signaler, confirmer des BUGS Kubuntu 18.04
Un livre de Frédéric Dard à lire : les trolls ! Comme à la maternelle, c'est celui qui dit qui est !
Avis d'un troll : Linux, c'est simple ! A moins de faire le nécessaire pour tout compliquer !

Hors ligne

#11 Le 11/03/2018, à 15:33

bruno

Re : Script d'édition des fichiers du système et lanceur

Un utilisateur standard est un utilisateur qui n'est pas un utilisateur système. C'est un utilisateur avec un login et un shell.
Le seule restriction c'est que dans ton script il y a utilisation de sudo (ce qui n'est pas propre, mais c'est une autre histoire).
Rien n'empêche un utilisateur standard membre du groupe sudo de modifier directement un des deux fichiers que j'indiquais : /etc/sudoers ou pis /etc/shadow.

Hors ligne

#12 Le 11/03/2018, à 16:02

golgoth63

Re : Script d'édition des fichiers du système et lanceur

bruno a écrit :

.....dans ton script il y a utilisation de sudo (ce qui n'est pas propre, mais c'est une autre histoire)......

J'attends ta solution avec impatience .... et pas un sudo "le script"

Quant à l'utilisateur standard membre du groupe sudo, un admin en fait puisqu'il aura accès à tout ?

Dernière modification par golgoth63 (Le 11/03/2018, à 16:04)


Signaler, confirmer des BUGS Kubuntu 18.04
Un livre de Frédéric Dard à lire : les trolls ! Comme à la maternelle, c'est celui qui dit qui est !
Avis d'un troll : Linux, c'est simple ! A moins de faire le nécessaire pour tout compliquer !

Hors ligne

#13 Le 11/03/2018, à 16:09

Roschan

Re : Script d'édition des fichiers du système et lanceur

bruno a écrit :

Rien n'empêche un utilisateur standard membre du groupe sudo de modifier directement un des deux fichiers que j'indiquais : /etc/sudoers ou pis /etc/shadow.

Ce qu'ils pourraient faire de toutes manières avec "sudo nano", non ?

Hors ligne

#14 Le 11/03/2018, à 16:15

bruno

Re : Script d'édition des fichiers du système et lanceur

@golgoth63 : si tu ne veux pas comprendre la différence entre un utilisateur standard et un utilisateur système, je n'y peux rien.

@Roschan : on est bien d'accord, d'où l'inutilité de ce script.

Hors ligne