Каждый процесс в UNIX-подобная системе, так же как и любой файл, имеет владелец (пользователь, либо реальный или систему «псевдо-пользователь», такие как daemon
, bin
, man
и т.д.) и владелец группы. Владельцем группы для файлов пользователя обычно является основная группа этого пользователя, и аналогичным образом любые запускаемые вами процессы обычно принадлежат вашему идентификатору пользователя и идентификатору основной группы.
Иногда, однако, необходимо иметь повышенные привилегии для запуска определенных команд, но нежелательно давать полные права администратора. Например, passwd
команде необходим доступ к файлу теневого пароля системы, чтобы она могла обновить ваш пароль. Очевидно, что вы не хотите давать каждому пользователю привилегии root, просто чтобы он мог сбросить свой пароль - это, несомненно, приведет к хаосу! Вместо этого должен быть другой способ временно предоставить повышенные привилегии пользователям для выполнения определенных задач. Для этого предназначены биты SETUID и SETGID. Это способ сказать ядру временно повысить привилегии пользователя на время выполнения помеченной команды. Двоичный файл SETUID будет выполняться с привилегиями владельца исполняемого файла (обычноroot
), и двоичный файл SETGID будет выполняться с привилегиями группы владельца группы исполняемого файла. В случае passwd
команды, которая принадлежит root
SETUID и является ею, она позволяет обычным пользователям напрямую влиять на содержимое файла паролей контролируемым и предсказуемым образом, выполняя с привилегиями root. Есть множество других SETUID
команд на UNIX-подобных системах ( chsh
, screen
, ping
, su
и т.д.), все из которых требуют повышенных привилегий для правильной работы. Есть также несколько SETGID
программ, в которых ядро временно изменяет GID процесса, чтобы разрешить доступ к файлам журналов и т. Д. sendmail
- такая утилита.
sticky bit
Служит несколько иной целью. Его наиболее распространенное использование состоит в том, чтобы гарантировать, что только учетная запись пользователя, которая создала файл, может удалить его. Подумайте о /tmp
каталоге. У него очень либеральные разрешения, которые позволяют любому создавать файлы там. Это хорошо, и позволяет процессам пользователей создавать временные файлы ( screen
, ssh
и т.д., хранить информацию состояния в /tmp
). Для защиты временных файлов пользователя /tmp
установлен бит закрепления, так что только я могу удалить мои файлы, и только вы можете удалить свои. Конечно, root может делать все что угодно, но мы должны надеяться, что сисадмин не помешан на этом!
Для обычных файлов (то есть для неисполняемых файлов) нет смысла устанавливать биты SETUID / SETGID. SETGID для каталогов в некоторых системах управляет владельцем группы по умолчанию для новых файлов, созданных в этом каталоге.
Я думаю, что вы имеете в виду бит "SGID" файла, который не совпадает с его GID.
Вот типичный файл на моем компьютере (вывод команды ls -l):
Если вы посмотрите на первые 10 символов,
(a) -: Это просто старый файл (в отличие от каталога, символической ссылки, канала и т. д. ...)
(б) rw-: владелец может читать и записывать этот файл, но не может выполнить его. Владелец "Бристоль", как вы можете видеть позже в строке.
(c) r--: Члены группы, к которой принадлежит этот файл (в данном примере «пользователи»), кроме владельца, могут читать, но не могут писать или выполнять этот файл.
(d) ---: никто другой не может получить доступ к этому файлу вообще (кроме, конечно, root).
Поле GID сообщает вам, к какой группе принадлежит этот файл - в данном случае «пользователи».
Поле, которое вы, вероятно, имели в виду, основываясь на вашем описании, является битом SGID, и вот лучшее объяснение, чем я мог бы придумать:
http://www.codecoffee.com/tipsforlinux/articles/028.html
Краткая версия: если исполняемый файл имеет установленный бит SGID, то любой, кто не входит в группу, но может выполнить этот файл, временно получает права этой группы во время выполнения программы.
Например, если у вас есть группа «спул», которая может читать и записывать файлы в каталоге диспетчера очереди печати, вы не хотите, чтобы кто-то связывался с этим каталогом, но вы хотите, чтобы они могли печатать файлы, вы можете сделать некоторые программы печати или сценарии имеют группу «спул» и устанавливают бит SGID, и когда кто-либо запускает эту программу, программа может теперь записывать в каталог спулера, при этом лицо, выполняющее ее, не получает полный доступ.
источник
drwxrwxrwt .... 2 sys .... sys .... 1024 Jul 24 15:17 tmp
. Что означаетabbbcccddt
(буква «т»)? - я понимаю, что "d = каталог", "rwx = чтение, запись, выполнение"; но я никогда не видел «т» в конце раньше. Это специальное разрешение для папки tmp?GID - это, как вы обнаружили, идентификационный номер группы. Для ОС это просто удобный способ выразить (пользовательскую) группу, связанную с чем-либо (процесс, файл и т. Д.); вместо потенциально длинного строкового идентификатора его можно выразить как число с фиксированным размером.
В значении разрешений файла из четырех восьмеричных цифр (например, 0755) третья цифра указывает права доступа группы к файлу. Если вы пропустите первую цифру, это вторая цифра, которая определяет права группы. Обратите внимание, что файлы и каталоги обрабатываются одинаково в этом отношении, но что точное значение каждого бита разрешений несколько не интуитивно понятно в случае каталогов.
Эти два понятия связаны, но служат совершенно разным целям.
Что касается вашего вопроса "важно ли даже устанавливать эти разрешения?"; они всегда устанавливаются на что-то , но поскольку в большинстве случаев начальная цифра равна 0 («ничего особенного»), для краткости она обычно не указывается. Нужно ли вам указать какое-то другое значение, полностью зависит от шаблона использования для рассматриваемого файла или каталога.
источник