Unix жүйесіндегі қол жеткізу құқықтары белгілері: setuid және setgid
Setuid
Unix/Linux жүйесіндегі setuid және setgid флагтары: пайдаланушыға иесінің/топтың құқықтарымен бағдарлама іске қадағалауға мүмкіндік береді. Қауіпсіздік маңызды!
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Unix қолжетімділік құқығы көрсеткіші
Unix access rights flag
Unix және Linux жүйелеріндегі setuid және setgid (set user identity және set group identity дегеннің қысқартылған түрі) қолжетімділік құқығы көрсеткіштері пайдаланушыларға орындалатын файлды оның иесінің немесе тобының файлдық жүйе рұқсаттарымен іске қосуға және каталогтардағы әрекеттерді өзгертуге мүмкіндік береді. Олар көбінесе компьютер жүйесіндегі пайдаланушыларға белгілі бір міндетті орындау үшін уақытша көтерілген құқықтармен бағдарламаларды іске қосуға рұқсат беру үшін қолданылады. Берілетін пайдаланушы идентификаторы немесе топ идентификаторы құқықтары әрқашан көтерілген болып келе бермейді, бірақ олар ең болмағанда нақты құқықтар болып табылады. Setuid және setgid көрсеткіштері пайдаланушыға әдеттегідей берілмейтін артық құқықтарды талап ететін міндеттер үшін қажет, мысалы, жүйелік файлдарды немесе деректер базасын өзгерту, кіру паролін өзгерту сияқты. Қосымша құқықтарды талап ететін кейбір міндеттер бірден көзге көрінбеуі мүмкін, мысалы, пинг командасы, оның желілік интерфейсінде басқару пакеттерін жіберуі және оларды тыңдауы керек.
The Unix and Linux access rights flags setuid and setgid (short for set user identity and set group identity) allow users to run an executable with the file system permissions of the executable's owner or group respectively and to change behaviour in directories. They are often used to allow users on a computer system to run programs with temporarily elevated privileges to perform a specific task. While the assumed user id or group id privileges provided are not always elevated, at a minimum they are specific. The flags setuid and setgid are needed for tasks that require different privileges than what the user is normally granted, such as the ability to alter system files or databases to change their login password. Some of the tasks that require additional privileges may not immediately be obvious, though, such as the ping command, which must send and listen for control packets on a network interface.
Файл режімдері
Setuid және setgid биттері әдетте файл режимінің жоғары реттік сегіздік цифрында setuid үшін 4 және setgid үшін 2 мәндері ретінде көрсетіледі. Мысалы, 6711 санында setuid және setgid биттері қойылған, сонымен қатар иесі үшін оқу/жазу/орындау (7), топ үшін (бірінші 1) және басқалар үшін (екінші 1) орындау құқығы бар. Көптеген жүйелерде осы биттерді символдық түрде көрсетуге болады; жоғарыдағы мысалда бұл u=rwx,go=x,ug+s түрінде болуы мүмкін. Әдетте, chmod командасында каталогтарға ғана қатысты рекурсивті режим болмайды, сондықтан қолданыстағы каталог ағашын өзгерту қолмен жасалуы керек, мысалы .
The setuid and setgid bits are normally represented as the values 4 for setuid and 2 for setgid in the high order octal digit of the file mode. For example, 6711 has both the setuid and setgid bits set, and also the file read/write/executable for the owner (7), and executable by the group (first 1) and others (second 1). Most implementations have a symbolic representation of these bits; in the previous example, this could be u=rwx,go=x,ug+s. Typically, chmod does not have a recursive mode restricted to directories, so modifying an existing directory tree must be done manually, with a command such as .
Әсерлер
setuid және setgid белгілері файлға, каталогқа немесе бинарлық орындалатын немесе бинарлық емес орындалатын файлға қолданылуына қарай әртүрлі әсер етеді. setuid және setgid белгілері тек бинарлық орындалатын файлдарға ғана әсер етеді, скрипттерге (мысалы, Bash, Perl, Python) емес.
The setuid and setgid flags have different effects, depending on whether they are applied to a file, to a directory or binary executable or non binary executable file. The setuid and setgid flags have an effect only on binary executable files and not on scripts (e. g., Bash, Perl, Python).
Орындалатын файлға орнатылғанда
setuid немесе setgid атрибуттары орындалатын файлға орнатылғанда, сол файлды орындауға рұқсаты бар кез келген пайдаланушы файл иесінің (көбінесе root) және/немесе файлдың тобының құқықтарымен файлды автоматты түрде орындайды, бұл орнатылған белгілерге байланысты. Көптеген операциялық жүйелер орындалатын қабықша сценарийлеріне (shell scripts) setuid атрибутын қолданғанда назар аудармайды. Setuid атрибуты бар орындалатын файлдардың болуы Unix жүйесінде root емес пайдаланушыларға chroot жүйелік шақырудың қолжетімсіз болуын түсіндіреді. Толығырақ ақпарат алу үшін chroot-тың шектеулерін қараңыз.
When the setuid or setgid attributes are set on an executable file, then any users able to execute the file will automatically execute the file with the privileges of the file's owner (commonly root) and/or the file's group, depending upon the flags set. many operating systems ignore the setuid attribute when applied to executable shell scripts. The presence of setuid executables explains why the chroot system call is not available to non root users on Unix. See limitations of chroot for more details.
Каталогқа орнатылғанда
Каталогқа setgid рұқсатын орнату, оның ішінде жасалған файлдар мен ішкі каталогтардың файл жасау процесінің бастапқы тобына емес, оның тобына ие болуын қамтамасыз етеді. Жасалған ішкі каталогтар да setgid битін мұралайды. Бұл саясат тек жасау кезінде ғана және болашаққа қарай қолданылады. Setgid биті орнатылған кезде бұрыннан бар каталогтар мен файлдарға әсер етпейді, сондай-ақ, бұл бит орнатылған каталогқа жылжытылған файлдар мен каталогтарға да әсер етпейді. Бұл пайдаланушылар тобы арасында рұқсаттарды тікелей көрсетпей файлдармен жұмыс істеуге мүмкіндік береді, бірақ қауіпсіздік моделінің күтуіне сәйкес, қолданыстағы файлдардың рұқсаттары өздігінен өзгермейді. Көптеген UNIX және Linux жүйелерінде каталогқа орнатылған setuid рұқсаты назарға алынбайды. Дегенмен, FreeBSD setuid-ді setgid сияқты түсіндіруге конфигурациялануы мүмкін, онда ол каталогта жасалған барлық файлдар мен ішкі каталогтардың сол каталогтың иесіне қарапайым мұрагерлік түрінде тиесілігін қамтамасыз етеді. Бұл көбінесе BSD негізіндегі жүйелерде қажет емес, себебі каталогтар әдетте олардың setgid биті нақты мәніне қарамастан, әрқашан орнатылғандай қарастырылады. open(2) сипаттамасында айтылғандай, "жаңа файл жасалғанда оған оны қамтитын каталогтың тобы беріледі".
Setting the setgid permission on a directory causes files and subdirectories created within to inherit its group ownership, rather than the primary group of the file creating process. Created subdirectories also inherit the setgid bit. The policy is only applied during creation and, thus, only prospectively. Directories and files existing when the setgid bit is applied are unaffected, as are directories and files moved into the directory on which the bit is set. Thus is granted a capacity to work with files amongst a group of users without explicitly setting permissions, but limited by the security model expectation that existing files permissions do not implicitly change. The setuid permission set on a directory is ignored on most UNIX and Linux systems. However FreeBSD can be configured to interpret setuid in a manner similar to setgid, in which case it forces all files and sub directories created in a directory to be owned by that directory's owner a simple form of inheritance. This is generally not needed on most systems derived from BSD, since by default directories are treated as if their setgid bit is always set, regardless of the actual value. As is stated in open(2), "When a new file is created it is given the group of the directory which contains it."
Қауіпсіздік
Дамушылар осы битті орындалатын файлдарда сақтықпен пайдаланатын бағдарламаларды жобалайды және іске асырады, қауіпсіздіктегі осал жерлерді, соның ішінде буфер асып кету және жол инъекциялауды болдырмау үшін. Зардап шегетін қолданбаларға жасалған сәтті буфер асып кету шабуылдары шабуылшыға пайдаланған процестің құқықтарымен кез келген кодты орындауға мүмкіндік береді. Егер осал процесс setuid битін root ретінде іске қосса, код root құқықтарымен орындалады, нәтижесінде шабуылшыға зардап шеккен процестің жұмыс істейтін жүйесіне root кіруге рұқсат беріледі. Setuid процесі үшін процестің ортасы ерекше маңызды. Егер артықшықтық процесс ортаны тиісінше тазартпаса, оны іске қосқан артықшықтары жоқ процесс оның әрекетін өзгерте алады. Мысалы, GNU libc бір кезде setuid және орта айнымалысын пайдаланып, сенімсіз ортақ кітапханалардан кодты орындауға мүмкіндік беретін қауіпті жағдайға ұшыраған.
Developers design and implement programs that use this bit on executables carefully in order to avoid security vulnerabilities including buffer overruns and path injection. Successful buffer overrun attacks on vulnerable applications allow the attacker to execute arbitrary code under the rights of the process exploited. In the event that a vulnerable process uses the setuid bit to run as root, the code will execute with root privileges, in effect giving the attacker root access to the system on which the vulnerable process is running. Of particular importance in the case of a setuid process is the environment of the process. If the environment is not properly sanitized by a privileged process, its behavior can be changed by the unprivileged process that started it. For example, GNU libc was at one point vulnerable to an exploit using setuid and an environment variable that allowed executing code from untrusted shared libraries.
Тарих
Сетуидты бітті Деннис Ричи ойлап тапты және ол su бағдарламасына енгізілді. Оның жұмыс берушісі, сол кездегі Bell Telephone Laboratories, 1972 жылы патент алуға өтініш берді; патент 1979 жылы берілді және оның нөмірі болды. Кейіннен бұл патент жалпыға қолжетімді етуге берілді.
The setuid bit was invented by Dennis Ritchie and included in su. His employer, then Bell Telephone Laboratories, applied for a patent in 1972; the patent was granted in 1979 as patent number The patent was later placed in the public domain.