sudo
A sudo parancs egyszerű és biztonságos módot kínál a jogosultsági szint emelésének a beállítására, vagyis lehetővé teszi a normál felhasználók számára, hogy bizonyos (vagy akár az összes) parancsot root felhasználóként vagy más emelt jogosultsági szintű felhasználóként hajtsák végre, akár jelszó megadása nélkül is.
Annak érdekében, hogy bizonyos felhasználók végrehajthassanak bizonyos rendszerszintű adminisztratív lépéseket anélkül, hogy teljes root hozzáférést kapnának, a sudo használata a legjobb megoldás. A sudo használatával szabályozható, hogy ki mit tehet meg.
Ez a cikk egy gyors bevezetőként szolgál. A app-admin/sudo szoftvercsomag sokkal több funkcióval rendelkezik, mint amit itt ismertetünk. Különleges funkciói közé tartozik a fájlok szerkesztése más felhasználó nevében (sudoedit), a futtatás szkriptből (lehetőség van háttérbe állításra, jelszó beolvasására szabványos bemenetről a billentyűzet helyett, stb.), és még sok más.
Kérjük Önt, hogy olvassa el a sudo és a sudoers man súgókat a további információért.
Telepítés
A system szoftvercsomag készlet nem tartalmazza a "sudo" szoftvercsomagot, ezért azt manuálisan kell telepíteni, ha Önnek szüksége van rá.
A su parancsnak mindig elérhetőnek kell lennie arra az esetre, ha a sudo parancs nincs telepítve.
USE jelölőzászlók
USE flags for app-admin/sudo Allows users or groups to run commands as other users
+secure-path
|
Replace PATH variable with compile time secure paths |
+sendmail
|
Allow sudo to send emails with sendmail |
gcrypt
|
Use message digest functions from dev-libs/libgcrypt instead of sudo's |
ldap
|
Add LDAP support (Lightweight Directory Access Protocol) |
nls
|
Add Native Language Support (using gettext - GNU locale utilities) |
offensive
|
Let sudo print insults when the user types the wrong password |
pam
|
Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip |
sasl
|
Add support for the Simple Authentication and Security Layer |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
skey
|
Enable S/Key (Single use password) authentication support |
ssl
|
Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security) |
sssd
|
Add System Security Services Daemon support |
verify-sig
|
Verify upstream signatures on distfiles |
Emerge
root #
emerge --ask app-admin/sudo
Beállítás
Naplózási tevékenység
A sudo egyik további előnye, hogy képes naplózni minden próbálkozást (legyen az sikeres vagy sikertelen) egy alkalmazás futtatására. Ez rendkívül hasznos, amikor nyomon kell követni, hogy ki követte el azt a végzetes hibát, amelynek kijavítása 10 órát vett igénybe. :)
Jogosultságok megadása
A app-admin/sudo szoftvercsomag lehetővé teszi a rendszergazda számára, hogy más felhasználóknak engedélyt adjon egy vagy több olyan alkalmazás futtatására, amelyeket normál körülmények között nem lenne joguk végrehajtani. Ellentétben az alkalmazások setuid
bitjének használatával, a sudo pontosabb szabályozást biztosít arra vonatkozóan, hogy ki hajthat végre egy adott parancsot és mikor.
A sudo segítségével egyértelmű lista készíthető arról, hogy ki futtathat egy adott alkalmazást. Ha a setuid bit be van állítva egy végrehajtható fájlra, akkor bármely felhasználó képes lenne futtatni az alkalmazást (vagy bármely, meghatározott csoporthoz tartozó felhasználó, a használt jogosultságoktól függően). A sudo használata esetén a felhasználó megadhat (és valószínűleg kötelező megadnia) egy jelszót az alkalmazás futtatásához.
A sudo beállítást a /etc/sudoers fájl kezeli.
A /etc/sudoers fájlt soha nem szabad nano /etc/sudoers vagy vim /etc/sudoers parancsokkal, illetve más, általánosan használt szövegszerkesztővel szerkeszteni. Amikor a /etc/sudoers fájlt módosítjuk, akkor mindig a visudo eszközt kell használni. Ez az eszköz biztosítja, hogy két rendszergazda ne szerkessze egyszerre ezt a fájlt, megőrzi a fájl jogosultságait, és végrehajt szintaktikai ellenőrzéseket annak érdekében, hogy ne legyenek végzetes hibák a fájlban.
Alapvető szintaxis
A sudo legnehezebb része a /etc/sudoers szintaxisa. Az alapvető szintaxis a következő:
user host = command
Ez a sor azt jelzi a sudo számára, hogy a felhasználó, akit a user
azonosít, és aki a host
operációs rendszerre van bejelentkezve, végrehajthatja a command
parancsot (amely lehet egy vesszővel elválasztott lista az engedélyezett parancsokból).
Egy valós példával ez még érthetőbb lehet: Ahhoz, hogy az OrbanViktor felhasználó futtathassa a emerge parancsot, amikor be van jelentkezve a localhost rendszerre:
OrbanViktor localhost = /usr/bin/emerge
A hostname nevének meg kell egyeznie a hostname parancs által visszaadott névvel.
A legegyszerűbb esetben a parancsoknak teljes mértékben meghatározott végrehajtható útvonalaknak kell lenniük: Tehát
/usr/bin/emerge
, nem pedig egyszerűen emerge
. Az útvonalak tartalmazhatnak helyettesítő karaktereket, és egész könyvtárakra is utalhatnak. További részletekért nézze meg a man súgót.Ne engedélyezze normál felhasználónak olyan alkalmazás futtatását, amely alkalmazás lehetővé teheti számára a jogosultságok emelését. Például ha a felhasználóknak engedélyezzük, hogy root felhasználóként végrehajtsák a emerge parancsot, az teljes root hozzáférést biztosíthat a rendszerhez, mert a emerge manipulálható úgy, hogy az élő fájlrendszert a felhasználó előnyére megváltoztassa. Ha a sudo felhasználók nem megbízhatóak, akkor ne adjon nekik semmilyen további jogosultságot.
A felhasználónév helyettesíthető egy csoportnévvel is, ebben az esetben a név elé egy %
jel kerül. Például annak érdekében, hogy engedélyezze a wheel csoport bármely tagjának az emerge parancs végrehajtását:
%wheel localhost = /usr/bin/emerge
Ahhoz, hogy több parancsot lehessen engedélyezni egy adott felhasználónak egy adott számítógépen, több parancsot is fel lehet sorolni ugyanabban a sorban. Például, hogy a OrbanViktor felhasználónak ne csak a emerge futtatását engedélyezze, hanem a ebuild és a emerge-webrsync parancsokat is root felhasználóként:
OrbanViktor localhost = /usr/bin/emerge, /usr/bin/ebuild, /usr/sbin/emerge-webrsync
A pontos parancssor is meghatározható (beleértve a paramétereket és argumentumokat), nem csak a végrehajtható fájl nevét. Ez hasznos lehet egy bizonyos eszköz használatának korlátozására meghatározott parancsopciókra. A sudo eszköz lehetővé teszi shell stílusú helyettesítő karakterek (más néven meta vagy glob karakterek) használatát elérési útvonalakban, valamint parancssori argumentumokban a sudoers fájlban. Vegye figyelembe, hogy ezek nem reguláris kifejezések.
Íme egy példa a sudo használatára egy olyan eszköz első alkalommal történő felhasználójának szemszögéből, akinek teljes hozzáférést biztosítottak a emerge minden funkciójához:
user $
sudo emerge -uDN world
We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. Password: ## (Enter the user password, not root!)
A sudo által igényelt jelszó a felhasználó saját jelszava. Ez azért szükséges, hogy biztosítsa, hogy egy véletlenül nyitva hagyott terminált ne használjanak fel rosszindulatú célokra.
A sudo nem módosítja a
${PATH}
változót: bármely parancs, amely a sudo után kerül végrehajtásra, a felhasználó saját környezetén belül történik. Így ha egy felhasználó egy eszközt akar futtatni a /sbin könyvtárban, például, akkor a sudo számára a parancs teljes útvonalát meg kell adnia, így:
user $
sudo /usr/sbin/emerge-webrsync
Alapszintaxis LDAP esetén
Az LDAP támogatáshoz szükség van az ldap
és a pam
USE jelölőzászlókra.
Amikor a sudo az LDAP szerverrel együtt használatos, akkor a sudo az LDAP szerver beállítását is olvassa. Ezért két fájlt kell módosítani.
/etc/ldap.conf.sudo
"Kérjük, végezze el a "chmod 400" műveletet, ha kész# See ldap.conf(5) and README.LDAP for details
# This file should only be readable by root
# supported directives: host, port, ssl, ldap_version
# uri, binddn, bindpw, sudoers_base, sudoers_debug
# tls_{checkpeer,cacertfile,cacertdir,randfile,ciphers,cert,key}
host ldap.example.com
port 389
base dc=example,dc=com
uri ldap://ldap.example.com/
#uri ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock
ldap_version 3
#ssl start_tls
sudoers_base ou=SUDOers,dc=example,dc=com
#sudoers_debug 2
bind_policy soft
/etc/nsswitch.conf
Please add the sudoers linesudoers: ldap files
A következő LDAP-bejegyzést szükséges hozzáadni a sudo számára.
Úgy lett kialakítva, hogy a sudoers ága a fa tetején helyezkedjen el biztonsági okokból. Ez lehetővé teszi, hogy az LDAP eltérő hozzáférési jogokat alkalmazzon az olvasásra és írásra ezen az ágon.
version: 1
DN: ou=SUDOers,dc=example,dc=com
objectClass: organizationalUnit
objectClass: top
objectClass: domainRelatedObject
associatedDomain: example.com
ou: SUDOers
DN: cn=defaults,ou=SUDOers,dc=example,dc=com
objectClass: top
objectClass: sudoRole
cn: defaults
description: Default sudoOption's go here
sudoOption: env_reset
DN: cn=root,ou=SUDOers,dc=example,dc=com
objectClass: top
objectClass: sudoRole
cn: root
sudoCommand: ALL
sudoHost: ALL
sudoUser: root
DN: cn=%wheel,ou=SUDOers,dc=example,dc=com
objectClass: top
objectClass: sudoRole
cn: %wheel
sudoCommand: ALL
sudoHost: ALL
sudoOption: !authenticate
sudoUser: %wheel
version: 1
DN: cn=wheel,ou=Group,dc=example,dc=com
objectClass: top
objectClass: posixGroup
cn: wheel
description: Wheel Group
gidNumber: 10
memberUid: useradmin1
memberUid: root
A sudoer beállítása az LDAP szerveren hasonló a fájlokéhoz, néhány eltéréssel. Kérjük, olvasson többet a sudo és az LDAP kapcsolatáról az alábbi linken.[1]
Aliasok használata
Nagyobb környezetekben az összes felhasználó (vagy host számítógépek, vagy parancsok) ismételt bevitele fárasztó feladat lehet. Az /etc/sudoers aliasok (álnevek) meghatározása megkönnyítheti az adminisztrációt. Az aliasok deklarálásának formátuma meglehetősen egyszerű:
Host_Alias hostalias = hostname1, hostname2, ...
User_Alias useralias = user1, user2, ...
Cmnd_Alias cmndalias = command1, command2, ...
Egy alias (egy álnév), amely mindig működik bármely pozícióban, az ALL
alias (a jó megkülönböztetés érdekében az aliasok és nem aliasok között javasolt, hogy az aliasokat nagybetűkkel írják). Az ALL
alias az összes lehetséges beállítás aliasa.
Egy példa az ALL
alias használatára, amely lehetővé teszi bármely felhasználó számára a shutdown parancs végrehajtását, amennyiben helyileg be van jelentkezve:
ALL localhost = /sbin/shutdown
Egy másik példa arra, hogy engedélyezze a OrbanViktor felhasználónak a emerge parancs végrehajtását root felhasználóként, függetlenül attól, hogy honnan van bejelentkezve:
OrbanViktor ALL = /usr/bin/emerge
Érdekesebb meghatározni egy olyan felhasználói csoportot, amely képes szoftver-adminisztrációs alkalmazásokat futtatni (például emerge és ebuild) a rendszeren, valamint egy olyan adminisztrátori csoportot, amely megváltoztathatja bármely felhasználó jelszavát, kivéve a root felhasználóét!
User_Alias SOFTWAREMAINTAINERS = OrbanViktor, john, danny
User_Alias PASSWORDMAINTAINERS = OrbanViktor, sysop
Cmnd_Alias SOFTWARECOMMANDS = /usr/bin/emerge, /usr/bin/ebuild
Cmnd_Alias PASSWORDCOMMANDS = /usr/bin/passwd [a-zA-Z0-9_-]*, !/usr/bin/passwd root
SOFTWAREMAINTAINERS localhost = SOFTWARECOMMANDS
PASSWORDMAINTAINERS localhost = PASSWORDCOMMANDS
Nem root szintű végrehajtás
Az is lehetséges, hogy egy felhasználó egy alkalmazást egy másik, nem root felhasználóként futtasson. Ez különösen érdekes lehet, amikor alkalmazásokat más felhasználóként futtatnak (például a webkiszolgálóhoz apache néven), és bizonyos felhasználóknak engedélyezni szeretnék, hogy adminisztratív lépéseket hajtsanak végre az adott felhasználóként (például zombifolyamatok leállítását).
AZ /etc/sudoers fájlban sorolja fel a felhasználókat az (
és az )
közé, mielőtt a parancslistát megadná.
users hosts = (run-as) commands
Például, hogy engedélyezze OrbanViktor felhasználónak a kill eszköz futtatását apache vagy gorg felhasználóként:
Cmnd_Alias KILL = /bin/kill, /usr/bin/pkill
OrbanViktor ALL = (apache, gorg) KILL
Ezzel a beállítással a felhasználó futtathatja a sudo -u parancsot, hogy kiválassza azt a felhasználót, akinek a nevében futtatni szeretné az alkalmazást:
user $
sudo -u apache pkill apache
Alias beállítható a felhasználónak egy alkalmazás futtatásához a Runas_Alias
irányelv használatával. Használata megegyezik a korábban látott más _Alias
irányelvekével.
Jelszavak és alapértelmezett beállítások
Alapértelmezés szerint a sudo kéri a felhasználót, hogy azonosítsa magát a saját jelszavával. Miután a jelszót beírta, a sudo 5 percig emlékszik rá, lehetővé téve a felhasználó számára, hogy a feladataira koncentráljon, és ne kelljen ismételten beírnia a jelszavát.
Természetesen ez a viselkedés megváltoztatható: Állítsa be a Defaults:
irányelvet a /etc/sudoers fájlban a felhasználó alapértelmezett viselkedésének módosításához.
Például, az alapértelmezett 5 perc 0 percre (soha ne emlékezzen) történő módosításához:
Defaults:OrbanViktor timestamp_timeout=0
A -1
érték beállítása a jelszót határozatlan ideig megjegyezné (amíg a rendszer újra nem indul).
Egy másik beállítás az lenne, hogy megköveteljük annak a felhasználónak a jelszavát, akinek a nevében a parancsot végre kell hajtani, nem pedig a felhasználó saját jelszavát. Ezt a runaspw
használatával valósíthatjuk meg. Az alábbi példában a próbálkozások számát (ahányszor a felhasználó újra beírhatja a jelszót, mielőtt a sudo sikertelen lesz) 2
-re állítjuk az alapértelmezett 3 helyett.
Defaults:john runaspw, passwd_tries=2
Egy másik érdekes funkció, hogy a DISPLAY
változót beállítva tartjuk, így grafikus eszközöket lehet végrehajtani:
DISPLAY
változó aktívan tartásaDefaults:john env_keep=DISPLAY
Tucatnyi alapértelmezett beállítás módosítható a Defaults:
irányelv használatával. Nyissa meg a sudoers man súgóját, és keressen rá a Defaults
kifejezésre.
Ahhoz, hogy egy felhasználó jelszó megadása nélkül futtathasson bizonyos parancsokat, kezdje a parancsokat a NOPASSWD:
előtaggal, például így:
OrbanViktor localhost = NOPASSWD: /usr/bin/emerge
Bash kiegészítés
Azok a felhasználók, akik a sudo-val bash kiegészítést szeretnének, egyszer futtassák ezt.
user $
echo "complete -cf sudo" >> $HOME/.bashrc
Zshell kiegészítés
Azok a felhasználók, akik a sudo-val zsh kiegészítést szeretnének, a következőket állíthatják be a .zprofile és a .zshrc fájlokban.
.zprofile
A zshell kiegészítés hozzáadásaif [[ $EUID != 0 ]]; then
typeset -xT SUDO_PATH sudo_path
typeset -U sudo_path
sudo_path=({,/usr/local,/usr}/sbin(N-/))
alias sudo="sudo env PATH=\"SUDO_PATH:$PATH\""
fi
.zshrc
A zshell kiegészítés hozzáadásazstyle ':completion:*:sudo:*' environ PATH="$SUDO_PATH:$PATH"
A fenti változtatással az összes /sbin, /usr/sbin és /usr/local/sbin helyen található parancs elérhető lesz a shell számára kiegészítés céljából, amikor a parancsot a 'sudo' előtaggal adják meg.
Ez az alias megzavarhatja a sudo beállításait, amelyek olyan parancsokat határoznak meg, mint például:
OrbanViktor localhost = NOPASSWD: /usr/bin/emerge
Használat
Jogosultságok kilistázása
A jelenlegi felhasználó képességeinek kilistázásához futtassa a sudo -l parancsot:
user $
sudo -l
User OrbanViktor may run the following commands on this host: (root) /usr/libexec/xfsm-shutdown-helper (root) /usr/bin/emerge (root) /usr/bin/passwd [a-zA-Z0-9_-]* (root) !/usr/bin/passwd root (apache) /usr/bin/pkill (apache) /bin/kill
Bármely parancsnál a /etc/sudoers fájlban, amelynél nincs szükség jelszó megadására, a bejegyzések felsorolásakor sem lesz szükség jelszóra. Ellenkező esetben a sudo jelszót fog kérni, ha az nincs megjegyezve.
Jelszó időtúllépésének meghosszabbítása
Alapértelmezés szerint, ha egy felhasználó megadta a jelszavát a sudo hitelesítéséhez, akkor az 5 percig megjegyzésre kerül. Ha a felhasználó meg szeretné hosszabbítani ezt az időszakaszt, akkor futtathatja a sudo -v parancsot az időbélyeg visszaállításához, így újabb 5 perc telik el, mielőtt a sudo ismét jelszót kérne.
user $
sudo -v
Az ellenkezője, hogy az időbélyeget a sudo -k parancs használatával törölje.
További olvasnivaló a témában
- doas — provides a way to perform commands as another user.
- su — used to adopt the privileges of other users from the system