команда "chmod g + s"

45

Здравствуйте, я хочу понять роль chmod g+sкоманды в Unix.

Я также хотел бы знать, что он делает в этом конкретном контексте:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Я понимаю все роли команд, за исключением, chmod g+sи я хочу знать различия между файлами unи deuxрезультатом этой серии команд.

Otus
источник

Ответы:

61
chmod g+s .;

Эта команда устанавливает идентификатор группы (setgid) в текущем каталоге, записываемый как ..

Это означает, что все новые файлы и подкаталоги, созданные в текущем каталоге, наследуют идентификатор группы каталога, а не идентификатор основной группы пользователя, создавшего файл. Это также будет передано в новые подкаталоги, созданные в текущем каталоге.

g+s влияет на идентификатор группы файла, но не влияет на идентификатор владельца.

Обратите внимание, что это относится только к вновь созданным файлам. Файлы, которые перемещены ( mv) в каталог, не зависят от настройки setgid. Файлы, которые копируются cp -p, также не затрагиваются.

пример

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

В этом случае deuxбудет принадлежать группе, canardно unбудет принадлежать группе пользователя, которая его создала, что бы это ни было.

Небольшая заметка об использовании точек с запятой в командах оболочки

В отличие от cили perl, команда оболочки должна сопровождаться точкой с запятой только в том случае, если в той же командной строке следует другая команда оболочки . Итак, рассмотрим следующую командную строку:

chgrp canard .; chmod g+s .;

Последняя точка с запятой является лишней и может быть удалена:

chgrp canard .; chmod g+s .

Кроме того, если бы мы поместили две команды в отдельные строки, оставшаяся точка с запятой не нужна:

chgrp canard .
chmod g+s .
John1024
источник
1
Файлы, которые копируются (например, посредством cp), фактически заново создаются. Если они не наследуют разрешение группы, программа копирования играет в игры, например копирует во временный файл и затем перемещает его в целевой каталог.
Kaz
1
@ Каз Хороший вопрос. Я обновил ответ, чтобы уточнить, что именно он cp -pпереопределяет настройку setgid.
John1024
Но cp -pотменяет ли настройка setgid? На каждой существующей реализации Unix? POSIX говорит, что не определено, приведет ли ошибка копирования идентификатора пользователя или группы в cp -p к диагностическому сообщению! Тем не менее, биты S_SUID и S_SGID, соответственно, должны быть очищены в этой ситуации (то есть, если файл имеет setuid bob, но владение bob не может быть скопировано, так что файл принадлежит janet, не устанавливайте его setuid Джанет.)
Каз
cp -pmsgstr " переопределить настройку setgid?" В соответствии со спецификацией POSIX, это то, что он должен делать. Это происходит на всех Unix-системах, которые я использовал. Вы процитировали часть спецификации, касающуюся того, что делать для защиты безопасности в случае, когда идентификатор группы не может быть дублирован. Я никогда не сталкивался с такой ситуацией "не могу", а вы?
John1024
7

Вы можете изменить права доступа к файлу с помощью команды chmod. В Unix права доступа к файлу, которые устанавливают, кто может иметь разные типы доступа к файлу, определяются как классами доступа, так и типами доступа. Классы доступа - это группы пользователей, каждому из которых могут быть назначены определенные типы доступа.

Unix / Linux имеет пользователей и группы пользователей, которых можно назначить для доступа к файлам

варианты g + s следующие:

g - разрешения, которые есть у других пользователей в группе файла

s - установить идентификатор пользователя или группы при исполнении

Вот пример использования:

chmod =rwx,g+s filename

(разрешить всем читать, писать и выполнять определенный файл и включать установленный идентификатор группы)

Для установки / изменения прав доступа к файлу вам необходимо использовать программу chmod. Конечно, только владелец файла может использовать chmod для изменения прав доступа к файлу. chmod имеет следующий синтаксис: chmod [options] mode file (s) Часть 'mode' определяет новые разрешения для файла (ов), которые следуют в качестве аргументов. Режим определяет, какие права пользователя должны быть изменены, и после этого, какие типы доступа должны быть изменены. Скажем, например: chmod axe socktest.pl

Это означает, что бит выполнения должен быть очищен (-) для всех пользователей. (владелец, группа и остальной мир) Разрешения начинаются с буквы, указывающей, на каких пользователей это изменение должно повлиять, это может быть одним из следующих:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

Затем следует инструкция изменения, которая состоит из + (установить бит) или - (очистить бит) и буквы, соответствующей биту, который должен быть изменен. Давайте посмотрим несколько примеров:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

Странные числа ... Возможно, вы столкнулись с такими вещами, как chmod 755 somefile, и, конечно, вам будет интересно, что это такое. Дело в том, что вы можете изменить всю схему доступа к файлу за один раз, используя одно число, как в этом примере. Каждый режим имеет соответствующий кодовый номер, и, как мы увидим, существует очень простой способ выяснить, какой номер соответствует любому режиму. Каждая из трех цифр номера режима соответствует одной из трех тройок разрешений. (u, g и o) Каждый бит разрешения в триплете соответствует значению: 4 для r, 2 для w, 1 для x. Если бит разрешения, вы добавляете это значение к номеру разрешения триплета. Если он очищен, то вы ничего не добавляете. (Некоторые из вас могут заметить, что на самом деле,

Триплет для тебя: rwx => 4 + 2 + 1 = 7

Триплет для г: r-x => 4 + 0 + 1 = 5

Триплет для о: r-x => 4 + 0 + 1 = 5

Что делает : 755

Итак, 755 - это краткий способ сказать: «Я не против, если другие люди прочтут или запустят этот файл, но только я должен иметь возможность изменять его», а 777 означает «каждый имеет полный доступ к этому файлу».

совершенная ссылка

Parallaxis
источник
0

Результат команды ls будет зависеть от umask.

g + s установит sgid в файл. Проверьте здесь для более подробной информации о SUID SGID

так что если ваш umask, например, 022, результат будет примерно таким:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un
Ромео Нинов
источник
0

В Linux один из параметров монтирования по умолчанию для ext? fs is 'nogrpid | sysvgroups. Таким образом, первое касание un создает файл с идентификатором группы, равным fsgid процесса создания, где fsgid = egid.

chmod g + s., делает последующее создание файла / каталога, наследует идентификатор группы из родительской папки, и если созданный объект является каталогом, он также получает g + s в качестве родителя.

Сенсорный deux, создает deux, с групповым слухом.

Семантика меняется, если опция монтирования была 'grpid | bsdgroups ', в этом случае создание нового файла / dir будет наследовать идентификатор группы из его родительской папки, даже не устанавливая g + s для самого родителя.

Низам Мохамед
источник