Minun on suoritettava jotain sudona ilman salasanaa, joten käytin visudo
ja lisäsin tämän omaan sudoers
-tiedosto:
MYUSERNAME ALL = NOPASSWD: /path/to/my/program
Sitten kokeilin sitä:
$ sudo /path/to/my/program [sudo] password for MYUSERNAME:
Miksi se pyytää salasanaa? Kuinka voin suorittaa / käyttää komentoja juurena muun kuin root-käyttäjän kanssa pyytämättä salasanaa?
Vastaa
Sinä sinulla on toinen merkintä sudoers
-tiedostossa, joka sijaitsee yleensä osoitteessa /etc/sudoers
, joka vastaa myös käyttäjää. NOPASSWD
-säännön on oltava sen jälkeen, jotta se olisi etusijalla.
Tämän jälkeen sudo
kysyy salasanaa normaalisti kaikille komennoille paitsi /path/to/my/program
, jonka avulla voit aina suorittaa salasanaa pyytämättä.
Kommentit
Vastaa
Jos kohdassa /etc/sudoers
on useita vastaavia merkintöjä, sudo käyttää viimeistä. Jos siis voit suorittaa minkä tahansa komennon salasanakehotteella, ja haluat pystyä suorittamaan tietyn komennon ilman salasanakehotetta, tarvitset viimeisimmän poikkeuksen.
myusername ALL = (ALL) ALL myusername ALL = (root) NOPASSWD: /path/to/my/program
Huomaa (root)
, jotta ohjelma voidaan suorittaa pääkäyttäjänä, mutta ei muina käyttäjinä. (Älä anna enemmän oikeuksia kuin vaaditut vähimmäisvaatimukset, ellet ole ajatellut seurauksia.)
Muistiinpano uudelleen ilmoittajat, jotka eivät käytä Ubuntua tai jotka ovat muuttaneet sudon oletusasetuksia (Ubuntun sudo on oletusarvoisesti kunnossa) : Kuorittujen komentosarjojen suorittaminen korotetuilla käyttöoikeuksilla on vaarallista, sinun on aloitettava puhtaasta ympäristöstä (kun shell on käynnistynyt, se on liian myöhäistä (katso Salli setuid komentosarjoille ), joten tarvitset sudon huolehtimaan siitä. Varmista, että sinulla on Defaults env_reset
kohdassa /etc/sudoers
tai että tämä vaihtoehto on käännösajan oletusarvo (sudo sudo -V | grep env
: een tulisi sisältyä Reset the environment to a default set of variables
).
Kommentit
- ex, jotta pääset juuriksi jhonista sudon kanssa su no no pass —– > john ALL = (KAIKKI) NOPASSWD: / bin / su
- @adrian Jos haluat sallia mielivaltaiset komennot root, tee se
john ALL=(ALL) NOPASSWD: all
. ’ ei ole mitään järkeä siirtyäsu
kautta. - Kysymys: Pitäisikö minun muuttaa komentosarjan käyttöoikeuksia jotta sitä voi muokata ja lukea vain pääkäyttäjä turvallisuuden vuoksi? ’ Ajattelen hyökkääjää, joka muokkaa komentosarjaa, jolla on kaikki käyttöoikeudet ilman salasanaa, jotta se voi tehdä mitä haluaa. Hyökkääjä ei selvästikään voi ’ edes lukea sudoers-tiedostoa tietääkseen, millä skripteillä on tämä etuoikeus, mutta voi silti yrittää kaikkien omien komentojoni kanssa, kun hän löytää kansion, jossa ne ovat tallennetaan toivossa jotkut ovat sallittuja tai jotain sellaista.
- @JeffreyLebowski Jos sinulla on sudo-sääntö, joka suorittaa komentosarjan (suoraan tai epäsuorasti), se ’ On elintärkeää, että vain root (tai muuten root-oikeudet omaavat henkilöt) voi kirjoittaa komentotiedostoon, komentotiedoston sisältävään hakemistoon ja sen päähakemistoon ja niin edelleen. Sillä ei ’ ole väliä, että kuka tahansa voi lukea komentosarjatiedoston (ellei se sisällä salasanaa tai jotain, mutta että ’ on huono idea, Jos ’ sa-salasana on, sen pitäisi olla omassa tiedostossaan, muuten ’ on liian suuri riski vahingossa vuotaa se esimerkiksi kopioimalla- koodin kyseisen osan liittäminen tämän sivuston kysymykseen).
- @alper Ei. Hyvin harvat asiat vaativat uudelleenkäynnistyksen. Muutettuasi
sudoers
, sinun ei ’ tarvitse tehdä mitään erityistä:sudo
tarkistaa sen joka kerta.
vastaus
VAROITUS : Tätä vastausta on pidetty epävarmana. Katso alla olevat kommentit.
Täydellinen ratkaisu: Seuraavat vaiheet auttavat sinua saavuttamaan halutun tuloksen:
-
Luo uusi komentotiedosto (korvaa
create_dir.sh
haluamallasi komentotiedon nimellä):vim ~/create_dir.sh
Komentosarja luodaan käyttäjän kotihakemistoon.
-
Lisää komentoja, jotka sisältävät vain
root
taisudo
käyttäjä voi suorittaa samalla tavalla kuin luodessaan kansion juurihakemistotasolla:mkdir /abc
Huomaa: Älä lisää
sudo
näihin komentoihin. Tallenna ja poistu (käyttämällä:wq!
) -
Määritä sille suoritusoikeudet:
sudo chmod u+x create_dir.sh
-
Tee muutoksia, jotta tämä komentosarja ei vaadi salasanaa.
-
Avaa
sudoers
-tiedosto:sudo visudo -f /etc/sudoers
-
Lisää seuraava rivi loppuun:
ahmad ALL=(root) NOPASSWD: /home/ahmad/create_dir.sh
Korvaa
ahmad
millä tahansa käyttäjänimelläsi. Varmista myös, että tämä on viimeinen rivi. Tallenna ja poistu.
-
-
Nyt kun suoritat komennon add
sudo
ennen sitä kuin:sudo ./create_dir.sh
Tämä suorittaa komentotiedoston sisällä olevat komennot pyytämättä salasanaa.
Seuraa helppoa tässä mainitut vaiheet http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/
Kommentit
- Olisi parempi, jos annat asiaankuuluvat vaiheet tässä ja käytät linkkiä varmuuskopiona tarkempien tietojen saamiseksi. Näin vastauksesi säilyttää mahdollisen arvon, vaikka linkki ei enää olisi kelvollinen.
- Tämä neuvo on epävarma.
sudo
-osansudo chmod u+x create_dir.sh
-osasta ei tarvita, koska käyttäjällä on (oletettavasti) omistusoikeus kotiohjeensa. Koska käyttäjä voi kirjoittaa osoitteeseencreate_dir.sh
, olet antanut tälle käyttäjälle tosiasiallisesti ilmaisen juurikuoren. - @Lekensteyn Tämä tarkoittaa myös kaikkia käyttäjänä käynnissä olevia ohjelmia . Voisi myös antaa käyttäjän vain ajaa mitä tahansa sudolla ilman salasanaa.
- Puuttuuko minusta jotain? Uskon, että koko
chmod
on tarpeeton, koska luotatsudo
-ohjelmaasi korottaaksesi oikeuksiasi.
Vastaa
Luulen, että syntaksisi on väärä. Ainakin käytän seuraavaa, joka toimii minulle:
myusername ALL=(ALL) NOPASSWD: /path/to/executable
Kommentit
-
(ALL)
osa on valinnainen, sen pois jättämisellä on täsmälleen sama vaikutus.(root)
-ominaisuuden käyttäminen olisi kuitenkin parempi, mutta sen puuttuminen ei selitä ongelmaa. Id id ”” 4282103e43 ”>
ei selitä ongelmaa.
Vastaa
Jos et halua käyttää sudoa eikä sinun tarvitse muuttaa sudoers-määritystiedostoa, voit käyttää:
sudo chown root:root path/to/command/COMMAND_NAME sudo chmod 4775 path/to/command/COMMAND_NAME
Tätä tekee komennon suoritettavaksi pääkäyttäjänä ilman sudoa.
Kommentit
- Vau, en ole koskaan ennen kuullut tästä ratkaisusta, hämmentävä
- @RyanNerd: Tämä ei ole turvallinen ratkaisu. OP ei voi vain suorittaa komentoa juuri pääkäyttäjänä ilman salasanaa, vaan kuka tahansa voi nyt suorittaa komennon pääkäyttäjänä.
- ” chmod 4775 tiedostonimi ” on yksi tapa. Toiseksi, ehkä parempi tapa SETUID , määrittelemättä uudelleen koko tiedoston käyttöoikeuksia, on ” chmod u + s tiedostonimi ”
- sudo chmod 005 on turvallinen.
et halua antaa nykyiselle käyttäjälle kirjoitusoikeuksia. Muuten kuka tahansa istunnossasi oleva voi tehdä mitä tahansa komentosarjallesi.
Vastaa
Jos sinulla on Manjaron kaltainen distro , sinun on ensin käsiteltävä tiedostoa, joka ohittaa / etc / sudoers -määrityksen, voit poistaa sen tai lisätä uuden kokoonpanosi työskentelemällä suoraan kyseisen tiedoston kanssa.
Tämä tiedosto on:
sudo cat /etc/sudoers.d/10-installer
AINOA tapa nähdä se on root-oikeuksien alainen, et voi luetteloida tätä hakemistoa ilman sitä, tämä tiedosto on Manjaro-spesifinen, voit löytää tämän kokoonpanon muulla nimellä , mutta samassa hakemistossa.
Valitsemasi tiedostoon voit lisätä seuraavat rivit saadaksesi haluamasi kokoonpanot:
Ohita ryhmän todennus
%group ALL=(ALL) NOPASSWD: ALL
tai Ohita käyttäjän todennus
youruser ALL=(ALL) NOPASSWD: ALL
tai Ohita tietyn käyttäjän suoritettavan todennus
youruser ALL=(ALL) NOPASSWD: /path/to/executable
PIKA HUOMAUTUS: Avaat oven käyttää SUDOa ilman todennusta, mikä tarkoittaa, että voit suorittaa kaikki, mikä muokkaa kaikkea järjestelmästäsi, käytä sitä vastuullisesti.
Vastaa
Varmista, että sudo ei ole aliaksia. Suorita näin
/usr/bin/sudo /path/to/my/program
Esimerkiksi tämän tyyppinen shell-alias:
alias sudo="sudo env PATH=$PATH"
voi aiheuttaa tämän käyttäytymisen.
Kommentit
- Olet oikeassa, kommenttini ei ollut järjestyksessä täällä , anteeksi . Siitä huolimatta olen ’ kiinnostunut – miten luulet aliaksen muuttavan
sudoers
-sidon käsittelyä. Vai puhutkosudo
uudelleenohjaamisesta johonkin, joka tulostaa tämän virhesanoman aina salasanojen kauhaamiseksi? Tämä on epätodennäköistä tässä tapauksessa … - Minulla oli sama ongelma kuin OP: lla. Se johtui siitä, että
alias sudo="sudo env PATH=$PATH"
oli~/.bashrc
-osiossa. Sen sijaan, että vain ratkaisin sen itselleni ja sokeasti vain jatkan liiketoimintaani, lähetin vastaukseni mahdollisena ratkaisuna kenellekään muulle, joka seuraa tätä ketjua. - Että ’ s hieno, mutta kun se ei ole ilmeistä (mikä tässä tapauksessa ei ole ’ t ainakin joillekin ihmisille), on hyvä laittaa vastaukseen selitys asiayhteyden tarjoamiseksi. ja estää ihmisiä käyttämästä sokeasti taikuuden loitsuja. +2 (- (- 1) + +1). 🙂
Vastaa
Kun suoritat komentosarjan, sinun on suoritettava se nimellä sudo /path/to/my/script
.
Muokkaa: Haluat suorittaa kommentin toiseen vastaukseen perustuen kuvakkeeseen. Sinun on luotava .desktop
-tiedosto, joka suorittaa ohjelman sudolla, aivan kuten päätelaitteessa.
Voit myös harkita visuaalista salasanakehotetta varten.
Sinun pitäisi luultavasti ajatella, että sinun ei pitäisi suorittaa asioita juurina ja että järjestelmän muuttaminen kauemmaksi tiestä niin, että et tarvitsevat juurihyväksynnät ollenkaan, olisi parempi tapa edetä.
Kommentit
- Älä tee shell-komentosarjoja setuidiksi . Katso Setuidin salliminen shell-skripteissä .
- Halusin edes mainita sitä, koska se ’ niin huono vaihtoehto. Poistin sen juuri, koska olen ’ huolissani siitä, että tämä kysyjä saattaisi käyttää neuvoja jopa varoituksella siitä, että se oli huonoja neuvoja!
Vastaa
Tämä ratkaisi ongelman minulle (kokeili myös joitain muita vastauksia, jotka ovat saattaneet auttaa):
Skripti, jota soitin oli /usr/bin
-hakemistossa, johon minulla ei ole kirjoitusoikeuksia (vaikka voin yleensä lukea siellä olevia tiedostoja). Komentosarja oli chmodded + x (suoritettava lupaa), mutta se ei vieläkään toiminut. Siirtämällä tämän tiedoston kotihakemiston polulle /usr/bin
-kohdan sijaan, sain vihdoin soittaa siihen sudolla kirjoittamatta salasanaa.
Myös jotain epäilen (selventää tuleville lukijoille): Sinun on suoritettava komentosarja sudo. Kirjoita sudo
, kun soitat komentosarjaa. Älä käytä sudo
komentoosi komentosarjassa, joka todella tarvitsee juuren (näppäimistön taustavalon vaihtaminen minun tapauksessani). Ehkä se toimii, mutta sinun ei tarvitse, ja se näyttää paremmalta ratkaisulta.
Kommentit
- Toisessa kappaleessa oli vastaus ongelmaan
- @MuhammadAhmadZafar Glad se auttoi!
- Oikeastaan
sudo
-sovelluksen käyttäminen komentosarjassa on täysin hieno, jos sinulla on asianmukaiset oikeudet (määritä kohdassasudoers
) suorittaa komento ilman salasanaa. Se tekee asioista hieman turvallisempia. - voisi todella käyttää tätä uudelleen kirjoitettua vastausta askel askeleelta ’ näin teet sen ’ pikemminkin kuin vuoropuheluna muiden vastausten kanssa
- @WalrustheCat Hyvä kohta. Luen vastaukseni uudelleen, luulen, että olen itsekin saattanut olla hieman hämmentynyt. Tällä hetkellä en kuitenkaan ’ muista, mikä oli tarkka tilanne, jotta voisin ’ tehdä todella paremman kirjoituksen. Jos selvität sen, kenties useiden vastausten yhdistelmä, lähetä ehdottomasti uusi vastaus!
vastaus
Toinen mahdollisuus voi olla asentaa, määrittää ja käyttää sitten super -komento komentosarjan ajamiseksi
super /path/to/your/script
Jos haluat suorittaa jonkin binaarisen suoritettava (esim. Että olet koonnut ELF -binaariksi jostakin C-lähdekoodista) – joka on ei komentosarja – juurena, voit harkita sen tekemistä setuid (ja itse asiassa /bin/login
, /usr/bin/sudo
ja /bin/su
ja super
käyttävät tätä tekniikkaa). Ole kuitenkin varovainen, voit avata valtavan tietoturva-aukon .
Konkreettisesti sinun pitäisi olla parananoottisesti koodattu (joten tarkista kaikki argumentit, ympäristö ja ulkoiset olosuhteet ennen kuin ” toimii ” olettaen mahdollisesti vihamielisen käyttäjän), niin voisi käyttää seteuidia (2) ja ystäviä (katso myös setreuid (2) ) ( katso myös -ominaisuudet (7) & kirjautumistiedot (7) & suorittaa (2) …)
Sinä ”ll käytä chmod u+s
(lue chmod (1) ) asennettaessa tällaista binaaria.
Mutta ole erittäin varovainen .
Lue monia asioita setuid ista, mukaan lukien Advanced Linu x Ohjelmointi , ennen kuin koodaat sellaisen.
Huomaa, että komentosarja tai mikä tahansa shebang -ed asia, ei voida asettaa. Mutta voit koodata (C-muodossa) pienen setuid-binäärisen käärimällä sen.
Huomaa, että Linuxissa sovelluskoodi on vuorovaikutuksessa Linux-ytimen käyttämällä -sysalluksia (2) . Suurin osa niistä voi epäonnistua, katso errno (3) . Monet Linux-sovellukset (esim. GNU bash , GNU make , GNU gdb , GNOME ) ovat avointa lähdekoodia: voit ladata ja tutkia lähdekoodia.
Kommentit
- Edistynyt Linux-ohjelmointi on kuollut linkki.
Vastaa
Ihannetapauksessa, jos muokkaat komentoja, jotka voidaan suorittaa sudo
-sivulla, sinun on tehtävä nämä muutokset erillisessä tiedostossa kohdassa /etc/sudoers.d/
sen sijaan, että muokkaat tiedostoa sudoers
suoraan. Käytä myös tiedostoa visudo
muokataksesi tiedostoja. ÄLÄ KOSKAAN anna NOPASSWD
komentoihin ALL
.
Esimerkki: sudo visudo -f /etc/sudoers.d/mynotriskycommand
Lisää käyttöoikeuksien myöntämissi rivi: myuser ALL= NOPASSWD: /path/to/your/program
Tallenna ja poistu sitten ja visudo
varoittaa sinua, jos sinulla on syntaksivirheitä.
Voit suorittaa sudo -l
-toiminnon nähdäksesi käyttäjälle myönnetyt oikeudet, jos joku käyttäjäkohtainen on NOPASSWD
-komennot näkyvät ENNEN mitään %groupyouarein ALL=(ALL) ALL
-komentoa lähdössä, sinulta kysytään salasanaa.
Jos löydät itse luomalla paljon näitä sudoers.d-tiedostoja, sinun kannattaa ehkä luoda ne käyttäjäkohtaisesti, jotta niitä on helpompi visualisoida. Muista, että TIEDOSTOJEN NIMIEN ja SÄÄNTÖJEN järjestys tiedostossa on erittäin tärkeää, että LAST ladattu voittaa, olipa se ENEMMÄN tai VÄHEMMÄN sallivaa kuin edelliset merkinnät.
Voit hallita tiedostonimen järjestystä käyttämällä etuliitettä 00-99 tai aa / bb / cc, mutta pidä myös mielessä, että jos sinulla on MITÄÄN tiedostoja, joilla ei ole numeerista etuliitettä, ne latautuu numeroitujen tiedostojen jälkeen ohittamalla asetukset. Tämä johtuu siitä, että kieliasetuksista riippuen ”leksikaalinen lajittelu” kuori käyttää ensin lajittelunumeroita ja voi sitten lomittaa isot ja pienet kirjaimet lajitellessaan nousevassa järjestyksessä. div id = ”727cf63dc6”>
Yritä suorittaa printf "%s\n" {{0..99},{A-Z},{a-z}} | sort
ja printf "%s\n" {{0..99},{A-Z},{a-z}} | LANG=C sort
nähdäksesi, tulostaako nykyinen kielesi AaBbCc
jne. tai ABC
sitten abc
sen määrittämiseksi, mitä paras ”viimeisen” kirjaimen etuliite käytettäisi olla.
Vastaa
Jos haluat sallia kenen tahansa käyttäjän suorittaa ohjelman sudo-muodossa pyytämättä salasanaa, voit lisätä seuraavan rivin
%sudo ALL=(root) NOPASSWD: /path/to/your/program
/etc/sudoers
Huomaa, että % sudo tekee sen.
Kommentit
- Vaikka tämä ’ on yksi tapa suorittaa sudosääntö, se ei ’ t vastaa kysymykseen siitä, miksi NOPASSWD-lipun asettaminen tähän sääntöön johti edelleen salasanakehotteeseen. Katso hyväksytty vastaus ideasta, miksi se tapahtui.
Vastaa
Seuraava koskee tapausta, jossa haluat suorittaa komennon ilman salasanaa vain, jos sillä on tietty joukko vaihtoehtoja, joissa osa vaihtoehdoista on muuttuja . AFAIK ei ole mahdollista käyttää muuttujia tai arvoalueita sudoers-ilmoituksissa, eli voit sallia nimenomaisen command option1
-käyttöoikeuden, mutta ei command option2
-toiminnon avulla:
user_name ALL=(root) /usr/bin/command option1
mutta jos rakenne on command option1 value1
, missä value1
voi vaihdella, joillekin value1
-arvoille on oltava selkeät sudoers-rivit. Shell-komentosarja tarjoaa kiertotavan.
Tämä vastaus on innoittamana M. Ahmad Zafarin vastauksesta ja korjaa siellä olevan turvallisuusongelman.
- Luo shell-komentosarja kutsu komento ilman
sudo
. - Tallenna komentosarja root-etuoikeutettuun kansioon (esim.
/usr/local/bin/
), tee tiedoston juuren omistama tiedosto (esim.chown root:wheel /usr/local/bin/script_name
), jolla ei ole kirjoitusoikeuksia muille (esim.chmod 755 /usr/local/bin/script_name
). -
Lisää poikkeus sudoereihin visudolla:
user_name ALL=(root) NOPASSWD: /usr/local/bin/script_name
. -
Suorita komentosarjasi
sudo script_name
.
Haluan esimerkiksi muuttaa näytön lepotilan aikakatkaisua macOS: ssä. Tämä tehdään käyttämällä:
sudo pmset displaysleep time_in_minutes
Pidän unen aikakatkaisun muuttamista viattomana toimintana, joka ei oikeuta salasanan kirjoittamista, mutta pmset
voi tehdä monia asioita ja haluaisin pitää nämä muut asiat sudo-salasanan takana.
Joten minulla on seuraava komentosarja osoitteessa /usr/local/bin/ds
:
#!/bin/bash if [ $# -eq 0 ]; then echo "To set displaysleep time, run "sudo ds [sleep_time_in_minutes]"" else if [[ $1 =~ ^([0-9]|[1-9][0-9]|1[0-7][0-9]|180)$ ]]; then pmset displaysleep $1 else echo "Time must be 0..180, where 0 = never, 1..180 = number of minutes" fi fi
Minulla on sudoers
-tiedoston lopussa seuraava rivi:
user_name ALL=(root) NOPASSWD: /usr/local/bin/ds
Jos haluat asettaa aikakatkaisun 3 minuutiksi, suoritan komentosarjan tavallisesta käyttäjätilistä user_name
:
sudo ds 3
PS Suurin osa käsikirjoituksestani on syötteen vahvistus, mikä ei ole pakollista, joten myös seuraava toimi:
#!/bin/bash pmset displaysleep $1
vastaus
Vaihtoehtoisesti voit käyttää pythonia pudo -paketti.
Asennus:
user$ sudo -H pip3 install pudo # you can install using pip2 also
Alla on koodinpätkä, jota käytetään python-automaatiossa komentojen suorittamiseen pääkäyttöoikeuksien alaisena:
user$ python3 # or python2 >>> import pudo >>> (ret, out) = pudo.run(("ls", "/root")) # or pudo.run("ls /root") >>> print(ret) >>> 0 >>> print(out) >>> b"Desktop\nDownloads\nPictures\nMusic\n"
Alla on cmd-esimerkki komentojen suorittamisesta pääkäyttöoikeuksin:
user$ pudo ls /root Desktop Downloads Pictures Music
vastaus
Komentosarjassa sudoers
, joka on / etc / uncomment alla olevan rivin sisällä:
#includedir /etc/sudoers.d
Luo yksi tiedosto mille tahansa nimelle /etc/sudoers.d/ -hakemistossa ja lisää sisältö vastausten enimmäismäärän mukaisesti. Kuten kaikille käyttäjille, kuten root
#!/bin/bash ALL ALL = NOPASSWD: /path/of/the/script/which/you/want/to/run/as/root
Tämä on turvallisin tapa suorittaa komentosarja root-luvalla.
/path/to/my/program
oli python-komentosarja?.bashrc
)? Tai jopa komentosarjan komentosarja/usr/local/sbin
? Kokeilla./etc
, mutta jotkut järjestelmät sanovat sen muualta. Jos et ’ löydä sitä, kokeileman sudoers
. Tiedoston paikallinen sijainti tulisi korvataman
-sivu silloin, kunsudo
rakennettiin tälle järjestelmälle.