Кіріспе

Unix қолжетімділік құқығы көрсеткіші

Unix және Linux жүйелеріндегі setuid және setgid (set user identity және set group identity дегеннің қысқартылған түрі) қолжетімділік құқығы көрсеткіштері пайдаланушыларға орындалатын файлды оның иесінің немесе тобының файлдық жүйе рұқсаттарымен іске қосуға және каталогтардағы әрекеттерді өзгертуге мүмкіндік береді. Олар көбінесе компьютер жүйесіндегі пайдаланушыларға белгілі бір міндетті орындау үшін уақытша көтерілген құқықтармен бағдарламаларды іске қосуға рұқсат беру үшін қолданылады. Берілетін пайдаланушы идентификаторы немесе топ идентификаторы құқықтары әрқашан көтерілген болып келе бермейді, бірақ олар ең болмағанда нақты құқықтар болып табылады. Setuid және setgid көрсеткіштері пайдаланушыға әдеттегідей берілмейтін артық құқықтарды талап ететін міндеттер үшін қажет, мысалы, жүйелік файлдарды немесе деректер базасын өзгерту, кіру паролін өзгерту сияқты. Қосымша құқықтарды талап ететін кейбір міндеттер бірден көзге көрінбеуі мүмкін, мысалы, пинг командасы, оның желілік интерфейсінде басқару пакеттерін жіберуі және оларды тыңдауы керек.

Файл режімдері

Setuid және setgid биттері әдетте файл режимінің жоғары реттік сегіздік цифрында setuid үшін 4 және setgid үшін 2 мәндері ретінде көрсетіледі. Мысалы, 6711 санында setuid және setgid биттері қойылған, сонымен қатар иесі үшін оқу/жазу/орындау (7), топ үшін (бірінші 1) және басқалар үшін (екінші 1) орындау құқығы бар. Көптеген жүйелерде осы биттерді символдық түрде көрсетуге болады; жоғарыдағы мысалда бұл u=rwx,go=x,ug+s түрінде болуы мүмкін. Әдетте, chmod командасында каталогтарға ғана қатысты рекурсивті режим болмайды, сондықтан қолданыстағы каталог ағашын өзгерту қолмен жасалуы керек, мысалы .

Әсерлер

setuid және setgid белгілері файлға, каталогқа немесе бинарлық орындалатын немесе бинарлық емес орындалатын файлға қолданылуына қарай әртүрлі әсер етеді. setuid және setgid белгілері тек бинарлық орындалатын файлдарға ғана әсер етеді, скрипттерге (мысалы, Bash, Perl, Python) емес.

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

setuid немесе setgid атрибуттары орындалатын файлға орнатылғанда, сол файлды орындауға рұқсаты бар кез келген пайдаланушы файл иесінің (көбінесе root) және/немесе файлдың тобының құқықтарымен файлды автоматты түрде орындайды, бұл орнатылған белгілерге байланысты. Көптеген операциялық жүйелер орындалатын қабықша сценарийлеріне (shell scripts) setuid атрибутын қолданғанда назар аудармайды. Setuid атрибуты бар орындалатын файлдардың болуы Unix жүйесінде root емес пайдаланушыларға chroot жүйелік шақырудың қолжетімсіз болуын түсіндіреді. Толығырақ ақпарат алу үшін chroot-тың шектеулерін қараңыз.

Каталогқа орнатылғанда

Каталогқа setgid рұқсатын орнату, оның ішінде жасалған файлдар мен ішкі каталогтардың файл жасау процесінің бастапқы тобына емес, оның тобына ие болуын қамтамасыз етеді. Жасалған ішкі каталогтар да setgid битін мұралайды. Бұл саясат тек жасау кезінде ғана және болашаққа қарай қолданылады. Setgid биті орнатылған кезде бұрыннан бар каталогтар мен файлдарға әсер етпейді, сондай-ақ, бұл бит орнатылған каталогқа жылжытылған файлдар мен каталогтарға да әсер етпейді. Бұл пайдаланушылар тобы арасында рұқсаттарды тікелей көрсетпей файлдармен жұмыс істеуге мүмкіндік береді, бірақ қауіпсіздік моделінің күтуіне сәйкес, қолданыстағы файлдардың рұқсаттары өздігінен өзгермейді. Көптеген UNIX және Linux жүйелерінде каталогқа орнатылған setuid рұқсаты назарға алынбайды. Дегенмен, FreeBSD setuid-ді setgid сияқты түсіндіруге конфигурациялануы мүмкін, онда ол каталогта жасалған барлық файлдар мен ішкі каталогтардың сол каталогтың иесіне қарапайым мұрагерлік түрінде тиесілігін қамтамасыз етеді. Бұл көбінесе BSD негізіндегі жүйелерде қажет емес, себебі каталогтар әдетте олардың setgid биті нақты мәніне қарамастан, әрқашан орнатылғандай қарастырылады. open(2) сипаттамасында айтылғандай, "жаңа файл жасалғанда оған оны қамтитын каталогтың тобы беріледі".

Қауіпсіздік

Дамушылар осы битті орындалатын файлдарда сақтықпен пайдаланатын бағдарламаларды жобалайды және іске асырады, қауіпсіздіктегі осал жерлерді, соның ішінде буфер асып кету және жол инъекциялауды болдырмау үшін. Зардап шегетін қолданбаларға жасалған сәтті буфер асып кету шабуылдары шабуылшыға пайдаланған процестің құқықтарымен кез келген кодты орындауға мүмкіндік береді. Егер осал процесс setuid битін root ретінде іске қосса, код root құқықтарымен орындалады, нәтижесінде шабуылшыға зардап шеккен процестің жұмыс істейтін жүйесіне root кіруге рұқсат беріледі. Setuid процесі үшін процестің ортасы ерекше маңызды. Егер артықшықтық процесс ортаны тиісінше тазартпаса, оны іске қосқан артықшықтары жоқ процесс оның әрекетін өзгерте алады. Мысалы, GNU libc бір кезде setuid және орта айнымалысын пайдаланып, сенімсіз ортақ кітапханалардан кодты орындауға мүмкіндік беретін қауіпті жағдайға ұшыраған.

Тарих

Сетуидты бітті Деннис Ричи ойлап тапты және ол su бағдарламасына енгізілді. Оның жұмыс берушісі, сол кездегі Bell Telephone Laboratories, 1972 жылы патент алуға өтініш берді; патент 1979 жылы берілді және оның нөмірі болды. Кейіннен бұл патент жалпыға қолжетімді етуге берілді.