Команда '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результатами цієї серії команд.

Відповіді:


61
chmod g+s .;

Ця команда встановлює ідентифікатор групи (setgid) в поточному каталозі, записаний як ..

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

g+s впливає на ідентифікатор групи файлу, але не впливає на ідентифікатор власника.

Зауважте, що це стосується лише новостворених файлів. На файли, переміщені ( mv) в каталог, не впливає встановлене значення. Файли, які копіюються 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 .

1
Файли, які копіюються (наприклад, за допомогою cp), насправді є новоствореними. Якщо вони не успадковують груповий дозвіл, програма копіювання грає в ігри, як-от копіювання у тимчасовий файл, а потім переміщення його до цільового каталогу.
Каз

1
@Kaz Добре. Я оновив відповідь, щоб уточнити, що саме вона cp -pпереосмислює задану установку.
John1024

Але чи cp -pвідміняє встановлену настройку? Про кожну існуючу реалізацію Unix? POSIX говорить, що не визначено, чи невдача копіювання ідентифікатора користувача або ідентифікатора групи під cp -p призводить до діагностичного повідомлення! Однак біти S_SUID і S_SGID відповідно повинні бути очищені в цій ситуації (тобто, якщо файл встановлений bob, але право власності bob не можна скопіювати, щоб файл належав janet, не робіть його налаштованим Джанет.)
Каз

"Чи cp -pзамінює встановлену жорстку настройку?" Відповідно до специфікації POSIX, саме це і слід робити. Це робиться у всіх системах Unix, якими я користувався. Ви цитували частину специфікації щодо того, що робити для захисту безпеки у випадку, коли ідентифікатор групи неможливо дублювати. Я ніколи не стикався з такою ситуацією "не можу", чи не так?
John1024,

7

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

У Unix / Linux є користувачі та групи користувачів, яким можна призначити доступ до файлів

Параметри g + s такі:

g - дозволи, які мають інші користувачі групи файлів для цього

s - встановити ідентифікатор користувача або групи під час виконання

ось зразок використання:

chmod =rwx,g+s filename

(дозволити всім читати, писати та виконувати певний файл та вмикати встановлений ідентифікатор групи)

Для встановлення / зміни дозволів на файл потрібно скористатися програмою chmod. Зрозуміло, лише власник файлу може використовувати chmod для зміни його прав. chmod має такий синтаксис: chmod [параметри] файли режиму (частини) Частина '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, і, звичайно, вам буде цікаво, що це таке. Вся справа в тому, що ви можете змінити весь шаблон дозволу для файлу за один раз, використовуючи одне число, подібне до цього в цьому прикладі. У кожному режимі є відповідний номер коду, і як ми побачимо, існує дуже простий спосіб зрозуміти, яке число відповідає будь-якому режиму. Кожна з трьох цифр на номері режиму відповідає одній із трьох трійків дозволів. (u, g і o) Кожен біт дозволу в триплеті відповідає значенню: 4 для r, 2 для w, 1 для x. Якщо біт дозволу, ви додаєте це значення до числа трійки дозволів. Якщо він очищений, то ви нічого не додаєте. (Хтось із вас може помітити, що насправді,

Трійця для u: rwx => 4 + 2 + 1 = 7

Трійця за г: r-x => 4 + 0 + 1 = 5

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

Що робить: 755

Таким чином, 755 - це короткий спосіб сказати: "Я не заперечую, якщо інші люди читають або запускають цей файл, але лише я повинен мати можливість його змінювати", а 777 означає "кожен має повний доступ до цього файлу"

досконала довідка


0

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

g + s встановить жорсткий файл. Перегляньте тут більш детальну інформацію про SUID SGID

тож якщо ваш умаск наприклад 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 - 'nogrpid | sysvgroups '. Отже, перший дотик un, створює файл з ідентифікатором групи, рівним fsgid процесу створення, де fsgid = egid.

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

Тут торкаються де, створюють декс, з груповим канарком.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.