sudo

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Sudo and the translation is 100% complete.


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

Note
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á.
Tip
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.

Important
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ő:

CODE Alapvető /etc/sudoers szintaxis
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:

CODE Valós /etc/sudoers példa
OrbanViktor  localhost = /usr/bin/emerge
Note
A hostname nevének meg kell egyeznie a hostname parancs által visszaadott névvel.
Note
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.
Warning
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:

CODE A wheel csoport bármely tagjának engedélyezése a emerge parancs végrehajtására
%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:

CODE Több parancs engedélyezése
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.

Important
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.

FILE /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
FILE /etc/nsswitch.confPlease add the sudoers line
sudoers:     ldap files

A következő LDAP-bejegyzést szükséges hozzáadni a sudo számára.

Note
Ú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.
CODE LDAP bejegyzés a sudo számára
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
CODE LDAP bejegyzés a wheel csoport számára
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ű:

CODE Aliasok (álnevek) deklarálása az /etc/sudoers fájlban
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:

CODE Bármely felhasználó számára a leállítás végrehajtásának engedélyezése
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:

CODE Allowing a user to run an application regardless of his location
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!

CODE Aliaszok használata a felhasználók számára és a parancsok számára
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á.

CODE Nem-root felhasználói végrehajtási szintaxis
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:

CODE Példa a nem root szintű végrehajtásra
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:

CODE Időtúllépés értékének módosítása
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.

CODE A root jelszó megkövetelése a felhasználó saját jelszava 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:

CODE A DISPLAY változó aktívan tartása
Defaults: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:

CODE Az emerge parancs root felhasználóként történő futtatásának engedélyezése jelszó kérése nélkül
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.

FILE .zprofileA zshell kiegészítés hozzáadása
if [[ $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
FILE .zshrcA zshell kiegészítés hozzáadása
zstyle ':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.

Warning
Ez az alias megzavarhatja a sudo beállításait, amelyek olyan parancsokat határoznak meg, mint például:
CODE Az emerge parancs root felhasználóként történő futtatásának engedélyezése jelszó kérése nélkül
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

Hivatkozások