Что значит GID?

14

Что на самом деле означает GID?

Я прогуглил это, и вот что сказал linux.about.com :

Идентификационный номер группы для процесса. Действительные номера групп указаны в /etc/groupи в поле GID /etc/passwdфайла. Когда процесс запускается, его GID устанавливается равным GID его родительского процесса.

  • Но что это значит?

Разрешения, которые я имею для моей папки в настоящее время в 0755

Я понимаю, если я установлю UID для владельца, это будет 4755

И если я установлю GID группы, это будет 2755

Если я установлю Sticky Bit для других, это будет 1755

  • Это даже важно, чтобы установить эти разрешения?
Kevdog777
источник

Ответы:

27

Каждый процесс в UNIX-подобная системе, так же как и любой файл, имеет владелец (пользователь, либо реальный или систему «псевдо-пользователь», такие как daemon, bin, manи т.д.) и владелец группы. Владельцем группы для файлов пользователя обычно является основная группа этого пользователя, и аналогичным образом любые запускаемые вами процессы обычно принадлежат вашему идентификатору пользователя и идентификатору основной группы.

Иногда, однако, необходимо иметь повышенные привилегии для запуска определенных команд, но нежелательно давать полные права администратора. Например, passwdкоманде необходим доступ к файлу теневого пароля системы, чтобы она могла обновить ваш пароль. Очевидно, что вы не хотите давать каждому пользователю привилегии root, просто чтобы он мог сбросить свой пароль - это, несомненно, приведет к хаосу! Вместо этого должен быть другой способ временно предоставить повышенные привилегии пользователям для выполнения определенных задач. Для этого предназначены биты SETUID и SETGID. Это способ сказать ядру временно повысить привилегии пользователя на время выполнения помеченной команды. Двоичный файл SETUID будет выполняться с привилегиями владельца исполняемого файла (обычноroot), и двоичный файл SETGID будет выполняться с привилегиями группы владельца группы исполняемого файла. В случае passwdкоманды, которая принадлежит rootSETUID и является ею, она позволяет обычным пользователям напрямую влиять на содержимое файла паролей контролируемым и предсказуемым образом, выполняя с привилегиями root. Есть множество других SETUIDкоманд на UNIX-подобных системах ( chsh, screen, ping, suи т.д.), все из которых требуют повышенных привилегий для правильной работы. Есть также несколько SETGIDпрограмм, в которых ядро ​​временно изменяет GID процесса, чтобы разрешить доступ к файлам журналов и т. Д. sendmail- такая утилита.

sticky bitСлужит несколько иной целью. Его наиболее распространенное использование состоит в том, чтобы гарантировать, что только учетная запись пользователя, которая создала файл, может удалить его. Подумайте о /tmpкаталоге. У него очень либеральные разрешения, которые позволяют любому создавать файлы там. Это хорошо, и позволяет процессам пользователей создавать временные файлы ( screen, sshи т.д., хранить информацию состояния в /tmp). Для защиты временных файлов пользователя /tmpустановлен бит закрепления, так что только я могу удалить мои файлы, и только вы можете удалить свои. Конечно, root может делать все что угодно, но мы должны надеяться, что сисадмин не помешан на этом!

Для обычных файлов (то есть для неисполняемых файлов) нет смысла устанавливать биты SETUID / SETGID. SETGID для каталогов в некоторых системах управляет владельцем группы по умолчанию для новых файлов, созданных в этом каталоге.

D_Bye
источник
2
Ах, круто, спасибо за это. Таким образом, Sticky Bit - это как личное (пользовательское) разрешение? Этот ответ был хорошо сформулирован и понятен.
Kevdog777
1
Спасибо! Заклепка обеспечивает небольшую защиту для файлов в каталоге с либеральными разрешениями. Это не совсем специфично для конкретного пользователя, поскольку одинаковый уровень защиты предоставляется всем файлам, независимо от того, кто является владельцем. Это позволяет любому пользователю создавать файлы и уничтожать их может только владелец.
D_Bye
+1, D_bye, не могли бы вы поделиться примером установки setgid бита в каталоге. Спасибо
Анкит
1
@Ankit В Solaris (и почти наверняка в других - я использую только * BSD и Solaris), если в каталоге установлен бит setgid, любые новые файлы, созданные в этом каталоге, будут иметь того же владельца группы, что и сам каталог, и не будет наследовать основную группу (пользователь, выполняющий) процесса создания.
D_Bye
3

Я думаю, что вы имеете в виду бит "SGID" файла, который не совпадает с его GID.

Вот типичный файл на моем компьютере (вывод команды ls -l):

-rw-r----- 1 bristol    users 16 2012-07-23 11:36 file.txt
abbbcccddd <-- See explanation below.

Если вы посмотрите на первые 10 символов,

(a) -: Это просто старый файл (в отличие от каталога, символической ссылки, канала и т. д. ...)

(б) rw-: владелец может читать и записывать этот файл, но не может выполнить его. Владелец "Бристоль", как вы можете видеть позже в строке.

(c) r--: Члены группы, к которой принадлежит этот файл (в данном примере «пользователи»), кроме владельца, могут читать, но не могут писать или выполнять этот файл.

(d) ---: никто другой не может получить доступ к этому файлу вообще (кроме, конечно, root).

Поле GID сообщает вам, к какой группе принадлежит этот файл - в данном случае «пользователи».

Поле, которое вы, вероятно, имели в виду, основываясь на вашем описании, является битом SGID, и вот лучшее объяснение, чем я мог бы придумать:

http://www.codecoffee.com/tipsforlinux/articles/028.html

Краткая версия: если исполняемый файл имеет установленный бит SGID, то любой, кто не входит в группу, но может выполнить этот файл, временно получает права этой группы во время выполнения программы.

Например, если у вас есть группа «спул», которая может читать и записывать файлы в каталоге диспетчера очереди печати, вы не хотите, чтобы кто-то связывался с этим каталогом, но вы хотите, чтобы они могли печатать файлы, вы можете сделать некоторые программы печати или сценарии имеют группу «спул» и устанавливают бит SGID, и когда кто-либо запускает эту программу, программа может теперь записывать в каталог спулера, при этом лицо, выполняющее ее, не получает полный доступ.

Бристоль
источник
Это хорошо, спасибо за это. Я понимаю часть разрешений, (часть abbbcccddd), но все равно :)
Kevdog777
Я только что видел мои разрешения на папку TMP drwxrwxrwt .... 2 sys .... sys .... 1024 Jul 24 15:17 tmp. Что означает abbbcccddt(буква «т»)? - я понимаю, что "d = каталог", "rwx = чтение, запись, выполнение"; но я никогда не видел «т» в конце раньше. Это специальное разрешение для папки tmp?
Kevdog777
Малый t - это «исполняемый (x) и набор липких битов». См. Выше объяснение, почему это обычно для / tmp.
Бристоль
3

GID - это, как вы обнаружили, идентификационный номер группы. Для ОС это просто удобный способ выразить (пользовательскую) группу, связанную с чем-либо (процесс, файл и т. Д.); вместо потенциально длинного строкового идентификатора его можно выразить как число с фиксированным размером.

В значении разрешений файла из четырех восьмеричных цифр (например, 0755) третья цифра указывает права доступа группы к файлу. Если вы пропустите первую цифру, это вторая цифра, которая определяет права группы. Обратите внимание, что файлы и каталоги обрабатываются одинаково в этом отношении, но что точное значение каждого бита разрешений несколько не интуитивно понятно в случае каталогов.

Эти два понятия связаны, но служат совершенно разным целям.

Что касается вашего вопроса "важно ли даже устанавливать эти разрешения?"; они всегда устанавливаются на что-то , но поскольку в большинстве случаев начальная цифра равна 0 («ничего особенного»), для краткости она обычно не указывается. Нужно ли вам указать какое-то другое значение, полностью зависит от шаблона использования для рассматриваемого файла или каталога.

CVn
источник