Contenu | Rechercher | Menus

Annonce

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 17/04/2012, à 10:49

soume86

Changer le shell d'un user [RESOLU]

Bonjour à tous,

J'ai mon serveur (sans interface graphique) chez moi et je voudrais donner un accès limiter à un utilisateur sur ce serveur.

Le but c'est que si l'utilisateur se logue sur le serveur, la console d'accueille lui pose un certain nombre de question, du genre:

Voulez vous redémarrer la machine? appuyer sur X
Voulez vous redémarrer le service httpd? appuyer sur Y

Et que cet utilisateur ne pourra rien faire d'autre que d'accéder à cette console?

Par contre, je sais pas par où commencer.
Est ce que quelqu'un aurait une idée?

Merci d'avance.

Dernière modification par soume86 (Le 07/05/2012, à 09:05)

Hors ligne

#2 Le 17/04/2012, à 12:23

serged

Re : Changer le shell d'un user [RESOLU]

Tu te fais un script aux petits oignons :

#!/bin/bash
echo Maintenance.
echo Voulez vous ;
echo redémarrer la machine? appuyer sur X
echo redémarrer le service httpd? appuyer sur Y
echo -n Votre choix:
read rep
case $rep in
 x|X) reboot now
 y|Y) /etc/init.d/apache2 restart
esac

Et comme shell à cet utilisateur, tu lui mets ce script.


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#3 Le 17/04/2012, à 12:46

Bousky

Re : Changer le shell d'un user [RESOLU]

Sauf qu'il n'aura pas les droits pour relancer la machine ou apache. Tu peux utiliser sudo pour ces commandes (sous la forme « sudo reboot now ») et modifier le fichier sudoers (en utilisant la commande visudo, pas directement !) pour qu'il en ait le droit de le faire en root sans mot de passe en ajoutant :

<user> ALL = (root) NOPASSWD: reboot now "", /etc/init.d/apache2 restart ""

Dernière modification par Bousky (Le 17/04/2012, à 12:55)


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#4 Le 17/04/2012, à 12:54

johndo

Re : Changer le shell d'un user [RESOLU]

autre problématique à gérer --> le path du user pour executer les commandes

Hors ligne

#5 Le 17/04/2012, à 12:56

soume86

Re : Changer le shell d'un user [RESOLU]

Merci pour vos réponses rapides,

Mais comment mettre un script comme shell par défaut à un user ?
C’est dans le fichier /etc/group ?

Hors ligne

#6 Le 17/04/2012, à 12:57

Bousky

Re : Changer le shell d'un user [RESOLU]

Il me semble que le path est initialisé pour les scripts, mais je peu me tromper. Si ce n'est pas le cas, il faut ajouter au début du script :

export PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#7 Le 17/04/2012, à 13:10

soume86

Re : Changer le shell d'un user [RESOLU]

J’ai comprit le principe mais la démarche est un peu flou.

Le script, je le mets dans quel répertoire ?
Comment je fais pour le lancer?
Faut faire en sorte quel tourne en permanent ?
Qu’est ce que l’utilsateur verra à sa connexion ?

Hors ligne

#8 Le 17/04/2012, à 13:18

serged

Re : Changer le shell d'un user [RESOLU]

Droit root :
Il est possible de donner tous les droits à cet utilisateur particulier (en lui donnant l' id 0). Il ne peut utiliser que deux commandes...

Path :
On peut mettre le chemin absolu des commandes :

/sbin/reboot now

Démarrer directement...
Modifier le /etc/passwd pour qu'il y ait quelque chose comme ça :

utilisateur:x:0:0::/home/utilisateur:/home/utilisateur/monscript.sh

Ou le créer directement par la commande adduser :

sudo adduser --shell /home/utilisateur/monscript.sh utilsateur

Ou après coup par usermod --shell


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#9 Le 17/04/2012, à 13:27

Bousky

Re : Changer le shell d'un user [RESOLU]

soume86 a écrit :

Le script, je le mets dans quel répertoire ?

Où tu veux, il faut juste que l'utilisateur en question y ait accès.

Comment je fais pour le lancer?

En le mettant à la place du shell de l'utilisateur :

sudo chsh -s <hemin/vers/le/script> <user>

Faut faire en sorte quel tourne en permanent ?

Non, il est lancé à chaque connexion.

Qu’est ce que l’utilsateur verra à sa connexion ?

Si tu utilise le script de serged tel-quel :

Maintenance.
Voulez vous ;
redémarrer la machine? appuyer sur X
redémarrer le service httpd? appuyer sur Y
Votre choix:Y
 * Restarting web server apache2

Cela étant, j'utiliserais plutôt la commande select de bash qui est faite pour créer des menus.


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#10 Le 17/04/2012, à 13:58

soume86

Re : Changer le shell d'un user [RESOLU]

Donc voilà:

J'ai déplacé le script dans le home du user:

mv script.sh /home/admin/
vi /etc/passwd
admin:x:501:501::/home/admin:/home/admin/script.sh

Test en local:

su admin
Maintenance.
Voulez vous ;
redémarrer la machine? appuyer sur X
redémarrer le service httpd? appuyer sur Y
Votre choix:Y

Et j'ai l'erreur suivante:

rm: impossible de supprimer « /var/run/httpd/httpd.pid »: Permission non accordée

rm: impossible de supprimer « /var/lock/subsys/httpd »: Permission non accordée
rm: impossible de supprimer « /var/run/httpd/httpd.pid »: Permission non accordée
Démarrage de httpd : (13)Permission denied: make_sock: could not bind to address 192.168.1.246:80
no listening sockets available, shutting down
Unable to open logs                                                           [ÃCHOUÃ]

J’ai fait un

visudo –f /etc/sudoers
admin ALL = (root) NOPASSWD: reboot now "", /etc/init.d/httpd restart ""

Et le message d'erreur:

>>> /etc/sudoers: syntax error near line 115 <<<
What now?

Des idées?

Hors ligne

#11 Le 17/04/2012, à 14:25

Bousky

Re : Changer le shell d'un user [RESOLU]

soume86 a écrit :

Et j'ai l'erreur suivante:

rm: impossible de supprimer « /var/run/httpd/httpd.pid »: Permission non accordée

rm: impossible de supprimer « /var/lock/subsys/httpd »: Permission non accordée
rm: impossible de supprimer « /var/run/httpd/httpd.pid »: Permission non accordée
Démarrage de httpd : (13)Permission denied: make_sock: could not bind to address 192.168.1.246:80
no listening sockets available, shutting down
Unable to open logs                                                           [ÃCHOUÃ]

Tu as ajouté sudo devant les commandes ?

J’ai fait un

visudo –f /etc/sudoers
admin ALL = (root) NOPASSWD: reboot now "", /etc/init.d/httpd restart ""

Et le message d'erreur:

>>> /etc/sudoers: syntax error near line 115 <<<

Tu as 115 lignes dans ton sudoers ?!!! Essaie sans « (root) ».


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#12 Le 17/04/2012, à 14:33

johndo

Re : Changer le shell d'un user [RESOLU]

soume86 a écrit :
su admin

plutôt que su admin, mets su - admin
le "-" a son importance.

Bousky a écrit :

Il me semble que le path est initialisé pour les scripts, mais je peu me tromper. Si ce n'est pas le cas, il faut ajouter au début du script :

Pour moi non, le PATH est définie via les différents fichier lus / chargés (.bashrc & co) au démarrage du bash.
Sans cela, le contexte n'est pas définie.
(c'est comme la crontab)

Hors ligne

#13 Le 17/04/2012, à 14:41

soume86

Re : Changer le shell d'un user [RESOLU]

Je l'avais mit à la fin et apparemment il faut le mettre juste dessous de

 root    ALL=(ALL)       ALL

Par contre j'ai toujours l'erreure suivante:

Votre choix:y
rm: impossible de supprimer « /var/run/httpd/httpd.pid »: Permission non accordée

rm: impossible de supprimer « /var/lock/subsys/httpd »: Permission non accordée
rm: impossible de supprimer « /var/run/httpd/httpd.pid »: Permission non accordée
Démarrage de httpd : (13)Permission denied: make_sock: could not bind to address [::]:80
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs                                                           [ÃCHOUÃ]

Hors ligne

#14 Le 17/04/2012, à 15:16

soume86

Re : Changer le shell d'un user [RESOLU]

Le contenu de mon script:

#!/bin/bash

export PATH='/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin'

echo " Vous etes en mode Maintenance"
echo "Pour redemarrer la machine, appuyer sur X"
echo "Pour  arreter apache, appuyer sur T"
echo -n Votre choix:

read reponse

case $reponse in
        x|X) reboot now;;
        t|T) /etc/init.d/httpd restart;;
esac

Dans sudoers:

sudo visudo
admin ALL=(root) NOPASSWD:/etc/init.d/httpd restart

Dans /etc/passwd:
admin:x:501:501::/home/admin:/home/admin/script.sh

Pour les tests:

su - admin
ou
su admin

Votre choix:t
rm: impossible de supprimer « /var/run/httpd/httpd.pid »: Permission non accordée

rm: impossible de supprimer « /var/lock/subsys/httpd »: Permission non accordée
rm: impossible de supprimer « /var/run/httpd/httpd.pid »: Permission non accordée

Des idées??

Hors ligne

#15 Le 17/04/2012, à 15:26

johndo

Re : Changer le shell d'un user [RESOLU]

soume86 a écrit :

case $reponse in
        x|X) reboot now;;
        t|T) /etc/init.d/httpd restart;;
esac

case $reponse in
        x|X) sudo reboot now;;
        t|T) sudo /etc/init.d/httpd restart;;
esac

Hors ligne

#16 Le 17/04/2012, à 15:27

serged

Re : Changer le shell d'un user [RESOLU]

Il faut que "admin" ait les droits administrateurs
Tu donnes l'id 0, groupe 0, à ton "admin" en éditant directement le fichier /etc/passwd. Ton admin est alors un équivalent de root.

Si tu trouves que c'est un peut gonflé :
Tu mets "sudo" devant les deux commandes pour relancer Apache ou redémarrer et :
- Ajouter "admin" au groupe "admin"
- L'utilisateur devra taper une nouvelle fois son mot de passe. Si tu ne veux pas, il faut un peut bidouiller le fichier sudoers voir la doc.

Tu devrais aussi, au début du script, faire un test si tu es sur une tty (et non à distance via ssh, par exemple).

if (tty|grep -q "/dev/tty")
then
 # dérouler le script...
else
 echo "Il faut être sur la console"
fi

Dernière modification par serged (Le 17/04/2012, à 15:28)


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#17 Le 17/04/2012, à 15:50

soume86

Re : Changer le shell d'un user [RESOLU]

J'ai donné au user admin l'id 0 et sa marche sur la machine locale.
C'est à dire quand je me connecte en tant que root:

login: root
Password:mdp
[root@root~]# su admin

Par contre si j'essaie de me connecter en tant qu'admin depuis un tty, sa marche pas!!
Pas de message d'erreur ni rien.

Y'a quelques choses à rajouter pour que sa marche?

Hors ligne

#18 Le 17/04/2012, à 16:11

Bousky

Re : Changer le shell d'un user [RESOLU]

soume86 a écrit :

J'ai donné au user admin l'id 0

C'est moche, très moche. Et certaines applications peuvent râler…


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#19 Le 17/04/2012, à 16:22

soume86

Re : Changer le shell d'un user [RESOLU]

C'est ce que je voulais éviter mais y'a pas le choix, non, si??

Tu me conseilles quoi Bousky?

Sinon comment faut faire pour que sa marche depuis 1 tty??

Hors ligne

#20 Le 17/04/2012, à 16:40

Bousky

Re : Changer le shell d'un user [RESOLU]

soume86 a écrit :

C'est ce que je voulais éviter mais y'a pas le choix, non, si??
Tu me conseilles quoi Bousky?

Ajoute sudo devant les commandes qui ont besoin d'être lancé en tant que root.


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#21 Le 17/04/2012, à 16:45

soume86

Re : Changer le shell d'un user [RESOLU]

Déjà sa me donne un mot de passe (sa va c pas méchant) mais j'ai l’erreur suivante:

admin is not allowed to run sudo on localhost. This incident will be reported.

??

Hors ligne

#22 Le 17/04/2012, à 16:51

Bousky

Re : Changer le shell d'un user [RESOLU]

Tu peux poster ton fichier sudoers ?


Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#23 Le 17/04/2012, à 16:59

soume86

Re : Changer le shell d'un user [RESOLU]

Le contenu du fichier sudoers:


Defaults    requiretty
Defaults   !visiblepw
Defaults    always_set_home
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

root    ALL=(ALL)       ALL
admin ALL=(ALL) NOPASSWD:/etc/init.d/httpd restart

Tout le reste est commenté.

Hors ligne

#24 Le 17/04/2012, à 17:13

Bousky

Re : Changer le shell d'un user [RESOLU]

Il faut une virgule entre les commandes dans sudoers :

admin ALL=(ALL) NOPASSWD:/etc/init.d/httpd, restart

Linux qui plante complètement ? Plus rien ne répond ? On peut toujours le redémarrer proprement :
Alt + SysRq + REISUB (Retourne En Islande Sur Un Bateau !)

Hors ligne

#25 Le 17/04/2012, à 18:29

soume86

Re : Changer le shell d'un user [RESOLU]

Merci, je verrais sa demain et je vous tiendrais au courant!

Hors ligne