OVH Cloud OVH Cloud

Effacer la derniere ligne d'un fichier

25 réponses
Avatar
Lionel
Bonjour,

Je veux programmer dans un cron l'actualisation du
fichier /etc/ssh/ssd_config ou je mets à la fin une ligne AllowUsers .....
avec la liste des utilisateurs ayant modifié le mot de passe par défaut du
serveur. J'ai fait un script qui génere la liste des utilisateurs dans un
fichier, je voudrais faire un truc du style:

"efface la derniere ligne de /etc/ssh/ssd_config"
echo -h "AllowUsers " >> /etc/ssh/ssd_config
cat fichier >> /etc/ssh/ssd_config
/etc/init.d/ssh restart

Problème: je n'ai pas trouvé comment faire "efface la derniere ligne
de /etc/ssh/ssd_config"

Merci pour votre aide.

Lionel.

10 réponses

1 2 3
Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:dqtvtm$30ei$,
*Nicolas George* tapota sur f.c.o.l.configuration :

Je n'aime pas tellement. D'abord, il faudrait faire attention à ne pas
prendre un groupe qui a déjà une certaine signification pour le système
installé, histoire de ne pas fournir de privilèges qu'on ne voulait pas
fournir.


C'est pour cela que j'ai donné comme exemple le groupe 'sshd' car il
n'existe pas par défaut sur les distributions.

Ensuite, je trouve assez bof l'idée d'un groupe auquel tous les
utilisateurs appartiennent (ce qui est ultimement le cas dans ce qu'a
décrit le posteur original).


Je ne comprends pas bien ta remarque ici. Quelque part tu remets un peu en
cause le principe des groupes. Il existe bien le groupe 'wheel' pour
n'autoriser que les utilisateurs qui en sont membres à pouvoir se logger en
root. Il existe les groupes 'audio' et 'video' pour autoriser les
utilisateurs qui ont le droit d'accéder aux périphériques audio et video. Il
existe le groupe 'cron' pour autoriser ceux qui peuvent éditer leur crontab.
Alors pourquoi n'existerait-il pas un groupe 'sshd' pour n'autoriser que
ceux qui ont le droit de se logger en ssh sur une machine ?

En fait, la bonne solution serait d'utiliser un module PAM pour ça,


Pourquoi pas.

mais je n'ai aucune idée de s'il existe un module adapté.


Par exemple le module pam_listfile qui permet de mettre dans une liste les
utilisateurs autorisés ou refusés selon comment est configuré le module.

--
Sébastien Monbrun aka TiChou

Avatar
Nicolas George
Sébastien Monbrun aka TiChou wrote in message
:
Je ne comprends pas bien ta remarque ici. Quelque part tu remets un peu en
cause le principe des groupes. Il existe bien le groupe 'wheel' pour
n'autoriser que les utilisateurs qui en sont membres à pouvoir se logger en
root. Il existe les groupes 'audio' et 'video' pour autoriser les
utilisateurs qui ont le droit d'accéder aux périphériques audio et video. Il
existe le groupe 'cron' pour autoriser ceux qui peuvent éditer leur crontab.
Alors pourquoi n'existerait-il pas un groupe 'sshd' pour n'autoriser que
ceux qui ont le droit de se logger en ssh sur une machine ?


Si j'ai bien compris la problématique originale, il est question d'autoriser
SSH aux utilisateurs qui ont changé leur mot de passe original. Ce qui,
quelque part, veut dire que tous les utilisateurs sont autorisés à utiliser
SSH. L'appartenance au groupe devient alors uniquement un flag « a changé
son mot de passe », ce qui ne correspond vraiment pas à la sémantique d'un
groupe.

D'autre part, je n'avais pas remarqué ce problème avec ta proposition au
départ, tu remarqueras que le problème est seulement déplacé, de la
ré-écriture de sshd_config à la réécriture de group, ce qui n'est
certainement pas mieux.

Par exemple le module pam_listfile qui permet de mettre dans une liste les
utilisateurs autorisés ou refusés selon comment est configuré le module.


Pas forcément. Je dirais plutôt un module qui vérifie la présence d'un flag
accompagnant le mot de passe, puisque c'est de ça qu'il est question. Comme
PAM est là pour le login par réseau _et_ pour le changement de mot de passe,
c'est tout bénéfice.

Avatar
David
Le Sat, 21 Jan 2006 16:21:59 +0100, Lionel a écrit :
Problème: je n'ai pas trouvé comment faire "efface la derniere ligne de
/etc/ssh/ssd_config"


C'est facile, cf cet exemple avec /etc/passwd:

head -$(expr $(wc -l /etc/passwd | cut -d' ' -f1) - 1) /etc/passwd

après tu mets ça dans une fonction :

supprimeFinFichier() {
head -$(expr $(wc -l $1 | cut -d' ' -f1) - $2) $1 > /tmp/$1.$$
mv /tmp/$1.$$ $1
}

Avatar
David
Le Sat, 21 Jan 2006 15:32:32 +0000, Luc Habert a écrit :
{
head -n -1 /etc/ssh/sshd_config
cat fichier
} > /etc/ssh/sshd_config.new

mv /etc/ssh/sshd_config /etc/ssh/sshd_config


Puissant ! Mieux que ma solution :)

Avatar
Jacques Lav!gnotte (Drop Dr NO)
Bonjour,

"efface la derniere ligne de /etc/ssh/ssd_config"


cat /etc/ssh/ssd_config | sed '$d'


Jacques

Avatar
Jacques Lav!gnotte (Drop Dr NO)
Bien sûr avec des grep, sed, awk et autres on doit pouvoir y arriver
pour un T.P, mais dans la vraie vie... ;-)


La vraie vie Unix c'est grep, sed, et awk quand on ne peut pas faire
autrement.

Jacques

Avatar
lhabert
Drop Dr NO :

cat /etc/ssh/ssd_config | sed '$d'


uuoc

Avatar
Sébastien Monbrun aka TiChou
Dans le message <news:dqufqm$4et$,
*Jacques Lav!gnotte (Drop Dr NO)* tapota sur f.c.o.l.configuration :

"efface la derniere ligne de /etc/ssh/ssd_config"


cat /etc/ssh/ssd_config | sed '$d'


Et encore UUoC ! ;-)

--
Sébastien Monbrun aka TiChou


Avatar
R12y
Jacques Lav!gnotte (Drop Dr NO) :

La vraie vie Unix c'est grep, sed, et awk quand on ne peut pas faire
autrement.


Meuh non: Ocaml, Python, C et zsh. Faut se moderniser les gars ;-)

--

http://www.onirik.net/article.php3?id_article7
http://www.maemo.org/platform/docs/howtos/howto_new_application.html
http://www.linuxdevices.com/files/article057/index.html

Avatar
Lionel
Merci à tous pour vos réponses.

En compilant ces différentes infos j'ai finalement résolu mon problème.

Comme suggéré par Sébastien, j'ai crée un groupe sshd qui est dans
AllowsGroups du sshd_config, ça m'évite d'avoir à relancer ssh à chaque
fois. De plus, pour une raison que j'ignore le fichier sshd_config
n'accepte pas de ligne de plus de 1024 caracteres, je devais faire 2 lignes
AllowUsers ce qui me compliquait la tâche.

le fichier /ect/group est généré à partir d'un fichier group.orig auquel je
rajoute le groupe sshd puis le contenu du fichier "changes" qui est la
liste des utilisateurs ayant changé leur mot de passe.

#!/bin/bash
cat /dev/null > /root/changes && /root/testmdp.sh >> /root/changes
cat /dev/null > /root/fin_group
echo -n "sshd:x:5004:" >> /root/fin_group
for i in `cat /root/changes |grep chang |cut -d " " -f1` ; do echo -n $i
/root/fin_group; echo -n "," >> /root/fin_group; done
cat /etc/group.orig > /etc/group


cat /root/fin_group >> /etc/group


1 2 3