WikiDer > Сетуид

Setuid

The Unix қол жеткізу құқықтары жалаушалары сетюид және setgid («пайдаланушы идентификаторын орнату» және «топ идентификаторын орнату» деген қысқаша)[1] пайдаланушыларға орындалатын бірге файлдық жүйенің рұқсаттары сәйкесінше орындалатын файл иесінің немесе топтың және каталогтардағы мінез-құлықты өзгерту. Олар көбінесе белгілі бір тапсырманы орындау үшін компьютерлік жүйенің қолданушыларына уақытша жоғарылатылған артықшылықтары бар бағдарламаларды іске қосуға мүмкіндік беру үшін қолданылады. Ұсынылған пайдаланушы идентификаторы немесе топ идентификаторы артықшылықтары әрдайым көтерілмегенімен, ең болмағанда олар нақты болып табылады.

Жалаулар,сетюид және setgid, жүйеге кіру паролін өзгерту үшін жүйелік файлдарды немесе мәліметтер базасын өзгерту мүмкіндігі сияқты пайдаланушыға берілгеннен гөрі әртүрлі артықшылықтарды қажет ететін тапсырмалар үшін қажет.[2] Қосымша артықшылықтарды қажет ететін кейбір тапсырмалар бірден айқын болмауы мүмкін, дегенмен пинг жіберу және тыңдау қажет команда пакеттерді басқару желілік интерфейсте.

Әсер

The сетюид және setgid жалаулар файлға, каталогқа немесе екілік орындалатын немесе екілік емес орындалатын файлға қолданылуына байланысты әр түрлі эффекттерге ие. The сетюид және setgid жалаулар тек екілік орындалатын файлдарға әсер етеді. Бұл биттерді bash, perl немесе python сияқты сценарийлерге орнату ешқандай әсер етпейді.[3]

Орындалатын файлға орнатылған кезде

Қашан сетюид немесе setgid атрибуттар орындалатын файлды орындай алатын кез келген пайдаланушы файлды автоматты түрде файл иесінің артықшылықтарымен орындайды (әдетте тамыр) және / немесе жалаушаларға байланысты файл тобы.[2] Бұл жүйенің дизайнеріне сенімді бағдарламаларды іске қосуға мүмкіндік береді, олар пайдаланушыға басқаша орындауға рұқсат етілмейді. Бұлар әрқашан айқын бола бермеуі мүмкін. Мысалы, пинг команда қарапайым пайдаланушыға қол жеткізе алмайтын желілік артықшылықтарға қол жеткізуді қажет етуі мүмкін; сондықтан, егер басқа есептік жазбада пакеттер жіберу үшін қажетті артықшылық болмаса да, басқа жүйеге пинг жасауды қажет ететін пайдаланушының мұны істей алатындығына көз жеткізетін жалауша берілуі мүмкін.

Қауіпсіздік мақсатында шақырушы пайдаланушыға жүйеге жаңа процесті кез келген тәсілмен өзгертуге тыйым салынады, мысалы. із, LD_LIBRARY_PATH немесе көтерілген артықшылықты пайдалану үшін оған сигналдар жіберу, дегенмен терминалдан сигналдар қабылданады.

The сетюид және setgid биттер әдетте командамен орнатылады chmod жоғары реттік сегіздік цифрды 4-ке орнату арқылы сетюид немесе 2 үшін setgid. "chmod 6711 файл«екеуін де орнатады сетюид және setgid биттер (4 + 2 = 6), файлды иесіне оқуға / жазуға / орындауға мүмкіндік береді (7), ал топ (бірінші 1) және басқалары (екінші 1) орындай алады. Файлды иесінен басқа пайдаланушы орындаған кезде, процесс оның иесі орнатқан пайдаланушы мен топтық рұқсаттармен іске қосылады. Мысалы, егер файл пайдаланушыға тиесілі болса тамыр және топ доңғалақ, ол келесідей жұмыс істейді түбір: дөңгелек файлды кім орындайтынына қарамастан.

Жүзеге асырудың көп бөлігі chmod команда сонымен қатар осы биттерді орнату үшін нақты, символдық дәлелдерді қолдайды. Жақсырақ ұсақталған режим төмендегі демонстрацияда «chmod ug + s"

Қауіпсіздікке әсер ету

Әзірге сетюид функция көптеген жағдайларда өте пайдалы, оны дұрыс қолданбау қауіпсіздікке қауіп төндіруі мүмкін[2] егер сетюид атрибут тағайындалады орындалатын мұқият ойластырылмаған бағдарламалар. Қауіпсіздік мәселелеріне байланысты,[4] көптеген операциялық жүйелер сетюид орындалатын файлға қолданылған кезде төлсипат сценарийлер.

Болуы сетюид орындалатын файлдар түсіндіреді хроот жүйелік қоңырау қол жетімді емес адамдар үшін қол жетімді еместамыр Unix-тегі қолданушылар. Қараңыз шектеулер хроот толығырақ ақпарат алу үшін.

Анықтамалыққа орнатылған кезде

Параметрін орнату setgid каталогтағы рұқсат («»chmod g + s«) жаңа файлдар мен оның ішінде құрылған ішкі каталогтарды тудырады оның топ идентификаторын мұрагер ету, файлды жасаған пайдаланушының негізгі топтық идентификаторынан гөрі (иесінің идентификаторына ешқашан әсер етпейді, тек топтық идентификатордан).

  1. Жаңадан құрылған ішкі каталогтар мұрагер болып табылады setgid бит. Осылайша, бұл топ үшін ортақ жұмыс кеңістігін топ мүшелерінен жаңа файлдар немесе каталогтар жасамас бұрын олардың ағымдағы тобын нақты өзгертуін талап етпейтін ыңғайсыздықты қосады.
  2. кейін құрылған жаңа файлдар мен ішкі каталогтардың топтық идентификаторына ғана әсер етеді setgid бит орнатылған және ол бар нысандарға қолданылмайды.
  3. басқа жерде жасалған және қарастырылып отырған каталогқа көшірілген файлдардың топтық идентификаторына әсер етпейді. Файл қашан және қай жерде жасалған топ идентификаторын алып жүре береді.

Параметрін орнату setgid бар ішкі каталогтардағы бит сияқты бұйрықпен қолмен орындалуы керек find / path / to / directory -type d -exec chmod g + s '{}' ;

The сетюид каталогта орнатылған рұқсат көп жағдайда еленбейді UNIX және Linux жүйелер.[дәйексөз қажет] Алайда FreeBSD түсіндіру үшін конфигурациялауға болады сетюид ұқсас тәсілмен setgid, бұл жағдайда каталогта жасалған барлық файлдар мен ішкі каталогтарды сол каталог иесіне тиесілі етуге мәжбүр етеді - мұрагерліктің қарапайым түрі.[5] Бұл, әдетте, көптеген жүйелерде қажет емес BSD, өйткені әдепкі бойынша каталогтар сол сияқты қарастырылады setgid бит нақты мәнге қарамастан әрқашан орнатылады. Айтылғандай ашық (2), «Жаңа файл жасалған кезде оған құрамында каталогтың тобы беріледі.»[6]

Мысалдар

Рұқсаттарды тексеру

Файлға рұқсатты сегіздік түрінде және / немесе әріптік формада пәрмен жолы құралының көмегімен тексеруге болады стат

[torvalds ~] $ stat -c «% a% A» ~ / test /1770 drwxrwx - T

SUID

4701 'root' және 'root' тобына тиесілі орындалатын файлда

'Томпсон' деген пайдаланушы файлды орындауға тырысады. Барлық пайдаланушылар үшін орындалуға рұқсат берілген ('1'), сондықтан 'Томпсон' файлды орындай алады. Файл иесі 'root' және SUID рұқсаты орнатылған ('4'), сондықтан файл 'root' ретінде орындалады.

Орындалатын файлдың «түбір» ретінде іске қосылуының себебі, ол пайдаланушыға түбірге толық қол жеткізбей, пайдаланушыға әдетте рұқсат етілмеген белгілі бір файлдарды өзгерте алады.

Мұның әдепкі қолданылуын / usr / bin / passwd екілік файл. / usr / bin / passwd өзгерту керек / etc / passwd және / etc / shadow барлық пайдаланушыларға арналған тіркелгі ақпаратын және құпия сөзді сақтауды сақтайтын және оларды тек «root» қолданушы өзгерте алады.

[томпсон ~] $ stat -c «% a% U:% G% n» / usr / bin / passwd4701 root: root / usr / bin / passwd[томпсон ~] $ құпия сөзpasswd: Томпсон үшін парольді өзгерту

Процестің иесі - бұл орындалатын файлды басқаратын пайдаланушы емес, орындалатын файлдың иесі

SGID

2770 'root' пайдаланушысына және 'инженерлер' тобына тиесілі 'музыка' каталогында

Негізінен «торвальдтар» тобына, бірақ екінші кезекте «инженерлер» тобына жататын «torvalds» деген пайдаланушы «музыка» каталогының астында «электронды» каталог жасайды. 'Электрондық' деп аталатын жаңа каталогтың топтық меншігі 'инженерлерге' мұрагерлік етеді. Бұл жаңаны жасау кезінде де солай файл 'imagin.txt' деп аталды

SGID болмаса, жаңа каталогтың / файлдың топтық иелігі «торвалдтар» болар еді, өйткені бұл «torvalds» пайдаланушының негізгі тобы.

[torvalds ~] $ торвалдтар топтарыторвальдтар: торвальдтар инженерлері[torvalds ~] $ stat -c «% a% U:% G% n» ./music/2770 түбір: инженерлер ./music/[torvalds ~] $ mkdir ~ / музыка / электронды[torvalds ~] $ stat -c «% U:% G% n» ./music/electronic/торвалдтар: инженерлер ./music/electronic/[torvalds ~] $ жаңғырық 'ЖАҢА ФАЙЛ' > ~ / music / imagine.txt[torvalds ~] $ stat -c «% U:% G% n» ./music/imagine.txttorvalds: инженерлер ./music/imagine.txt[torvalds ~] $ touch ~ / test[torvalds ~] $ stat -c «% U:% G% n» ~ / сынақторвалдтар: торвалдтар ~ / тест

Жабысқақ бит

1770 'torvalds' пайдаланушысына және 'инженерлер' тобына тиесілі 'видеоойындар' каталогында.

'Torvalds' деген пайдаланушы 'videogames' каталогының астында 'tekken' файлын жасайды. 'Инженерлер' тобына кіретін 'wozniak' атты қолданушы 'tekken' файлын жоюға тырысады, бірақ ол иесі бола алмайтындықтан оны өшіре алмайды.

«Wozniak» жабысқақ файлынсыз файлды өшіріп тастауы мүмкін еді, өйткені «видеоойындар» каталогы «инженерлердің» оқуына және жазуына мүмкіндік береді. Мұның әдепкі қолданысын мына жерден көруге болады / tmp папка.

[torvalds / home / shared /] $ торвалдтар топтарыторвальдтар: торвальдтар инженерлері[torvalds / home / shared /] $ stat -c «% a% U:% G% n» ./Видео Ойындары/1770 торвалд: инженерлер ./videogames/[torvalds / home / shared /] $ жаңғырық 'ЖАҢА ФАЙЛ' > видеоойындар / tekken[torvalds / home / shared /] $ су - вознякПароль:[wozniak ~ /] $ топтарwozniak: wozniak инженерлері[wozniak ~ /] $ CD / үй / ортақ / бейнеойындар[wozniak / home / shared / videogames /] $ rm tekkenrm: ‘tekken’ жою мүмкін емес: Операцияға рұқсат етілмейді

SGID бар жабысқақ бит

3171 'инженерлер' тобы мен 'root' пайдаланушысына тиесілі 'блог' каталогында

Негізінен 'torvalds' тобына, бірақ екінші кезекте 'инженерлер' тобына жататын 'torvalds' пайдаланушысы 'блог' каталогының ішінде 'ой' атты файл немесе каталог жасайды. 'Инженерлер' тобына жататын 'wozniak' деген пайдаланушы 'ой' деп аталатын файлды немесе каталогты өшіре алмайды, атын өзгерте алмайды немесе жылжыта алмайды, өйткені ол иесі емес және жабысқақ бит орнатылған. Алайда, егер 'ойлар' файл болса, 'wozniak' оны өңдей алады.

Жабысқақ биттің соңғы шешімі бар. Егер жабысқақ бит пен SGID орнатылмаған болса, 'wozniak' пайдаланушысы 'ойлар' деп аталатын файлдың атын өзгерте, жылжыта немесе жоя алады, себебі 'блог' каталогы топ бойынша оқуға және жазуға мүмкіндік береді, ал wozniak топқа жатады және стандартты 0002 умаск жаңа файлдарды топ бойынша редакциялауға мүмкіндік береді. Жабысқақ бит пен SGID тек оқуға арналған umask немесе тек қосымшаның төлсипаты сияқты нәрселермен үйлесуі мүмкін.

[torvalds / home / shared /] $ торвалдтар топтарыторвальдтар: торвальдтар инженерлері[torvalds / home / shared /] $ stat -c «% a% U:% G% n» ./blog/3171 root: инженерлер ./blog/[torvalds / home / shared /] $ жаңғырық 'ЖАҢА ФАЙЛ' > ./blog/thoughts[torvalds / home / shared /] $ су - вознякПароль:[wozniak ~ /] $ CD / үй / ортақ / блог[wozniak / home / shared / blog /] $ топтарwozniak: wozniak инженерлері[wozniak / home / shared / blog /] $ stat -c «% a% U:% G% n» ./thoughts664 торвальд: инженерлер ./thoughts[wozniak / home / shared / blog /] $ rm ойларыrm: ‘ойларды’ жою мүмкін емес: Операцияға рұқсат етілмейді[wozniak / home / shared / blog /] $ mv ойлары / үй / wozniak /mv: ‘ойларды’ / home / wozniak / thoughts ’-ге ауыстыру мүмкін емес: Операцияға рұқсат етілмейді[wozniak / home / shared / blog /] $ mv ойларmv: «ойларды» «ойлануға» ауыстыру мүмкін емес: Операцияға рұқсат етілмейді[wozniak / home / shared / blog /] $ жаңғырық 'ЖАЗУ!' > ойлар[wozniak / home / shared / blog /] $ мысық туралы ойларҚАЙТА ЖАЗУ!

Қауіпсіздік

Әзірлеушілер қауіпсіздіктің осалдығын болдырмау үшін орындалатын файлдарда осы битті қолданатын бағдарламаларды әзірлеуі және енгізуі керек буферлік артық және жол инъекциясы. Осал қосымшаларға сәтті буферлік шабуылдар шабуылдаушыға пайдаланылған процестің құқықтары бойынша ерікті кодты орындауға мүмкіндік береді. Егер осал процесс қолданылған жағдайда сетюид ретінде жүгіру үшін бит тамыр, код түбірлік артықшылықтармен орындалады, осылайша шабуылдаушыға осал процесс жұмыс істейтін жүйеге кіру құқығын береді.

Жағдайда ерекше маңызды сетюид процесс болып табылады қоршаған орта процестің. Егер қоршаған орта артықшылықты процедурамен тиісті дәрежеде тазаланбаған болса, оның мінез-құлқын оны бастаған артықшылықсыз процесс өзгерте алады.[7] Мысалға, GNU libc бір сәтте осал болды пайдалану қолдану сетюид және сенімді емес кодты орындауға мүмкіндік беретін орта айнымалысы ортақ кітапханалар.[8]

Тарих

The сетюид бит ойлап тапты Деннис Ричи[9] және енгізілген су.[9] Оның жұмыс берушісі, содан кейін Қоңырау телефон лабораториялары, 1972 жылы патент алуға өтініш берген; патент 1979 жылы патент нөмірі ретінде берілген АҚШ 4135240  «Деректер файлының мазмұнын қорғау». Патент кейінірек қоғамдық домен.[10]

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ фон Хаген, Уильям (2010-05-13). Ubuntu Linux Інжілі. 3–59 бет. ISBN 9780470881804.
  2. ^ а б c Фриш, Элин (2009-02-09). Жүйені әкімшілендіру. О'Рейли. б. 351. ISBN 9780596550493.
  3. ^ Биллимория, Кайван Н. (2018). Linux-пен жүйелік бағдарламалау: Linux жүйелік бағдарламалау интерфейстерін, теориясын және практикасын зерттеңіз. Packt Publishing Ltd. б. 250. ISBN 978-1-78899-674-7.
  4. ^ «Unix - жиі қойылатын сұрақтар».
  5. ^ «chmod - файл режимін өзгерту». freebsd.org.
  6. ^ «open, openat - оқуға, жазуға немесе орындауға арналған файлды ашыңыз немесе жасаңыз». freebsd.org.
  7. ^ Нил Браун (23 қараша, 2010 жыл). «Unix өткен елестер, 4 бөлім: Жоғары техникалық қызмет көрсететін жобалар». LWN.net. Алынған 30 наурыз 2014.
  8. ^ Джейк Эдж (27.10.2010). «Glibc-тің екі осалдығы». LWN.net. Алынған 30 наурыз 2014.
  9. ^ а б МакИлрой, М.Дуглас (1987). Unix оқырманы: бағдарламашының нұсқаулығынан түсіндірме алынған үзінділер, 1971–1986 жж (PDF) (Техникалық есеп). CSTR. Bell Labs. 139.
  10. ^ «Бағдарламалық жасақтама патенттерінің қысқаша мазмұны».

Сыртқы сілтемелер