Comment exécuter une application avec sudo sans mot de passe?

40

... mais toujours requis pour les applications nécessitant des privilèges d'administrateur?

Afin de permettre ce qui suit:

$ apache2ctl restart
httpd not running, trying to start
(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

$ sudo !!
sudo apache2ctl restart             #no password asked
$                                   #works!

Pour référence, j'ai vu cette configuration sur les instances e3 d'Amazon

Une idée?

tutuca
la source
Ceci est un excellent tutoriel sur les forums qui décrit en détail la création d'un fichier séparé pour spécifier les programmes que vous utilisez couramment. Et c'est une bonne idée pour des raisons de sécurité.
Todd Partridge 'Gen2ly'

Réponses:

51

Vous devez éditer le fichier sudoers. Sachez que le succès vous donne un système moins sécurisé et qu'une panne peut entraîner une perte de vitesse. TOUJOURS éditer le fichier sudoers avec sudo visudo, car visudo vérifie les erreurs et n'enregistre pas le fichier s'il en trouve.

C'est une mauvaise idée de donner à tout le droit de s'exécuter en tant qu'utilisateur root sans mot de passe; laissez donc simplement le fichier exécutable dont vous avez besoin (apache2ctl); ajoutez ce qui suit au bas du fichier:

YOURNAME ALL = NOPASSWD: /usr/bin/apache2ctl

Vous pouvez remplacer le chemin d'accès à un fichier exécutable par "ALL" si vous le souhaitez, ce qui vous permet d'obtenir un mot de passe sudo complet.

Remplacez YOURNAME par votre nom d'utilisateur et appuyez sur Ctrl+ Xpour enregistrer et quitter. Si une erreur survient, il vous proposera quand même de revenir, de modifier ou de sauvegarder.

Assurez -vous d’utiliser le chemin complet vers un exécutable:
c.-à-d. /usr/bin/apache2ctlau lieu de juste apache2ctl. Ceci est important car, sans indiquer explicitement le chemin, sudo autorisera tout programme nommé apachectl situé sur le chemin actuel de l'utilisateur à s'exécuter en tant que root.

Mark Paskal
la source
3
Notez que %YOURNAMEcela donnera l'autorisation au groupe nommé comme votre utilisateur, ce qui ne pose normalement pas de problème, car chaque utilisateur normal possède un groupe portant le même nom sur les systèmes Ubuntu. Pour donner la permission à votre utilisateur, spécifiez YOURNAMEsans le%.
Daniel Werner
Y a-t-il un moyen de plus de restructuration (certaines fonctions de l'exécutable seulement)
3pic le
1
Poste vieux, mais je certainement terminer cette réponse en limitant l'entrée des sudoers à un nom d' hôte particulier (si possible), et soit à des arguments donnés o à aucun argument du tout (ci - dessous apache2ctl), comme suit: YOURNAME YOUR-HOSTNAME = NOPASSWD: /usr/bin/apache2ctl <specific arg | "">. --- Dans tous les cas, man 5 sudoersc'est la référence à consulter.
Cbhihe
25

La vraie réponse à cette question peut être compliquée car sudo est très puissant et peut être configuré pour faire des choses sympas. Ceci est expliqué en détail dans la documentation .

La réponse courte est exécutée sudo visudodans un terminal. Si c'est la première fois que vous exécutez visudo, il vous sera demandé quel éditeur vous préférez. nano est généralement considéré comme le plus facile à utiliser, mais choisissez l'éditeur avec lequel vous êtes le plus à l'aise / familier. Vous devrez décider à qui vous voulez donner accès; cela peut être ALLpour tout le monde (une très mauvaise idée) , un utilisateur ou un groupe de systèmes. Les groupes sont précédés du signe%. Par exemple, si vous voulez donner à tous les steroid_usersmembres du groupe les privilèges root sans qu'un mot de passe soit nécessaire pour toutes les commandes, ajoutez-les:

%steroid_users ALL=(ALL) NOPASSWD: ALL

à la fin du fichier, quittez et enregistrez le fichier. Si tout va bien et que vous êtes membre du groupe steroid_users, vous pourrez émettre sudo *some-command*sans avoir à vous soucier de la nécessité de saisir votre mot de passe.

N'oubliez pas que toute personne ayant accès à votre terminal pendant que vous êtes connecté (ou si vous avez la configuration SSH pour une authentification basée sur une clé, ou (pire), a activé des connexions de session sans mot de passe - un accès complet et sans entrave à votre système. système. Si vous avez plusieurs utilisateurs sur votre système, ou s'il s'agit d'un serveur de fichiers, tous les fichiers de l'utilisateur peuvent être en danger, car root peut tout faire !

De plus, si vous faites une erreur, visudo affichera un message d'erreur et ne sauvegardera pas les modifications apportées au fichier. Cela aidera à éviter de casser complètement sudo. Vous devriez vraiment lire la documentation . Sudo est conçu pour donner aux utilisateurs juste assez d'accès pour faire leur travail sans avoir à exposer tout votre système. Il peut être avantageux de ne donner qu'un accès sans mot de passe pour certaines commandes.

J'espère que ça aide.

Chris
la source
Cela a fonctionné, j'ai pris cela et ensuite j'ai utilisé "sudo service sudo restart" de askubuntu.com/questions/192050/… et j'ai pu utiliser tout cela dans ma session active Ubuntu. Impressionnant!
Patrick
5

Vous devez éditer le fichier '/ etc / sudoers' (il existe une commande 'visudo' pour cela.) Pour ajouter NOPASSWD avant la liste des commandes autorisées pour votre utilisateur ou votre groupe. Si votre utilisateur est dans le groupe 'admin' - Vous devez suivre les éléments suivants:

%admin ALL=(ALL) NOPASSWD: ALL

Consultez https://help.ubuntu.com/community/Sudoers , au fait.

korjjj
la source
3

Vous pourriez ajouter l'indicateur nopasswd à la liste des utilisateurs, mais cela n'élimine pas tous les mots de passe posés aux questions. Seul le premier sera demandé.

  1. Modifier sudoers: sudo visudo(Vous devez utiliser sudo. Il s’agit d’un fichier admin.)
  2. Ajoutez votre utilisateur avec l'indicateur nopasswd après la ligne d'administration (à la fin). Par exemple:
    cyrex ALL = NOPASSWD: ALLoucyrex ALL = (ALL) NOPASSWD: ALL
Luis Alvarado
la source
2
sudo visudo
%<GROUP> ALL = NOPASSWD: apache2ctl

ou

sudo visudo
%<GROUP> ALL = NOPASSWD: /etc/init.d/apache2

Je suppose que cela le ferait.

Mais faites attention avec la suppression des mots de passe pour sudo.

Alex
la source
2
Vous devez spécifier le chemin absolu dans le premier exemple, pour des raisons de sécurité: un utilisateur peu scrupuleux pourrait modifier $ PATH et voler l'accès root avec un nom de commande non qualifié.
bgvaughan
0

Maintenant pour la réponse simple! Aucun moyen possible de gâcher quoi que ce soit ou de tromper votre installation.

Il suffit d'entrer votre mot de passe plusieurs fois et vous n'aurez plus jamais à le saisir! Cela vous permettra d’ajouter un compte d’administrateur local au groupe "racine", qui sera ensuite commenté à partir d’un modèle autorisant l’ensemble des privilèges de superutilisateur du groupe "racine". Vous pouvez lire mon problème / solution de sécurité pour cette procédure plus loin dans ce post.

% username & est la variable globale pour votre nom d'utilisateur (remplacez-la par le nom d'utilisateur souhaité)

Étape 1: Ouvrez une fenêtre de terminal et tapez " sudo usermod -a -G root %username%"

Etape 2: Puis copier / coller ceci ...

sudo sed -i 's/# auth       sufficient pam_wheel.so trust/auth       sufficient pam_wheel.so trust/g' /etc/pam.d/su`

Étape 2 OU type

sudo nano /etc/pam.d/su`

Aller à la ligne 19 et supprimer le "#" avant # auth sufficient pam_wheel.so trust(peut être un numéro de ligne différent pour certains)

* La première commande ajoute votre% username% au groupe "root"

Les deuxième / troisième commandes permettent à tous les membres du groupe "root" d’être superutilisateur sans mot de passe, par opposition à l’autorisation des privilèges su "root" pour les authentifications.


Note de fin:

Ne jouez pas avec /etc/sudoers… Il y a beaucoup de vérifications / équilibres que l'authentification «su» doit passer. L'authentification de superutilisateur utilise la même procédure pam.d que toutes les autres authentifications de connexion. "/etc/security/access.conf" a la disposition pour le contrôle d'accès via la communication tcp / ip (192.168.0.1) et via les services telnet (tty1 & tty2 & tty3 ... etc). Ceci permet un filtrage plus précis par application via le protocole de transport. Si la sécurité est votre préoccupation, alors votre préoccupation devrait être dirigée contre les menaces à distance / de code plutôt que si quelqu'un touche réellement votre ordinateur lorsque vous quittez la pièce !!!

Nourriture pour la paranoïa (ne tapez pas celle-ci dans la critique):

sudo sed -i 's/#-:ALL EXCEPT (wheel) shutdown sync:LOCAL/-:ALL EXCEPT (wheel) shutdown sync:LOCAL/g' /etc/security/access.conf

^ Ceci bloque l'accès à la console pour toute personne qui n'est pas membre du système ou de la racine. Parfois, les programmes installent des noms d'utilisateur / groupes qui sont exploités!

Nathaniel F. Malm
la source
2
Pas un expert en sécurité, mais cela semble un peu contre-intuitif. Vous désactivez les mots de passe de tout un groupe pour permettre à un seul utilisateur de lancer une application spécifique sans mot de passe afin d'éviter la "complexité" d'affiner sudo pour une application particulière, n'est-ce pas? Et tout cela sur un serveur public? Le script a-t-il désactivé vos instincts de survie de base? La sécurité est COMPLEXE PAR CONCEPTION. Rappelez-vous, c'est comme un oignon. Il y a des couches et ça fait pleurer ... La perte de données sur des serveurs compromis n’est qu’une partie de l’équation. Un hacker attaque de votre système les attaques de printemps est tout aussi grave mais souvent négligé
hmayag
2
C'est contre-intuitif et contre-sens commun: Ouvrir le pot de cookies entier pour un utilisateur qui n'a besoin que d'un cookie est assez irresponsable. Vous ajouteriez des utilisateurs à la liste des sudoers et supprimiez la nécessité de saisir des mots de passe plutôt que de modifier le fichier / les fichiers sudoers. "Si une arme de poing est dangereuse pour les enfants, ne leur donnez pas de canon." -me
John