Vraag Hoe kunt u voorkomen dat u om een ​​wachtwoord wordt gevraagd door sudo? [duplicaat]


Deze vraag heeft hier al een antwoord:

Ik weet dat ik root (supergebruiker) kan worden via de su commando, maar ik moet het autoriseren nadat ik de commando's heb ingevoerd. Is er een manier waarop ik root kan worden en (met wachtwoord) op één regel kan autoriseren


68
2018-05-21 23:39


oorsprong


Kunt u een voorbeeld geven van wat u bedoelt? Je bent niet alleen op zoek naar sudo command ben jij? - terdon♦
@terdon nee dat ben ik niet. Ik zou graag supergebruiker willen zijn in één opdracht zonder het te hoeven doen su -> wachtwoord invoeren. Het ziet er niet graag uit, dit is een geldige opdracht: su -password - Vader
Dit kan een oplossing zijn Hoe voer ik specifieke sudo-opdrachten uit zonder een wachtwoord? - TuKsn
Dit lijkt een enorm beveiligingsrisico te zijn. Ik kan deze gedragslijn zeker niet aanbevelen. - Elder Geek


antwoorden:


Nou, het enige dat ik kan bedenken is

echo 'password' | sudo -S command

De -S vlag maakt sudo lees het wachtwoord van de standaardinvoer. Zoals uitgelegd in man sudo:

-S, --stdin

Schrijf de prompt naar de standaardfout en lees het wachtwoord van de standaardinvoer    in plaats van het eindapparaat te gebruiken. Het wachtwoord moet worden gevolgd door een nieuwlijnteken.

Dus, om te rennen ls met sudo privileges, zou u doen

echo 'password' | sudo -S ls

Merk op dat dit een fout zal veroorzaken als je sudo toegangstoken is actief, als u uw wachtwoord niet hoeft in te voeren, omdat u dat al kort geleden hebt gedaan. Om hier omheen te komen, zou je kunnen gebruiken -k om het toegangstoken opnieuw in te stellen:

echo 'password' | sudo -kS ls

Ik ken geen enkele manier om je in een echte rootshell te krijgen (zoals su of sudo -i) doen. Dit is misschien genoeg voor wat je nodig hebt.


69
2018-05-21 23:49



Er moet ook worden opgemerkt dat deze methode als uiterst onveilig moet worden beschouwd, omdat uw wachtwoord in uw geschiedenis is geschreven en mogelijk ook zichtbaar is voor andere gebruikers via een procesvermelding. Ik weet niet zeker hoe groot de deal voor een desktopsysteem met één gebruiker is. - jkt123
Het enige gebruik dat ik hiervoor kan zien, is een script te schrijven dat een commando bevat dat root-rechten vereist. Dit is erg slecht, omdat het wachtwoord in platte tekst in het script staat. - Marc
@Marc en alle anderen, vertel het niet me. Ik zou het nooit gebruiken en ik heb geen idee waarom het OP zou willen. Het is extreem onveilig en omslachtig en het spelen met de toegangstoken-timeout-instellingen is veel beter. Als u het OP wilt voorstellen dit niet te doen, laat dan een opmerking achter onder de vraag. Ik heb net het ding beantwoord, ik omhels het niet. - terdon♦
Als u niet wilt dat iets dat is opgeslagen als bash-geschiedenis, moet u het met een spatie plaatsen. Dat (standaard) stopt met het opslaan. - Oli♦
Aan iedereen die dit antwoord leest: doe dit alsjeblieft niet. U automatiseert wachtwoordinvoer niet - u vermijden de behoefte aan wachtwoorden voor specifieke situaties. Graag willen het andere antwoord zegt. - mgarciaisaia


In terminal voer het visudo commando om de te bewerken sudoers het dossier:

sudo visudo

en voeg de volgende regel toe aan de sudoers lijst

username ALL = NOPASSWD : ALL

Opmerking: Vervangen gebruikersnaam met je echte UserName in de bovenstaande rij.


73
2018-05-22 05:41



Dit lijkt een enorm beveiligingsrisico te zijn. Ik kan deze gedragslijn zeker niet aanbevelen. - Elder Geek
@ElderGeek waarom? Anders dan iemand te riskeren die achter je computer zit en wat sudo evil doet, zijn er nog andere veiligheidsimplicaties van toevoegen username ALL = NOPASSWD : ALL? - brillout
Opmerking: ik moest uitloggen en weer inloggen voordat het wachtwoord prompt wegging met behulp van deze techniek (Mint 17.3) - Dit zou ook moeten worden geplaatst aan het einde van de sudoerslijst of het zou door andere instellingen gecrasht kunnen worden als de sudoers is regel voor regel verwerkt. Wees ook voorzichtig met dit op productiesystemen (zie 'sudo evil' thread hierboven :) - RyanNerd
Vergeten om deze regel LAAT te zetten in sudoers brandt me elke keer. ZET HET AAN HET EINDE. - moodboom
Ik zou de aanpak van jiminikiz hier beschouwen als een veiligere, weloverwogen aanpak. askubuntu.com/questions/192050/... - Elder Geek


De echo 'password' | sudo -kS ls oplossing werkt, maar het heeft een aantal beveiligingsnadeels, waarvan de meeste al zijn genoemd in het commentaar op terdon's antwoord. Daarom zou ik een andere aanpak willen voorstellen:

Als het maar één opdracht is die u vaak moet uitvoeren, bijvoorbeeld apt-get upgrade, u kunt uw systeem zo configureren sudo someCommand doet niet een wachtwoord nodig hebben.

Om dat te doen, ren visudo en voer iets in dat lijkt op het volgende:

myusername ALL=(ALL) NOPASSWD: /usr/bin/apt-get upgrade

Merk op dat als u een commando invoert zonder een argument (bijvoorbeeld zonder upgrade in dit voorbeeld), mag de gebruiker het gebruiken ieder argument, gebruik het dus met zorg.


21
2018-05-22 05:30



Voor extra veiligheid: gebruik deze methode om rechten toe te kennen aan een alleen-lezen shell-script. Op deze manier kunt u de benodigde opdrachten uitvoeren in de context die u nodig hebt. - Adrian Lopez
Dit lijkt het beste antwoord hier te zijn! Dank je - Lockszmith


U kunt dit ook doen:

sudo -S <<< "password" command

10
2018-06-09 14:14



Wat doet <<< gemiddelde? - Ren
@Ren: Dat staat bekend als Hier String - Jahid


In plaats van het wachtwoord helemaal te verwijderen, kunt u de time-out verhogen zodat u deze slechts een paar keer per dag hoeft te typen; in een terminal, voer:

sudo visudo

Voeg aan het einde van het bestand de volgende regel toe om een ​​time-out van 30 minuten in te stellen (vervang jsmith met je gebruikersnaam).

Defaults:jsmith timestamp_timeout=30

U kunt elk gewenst nummer gebruiken; -1 betekent geen time-out (wordt alleen de eerste keer gevraagd) en 0 betekent directe time-out (telkens wanneer u wordt gevraagd) sudo). De standaardtime-out is 5 minuten.


6
2018-04-15 08:13





Vader, vanuit je reactie op je oorspronkelijke vraag zou je willen overschakelen naar een interactieve shell die wordt uitgevoerd met toestemmingen van supergebruikers, toch?

Sudo heeft een specifiek argument om een ​​shell aan te vragen:

-s [command]
The -s (shell) option runs the shell specified by the SHELL environment variable if
it is set or the shell as specified in the password database. If a command is
specified, it is passed to the shell for execution via the shell's -c option. If no 
command is specified, an interactive shell is executed.

Hiermee worden de reeds vermelde beveiligingsnadeels voorkomen en kunt u "rooten" met behulp van de volgende opdracht:

sudo -s

ALS Ik moet echt een rootshell draaien (in de meeste gevallen doe ik dat niet), dan vind ik het erg handig om de HOME-omgevingsvariabele van de shell dienovereenkomstig te hebben (om na te denken als "root"), dit kan gedaan worden met behulp van de "-H" -vlag. Dus het volledige commando zou zijn

sudo -s -H

U kunt veel meer informatie vinden in de man-pagina van sudo.


1
2018-05-22 09:09