Vraag voer script uit als gebruiker die een nologin-shell heeft


Het enige wat ik moet doen is een specifiek script uitvoeren als een specifieke gebruiker die wel de nologin / false shell heeft aangegeven in / etc / passwd.

Ik zou het script als root uitvoeren en dit zou als een andere gebruiker moeten worden uitgevoerd. running:

~# su -c "/bin/touch /tmp/test" testuser

zou werken, maar ik heb een geldige shell nodig voor de testuser. Ik weet dat ik het wachtwoord kan uitschakelen met passwd -d testuser en laat de shell naar / bin / bash op deze manier een beetje beveiligen, maar ik moet nologin / false shell hebben.

Wat ik in essentie nodig heb, is wat crontab doet als we instellen dat taken als een bepaalde gebruiker worden uitgevoerd, ongeacht of deze een nologin / false shell heeft.

p.s Ik vond deze thread Een commando uitvoeren als een nologinegebruiker maar ik heb geen idee hoe ik het commando kan "samenvoegen" su -s /bin/sh $user naar het script dat ik moet uitvoeren

Bedankt


78
2018-01-18 13:56


oorsprong




antwoorden:


U kunt de schakeloptie -s gebruiken om een ​​bepaalde shell uit te voeren

su -s /bin/bash -c '/path/to/your/script' testuser

(Vooraan toevoegen sudo naar het bovenstaande indien testuser is een gebruiker zonder wachtwoord.)


109
2018-01-18 18:49



Wat als su is? root:root -rwsr-x--- ? - Patryk
Wat als de gebruiker geen wachtwoord heeft? - CMCDragonkai
@Wesley Erachter gekomen dat u root moet zijn om die opdracht uit te voeren voor gebruikers zonder wachtwoord. - CMCDragonkai
@lain, Als de gebruiker verondersteld wordt geen shell te hebben, mag het proces met betrekking tot de opdracht geen kind van een bash-proces zijn. Dus, je zou ook exec moeten gebruiken om de shell te vervangen door het script. En als je van het script een kind van init wilt maken, gebruik je &, als voorbeeld su -s /bin/bash -c 'exec /path/to/your/script &' test - Facundo Victor
Aangezien ik de afgelopen 20 minuten heb besteed aan het uitwerken van hetzelfde resultaat met runuser, Zou ik erop willen wijzen dat su -s SHELL parameter geeft runuser commando vrij veel nutteloos :) Bedankt Jan! - jirka


Je kunt dit doen met sudo -u als je het hebt geïnstalleerd:

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

7
2018-01-18 14:03



Hoe geef je parameters door aan sudo -u apache whoami? - CMCDragonkai
@CMCDragonkai Alle parameters na het commando worden doorgegeven. Je kunt het zien als "sudo [-u apache] [whoami <param1> <param2>]". - Handyman5
Ik denk dat gebruiken sudo -u is waarschijnlijk geen goed idee voor het uitvoeren van opdrachten als een nologinegebruiker, omdat het de SUDO_USER in de omgeving roept de echte het commando op. Misschien denk ik er gewoon over na. - Meow


Door het script aan te leveren als argument om uit te voeren naar / bin / sh:

su -s "/bin/sh /your/script/location" username

4
2018-01-18 14:01





zojuist gerealiseerd :

su -s "/ bin / bash" -c "/ bin / touch / tmp / testuser" testgebruiker

misschien is er een betere manier ?!


2
2018-02-16 07:18





eigenlijk, de beste manier om dit te doen is via runuser

zie de man-pagina voor details

deze tool wordt gebruikt om de situatie aan te pakken zoals de ontwikkelaar in zijn bolg zei

Wanneer een service als root wordt uitgevoerd en uID wilt wijzigen met behulp van de shell, moet runuser worden gebruikt.

http://danwalsh.livejournal.com/55588.html

ik heb dit antwoord in veel paleizen geplaatst, vergeef me als je dit vervelend vindt


0
2017-12-07 19:19



Plaats geen antwoorden met alleen een link om te voorkomen dat de link gaat rotten. Voeg in plaats daarvan de meest relevante informatie uit de link toe aan uw antwoord of plaats de link als een reactie in plaats van een antwoord. Zie dit serverfault.com/help/how-to-answer helpcentrum-artikel voor meer informatie. - Federico Galli
@FedericoGalli de meest relevante informatie is al toegevoegd, het kopiëren en plakken van het gebruik is niet nodig, de man-pagina biedt voldoende informatie - Z-Y00


Gebruik sudo -u om de gebruiker te specificeren. Gebruik ook de vlag -i om ook omgevingsvariabelen van de doelgebruiker in te stellen.

sudo -i -u user command

-1



dit geeft This account is currently not available. - knocte