ΠΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΡΠΌΠΈ ΠΎΠΏΡΠΈΡΠΌΠΈ ΠΌΠΎΠ½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ nogrpid ΠΈ sysvgroups. ΠΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ; ΠΎΠ΄Π½Π°ΠΊΠΎ, Π±ΠΈΡ setgid. Π΅ΡΠ»ΠΈ ΠΎΠ½ Π΅ΡΡΡ, Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ. (ΠΠ΄Π΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΎΠ±Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΎΠ·Π½Π°ΡΠ°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅.)
POSIX ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ, ΡΡΠΎ Π½ΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π½Π°ΡΠ»Π΅Π΄ΡΡΡ Π»ΠΈΠ±ΠΎ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ GID ΡΠΎΠ·Π΄Π°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, Π»ΠΈΠ±ΠΎ Π³ΡΡΠΏΠΏΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. ΠΠ΄Π½Π°ΠΊΠΎ, ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠ΅ΡΡ ΡΠΏΠΎΡΠΎΠ± Π·Π°ΡΡΠ°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ Π³ΡΡΠΏΠΏΡ ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΡΡΠ°Π½Π΄Π°ΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ ΠΏΠΎΠ»Π°Π³Π°Π»ΠΈΡΡ Π½Π° ΡΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅, Π½ΠΎ Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΡΡΠΎ ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ chown() Π΄Π»Ρ ΠΏΡΠΈΠ½ΡΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ GID Π΄Π»Ρ Π³ΡΡΠΏΠΏΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°.
11.5.2. ΠΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΈ Β«Π»ΠΈΠΏΠΊΠΈΠΉΒ» Π±ΠΈΡ
Β«Π¨Π΅ΡΠΌΠ°Π½, ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π΄Π»Ρ 1976 Π³.Β»
- Π-Ρ ΠΠΈΠ±ΠΎΠ΄ΠΈ (Mr. Peabody) -Β«ΠΠΈΠΏΠΊΠΈΠΉΒ» Π±ΠΈΡ Π²Π΅Π΄Π΅Ρ Π½Π°ΡΠ°Π»ΠΎ ΠΎΡ Π²Π΅ΡΡΠΈΠΉ Unix Π΄Π»Ρ PDP-11, ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Ρ ΠΎΠ±ΡΡΠ½ΡΠΌΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΌΠΈ ΡΠ°ΠΉΠ»Π°ΠΌΠΈ[119]. ΠΡΠΎΡ Π±ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΡΡ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ°Π»ΠΈΡΡ Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ, ΡΠ°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠ° ΠΈ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ. ΠΠΎΠ³Π΄Π° Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π±ΡΠ» ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ ΡΡΠΎΡ Π±ΠΈΡ, ΡΠ΄ΡΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΎ ΠΊΠΎΠΏΠΈΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΏΠΎΠ΄ΠΊΠ°ΡΠΊΠΈ, ΠΈΠ· ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±ΡΡΡΡΠΎ Π·Π°Π³ΡΡΠ·ΠΈΡΡ Π² ΠΏΠ°ΠΌΡΡΡ Π΄Π»Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. (ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ°Π· Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π΅ ΠΏΠΎΠ΄ΠΊΠ°ΡΠΊΠΈ Ρ ΡΠ°Π½ΠΈΠ»ΡΡ Π² ΡΠΌΠ΅ΠΆΠ½ΡΡ Π΄ΠΈΡΠΊΠΎΠ²ΡΡ Π±Π»ΠΎΠΊΠ°Ρ , ΡΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π· Π² ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ ΠΌΠΎΠ³ Π±ΡΡΡ ΡΠ°Π·Π±ΡΠΎΡΠ°Π½ ΠΏΠΎ Π²ΡΠ΅ΠΌΡ Π΄ΠΈΡΠΊΡ). ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ ΠΎΠ±ΡΠ°Π·Ρ Π±ΡΠ»ΠΈ Β«ΠΏΡΠΈΠΊΠ»Π΅Π΅Π½ΡΒ» ΠΊ ΡΡΡΡΠΎΠΉΡΡΠ²Ρ ΠΏΠΎΠ΄ΠΊΠ°ΡΠΊΠΈ, ΠΎΡΡΡΠ΄Π° ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π² Π½Π°ΡΡΠΎΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π°ΡΡ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π»ΠΎΡΡ, ΡΡΠΎ ΠΎΠ½Π° Π²ΡΠΊΠΎΡΠ΅ ΠΌΠΎΠ³Π»Π° Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π΄ΡΡΠ³ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½Π° ΠΌΠΎΠ³Π»Π° Π±ΡΡΡ Π±ΡΡΡΡΠΎ Π·Π°Π³ΡΡΠΆΠ΅Π½Π°.
Π ΡΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ Π±ΡΡΡΡΡΠ΅ Π΄ΠΈΡΠΊΠΎΠ²ΠΎΠ΅ ΠΎΠ±ΠΎΡΡΠ΄ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ°ΠΌΡΡΡ, ΡΠ΅ΠΌ Π² Π΄Π°Π²Π½ΠΈΡΠ½Π΅ΠΉ PDP-11. ΠΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈΠΊΡ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΡ ΠΏΠΎΠ΄ΠΊΠ°ΡΠΊΠ° ΠΏΠΎ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ, Π΄Π»Ρ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Π² ΠΏΠ°ΠΌΡΡΡ Π»ΠΈΡΡ ΡΠ΅Ρ ΡΠ°ΡΡΠ΅ΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠ΅Π³ΠΎΠ΄Π½Ρ Β«Π»ΠΈΠΏΠΊΠΈΠΉΒ» Π±ΠΈΡ ΠΎΠ±ΡΡΠ½ΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² Π½Π΅ ΡΠ»ΡΠΆΠΈΡ Π½ΠΈΠΊΠ°ΠΊΠΈΠΌ ΡΠ΅Π»ΡΠΌ ΠΈ Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π½ΠΈ Π½Π° ΡΡΠΎ Π½Π΅ Π²Π»ΠΈΡΠ΅Ρ.
ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 1.1.2 Β«ΠΠ°ΡΠ°Π»ΠΎΠ³ΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Β» ΠΌΡ ΡΠΏΠΎΠΌΡΠ½ΡΠ»ΠΈ, ΡΡΠΎ Β«Π»ΠΈΠΏΠΊΠΈΠΉΒ» Π±ΠΈΡ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π΅, Π·Π°ΠΏΠΈΡΡ Π² ΠΊΠΎΡΠΎΡΡΠΉ Π² Π΄ΡΡΠ³ΠΈΡ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π°, ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΈ ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Π»ΡΠ±ΡΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ, ΠΊΡΠΎΠΌΠ΅ Π²Π»Π°Π΄Π΅Π»ΡΡΠ° ΡΠ°ΠΉΠ»Π° ΠΈΠ»ΠΈ root. ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ:
$ ls -ld /tmp /* ΠΠΎΠΊΠ°Π·Π°ΡΡ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ /tmp */
drwxrwxrwt 19 root root 4096 Oct 20 14:04 /tmp
$ cd /tmp /* ΠΠ΅ΡΠ΅ΠΉΡΠΈ ΡΡΠ΄Π° */
$ echo this is my file > arnolds-file /* Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΠ°ΠΉΠ» */
$ ls -l arnolds-file /* ΠΠΎΠΊΠ°Π·Π°ΡΡ Π΅Π³ΠΎ ΠΏΡΠ°Π²Π° Π΄ΠΎΡΡΡΠΏΠ° */
-rw-r--r-- 1 arnold devel 16 Oct 20 14:14 arnolds-file
$ su - miriam /* Π‘ΠΌΠ΅Π½Π° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ */
Password:
$ cd /tmp /* ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π² /tmp */
$ rm arnolds-file /* ΠΠΎΠΏΡΡΠΊΠ° ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ°ΠΉΠ»Π° */
rm: remove write-protected regular file 'arnolds-file'? y
/* rm ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π΅Ρ */
rm: cannot remove 'arnolds-file': Operation not permitted
/* Π―Π΄ΡΠΎ Π·Π°ΠΏΡΠ΅ΡΠ°Π΅Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ */
ΠΡΠ½ΠΎΠ²Π½ΡΠΌ Π½Π°Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΡΠ°Π· ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π°Ρ , ΠΊΠ°ΠΊ /tmp, ΠΊΡΠ΄Π° Ρ ΠΎΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ°ΡΡ ΡΠ²ΠΎΠΈ ΡΠ°ΠΉΠ»Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ. Π‘ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΠΊΠ°ΡΠ°Π»ΠΎΠ³ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΠΏΡΠ°Π²Π° Π·Π°ΠΏΠΈΡΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ , ΡΡΠΎΠ±Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΌΠΎΠ³ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΡΠ°ΠΌ ΡΠ²ΠΎΠΈ ΡΠ°ΠΉΠ»Ρ. Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ, ΡΠ°Π· Π·Π°ΠΏΠΈΡΡ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Π° Π΄Π»Ρ Π²ΡΠ΅Ρ , Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π°Π»ΡΡΡ ΡΠ°ΠΉΠ»Ρ Π²ΡΠ΅Ρ ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ! Β«ΠΠΈΠΏΠΊΠΈΠΉΒ» Π±ΠΈΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΠΊΡΠ°ΡΠΈΠ²ΠΎ ΡΠ΅ΡΠ°Π΅Ρ ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΊ ΡΠ°ΠΉΠ»Ρ ΠΈΠ»ΠΈ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Ρ Β«Π»ΠΈΠΏΠΊΠΎΠ³ΠΎΒ» Π±ΠΈΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ 'chmod +t':
$ mkdir mytmp /* Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ */
$ chmod a+wxt mytmp /* ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠ°Π²Π° Π·Π°ΠΏΠΈΡΠΈ Π΄Π»Ρ Π²ΡΠ΅Ρ ΠΈ Β«Π»ΠΈΠΏΠΊΠΈΠΉΒ» Π±ΠΈΡ */
$ ls -ld mytmp /* ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ */
drwxrwxrwt 2 arnold devel 4096 Oct 20 14:23 mytmp
Π Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΡΡΠΎ Π²Π»Π°Π΄Π΅Π»Π΅Ρ ΠΊΠ°ΡΠ°Π»ΠΎΠ³Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ°ΠΉΠ»Ρ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π΅ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ Π΅ΠΌΡ.
11.6. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ID
ΠΡΠ΅ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π΅Π΅, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΌΠ΅Π½ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ UID ΠΈ GID. Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π½Π°Π±ΠΎΡΠ° Π³ΡΡΠΏΠΏ ΠΏΡΠΎΡΡΠ°. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ UID ΠΈ GID ΡΠ»ΠΎΠΆΠ½Π΅Π΅.
11.6.1. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π°Π±ΠΎΡΠ° Π³ΡΡΠΏΠΏ
Π€ΡΠ½ΠΊΡΠΈΡ setgroups() ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π½ΠΎΠ²ΡΠΉ Π½Π°Π±ΠΎΡ Π³ΡΡΠΏΠΏ:
#include <sys/types.h> /* Common */
#include <unistd.h>
#include <grp.h>
int setgroups(size_t size, const gid_t *list);
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ size ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ list. ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π²Π½ΠΎ 0, Π΅ΡΠ»ΠΈ Π²ΡΠ΅ Π±ΡΠ»ΠΎ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΈ -1 Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ errno Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ Π΄Π»Ρ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ UID ΠΈ GID, ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ Π»ΠΈΡΡ ΠΏΡΠΎΡΠ΅ΡΡ, Π΄Π΅ΠΉΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠ°ΠΊ root. ΠΡΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎ POSIX Π½Π°Π·ΡΠ²Π°Π΅Ρ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ; ΡΠ°ΠΌΠ° ΠΎΠ½Π° ΠΊΠ°ΠΊ ΡΠ°ΠΊΠΎΠ²Π°Ρ Π½Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠΈΠ·ΡΠ΅ΡΡΡ POSIX.
setgroups() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π»ΡΠ±ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΎΠΉ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠ°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ /bin/login Π΄Π»Ρ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Π² ΠΊΠΎΠ½ΡΠΎΠ»ΠΈ ΠΈ /bin/sshd Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ssh.
11.6.2. ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ID
Π Π°Π±ΠΎΡΠ° Ρ Π΄Π²ΡΠΌΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ID ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠΎΠ³ΡΡ Π±ΡΡΡ Π²Π΅ΡΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½ΡΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΠ°Π±ΠΎΡΠ°Ρ Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ UID, Π° Π΄ΡΡΠ³ΠΈΠ΅ Π²Π΅ΡΠΈ β ΡΠ°Π±ΠΎΡΠ°Ρ Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ UID.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄ΠΎ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π² ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Unix ΠΏΠΎΡΠ²ΠΈΠ»ΠΎΡΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Π½ΠΈΡΠΌΠΈ, ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ»ΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Ρ Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ, Ρ.Π΅. ΡΠΏΠΎΡΠΎΠ± Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΈΠ»ΠΈ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π₯ΠΎΡΠΎΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ed: Π½Π°Π±ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, Π½Π°ΡΠΈΠ½Π°ΡΡΠ΅ΠΉΡΡ Ρ '!', Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΎΡΡΠ°Π²ΡΡΡΡΡ ΡΠ°ΡΡΡ ΡΡΡΠΎΠΊΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ. ΠΠ°Π±ΡΠ°Π² '!sh', Π²Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΡΡ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ. (ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ β ΠΏΠΎΠΏΡΠΎΠ±ΡΠΉΡΠ΅!) ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΎΠΏΠΈΡΠ°Π½Π½Π°Ρ ΡΠ°Π½Π΅Π΅ Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΈΠ³ΡΠΎΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΡ: ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΎΡ ΠΈΠΌΠ΅Π½ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π° Π½Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»Π° ΡΡΠ΅ΡΠ° ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π³ΠΎΡΠ°Π·Π΄ΠΎ Ρ ΡΠ΄ΡΠΈΠ΅ Π²Π΅ΡΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π΄Π»Ρ ΠΈΠ³ΡΠΎΠΊΠ° ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ΠΉ!
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠ²Π½Π°Ρ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π² Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π°ΠΌΠ΅Π½Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ UID Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠΌ UID. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ UID Π½Π° ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΉ. (Π ΡΡΠΎΠΌ ΠΏΡΠΈΡΠΈΠ½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π½Π°Π»ΠΈΡΠΈΡ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΠΎΠ³ΠΎ set-user ID; ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΡ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΈ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΡΠΈ Π΅Π³ΠΎ Π·Π°ΠΏΡΡΠΊΠ΅.)
ΠΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Unix API, ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ΅ΡΠΈΠ»ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΠΈΠ½ΠΎΠ³Π΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ API, Π½ΠΎ Ρ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΎΠΉ, Π° ΠΈΠ½ΠΎΠ³Π΄Π° Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π΄ΡΡΠ³ΠΎΠ³ΠΎ API. ΠΠΎΠ³ΡΡΠΆΠ΅Π½ΠΈΠ΅ Π² ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ Π³ΠΎΠ΄ΠΈΡΡΡ Π»ΠΈΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π³ΠΎΠ»ΠΎΠ²Π½ΠΎΠΉ Π±ΠΎΠ»ΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Ρ ΡΡΠΈΠΌ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡΡΡΡ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ, ΡΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ POSIX ΠΈ ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΆΠ΄ΡΠΉ API. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π½Π°ΡΠ΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΡΠΎΠΊΡΡΠΈΡΡΠ΅ΡΡΡ Π½Π° Π·Π½Π°ΡΠ΅Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ UID; Π·Π½Π°ΡΠ΅Π½ΠΈΡ GID ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΡ Π½Π΅ Π±ΡΠ΄Π΅ΠΌ Ρ Π»ΠΎΠΏΠΎΡΠ°ΡΡ Ρ ΠΏΠΎΠ²ΡΠΎΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠ΅ΠΉ Π΄Π»Ρ ΡΡΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ². Π€ΡΠ½ΠΊΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅:
#include <sys/types.h> /* POSIX */
#include <unistd.h>
int seteuid(uid_t euid); /* Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ID */
int setegid(gid_t egid);
int setuid(uid_t uid);
/* Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ID, root ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ */
int setgid(gid_t gid);
int setreuid(uid_t ruid, uid_t euid);
/* Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ BSD, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ ΠΎΠ±Π° */
int setregid(gid_t rgid, gid_t egid);
ΠΡΡΡ ΡΡΠΈ Π½Π°Π±ΠΎΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ. ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° Π±ΡΠ»ΠΈ ΡΠΎΠ·Π΄Π°Π½Ρ POSIX:
int seteuid(uid_t euid)
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π»ΠΈΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ UID. ΠΠ±ΡΡΠ½ΡΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (Π½Π΅ root) ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ID Π»ΠΈΡΡ Π² Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ, ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΠΎΠ³ΠΎ set-user ID. ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ UID. Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ.
ΠΡΠΎΡΠ΅ΡΡ Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ UID, ΡΠ°Π²Π½ΡΠΌ Π½ΡΠ»Ρ, ΠΌΠΎΠΆΠ΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ UID Π»ΡΠ±ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ UID ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠΎΡ ΡΠ°Π½Π΅Π½Π½ΡΠΉ set-user ID, ΠΏΡΠΎΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ²ΠΎΠΈ ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ root Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° seteuid().
int setegid(gid_t egid)
ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π΄Π΅Π»Π°Π΅Ρ Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ID Π³ΡΡΠΏΠΏΡ ΡΠΎ, ΡΡΠΎ seteuid() Π΄Π΅Π»Π°Π΅Ρ Π΄Π»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ID ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
Π‘Π»Π΅Π΄ΡΡΡΠΈΠΉ Π½Π°Π±ΠΎΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΡΠΉ API Unix Π΄Π»Ρ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ UID ΠΈ GID. Π ΠΌΠΎΠ΄Π΅Π»ΠΈ POSIX ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΡΠ΅ΠΌ. ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Ρ setuid-root Π΄Π»Ρ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ UID: