Valamit sudo-ként kell futtatnom jelszó nélkül, ezért a visudo
fájlt használtam, és hozzáadtam ezt a sudoers
fájl:
MYUSERNAME ALL = NOPASSWD: /path/to/my/program
Akkor kipróbáltam:
$ sudo /path/to/my/program [sudo] password for MYUSERNAME:
Miért kér jelszót? Hogyan futtathatom / használhatom a parancsokat root felhasználóként egy nem root felhasználóval, jelszó kérése nélkül?
Válasz
Ön van egy másik bejegyzés a sudoers
fájlban, amely általában a /etc/sudoers
címen található , amely egyezik a felhasználóval is. A NOPASSWD
szabálynak ennek utána kell lennie annak érdekében, hogy elsőbbséget élvezhessen.
Ezt követően sudo
rendszerint minden parancshoz jelszót kér, kivéve a /path/to/my/program
parancsot, amelyet mindig a jelszó megadása nélkül futtat.
Megjegyzések
Válasz
Ha a /etc/sudoers
csoportban több egyező bejegyzés van, a sudo használja az utolsót. Ezért, ha bármilyen parancsot jelszó-parancssorral hajthat végre, és azt szeretné, hogy egy adott parancsot jelszó kérése nélkül hajthasson végre, utoljára szüksége van a kivételre.
myusername ALL = (ALL) ALL myusername ALL = (root) NOPASSWD: /path/to/my/program
Vegye figyelembe a , lehetővé téve a program futtatását root felhasználóként, de más felhasználóként nem. (Ne adjon meg több engedélyt, mint a szükséges minimum, hacsak nem gondolta ki a következményeket.)
Megjegyzés az újrához olyan hirdetők, akik nem futtatják az Ubuntut, vagy akik megváltoztatták az alapértelmezett sudo konfigurációt (az Ubuntu s sudo alapértelmezés szerint rendben van) : A megemelt jogosultsággal rendelkező shell szkriptek futtatása kockázatos, tiszta környezetből kell indulnia (amint a A shell elindult, túl késő (lásd: Setuid engedélyezése a shell szkripteken ), ezért a sudo-ra van szükség. Győződjön meg róla, hogy Defaults env_reset
van a /etc/sudoers
mezőben, vagy hogy ez az opció a fordítási idő alapértelmezett értéke (sudo sudo -V | grep env
tartalmaznia kell Reset the environment to a default set of variables
).
Megjegyzések
- ex a jhon és a sudo gyökérkezeléséhez su no no pass —– > john ALL = (ALL) NOPASSWD: / bin / su
- @adrian Ha tetszőleges parancsokat szeretne engedélyezni, gyökér, állítsd be ezt
john ALL=(ALL) NOPASSWD: all
. ‘ nincs értelme átmennisu
. - Kérdés: Módosítsam-e a parancsfájlom engedélyeit hogy csak a root felhasználók módosíthassák és olvashassák a biztonság kedvéért?
Egy olyan támadóra gondolok, aki módosítja a szkriptet, amelynek minden engedélye meg van adva jelszó nélkül, hogy azt tegye, amit akar. Nyilvánvaló, hogy a támadó ‘ még sudoers fájlt sem tud olvasni, hogy megtudja, melyik szkript rendelkezik ezzel a kiváltsággal, de akkor is megpróbálhatja az összes egyéni szkriptemet, amint megtalálja a mappát, amelyben vannak Remélem, hogy egyesek megengedettek, vagy ilyesmi.
sudoers
megváltoztatása után nem kell ‘ semmit sem tennie: sudo
ellenőrzi minden alkalommal.Válasz
FIGYELEM : Ezt a választ bizonytalannak ítélték meg. Lásd az alábbi megjegyzéseket
Teljes megoldás: A következő lépések segítenek elérni a kívánt kimenetet:
-
Hozzon létre egy új szkriptfájlt (cserélje le a
create_dir.sh
parancsot a kívánt parancsfájl nevére):vim ~/create_dir.sh
A szkript a felhasználó saját könyvtárában jön létre.
-
Adjon hozzá néhány parancsot, amelyek csak egy
root
vagysudo
felhasználó úgy hajthat végre, mint egy mappát a gyökérkönyvtár szintjén:mkdir /abc
Megjegyzés: Ne adjon
sudo
ezekhez a parancsokhoz. Mentés és kilépés (az:wq!
használatával) -
Végrehajtási engedélyeket rendelhet hozzá:
sudo chmod u+x create_dir.sh
-
Hajtson végre módosításokat, hogy a szkript ne igényeljen jelszót.
-
Nyissa meg a
sudoers
fájl:sudo visudo -f /etc/sudoers
-
Adja hozzá a következő sort a végén:
ahmad ALL=(root) NOPASSWD: /home/ahmad/create_dir.sh
Cserélje le a
ahmad
szót bármilyen felhasználónévvel. Ügyeljen arra is, hogy ez legyen az utolsó sor. Mentés és kilépés.
-
-
Most a parancs futtatásakor add
sudo
előtte, például:sudo ./create_dir.sh
Ez a parancsfájl belsejében lévő parancsokat jelszó kérése nélkül futtatja.
Kövesse az egyszerű itt említett lépések http://step4wd.com/2013/09/14/run-root-commands-in-linux-ubuntu-without-password/
Megjegyzések
- Jobb lenne, ha itt megadná a megfelelő lépéseket, és a linket biztonsági másolatként használná a részletesebb információkhoz. Így a válasz akkor is megőrzi a lehetséges értéket, ha ez a link már nem érvényes.
- Ez a tanács nem biztonságos. A
sudo chmod u+x create_dir.sh
sudo
része felesleges, mivel a felhasználónak (feltehetően) tulajdonjoga van az otthoni dir. Mivel a felhasználó írhat azcreate_dir.sh
címre, Ön tulajdonképpen egy ingyenes gyökérhéjat adott az adott felhasználónak. - @Lekensteyn Ez azt is jelenti, hogy minden felhasználóként futó program . Lehetséges, hogy a felhasználó csak bármit futtathat a sudo-val jelszó nélkül.
- Hiányzik valami? Úgy gondolom, hogy a teljes
chmod
felesleges, mivel asudo
-re támaszkodik a jogosultságainak emeléséhez.
Válasz
Szerintem a szintaxisa téves. Legalább a következőket használom, amelyek nekem működnek:
myusername ALL=(ALL) NOPASSWD: /path/to/executable
Megjegyzések
- A
(ALL)
rész opcionális, elhagyása pontosan ugyanolyan hatást fejt ki. A(root)
birtoklása ugyan jobb lenne, de hiánya nem magyarázza meg a problémát. Id id “” 1484a13e0a “>
erre a parancsra és semmi másra! Nincs ok a teljes rendszer megbontására …
Válasz
Ha el akarja kerülni a sudo használatát, és nem kell módosítania a sudoers konfigurációs fájlt sem, használhatja:
sudo chown root:root path/to/command/COMMAND_NAME sudo chmod 4775 path/to/command/COMMAND_NAME
Ezt a parancsot rootként fogja futtatni, sudo nélkül.
Kommentárok
- Hú, még soha nem hallottam erről a megoldásról, gondolkodj el
- @RyanNerd: Ez nem biztonságos megoldás. Az OP nemcsak futtathatja a parancsot root néven jelszó nélkül, hanem bárki, aki futtathatja a parancsot root felhasználóként.
- ” chmod 4775 fájlnév ” egy út. Másodszor, talán a SETUID jobb módja a teljes fájlengedélyek újradefiniálása nélkül a ” chmod u + s fájlnév ”
- a sudo chmod 005 biztonságos. Nem akarsz ‘ írni engedélyeket az aktuális felhasználónak. Ellenkező esetben bárki a munkamenetében bármit megtehetne a szkripteddel.
Válasz
Ha van olyan disztró, mint a Manjaro , először egy olyan fájllal kell foglalkoznia, amely felülírja az / etc / sudoers definícióját, törölheti, vagy közvetlenül együttműködhet azzal a fájllal az új konfigurációk hozzáadásához.
Ez a fájl:
sudo cat /etc/sudoers.d/10-installer
A megtekintés CSAK gyökérjogosultsággal történik, nélküle nem lehet felsorolni ezt a könyvtárat, ez a fájl Manjaro-specifikus, más névvel is megtalálhatja ezt a konfigurációt , de ugyanabban a könyvtárban.
A választott fájlban felveheti a következő sorokat a kívánt konfiguráció (k) megszerzéséhez:
A csoport hitelesítésének figyelmen kívül hagyása
%group ALL=(ALL) NOPASSWD: ALL
vagy a felhasználó hitelesítésének figyelmen kívül hagyása
youruser ALL=(ALL) NOPASSWD: ALL
vagy egy futtatható fájl hitelesítésének figyelmen kívül hagyása
youruser ALL=(ALL) NOPASSWD: /path/to/executable
GYORS MEGJEGYZÉS: Kinyitja a kaput a SUDO használatára hitelesítés nélkül, ami azt jelenti, hogy futtathatja mindent, ami mindent módosít a rendszeréből, használja felelősséggel.
Válasz
Ellenőrizze, hogy a sudo nem álneves-e. Fuss így:
/usr/bin/sudo /path/to/my/program
Például egy ehhez hasonló shell alias:
alias sudo="sudo env PATH=$PATH"
okozhatja ezt a viselkedést.
Megjegyzések
- Igazad van, a kommentem nem volt rendben itt , elnézést ezért . Mindazonáltal én ‘ érdekelt vagyok – hogyan számíthat arra, hogy az álnév megváltoztatja a sudo
sudoers
feldolgozását. Vagy arról beszél, hogy átirányítja asudo
t olyasmire, amely mindig kinyomtatja ezt a hibaüzenetet a jelszavak lekereséséhez? Itt nem valószínű, hogy ez a helyzet … - Ugyanaz a problémám volt, mint az OP-val. Kiderült, hogy azt az okozza, hogy
alias sudo="sudo env PATH=$PATH"
van a~/.bashrc
könyvtárban. Ahelyett, hogy csak magamnak megoldanám és vakon folytatnám az üzletemet, válaszomat elküldtem lehetséges megoldásként bárki más számára, aki ezen a szálon jár. - Ez ‘ s rendben van, de ha ez nem nyilvánvaló (ami ebben az esetben nem ‘ t legalább néhány ember számára), akkor jó, ha magyarázatot ad a válaszra, hogy valamilyen kontextust adjon és megakadályozza, hogy az emberek vakon használják a varázsigéket. +2 (- (- 1) + +1). 🙂
Válasz
A szkript futtatásakor .
Szerkesztés: Egy másik válaszra adott megjegyzésed alapján ezt egy ikonról futtatod. Létre kell hoznia egy .desktop
fájlt, amely sudo-val hajtja végre a programot, csakúgy, mint a terminálon.
Fontolja meg a egy vizuális jelszó kéréshez.
Valószínűleg fontolóra kell vennie azt az elképzelést, hogy a dolgokat nem szabad rootként futtatnia, és hogy a rendszert az úton tovább kell változtatni, hogy ne tegye a következőket: a root engedélyekre van szükségük, az jobb út lenne.
Megjegyzések
- Ne készítsen setuidot a shell parancsfájlokról . Lásd: A setuid engedélyezése a shell szkripteken .
- Úgy gondoltam, hogy nem is említettem, mert ‘ olyan rossz lehetőség. Csak azért töröltem, mert ‘ aggódtam, hogy ez a kérdező még a figyelmeztetéssel együtt is felhasználhatja a tanácsot!
Válasz
Ez megoldotta a problémát számomra (kipróbáltam néhány más választ is, amelyek segíthettek):
A szkript, amelyet hívtam a /usr/bin
könyvtárban volt, ahová nem rendelkezem írási engedéllyel (bár általában minden fájlt el tudok olvasni ott). A szkript chmodded + x volt (futtatható engedély), de még mindig nem működött. Ezt a fájlt áthelyezve a saját könyvtáramban található útvonalra a /usr/bin
helyett végül sudo-val hívhattam meg jelszó megadása nélkül.
Valamit én is kételkedett (tisztázás a jövőbeli olvasók számára): Sudo-ként kell futtatnia a szkriptet. Írja be a sudo
parancsot, amikor meghívja a szkriptet. Ne használja a sudo
parancsot a parancsfájl belsejében, amelynek valójában root-ra van szüksége (esetemben a billentyűzet háttérvilágításának megváltoztatása). Talán ez is működik, de nem kell, és ez jobb megoldásnak tűnik.
Megjegyzések
- A második bekezdés megválaszolta a problémámat
- @MuhammadAhmadZafar Glad segített!
- A
sudo
használata egy szkript belsejében teljesen rendben van, feltéve, hogy rendelkezik a megfelelő jogokkal (asudoers
) a kérdéses parancs jelszó nélküli futtatásához. Kicsit biztonságosabbá teszi a dolgokat. - valóban használhatná ezt az újra átírt választ lépésről-lépésre ‘ így csinálod ‘, nem pedig a többi válasz párbeszédeként
- @WalrustheCat Jó pont. Újraolvasva válaszomat, azt hiszem, magam is kissé összezavarodhattam. Most azonban nem emlékszem ‘ arra, hogy mi volt a pontos helyzet, így ‘ nem tudok jobban írni. Ha kitalálja, talán több válasz kombinációja, mindenképpen küldjön új választ!
Válasz
Egy másik lehetőség lehet a super parancs a parancsfájl futtatásához
super /path/to/your/script
Ha bináris futtatni akar futtatható (pl. ELF bináris fájlba fordította valamilyen C forráskódból) – ami nem egy szkript – mint root, akkor fontolóra veheti setuid (és valójában /bin/login
, /usr/bin/sudo
és /bin/su
és super
mind ezt a technikát használják). Legyen azonban nagyon óvatos, hatalmas biztonsági lyukat nyithat meg .
Konkrétan a programjának paranoiásan kódoltnak kell lennie (tehát ellenőrizze az összes argumentumot, valamint a környezetet és a külső körülményeket, mielőtt ” ” előtt cselekszik, feltételezve, hogy potenciálisan ellenséges felhasználót használ), akkor gondosan használhatja a seteuid (2) és barátait (lásd még: setreuid (2) ) ( lásd még: képességek (7) & hitelesítő adatok (7) & execve (2) …)
Te ” az ilyen bináris fájl telepítésekor használja a chmod u+s
(olvassa el a chmod (1) leírást).
De legyen nagyon óvatos .
Sok mindent olvashat a setuid ról, beleértve a Haladó Linu x Programozás , mielőtt kódolna egy ilyen dolgot.
Vegye figyelembe, hogy egy szkript vagy bármely shebang -ed dolog, nem lehet setuid. De kódolhat (C-ben) egy kis setuid-bináris csomagolást.
Ne feledje, hogy Linux rendszeren az alkalmazáskód kölcsönhatásba lép a Linux kernellel a rendszerhívások használatával (2) . Legtöbbjük kudarcot vallhat, lásd: errno (3) . Sok Linux-alkalmazás (pl. GNU bash , GNU make , GNU gdb , GNOME ) nyílt forráskódúak: letöltheti, tanulmányozhatja és hozzájárulhat forráskódjukhoz.
Megjegyzések
- A fejlett Linux-programozás halott láncszem.
Válasz
Ideális esetben, ha testreszabja, milyen parancsokat lehet futtatni a sudo
keresztül, ezeket a módosításokat külön fájlban kell végrehajtania a /etc/sudoers.d/
a sudoers
fájl közvetlen szerkesztése helyett. A fájl (ok) szerkesztéséhez mindig a visudo
parancsot is használja. Soha ne adjon NOPASSWD
ALL
parancsokat.
Példa: sudo visudo -f /etc/sudoers.d/mynotriskycommand
Helyezze be az engedély megadásához szükséges sort: myuser ALL= NOPASSWD: /path/to/your/program
Ezután mentse el és lépjen ki, és visudo
figyelmeztet, ha valamilyen szintaxis hibája van.
A sudo -l
futtatásával megtekintheti a felhasználó számára megadott engedélyeket, ha valamelyik felhasználóspecifikus A NOPASSWD
parancsok a kimenetben lévő %groupyouarein ALL=(ALL) ALL
parancsok ELŐTT jelennek meg, és a rendszer kéri a jelszavát.
Ha megtalálja maga készít sok ilyen sudoers.d fájlt, akkor valószínűleg felhasználónként szeretné létrehozni őket, hogy könnyebben megjeleníthessék őket. Ne feledje, hogy a FÁJL NÉVEK és a SZABÁLYOK sorrendje a fájlban nagyon fontos, az UTOLSÓ betöltött nyer, függetlenül attól, hogy TÖBB, vagy KEVESEBB megengedő, mint az előző bejegyzések.
A fájlnév sorrendjét a 00-99 vagy aa / bb / cc előtag használatával vezérelheti, bár ne feledje, hogy ha BÁRMILYEN fájlja van, amelyeknek nincs numerikus előtagja, akkor azok a számozott fájlok után töltődik be, felülbírálva a beállításokat. Ennek oka, hogy a nyelvi beállításoktól függően a “lexikai rendezés” a héj először számsorozatot használ, majd a növekvő sorrendben rendezve nagy és kisbetűket is beilleszthet.
Próbálkozzon a printf "%s\n" {{0..99},{A-Z},{a-z}} | sort
és printf "%s\n" {{0..99},{A-Z},{a-z}} | LANG=C sort
futtatásával, hogy lássa, a jelenlegi nyelv nyomtat-e AaBbCc
stb. vagy ABC
majd abc
, hogy meghatározza, hogy mi lenne a legjobb “utolsó” betű előtag légy.
Válasz
Annak érdekében, hogy bármely felhasználó engedélyezhesse a program sudo formában történő végrehajtását jelszó megadása nélkül, hozzáadhatja a következő sort:
%sudo ALL=(root) NOPASSWD: /path/to/your/program
/etc/sudoers
Ne feledje, hogy % sudo elkészíti.
Megjegyzések
- Bár ez a ‘ egy módja a sudo-szabály végrehajtásának, nem ‘ t ne válaszoljon arra a kérdésre, hogy a NOPASSWD zászló ennek a szabálynak a beállítása miért eredményezett továbbra is jelszó kérést. Nézze meg az elfogadott választ arról, hogy miért történt.
Válasz
A következők arra az esetre vonatkoznak, amikor parancsot csak akkor kell futtatni jelszó nélkül, ha annak van egy meghatározott opciókészlete, ahol az opciók egy része változó . AFAIK nem lehet változót vagy értéktartományt használni a sudoers deklarációkban, azaz kifejezetten engedélyezheti a command option1
hozzáférést, de command option2
nem:
user_name ALL=(root) /usr/bin/command option1
de ha a struktúra command option1 value1
, akkor ahol változhat, a value1
minden lehetséges értékéhez kifejezett sudoers sorok szükségesek. A Shell szkript lehetővé teszi a megkerülését.
Ezt a választ M. Ahmad Zafar válasza ihlette, és ott megoldotta a biztonsági problémát.
- Hozzon létre egy shell szkriptet, ahol hívja meg a parancsot
sudo
nélkül. - Mentse a szkriptet egy root által privilegizált mappába (pl.
/usr/local/bin/
), a fájl gyökér tulajdonosa (pl.chown root:wheel /usr/local/bin/script_name
), másoknak nincs írási hozzáférése (pl.chmod 755 /usr/local/bin/script_name
). -
Adja hozzá a kivételt a sudoerekhez a visudo használatával:
user_name ALL=(root) NOPASSWD: /usr/local/bin/script_name
. -
Futtassa a szkriptet
sudo script_name
.
Például meg akarom változtatni a kijelző alvási időkorlátját a macOS-on. Ez a következővel érhető el:
sudo pmset displaysleep time_in_minutes
Az alvási időkorlát megváltoztatását egy ártatlan műveletnek tartom, amely nem “indokolja a jelszó begépelésével járó problémákat”, de A div> sok mindent megtehet, és ezeket a dolgokat szeretném a sudo jelszó mögött tartani.
Tehát a következő szkript a /usr/local/bin/ds
címen:
#!/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
A sudoers
fájl végén a következő sor áll rendelkezésemre:
user_name ALL=(root) NOPASSWD: /usr/local/bin/ds
Az időtúllépés 3 percre állításához futtatom a szkriptemet a szokásos felhasználói fiókból: user_name
:
sudo ds 3
PS A szkriptem nagy része bemeneti ellenőrzés, amely nem kötelező, így a következők is működnek:
#!/bin/bash pmset displaysleep $1
Válasz
Alternatívaként használhatja a python pudo csomag.
Telepítés:
user$ sudo -H pip3 install pudo # you can install using pip2 also
Az alábbiakban látható a kódrészlet, amelyet a python automatizálásában használhat a parancsok futtatásához root jogosultsággal:
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"
Az alábbiakban bemutatjuk a parancsok futtatásának root jogosultsággal rendelkező cmd-példáját:
user$ pudo ls /root Desktop Downloads Pictures Music
válasz
A sudoers
szkriptben, amely az / etc / belül kommentálja az alábbi sort:
#includedir /etc/sudoers.d
Hozzon létre egy fájlt bármilyen névvel az /etc/sudoers.d/ könyvtárban, és adja hozzá a tartalmat a maximális válaszok szerint. Mint minden felhasználó számára, mint root
#!/bin/bash ALL ALL = NOPASSWD: /path/of/the/script/which/you/want/to/run/as/root
Ez a legbiztonságosabb módszer a parancsfájl futtatására root jogosultsággal.
/path/to/my/program
python parancsfájl lenne?.bashrc
mezőben)? Vagy akár egy shell parancsfájl az/usr/local/sbin
belül? Kipróbálni./etc
, de egyes rendszerek máshol. Ha ‘ nem találja, próbálja meg aman sudoers
elemet. Az adott fájl helyi helyét aman
oldal abban az időben, amikorsudo
az adott rendszerhez készült.