110.2 Lecke 1
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
110 Biztonság |
Fejezet: |
110.2 Host-biztonság beállítása |
Lecke: |
1/1 |
Bevezetés
Ez a fejezet a host-biztonság javításának négy alapvető módját fejti ki:
-
Néhány alapvető parancs és konfigurációs beállítás a shadow jelszavakkal történő hitelesítés biztonságának javítására.
-
Hogyan használjuk a superdaemonokat a bejövő hálózati kapcsolatok figyelésére.
-
A hálózati szolgáltatások ellenőrzése a felesleges daemonok szempontjából.
-
TCP wrapperek, mint egyfajta egyszerű tűzfal.
A hitelesítési biztonság javítása shadow jelszavakkal
A felhasználói fiókadatok alapvető összetevői az /etc/passwd
fájlban vannak tárolva. Ez a fájl hét mezőt tartalmaz: bejelentkezési név, userid, groupid, jelszó, megjegyzés (más néven GECOS), home mappa helye és végül az alapértelmezett shell. E mezők sorrendjét egyszerűen úgy lehet megjegyezni, ha a felhasználó bejelentkezésének folyamatára gondolunk: először megadjuk a bejelentkezési nevet, másodszor a rendszer ezt egy userid-re (uid), harmadszor pedig egy groupid-re (gid) képezi le. A negyedik lépés jelszót kér, az ötödik megnézi a megjegyzést, a hatodik megadja a felhasználó home könyvtárát, a hetedik lépés pedig beállítja az alapértelmezett shellt.
A modern rendszerekben a jelszót már nem az /etc/passwd
fájlban tárolják. Ehelyett a jelszó mezőben csak egy kisbetűs x
szerepel. Az /etc/passwd
fájlnak minden felhasználó számára olvashatónak kell lennie, ezért nem jó ötlet a jelszavakat ott tárolni. Az x
azt jelzi, hogy a titkosított (hashed) jelszó valójában az /etc/shadow
fájlban van tárolva. Ez a fájl nem lehet minden felhasználó számára olvasható.
A jelszóbeállítások a passwd
és a chage
parancsokkal konfigurálhatók. Mindkét parancs megváltoztatja az emma
felhasználóhoz tartozó bejegyzést az /etc/shadow
fájlban. Szuperfelhasználóként a következő paranccsal állíthatjuk be az emma
felhasználó jelszavát:
$ sudo passwd emma New password: Retype new password: passwd: password updated successfully
Ezután a rendszer kétszer kéri az új jelszó megerősítését.
Az emma
felhasználó jelszó lejárati idejének és egyéb jelszó lejárati beállításainak listázásához használjuk az alábbit:
$ sudo chage -l emma Last password change : Apr 27, 2020 Password expires : never Password inactive : never Account expires : never Minimum number of days between password change : 0 Maximum number of days between password change : 99999 Number of days of warning before password expires : 7
Annak érdekében, hogy az emma
felhasználó ne tudjon bejelentkezni a rendszerbe, a szuperfelhasználó beállíthat egy olyan jelszó lejárati dátumot, amely megelőzi az aktuális dátumot. Ha például a mai dátum 2020-03-27 lenne, akkor egy régebbi dátummal lejárhatna a felhasználó jelszava:
$ sudo chage -E 2020-03-26 emma
A szuperfelhasználó használhat más, alternatív megoldást is:
$ sudo passwd -l emma
a fiók ideiglenes zárolása a passwd
l
kapcsolójával. A változtatások hatásának teszteléséhez próbáljunk meg bejelentkezni az emma
fiókkal:
$ sudo login emma Password: Your account has expired; please contact your system administrator Authentication failure
Ahhoz, hogy a root felhasználó kivételével egy felhasználó se tudjon ideiglenesen bejelentkezni a rendszerbe, a szuperfelhasználó létrehozhat egy /etc/nologin
nevű fájlt. Ez a fájl tartalmazhat egy üzenetet a felhasználóknak, amelyben értesítik őket arról, hogy miért nem tudnak bejelentkezni (például értesítés rendszerkarbantartásról). A részletekért lsd. a man 5 nologin
című részt! Megjegyzendő, hogy létezik egy nologin
parancs is, amely a bejelentkezés megakadályozására használható, ha egy felhasználó alapértelmezett shelljeként van beállítva. Például:
$ sudo usermod -s /sbin/nologin emma
A man 8 nologin
segítségével még több részletet megtudhatunk.
Hogyan használjunk superdaemont a bejövő hálózati kapcsolatok figyelésére
Az olyan hálózati szolgáltatások, mint a webszerverek, e-mail szerverek és nyomtatószerverek általában önálló szolgáltatásként futnak, és egy dedikált hálózati porton hallgatnak. Ezek az önálló szolgáltatások mindegyike egymás mellett fut. A klasszikus Sys-V-init alapú rendszerben ezek a szolgáltatások mindegyike a service
paranccsal vezérelhető. A jelenlegi systemd alapú rendszereken a systemctl
parancsot használjuk a szolgáltatás kezelésére.
Korábban a számítógépes erőforrások elérhetősége sokkal kisebb volt. Számos szolgáltatás önálló üzemmódban, tandemben történő futtatása nem volt jó opció. Ehelyett egy úgynevezett superdaemont használtak, amely figyelte a bejövő hálózati kapcsolatokat, és igény szerint elindította a megfelelő szolgáltatást. A hálózati kapcsolat kiépítésének ez a módszere egy kicsit több időt vett igénybe. Jól ismert superdaemonok az inetd
és az xinetd
. A systemd-re épülő jelenlegi rendszereken a systemd.socket
egységet lehet hasonló módon használni. Ebben a részben a xinetd
-t fogjuk használni a sshd
daemonhoz való kapcsolatok elfogására, és a kérésre elindítjuk ezt a daemont, hogy bemutassuk, hogyan működött a superdaemon.
A xinetd
szolgáltatás konfigurálása előtt némi előkészítésre van szükség. Nem számít, hogy Debian vagy Red Hat alapú rendszert használunk. Bár ezeket a magyarázatokat a Debian/GNU Linux 9.9-es verziójával teszteltük, minden jelenlegi, systemd-t tartalmazó Linux rendszeren működniük kell, jelentős változtatások nélkül. Először is győződjünk meg róla, hogy az openssh-server
és a xinetd
csomagok telepítve vannak. Most ellenőrizzük, hogy az SSH szolgáltatás működik-e a következőkkel:
$ systemctl status sshd ● ssh.service - OpenBSD Secure Shell server Loaded: loaded (/lib/systemd/system/ssh.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2020-04-27 09:33:48 EDT; 3h 11min ago Docs: man:sshd(8) man:sshd_config(5) Process: 430 ExecStartPre=/usr/sbin/sshd -t (code=exited, status=0/SUCCESS) Main PID: 460 (sshd) Tasks: 1 (limit: 1119) Memory: 5.3M CGroup: /system.slice/ssh.service └─460 /usr/sbin/sshd -D
Ellenőrizzük azt is, hogy az SSH szolgáltatás a 22-es szabványos hálózati porton figyel-e:
# lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME sshd 1194 root 3u IPv4 16053268 0t0 TCP *:ssh (LISTEN) sshd 1194 root 4u IPv6 16053270 0t0 TCP *:ssh (LISTEN)
Végül állítsuk le az SSH-t az alábbi módon:
$ sudo systemctl stop sshd.service
Abban az esetben, ha véglegesíteni szeretnénk ezt a változást, úgy, hogy az újraindítás után is érvényben maradjon, használjuk a systemctl disable sshd.service
parancsot!
Most létrehozhatjuk a xinetd konfigurációs fájlt /etc/xinetd.d/ssh
néhány alapvető beállítással:
service ssh { disable = no socket_type = stream protocol = tcp wait = no user = root server = /usr/sbin/sshd server_args = -i flags = IPv4 interface = 192.168.178.1 }
Indítsuk újra a xinetd szolgáltatást az alábbi módon:
$ sudo systemctl restart xinetd.service
Ellenőrizzük, hogy melyik szolgáltatás figyel most a bejövő SSH-kapcsolatokra!
$ sudo lsof -i :22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME xinetd 24098 root 5u IPv4 7345141 0t0 TCP 192.168.178.1:ssh (LISTEN)
Láthatjuk, hogy a xinetd szolgáltatás átvette a 22-es port elérésének irányítását.
Íme néhány további részlet az xinetd
konfigurációról. A fő konfigurációs fájl az /etc/xinetd.conf
:
# Simple configuration file for xinetd # # Some defaults, and include /etc/xinetd.d/ defaults { # Please note that you need a log_type line to be able to use log_on_success # and log_on_failure. The default is the following : # log_type = SYSLOG daemon info } includedir /etc/xinetd.d
Az alapértelmezett beállításokon kívül csak egy utasítás van az include mappa beállítására. Ebben a mappában minden olyan szolgáltatáshoz, amelyet az xinetd
-vel szeretnénk kezelni, egyetlen konfigurációs fájlt állíthatunk be. Mi ezt a fentiekben az SSH szolgáltatás esetében tettük meg, és az állományt /etc/xinetd.d/ssh
-nek neveztük el. A konfigurációs fájlok nevei tetszőlegesen megválaszthatók, kivéve a pontot (.
) tartalmazó vagy tilde-vel (~
) végződő fájlneveket. De elterjedt gyakorlat, hogy a fájlt a konfigurálni kívánt szolgáltatás után nevezzük el.
Néhány konfigurációs fájlt az /etc/xinet.d/
mappában a disztribúció már biztosít:
$ ls -l /etc/xinetd.d total 52 -rw-r--r-- 1 root root 640 Feb 5 2018 chargen -rw-r--r-- 1 root root 313 Feb 5 2018 chargen-udp -rw-r--r-- 1 root root 502 Apr 11 10:18 daytime -rw-r--r-- 1 root root 313 Feb 5 2018 daytime-udp -rw-r--r-- 1 root root 391 Feb 5 2018 discard -rw-r--r-- 1 root root 312 Feb 5 2018 discard-udp -rw-r--r-- 1 root root 422 Feb 5 2018 echo -rw-r--r-- 1 root root 304 Feb 5 2018 echo-udp -rw-r--r-- 1 root root 312 Feb 5 2018 servers -rw-r--r-- 1 root root 314 Feb 5 2018 services -rw-r--r-- 1 root root 569 Feb 5 2018 time -rw-r--r-- 1 root root 313 Feb 5 2018 time-udp
Ezek a fájlok sablonként használhatók abban a ritka esetben, amikor olyan régi szolgáltatásokat kell használnunk, mint például a daytime
, az időszerver egy nagyon korai implementációja. Mindegyik sablonfájl tartalmazza a disable = yes
direktívát.
Íme néhány további részlet a fenti /etc/xinetd.d/ssh
ssh példafájlban használt direktívákról.
service ssh { disable = no socket_type = stream protocol = tcp wait = no user = root server = /usr/sbin/sshd server_args = -i flags = IPv4 interface = 192.168.178.1 }
service
-
A xinetd által irányítandó szolgáltatások listája. Használhatunk akár egy portszámot, mint például 22, vagy a
/etc/services
-ben a portszámhoz rendelt nevet, példáulssh
. {
-
A részletes beállítások egy nyitó kapcsos zárójellel kezdődnek.
disable
-
Ha szeretnénk aktiválni ezeket a beállításokat, állítsuk be a
no
értéket! Ha ideiglenesen kikapcsolnánk, akkor pedig ayes
értéket. socket_type
-
Kiválaszthatjuk a
stream
opciót TCP socketekhez vagy adgram
opciót UDP socketekhez és így tovább. protocol
-
Kiválaszthatjuk vagy a TCP-t, vagy az UDP-t.
wait
-
TCP kapcsolatok esetén ez általában
no
. user
-
Az ebben a sorban indított szolgáltatás ennek a felhasználónak a tulajdonában lesz.
server
-
Az
xinetd
által indítandó szolgáltatás teljes elérési útja. server_args
-
Opciókat adhatunk hozzá a szolgáltatáshoz. Ha egy szuperszerver indítja el, sok szolgáltatás speciális opciót igényel. Az SSH esetében ez az
-i
kapcsoló. flags
-
Választhatunk IPv4-et, IPv6-ot és másokat.
interface
-
A hálózati interfész, amelyet a
xinetd
-nek kell irányítania. Megjegyzés: választhatjuk abind
direktívát is, ami csak azinterface
szinonimája. }
-
Záró kapcsos zárójellel zárjuk le.
A szuperszerver xinetd
által indított szolgáltatások utódai a systemd socket egységek. Egy systemd socket egység beállítása nagyon egyszerű és könnyű, mivel az SSH-hoz már rendelkezésre áll egy előre definiált systemd socket egység. Győződjünk meg róla, hogy az xinetd
és az SSH szolgáltatások nem futnak!
Most már csak el kell indítani az SSH socket egységet:
$ sudo systemctl start ssh.socket
Annak ellenőrzésére, hogy melyik szolgáltatás hallgat-e a 22-es porton, ismét az lsof
-ot használjuk. Figyeljük meg, hogy itt a -P
kapcsolót használtuk, hogy a kimeneten a szolgáltatás neve helyett a portszámot jelenítsük meg:
$ sudo lsof -i :22 -P COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME systemd 1 root 57u IPv6 14730112 0t0 TCP *:22 (LISTEN)
Ahhoz, hogy ez a munkamenet teljes legyen, meg kell próbálnunk bejelentkezni a szerverre egy általunk választott SSH klienssel.
Tip
|
Ha a |
Szükségtelen daemonok ellenőrzése a szolgáltatásokban
Biztonsági okokból, valamint a rendszer erőforrásainak ellenőrzése érdekében fontos, hogy áttekintést kapjunk arról, hogy milyen szolgáltatások futnak. A nem szükséges és nem használt szolgáltatásokat le kell tiltani. Például ha nem osztunk meg weboldalakat, akkor nincs szükség olyan webszerverek futtatására sem, mint az Apache vagy az nginx.
SyS-V-init alapú rendszereken a következőkkel ellenőrizhetjük az összes szolgáltatás állapotát:
$ sudo service --status-all
Ellenőrizzük, hogy a parancs által listázott szolgáltatások szükségesek-e, és tiltsuk le az összes feleslegeset (Debian-alapú rendszerek esetén):
$ sudo update-rc.d SERVICE-NAME remove
Red Hat-alapú rendszerek esetén:
$ sudo chkconfig SERVICE-NAME off
A modern systemd alapú rendszereken a következő módon listázhatjuk az összes futó szolgáltatást:
$ systemctl list-units --state active --type service
Ezután minden egyes felesleges szolgáltatásegységet letilthatunk az alábbi módon:
$ sudo systemctl disable UNIT --now
Ez a parancs leállítja a szolgáltatást, és eltávolítja a szolgáltatások listájáról, hogy a következő rendszerindításkor ne indulhasson el.
Emellett a hallgatózó hálózati szolgáltatások áttekintéséhez régebbi rendszereken használhatjuk a netstat
programot (feltéve, hogy telepítve van a net-tools
csomag):
$ netstat -ltu Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN udp 0 0 0.0.0.0:bootpc 0.0.0.0:*
Modernebb rendszereken pedig az ezzel egyenértékű ss
(“socket services”) parancsot használhatjuk:
$ ss -ltu Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 0.0.0.0:bootpc 0.0.0.0:* tcp LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* tcp LISTEN 0 80 127.0.0.1:mysql 0.0.0.0:* tcp LISTEN 0 128 *:http *:* tcp LISTEN 0 128 [::]:ssh [::]:*
TCP wrapperek, mint egyfajta egyszerű tűzfal
Azokban az időkben, amikor még nem álltak rendelkezésre tűzfalak a Linuxhoz, TCP wrappereket használtak a hálózati kapcsolatok biztosítására. Manapság sok program már nem engedelmeskedik a TCP wrappereknek. A legújabb Red Hat (pl. Fedora 29) alapú disztribúciókban a TCP wrapperek támogatása teljesen megszűnt. Hogy támogatni tudjuk a TCP wrappereket még mindig használó régebbi Linux rendszereket, hasznos lehet, ha rendelkezünk némi alapismerettel erről a technológiáról.
Egyszerű példaként ismét az SSH szolgáltatást fogjuk használni. A szolgáltatásnak a példánk hostján csak a helyi hálózatról kell elérhetőnek lennie. Először is ellenőrizzük, hogy az SSH daemon használja-e a libwrap
könyvtárat, amely TCP wrapper támogatást nyújt:
$ ldd /usr/sbin/sshd | grep "libwrap" libwrap.so.0 => /lib/x86_64-linux-gnu/libwrap.so.0 (0x00007f91dbec0000)
Most hozzáadjuk a következő sort az /etc/hosts.deny
fájlhoz:
sshd: ALL
Végül konfigurálunk egy kivételt az /etc/hosts.allow
fájlban a helyi hálózatról érkező SSH-kapcsolatokra:
sshd: LOCAL
A változások azonnal hatályba lépnek, nincs szükség semmilyen szolgáltatás újraindítására. Ezt az ssh
klienssel ellenőrizhetjük.
Gyakorló feladatok
-
Hogyan lehet a korábban zárolt
emma
fiók zárolását feloldani? -
Korábban az
emma
fióknak volt egy lejárati dátuma. Hogyan lehet a lejárati dátumotnever
-re állítani? -
Képzeljük el, hogy a nyomtatási feladatokat kezelő CUPS nyomtatási szolgáltatásra nincs szükség a szerveren. Hogyan lehet a szolgáltatást véglegesen letiltani? Hogyan ellenőrizhetjük, hogy a megfelelő port már nem aktív?
-
Telepítettük az nginx webszervert. Hogyan tudjuk ellenőrizni, hogy az nginx támogatja-e a TCP wrappereket?
Gondolkodtató feladatok
-
Ellenőrizzük, hogy a
/etc/nologin
fájl létezése megakadályozza-e aroot
felhasználó bejelentkezését? -
A
/etc/nologin
fájl létezése megakadályozza a jelszó nélküli bejelentkezést SSH-kulcsokkal? -
Mi történik bejelentkezéskor, ha a
/etc/nologin
fájlban csak ez a szöveg szerepel:login currently is not possible
? -
Megkaphatja-e egy közönséges felhasználó (
emma
) az/etc/passwd
fájlban lévőroot
felhasználóról szóló információkat, például agrep root /etc/passwd
paranccsal? -
Egy közönséges,
emma
nevű felhasználó lekérdezheti-e az/etc/shadow
fájlban található saját kódolt jelszaváról szóló információt, például agrep emma /etc/shadow
paranccsal? -
Milyen lépéseket kell tenni a xinetd által kezelendő ősrégi nappali szolgáltatás engedélyezéséhez és ellenőrzéséhez? Megjegyzés: ez csak egy kísérlet, éles környezetben ne próbáljuk ki!
Összefoglalás
Ebben a leckében megtanultuk:
-
Melyik fájlban vannak tárolva a jelszavak, valamint néhány jelszóval kapcsolatos biztonsági beállítás, pl. lejárati idő.
-
A
xinetd
superdaemon célját, valamint hogyan lehet futtatni és igény szerint elindítani azsshd
szolgáltatást. -
Annak ellenőrzését, hogy mely hálózati szolgáltatások futnak, és hogyan lehet letiltani a felesleges szolgáltatásokat.
-
A TCP wrapperek használatát egyszerű tűzfalként.
A leckében használt parancsok:
chage
-
Egy felhasználói jelszó életkorának módosítása.
chkconfig
-
Egy klasszikus parancs, amelyet eredetileg a Red Hat alapú rendszereken használtak annak beállítására, hogy egy szolgáltatás elinduljon-e a rendszerindításkor vagy sem.
netstat
-
Egy klasszikus segédprogram (most már a
net-tools
csomagban), amely megjeleníti a rendszer hálózati portjait elérő daemonokat és azok használatát. nologin
-
Egy parancs, amely a felhasználó shellje helyett használható, hogy megakadályozza a bejelentkezést.
passwd
-
Egy felhasználó jelszavának létrehozására vagy módosítására szolgál.
service
-
Régebbi módszer egy daemon állapotának ellenőrzésére, például egy szolgáltatás leállítására vagy indítására.
ss
-
A
netstat
modern megfelelője, de további információkat is megjelenít a rendszerben használt különböző socketekről. systemctl
-
A rendszervezérlő parancs, amely a systemd használatával a számítógépen lévő szolgáltatások és socketek különböző aspektusainak vezérlésére szolgál.
update-rc.d
-
A
chkconfig
-hoz hasonló klasszikus parancs, amely engedélyezi vagy letiltja a rendszer indítását a Debian alapú disztribúciók indításakor. xinetd
-
Egy superdaemon, amely képes igény szerint szabályozni egy hálózati szolgáltatáshoz való hozzáférést, így a szolgáltatás inaktív marad, amíg ténylegesen nem hívják valamilyen feladat elvégzésére.
Válaszok a gyakorló feladatokra
-
Hogyan lehet a korábban zárolt
emma
fiók zárolását feloldani?A szuperfelhasználó a
passwd -u emma
paranccsal feloldhatja a fiók zárolását. -
Korábban az
emma
fióknak volt egy lejárati dátuma. Hogyan lehet a lejárati dátumotnever
-re állítani?A szuperfelhasználó a
chage -E -1 emma
parancsot használhatja erre a célra. Ez a beállítás achage -l emma
paranccsal ellenőrizhető. -
Képzeljük el, hogy a nyomtatási feladatokat kezelő CUPS nyomtatási szolgáltatásra nincs szükség a szerveren. Hogyan lehet a szolgáltatást véglegesen letiltani? Hogyan ellenőrizhetjük, hogy a megfelelő port már nem aktív?
Szuperfelhasználóként:
systemctl disable cups.service --now
Most már ellenőrizhetjük:
netstat -l | grep ":ipp "` or `ss -l | grep ":ipp "
-
Telepítettük az nginx webszervert. Hogyan tudjuk ellenőrizni, hogy az nginx támogatja-e a TCP wrappereket?
A
ldd /usr/sbin/nginx | grep "libwrap"
parancs egy bejegyzést jelenít meg, ha az nginx támogatja a TCP wrappereket.
Válaszok a gondolkodtató feladatokra
-
Ellenőrizzük, hogy a
/etc/nologin
fájl létezése megakadályozza-e aroot
felhasználó bejelentkezését?A
root
továbbra is képes bejelentkezni. -
A
/etc/nologin
fájl létezése megakadályozza a jelszó nélküli bejelentkezést SSH-kulcsokkal?Igen, a jelszó nélküli bejelentkezések is meg lesznek akadályozva.
-
Mi történik bejelentkezéskor, ha a
/etc/nologin
fájlban csak ez a szöveg szerepel:login currently is not possible
?A
login currently is not possible
üzenet jelenik meg és a bejelentkezés megakadályozásra kerül. -
Megkaphatja-e egy egyszerű felhasználó (
emma
) az/etc/passwd
fájlban lévőroot
felhasználóról szóló információkat, például agrep root /etc/passwd
paranccsal?Igen, mert minden felhasználónak olvasási joga van ehhez a fájlhoz.
-
Egy egyszerű,
emma
nevű felhasználó lekérdezheti-e az/etc/shadow
fájlban található saját kódolt jelszaváról szóló információt, például agrep emma /etc/shadow
paranccsal?Nem, mivel az egyszerű felhasználóknak nincs olvasási jogosultságuk ezen a fájlon.
-
Milyen lépéseket kell tenni a xinetd által kezelendő ősrégi nappali szolgáltatás engedélyezéséhez és ellenőrzéséhez? Megjegyzés: ez csak egy kísérlet, éles környezetben ne próbáljuk ki!
Először módosítsuk a
/etc/xinetd.d/daytime
fájlt, és állítsuk be adisable = no
direktívát! Másodszor indítsuk újra az xinetd szolgáltatást:systemctl restart xinetd.service
(vagyservice xinetd restart
SyS-V-Init rendszereken). Most már ellenőrizhetjük, hogy működik-e aznc localhost daytime
! Aznc
helyett használhatjuk anetcat
-et is.