Изменить gid группы linux

Содержание
  1. Измените gid определенной группы
  2. 3 ответа
  3. Изменить гид определенной группы
  4. Изменение UID&GID пользователя и его файлов
  5. Полный код скрипта
  6. Изменить группы в Linux с помощью команды groupmod
  7. Изменить имя группы с помощью команды groupmod
  8. Изменить идентификатор группы с помощью команды groupmod
  9. [Пост] Управление доступом в Linux
  10. Основные правила управления доступом
  11. Основное
  12. Управление пользователями
  13. Просмотр
  14. Получение информации о пользователях
  15. Добавление пользователя
  16. Изменение пользователя
  17. Удаление пользователя
  18. Управление группами
  19. Создание группы
  20. Изменение группы
  21. Удаление группы
  22. Управление пользователями группы
  23. Файлы конфигурации
  24. /etc/passwd
  25. /etc/group
  26. /etc/shadow
  27. Sudo и su
  28. Управление доступом
  29. Управление правами доступа
  30. Права доступа к символьным ссылкам
  31. Специальные атрибуты
  32. Обозначение атрибутов Sticky, SUID, SGID
  33. Права доступа по-умолчанию для вновь создаваемых объектов файловой системе.

Измените gid определенной группы

Я хочу изменить идентификатор группы для определенной группы. Есть так может быть решение для изменения gid файла или каталогов. Но этого я не хочу. Есть ли способ сделать это?

3 ответа

GID является основным идентификатором группы. Что касается системы, другой GID — это другая группа. Таким образом, чтобы изменить GID, вам придется изменить все места, где используется этот GID.

Вам следует избегать использования GID как значимого и использовать имена групп; вы можете изменить имя группы с помощью одной команды (в Linux: groupmod -n NEW_GROUP_NAME OLD_GROUP_NAME ).

Однако, если вы действительно хотите изменить GID, вот как:

  • Во-первых, вам может потребоваться вывести пользователей из группы и убить процессы, у которых эта группа является их эффективной, реальной или сохраненной группой.
  • Измените запись в базе данных группы. В Linux запустите groupmod -g NEWGID GROUPNAME . В других системах используйте этот инструмент администрирования системы или vigr , если он доступен, или отредактируйте /etc/group , если применимо.

Измените группу всех файлов вашей системы, принадлежащих к старой группе.

chgrp очищает флаги suid и sgid, восстанавливает их.

  • Если у вас есть архив, который использует старый GID, перестройте его.
  • Если у вас есть какой-либо файл конфигурации или скрипт, который ссылается на старый GID, обновите его.
  • Перезапустите все процессы, которые должны использовать новый GID.
  • Самый простой способ — использовать groupmod -g

    Другой способ — отредактировать /etc/group . Третьим полем в каждом столбце является gid.

    Если измененная группа является основной группой пользователя, необходимо также изменить /etc/passwd : usermod -g . Подробнее см. .

    find /path -group foo -print0 | xargs -0 chgrp bar

    Источник

    Изменить гид определенной группы

    Я хотел бы изменить идентификатор группы конкретной группы. Есть также решение для изменения gid файла или каталогов. Но это не то, что я хочу. Есть ли способ сделать это?

    GID является основным идентификатором группы. Что касается системы, другой GID — это другая группа. Таким образом, чтобы изменить GID, вам нужно изменить все места, где используется этот GID.

    Вам следует избегать считать GID значимым и использовать вместо этого имена групп; Вы можете изменить имя группы с помощью одной команды (в Linux:) groupmod -n NEW_GROUP_NAME OLD_GROUP_NAME .

    Однако, если вы действительно хотите изменить GID, вот как:

    • Во-первых, вам может потребоваться выйти из группы и убить процессы, которые имеют эту группу в качестве эффективной, реальной или сохраненной группы.
    • Измените запись в базе данных группы. В Linux запустите groupmod -g NEWGID GROUPNAME . В других системах используйте инструмент администрирования этой системы, или, vigr если он доступен, или отредактируйте, /etc/group если применимо.

    Измените группу всех файлов в вашей системе, которые принадлежат старой группе.

    chgrp очищает флаги suid и sgid, восстанавливает их.

  • Если у вас есть какой-либо архив, использующий старый GID, перестройте его.
  • Если у вас есть файл конфигурации или сценарий, который ссылается на старый GID, обновите его.
  • Перезапустите все процессы, которые должны использовать новый GID.
  • Источник

    Изменение UID&GID пользователя и его файлов


    Встала тут передо мной задача изменить UID и GID пользователя и правильно изменить владельца всех файлов.
    Дело в том, что я работаю за двумя компьютерами попеременно, и файлы mysql лежат у меня на флешке. Получилось так, что id пользователя mysql на обоих компах отличается и мускл не может получить доступ к своим файлам. Присваивать права 0666 скучно, и по этому поводу я решил научиться грамотно изменять uid пользователя 🙂

    Казалось бы, всё просто, но есть два нюанса которые необходимо учесть:

    1. UID и GID не всегда одинаковы для пользователя и его группы
    2. Не все файлы принадлежат одновременно юзеру mysql и группе mysql: файлы для chown нужно искать отдельно

    Статья написана для тех, кто ещё не делал ничего подобного а также кто хочет научиться продвинутому использованию команды find и узнать что такое xargs.

    Изменение идентификатора пользователя и группы

    user =mysql new_uid = 600 old_uid =$ ( id -u $user )
    group =mysql new_gid = 600 old_gid =$ ( id -g $user )
    sudo usermod -u $new_uid $user
    sudo groupmod -g $new_gid $group

    Поиск осиротевших файлов

    Если сейчас посмотреть на одну из папок с файлами mysql (например, ls -lah /var/lib/mysql ) то мы увидим, что файлы принадлежат подозрительному пользователю 112 и подозрительной группе 127. Такие файлы мы и будем искать с тем, чтобы удочерить их 🙂

    Первое, что приходит в голову, это найти все файлы принадлежащие пользователю $old_uid или группе $old_group , и собрать все найденные файлы (при помощи xargs) в качества аргументов команде chown $user:$group . find выполняется от root чтобы гарантировать что он сможет забраться во все даже самые сурово защищённые папки и найдёт всё что от него требуется. xargs собирает строки из pipe и передаёт их команде, указанной в аргументе (chown). Замечу, что xargs может выполнить команду несколько раз во избежание слишком длинной строки аргументов.
    Например, так:

    sudo find / -user $old_uid -or -group $old_gid -print0 | xargs -0 sudo chown $user : $group

    Сразу обращу внимание на флаги find -print0 и xargs -0 : это такая борьба с возможными пробелами в именах файлов. Такие файлы могут быть восприняты chown ‘ом как два разных. Первый флаг заставляет find выводить каждый найденный файл с нулём в конце (символ конца строки в Си), а второй флаг сообщает xargs что ему нужно отделять файлы друг от друга не по переводу строки, а по этому самому нулю, что гарантирует верную обработку даже самых хитрых имён файлов 🙂

    Однако такой способ не принесёт желаемого результата: некоторые файлы, владельцем которых был ‘mysql:root’ станут принадлежать ‘mysql:mysql’. А мы ведь договорились сделать всё предельно правильно 🙂 Следовательно, поиск по user и по group надо вести отдельно.

    Можно выполнить подряд две команды find:

    sudo find / -user $old_uid -print0 | xargs -0 sudo chown $user
    sudo find / -group $old_gid -print0 | xargs -0 sudo chown : $group

    и это уже будет намного ближе к истине, но тогда find ‘у придётся дважды шуршать по всему жёсткому диску.

    Читайте также:  Создать загрузочную флешку для windows 10 про

    Есть способ заставить команду find выполнить для нас две операции параллельно, сократив количество чтений с диска ровно в два раза. Для этого используем группировку условий и команд find круглыми скобками (не забывая их экранировать: иначе за них возьмётся шелл) и пославив между ними оператор «запятая»: тогда обе скобки будут выполняться для каждого файла.
    Мы составим два отдельных файла: в первом будет список файлов с -user=$old_uid , а во втором — с -group=$old_gid , и обрабатывать эти файлы мы будет раздельно. Условие поиска теперь разделено на две выполняющися для каждого файла скобки, и в случае выполниния условия команда -fprint0 записывает в соответствующий временный файл путь к найденному осиротевшему файлу.

    chownlist =$ ( tempfile ) chgrplist =$ ( tempfile )
    sudo find / \
    \ ( -user $old_uid -fprint0 » $chownlist » \ ) , \ ( -group $old_gid -fprint0 » $chgrplist » \ )

    После недолгого поиска все файлы будут найдены.

    Последний момент поиска: на форумах очень часто задаётся вопрос как исключить папки из списка find так, чтобы он туда вообще не залезал. Это делается при помощи сочетания условия -path «folder» и команды -prune , которая запрещает find залезать в папки, попавшие в условие. Мы исключим из поиска папки ‘/proc’ и ‘/sys’.
    Для этого в условия добавим ещё одну группировку скобками, отделив их от уже существующих скобок оператором -or . Этот оператор выполнит первое условие, а второе — только если не сработало первое. Так, find проверит не попалась ли ему исключённая из листинга директория (в которой он не будет искать), и если нет — будет составлять списки файлов.
    Делается это так:

    chownlist =$ ( tempfile ) chgrplist =$ ( tempfile )
    sudo find / \
    \ ( \ ( -path «/proc» -or -path «/sys» \ ) -prune \ ) -or \ # исключение папок
    \ ( \ ( -user $old_uid -fprint0 » $chownlist » \ ) , \ ( -group $old_gid -fprint0 » $chgrplist » \ ) \ )

    Также в исключения можно внести путь к диску с бекапом (он ведь у вас есть, верно? ;), подмонтированные сетевые шары и прочее.

    Финиш

    cat » $chownlist » | xargs -0 sudo chown $user
    cat » $chgrplist » | xargs -0 sudo chown : $group
    sudo rm » $chownlist » » $chgrplist » # Не забываем подчистить за собой

    Проверка

    sudo find / -nouser -or -nogroup -print

    Если всё было сделано правильно (и в системе не водилось осиротевших файлов) — команда не должна ничего вывести.

    Полный код скрипта

    Надеюсь, статья окажется полезной. Рекомендую ближе ознакомиться с синтаксисом этой команды: она ведь намного мощнее чем вы думаете 🙂
    Напоследок приведу полный код скрипта для смены UID&GID пользователя и его файлов:

    #=== Настройки
    user =mysql new_uid = 600 old_uid =$ ( id -u $user ) # имя, новый и старый UID
    group =mysql new_gid = 600 old_gid =$ ( id -g $user ) # имя, новый и старый GID
    #=== Смена UID & GID
    sudo usermod -u $new_uid $user
    sudo groupmod -g $new_gid $group
    #=== Поиск файлов
    chownlist =$ ( tempfile ) chgrplist =$ ( tempfile ) sudo find / \
    \ ( \ ( -path «/proc» -or -path «/sys» \ ) -prune \ ) -or \
    \ ( \ ( -user $old_uid -fprint0 » $chownlist » \ ) , \ ( -group $old_gid -fprint0 » $chgrplist » \ ) \ )
    #=== chown и чистка
    cat » $chownlist » | xargs -0 sudo chown $user
    cat » $chgrplist » | xargs -0 sudo chown : $group
    sudo rm » $chownlist » » $chgrplist «

    Источник

    Изменить группы в Linux с помощью команды groupmod

    Главное меню » Linux » Изменить группы в Linux с помощью команды groupmod

    Команда groupmod в Linux изменяет данную группу, изменяя ее имя или идентификатор группы (GID).

    Синтаксис команды такой:

    Изменение группы – это административная задача, поэтому вам нужно быть пользователем sudo или использовать учетную запись root для запуска этой команды.

    Мы будем использовать sudo в примерах команд groupmod здесь.

    Изменить имя группы с помощью команды groupmod

    Если вы хотите изменить имя группы, вы можете сделать это следующим образом:

    Хорошо, что вы изменили имя группы, но это не влияет на файлы, принадлежащие этой группе.

    Посмотрим на реальные примеры.

    Итак, вот файл, принадлежащий пользователю andreyex и группе test_group.

    Теперь, если мы изменим имя группы с test_group на testgroup (удаляя подчеркивание из имени)

    Он «меняет» владение группы файлом, чтобы отразить новое имя группы:

    На самом деле, идентификатор группы остается неизменным, даже если имя группы было изменено. Давайте посмотрим, как изменить идентификатор группы.

    Изменить идентификатор группы с помощью команды groupmod

    Вы можете изменить GID группы следующим образом:

    Теперь это рискованная модификация и ее следует избегать. Во-первых, не будет выполняться никаких проверок в отношении определений входа в систему, таких как значения GID_MIN, GID_MAX, SYS_GID_MIN, SYS_GID_MAX, чтобы различать системные группы и нормальные группы.

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

    Посмотрите это в примере ниже, где я изменил ID группы группового тестирования на 1020, и файл, принадлежащий этой группе, все еще отражает старый GID.

    Если вам интересно, вы можете увидеть GID в файле /etc/group.

    Мы надеемся, что вы стали лучше понимать команду groupmod. Любые вопросы или предложения приветствуются.

    Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

    Источник

    [Пост] Управление доступом в Linux

    Jan 10, 2018 • zinvapel

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

    Основные правила управления доступом

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

    • Вы являетесь владельцами новых объектов, создаваемых вами.
    • Пользователь root с особыми правами, известный как суперпользователь, может действовать как владелец любого объекта в системе.
    • Только суперпользователь может выполнять административные операции особого значения.

    Владельцем файла всегда является один человек, тогда как в группу владельцев могут входить несколько пользователей. По традиции информация о группах хранилась в фай­ле /etc/group .

    Основное

    Пользователь — это любой кто пользуется компьютером.

    Под каждого пользователя, создается свой каталог, пользователю назначается командная оболочка (командный интерпретатор, используемый в операционных системах семейства UNIX). Например: /bin/bash, /bin/zsh, /bin/sh и другие.

    Каждому пользователю назначается идентификационный номер (User ID). Сокращенно номер обозначается как UID, является уникальным идентификатором пользователя. Операционная система отслеживает пользователя именно по UID, а не по их имени.

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

    Каждый пользователь принадлежит минимум к одной или нескольким группам.

    Помимо пользователей, существуют группы. Так же как и пользователь, группа обладает правам доступа к тем или иным каталогам, файлам, периферии. Для каждого файла определён не только пользователь, но и группа. Группы группируют пользователей для предоставления одинаковых полномочий на какие-либо действия.

    Каждой группе назначается идентификационный номер (group ID). Сокращённо GID, является уникальный идентификатором группы. Принадлежность пользователя к группе устанавливается администратором.

    Читайте также:  Команда конфигурации сети linux

    Управление пользователями

    Просмотр

    Вся информация о пользователях хранится в файле /etc/passwd .

    Каждый аккаунт занимает одну строку, в формате account:password:UID:GID:GECOS:directory:shell

    • account — имя пользователя.
    • password — зашифрованный пароль пользователя.
    • UID — идентификационный номер пользователя.
    • GID — идентификационный номер основной группы пользователя.
    • GECOS — необязательное поле, используемое для указания дополнительной информации о пользователе (например, полное имя пользователя).
    • directory — домашний каталог ($HOME) пользователя.
    • shell — командный интерпретатор пользователя (обычно /bin/sh).

    Получение информации о пользователях

    • w – вывод информации (имя пользователя, рабочий терминал, время входа в систему, информацию о потребленных ресурсах CPU и имя запущенной программы) о всех вошедших в систему пользователях.
    • who – вывод информации (имя пользователя, рабочий терминал, время входа в систему) о всех вошедших в систему пользователях.
    • who am i или whoami или id – вывод вашего имени пользователя.
    • users – вывод имен пользователей, работающих в системе.
    • id – вывод о идентификаторах пользователя: его uid, имя_пользователя, gid и имя первичной группы и список групп в которых состоит пользователь
    • groups – вывод списка групп в которых состоит пользователь.

    Добавление пользователя

    Добавление пользователя осуществляется при помощи команды useradd.

    sudo useradd vasyapupkin

    • -b Базовый каталог. Это каталог, в котором будет создана домашняя папка пользователя. По умолчанию /home.
    • -с Комментарий. В нем вы можете напечатать любой текст.
    • -d Название домашнего каталога. По умолчанию название совпадает с именем создаваемого пользователя.
    • -e Дата, после которой пользователь будет отключен. Задается в формате ГГГГ-ММ-ДД. По умолчанию отключено.
    • -f Количество дней, которые должны пройти после устаревания пароля до блокировки пользователя, если пароль не будет изменен (период неактивности). Если значение равно 0, то запись блокируется сразу после устаревания пароля, при -1 — не блокируется. По умолчанию -1.
    • -g Первичная группа пользователя. Можно указывать как GID, так и имя группы. Если параметр не задан будет создана новая группа название которой совпадает с именем пользователя.
    • -G Список вторичных групп в которых будет находится создаваемый пользователь
    • -k Каталог шаблонов. Файлы и папки из этого каталога будут помещены в домашнюю папку пользователя. По умолчанию /etc/skel.
    • -m Ключ, указывающий, что необходимо создать домашнюю папку. По умолчанию домашняя папка не создается.
    • -p Зашифрованный пароль пользователя. По умолчанию пароль не задается, но учетная пользователь будет заблокирован до установки пароля.
    • -s Оболочка, используемая пользователем. По умолчанию /bin/sh.
    • -u Вручную задать UID пользователю.

    Если при создании пользователя не указываются дополнительные ключи, то берутся настройки по умолчанию. Посмотерть настройки по-умолчанию можно с помощью команды useradd -D .

    Если вас не устраивают такие настройки, вы можете поменять их выполнив sudo useradd -D -s /bin/bash , где -s это ключ из таблицы выше.

    Изменение пользователя

    Изменение параметров пользователя происходит с помощью утилиты usermod. Пример использования:

    sudo usermod -c «Эта команда поменяет комментарий пользователю» vasyapupkin

    Изменить пароль пользователю можно при помощи утилиты passwd.

    sudo passwd vasyapupkin

    Утилита passwd может использоваться и обычным пользователем для смены пароля.

    Основные ключи passwd:

    • -d Удалить пароль пользователю. После этого пароль будет пустым, и пользователь сможет входить в систему без предъявления пароля.
    • -e Сделать пароль устаревшим. Это заставит пользователя изменить пароль при следующем входе в систему.
    • -i Заблокировать учетную запись пользователя по прошествии указанного количества дней после устаревания пароля.
    • -n Минимальное количество дней между сменами пароля.
    • -x Максимальное количество дней, после которого необходимо обязательно сменить пароль.
    • -l Заблокировать учетную запись пользователя.
    • -u Разблокировать учетную запись пользователя.

    Установка пустого пароля пользователя

    Супер пользователь с помощью утилит командной строки passwd и usermod или путем редактирования файла /etc/shadow может удалить пароль пользователь, дав возможность входить в систему без указания пароля.

    sudo passwd -d vasyapupkin или sudo usermod -p «» vasyapupkin

    После этого имеет смысл принудить пользователя установить себе новый пароль при следующем входе в систему.

    sudo passwd -e vasyapupkin

    Удаление пользователя

    Для того, чтобы удалить пользователя воспользуйтесь утилитой userdel.

    sudo userdel vasyapupkin

    • -f Принудительно удалить пользователя, даже если он сейчас работает в системе.
    • -r Удалить домашний каталог пользователя.

    Управление группами

    Создание группы

    Программа groupadd создаёт новую группу согласно указанным значениям командной строки и системным значениям по умолчанию.

    sudo groupadd testgroup

    • -g Установить собственный GID.
    • -p Пароль группы.
    • -r Создать системную группу.

    Изменение группы

    Сменить название группы, ее GID или пароль можно при помощи groupmod.

    sudo groupmod -n newtestgroup testgroup # Имя группы изменено с testgroup на newtestgroup

    • -g Установить другой GID.
    • -n Новое имя группы.
    • -p Изменить пароль группы.

    Удаление группы

    Утилита groupdel не имеет никаких дополнительных параметров.

    sudo groupdel testgroup

    Управление пользователями группы

    Для управления пользователями группы используется утилита gpasswd. Чтобы занести пользователя в группу:

    gpasswd -a [user] [group]

    Вывод пользователя из группы:

    gpasswd -d [user] [group]

    Файлы конфигурации

    /etc/passwd

    В файле /etc/passwd, который упоминался ранее, хранится вся информация о пользователях кроме пароля. Одна строка из этого файла соответствует описанию одного пользователя. Примерное содержание строки таково:

    Строка состоит из нескольких полей, каждое из которых отделено от другого двоеточием. Значение каждого поля:

    1. vasyapupkin Имя пользователя для входа в систему.
    2. x Необязательный зашифрованный пароль.
    3. 1000 Числовой идентификатор пользователя (UID).
    4. 1000 Числовой идентификатор группы (GID).
    5. Vasya Pupkin Поле комментария
    6. /home/vpupkin Домашний каталог пользователя.
    7. /bin/bash Оболочка пользователя.

    Второе и последнее поля необязательные и могут не иметь значения.

    /etc/group

    В /etc/group, как очевидно из названия хранится информация о группах. Она записана в аналогичном /etc/passwd виде:

    Строка состоит из нескольких полей, каждое из которых отделено от другого двоеточием. Значение каждого поля:

    1. vasyapupkin Название группы
    2. x Необязательный зашифрованный пароль.
    3. 1000 Числовой идентификатор группы (GID).
    4. vasyapupkin,petya Список пользователей, находящихся в группе.

    В этом файле второе и четвертое поля могут быть пустыми.

    /etc/shadow

    Файл /etc/shadow хранит в себе пароли, по этому права, установленные на этот файл, не дают считать его простому пользователю. Пример одной из записей из этого файла:

    1. vasyapupkin Имя пользователя для входа в систему.
    2. xxx Необязательный зашифрованный пароль.
    3. 15803 Дата последней смены пароля.
    4. 0 Минимальный срок действия пароля.
    5. 99999 Максимальный срок действия пароля.
    6. 7 Период предупреждения о пароле.
    7. [пусто] Период неактивности пароля.
    8. [пусто] Дата истечения срока действия учётной записи.

    Sudo и su

    Зная чей-либо пароль, можно непосредственно зарегистрироваться в системе под его именем, введя команду su имя_пользователя .

    Программа su служит для выполнения от имени указанного пользователя (по умолчанию — root) указанной команды/программы (по умолчанию — той программы, что определена в качестве оболочки (shell) для указанного пользователя) и запрашивает она пароль указанного пользователя.

    О программе sudo можно сказать почти то же самое, за двумя исключениями:

    • Нет «программы по умолчанию». для запуска оболочки, определённой для указанного пользователя, надо передать программе опцию -i.
    • По умолчанию запрашивается не пароль указанного пользователя, а пароль пользователя, выполняющего программу sudo. какому пользователю, какие программы и от чьего имени можно запускать, определяется содержимым конфигурационного файла /etc/sudoers (редактируется с помощью программы visudo).
    Читайте также:  Данное средство несовместимо с этим компьютером установка windows 10

    Управление доступом

    У каждого объекта в Linux есть свой идентификатор, а так же права доступа, применяемые к данному идентификатору. Идентификатор есть у пользователя — UID, у группы — GID, у файла — inode.

    Собственно inode является, как идентификатором файла/каталога, так и сущностью, которая содержит в себе информацию о файле/каталоге. Например такую, как: принадлежность к владельцу/группе, тип файла и права доступа к файлу.

    Для каждого объекта файловой системы в модели полномочий Linux есть три типа полномочий:

    • Полномочия чтения (r от read).
    • Записи (w от write).
    • Выполнения (x от execution).

    В полномочия записи входят также возможности удаления и изменения объекта. Право выполнения можно установить для любого файла. Потенциально, любой файл в системе можно запустить на выполнение, как программу в Windows. В Linux является ли файл исполняемым или нет, определяется не по его расширению, а по правам доступа. Кроме того, эти полномочия указываются отдельно для владельца файла, членов группы файла и для всех остальных.

    Собрав вышесказанное в кучу, то есть представив 3 правила (rwx) для трех групп (владелец, группа, остальные) запись прав доступа будет выглядеть вот так: rwx rwx rwx . Пример прав директории:

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

    владелец группа остальные
    буквенное rwx r-x r–
    двоичное 111 101 100
    двоичное в десятичных 421 401 400
    десятичное 7 5 4

    Управление правами доступа

    Управление правами доступа происходит с помощью команды chmod, управление владельцем файла происходит с помощью команды chown. Синтаксис команд следующий:

    • [к_какой_группе_прав] может быть:
      • u (от user) — владелец-пользователь.
      • g (от group) — владелец-группа.
      • o (от other) — остальные пользователи.
      • a (от all) — все вышеперечисленные группы вместе.
    • [что_сделать_с_правами] может быть:
      • + — добавить.
      • — — убрать.
      • = — присвоить указанное.
    • [какие_права] может быть:
      • r — чтение.
      • w — запись.
      • x — выполнение.
    • [над_каким_объектом] соответственно — имя или путь к файлу
    • [права] числовое обозначение прав доступа (755, 644 и т.п.)

    Использование команды chown выглядит следующим образом: chown user:group file (-R рекурсивно)

    Права доступа к символьным ссылкам

    Если посмотреть на права символьных ссылок, то они всегда выглядят так: rwxrwxrwx. Дело в том, что права на символьную ссылку не имеют особого значения. При использования ссылки драйвер файловой системы пересчитывает реальный путь к файлу и применяет права доступа, определенные для реального пути уже без учета символьной ссылки.

    Специальные атрибуты

    • Sticky bit — бит закрепления в памяти.

    Сегодня sticky bit используется в основном для каталогов, чтобы защитить в них файлы. В такой каталог может писать ЛЮБОЙ пользователь. Из такой директории пользователь может удалить только те файлы, владельцем которых он является. Примером может служить директория /tmp , в которой запись открыта для всех пользователей, но нежелательно удаление чужих файлов.

    • SUID — он же Set User ID.

    Атрибут исполняемого файла, позволяющий запустить его с правами владельца. В Unix-подобных системах приложение запускается с правами пользователя, запустившего указанное приложение. Это обеспечивает дополнительную безопасность так как процесс с правами пользователя не сможет получить доступ на запись к важным системным файлам, например /etc/passwd, который принадлежит суперпользователю root. Если на исполняемый файл установлен бит suid, то при выполнении эта программа автоматически меняет “эффективный userID” на идентификатор того юзера, который является владельцем этого файла. То есть, не зависимо от того — кто запускает эту программу, она при выполнении имеет права хозяина этого файла.

    • SGID — он же Set Group ID. Аналогичен SUID, но относится к группе. При этом, если для каталога установлен бит SGID, то создаваемые в нем объекты будут получать группу владельца каталога, а не пользователя.

    Хотелось бы так же провести аналогию с ОС Windows. В указанной операционной системе права регулируются на основе списков ACL. В Linux тоже такое возможно, это реализуется с помощью пакета acl, но данный вопрос в текущей теме я рассматривать не буду. Еще одно важное замечание! В Windows можно определить права доступа на каталог, и они автоматически распространяются на все файлы и поддиректории (если вы явно не указали иного). В Linux права доступа сохраняются в inode файла, и поскольку inode у каждого файла свой собственный, права доступа у каждого файла свои. Так же, права доступа пользователя и группы не суммируются, как в Windows. Если программа выполняется с правами пользователя и группы, которым принадлежит файл — работают только права хозяина файла.

    Исполняемый файл с установленным атрибутом suid является “потенциально опасным”. Без установленного атрибута, файл не позволит обычному пользователю сделать то, что выходит за пределы прав пользователя (пример, программа passwd позволяет пользователю изменить только собственный пароль). Но, даже незначительная ошибка в такой программе может привести к тому, что злоумышленник сможет заставить её выполнить ещё какие-нибудь действия, не предусмотренные автором программы. Стоит очень осторожно относиться к данным атрибутам! Как найти в системе файлы с атрибутом SIUD и др.

    При создании новой директории в директории с уже установленным SGID-битом, у созданной директории SGID-бит устанавливается автоматически!

    Обозначение атрибутов Sticky, SUID, SGID

    Специальные права используются довольно редко, поэтому при выводе программы ls -l символ, обозначающий указанные атрибуты, закрывает символ стандартных прав доступа. Пример: rwsrwsrwt, где s — SUID, s — SGID, t — Sticky. В приведенном примере не понятно, rwt — это rw- или rwx? Определить, стоит ли символ стандартных прав доступа под символами s и t — просто. Если t маленькое, значит x установлен. Если T большое, значит x не установлен. То же самое правило распространяется и на s.

    В числовом эквиваленте данные атрибуты определяются первым символом при четырехзначном обозначении (который часто опускается при назначении прав), например в правах 1777 — символ 1 обозначает sticky bit. Остальные атрибуты имеют следующие числовое соответствие:

    Права доступа по-умолчанию для вновь создаваемых объектов файловой системе.

    В Linux, при создании какого-либо файла или каталога предоставляемые права определяются по определенному алгоритму (формуле). Не вдаваясь в подробности и для большего понимания сути скажу, что есть исходные права доступа:

    • 0666 — для файлов.
    • 0777 — для каталогов.

    Есть такая штука как umask, которая задана для каждого пользователя и хранится в виде строчки umask в файле .bash_profile. Итого, у вновь создаваемого каталога будут права равные исходным правам доступа — umask.

    Узнать текущий umask можно, введя команду umask без параметров. Пример:

    Как видно из примера, umask установлен 0022, исходные права доступа равны 0666 — для файлов и 0777 — для каталогов. В результате получаем:

    Источник

    Оцените статью