- Linux permissions: SUID, SGID, and sticky bit
- Career advice
- Symbolic method
- Numeric method
- Special permission explained
- user + s (pecial)
- group + s (pecial)
- other + t (sticky)
- Setting special permissions
- Summary
- linux-notes.org
- Стандартные права (SUID, SGID, Sticky bit) в Unix/Linux
- Использование «sticky bit» прав в Unix/Linux
- Использование SUID ( Set User ID) прав в Unix/Linux
- Использование SGID ( Set Group ID ) прав в Unix/Linux
- 🧟♀️ StickyBit, SUID и SGID в Linux с примерами
- stickybit – Как просмотреть и установить
- Что такое SUID бит и как его установить
- Как установить и сбросить бит SUID
- Как SGID Bit работает с файлами и каталогоми
- По файлам:
- По каталогам:
Linux permissions: SUID, SGID, and sticky bit
Image by Elyse Kiel of ERK Photography. Used with permission.
Linux permissions are a concept that every user becomes intimately familiar with early on in their development. We need to execute scripts, modify files, and run processes in order to administer systems effectively, but what happens when we see Permission denied? Do you know why we see this message? If you know the cause of the problem, do you know how to implement the solution?
Career advice
I will give a quick explanation of the various ways to calculate permissions, and then we will focus on the special permissions within Linux. If you want an in-depth look at the chmod command, check out this article from Sudoer Shashank Hegde, Linux permissions: An introduction to chmod.
The TL;DR is that there are two main ways of assigning permissions.
Symbolic method
The symbolic method uses the following syntax:
- Who — represents identities: u,g,o,a (user, group, other, all)
- What — represents actions: +, -, = (add, remove, set exact)
- Which — represents access levels: r, w, x (read, write, execute)
An example of this is if I want to add the read and write permissions to a file named test.txt for user and group, I use the following command:
Full disclosure, this is not my preferred method of assigning permissions, and if you would like more information around this method, I recommend your nearest search engine.
Numeric method
The numeric method is, in my experience, the best way to learn and practice permissions. It is based on the following syntax:
Here, from left to right, the character # represents an access level. There are three access levels—user, group, and others. To determine what each digit is, we use the following:
- Start at 0
- If the read permission should be set, add 4
- If the write permission should be set, add 2
- If the execute permission should be set, add 1
This is calculated on a per access level basis. Let’s interpret this permissions example:
The permissions are represented as 650. How did I arrive at those numbers?
- The user’s permissions are: rw- or 4+2=6
- The group’s permissions are: r-x or 4+1=5
- The others’s permissions are: — or 0
To put this into the command syntax, it looks like this:
Now that you understand the basics of permission calculation in Linux, let’s look at the special permissions included in the OS.
Special permission explained
Special permissions make up a fourth access level in addition to user, group, and other. Special permissions allow for additional privileges over the standard permission sets (as the name suggests). There is a special permission option for each access level discussed previously. Let’s take a look at each one individually, beginning with Set UID:
user + s (pecial)
Commonly noted as SUID, the special permission for the user access level has a single function: A file with SUID always executes as the user who owns the file, regardless of the user passing the command. If the file owner doesn’t have execute permissions, then use an uppercase S here.
Now, to see this in a practical light, let’s look at the /usr/bin/passwd command. This command, by default, has the SUID permission set:
Note the s where x would usually indicate execute permissions for the user.
group + s (pecial)
Commonly noted as SGID, this special permission has a couple of functions:
- If set on a file, it allows the file to be executed as the group that owns the file (similar to SUID)
- If set on a directory, any files created in the directory will have their group ownership set to that of the directory owner
This permission set is noted by a lowercase s where the x would normally indicate execute privileges for the group. It is also especially useful for directories that are often used in collaborative efforts between members of a group. Any member of the group can access any new file. This applies to the execution of files, as well. SGID is very powerful when utilized properly.
As noted previously for SUID, if the owning group does not have execute permissions, then an uppercase S is used.
other + t (sticky)
The last special permission has been dubbed the «sticky bit.» This permission does not affect individual files. However, at the directory level, it restricts file deletion. Only the owner (and root) of a file can remove the file within that directory. A common example of this is the /tmp directory:
The permission set is noted by the lowercase t, where the x would normally indicate the execute privilege.
Setting special permissions
To set special permissions on a file or directory, you can utilize either of the two methods outlined for standard permissions above: Symbolic or numerical.
Let’s assume that we want to set SGID on the directory community_content .
To do this using the symbolic method, we do the following:
Using the numerical method, we need to pass a fourth, preceding digit in our chmod command. The digit used is calculated similarly to the standard permission digits:
Where X is the special permissions digit.
Here is the command to set SGID on community_content using the numerical method:
Summary
In closing, permissions are fundamentally important to being an effective Linux administrator. There are two defined ways to set permissions using the chmod command: Symbolic and numerical. We examined the syntax and calculations required for both methods. We also considered the special permissions and their role in the system. Now that you understand permissions and the underlying concepts, you can solve the ever-annoying Permission denied error when it tries to impede your work.
Источник
linux-notes.org
Стандартные права (SUID, SGID, Sticky bit) в Unix/Linux
Использование «sticky bit» прав в Unix/Linux
Unix является многопользовательской ОС и в основном, устроен так, что несколько пользователей могут работать одновременно. Таким образом, программа которая находится в памяти требует меньше времени чтобы начать свою работу. Таким образом, когда один пользователь только что использовал программу, а затем новый пользователь хочет использовать ту же самую программу, то 2-й юзверь не будет иметь временной задержки для инициализации утилиты.
Установка Sticky Bit
Выставляем sticky bit на файл:
- — T — означает, что разрешения на выполнение отключены.
- — t — означает, что права на выполнение включены.
Или можно еще использовать следующую команду:
Sticky bit, в основном используется в общих каталогах, таких как /var или /tmp, поскольку пользователи могут создавать файлы, читать и выполнять их, принадлежащие другим пользователям, но не могут удалять файлы, принадлежащие другим пользователям. Например, если пользователь (предположим bob) создает файл с именем /tmp/bob, то другой пользователь (допустим tom) не может удалить этот файл, даже если в каталоге /tmp есть разрешение 777. Если sticky bit не установлен, то tom юзер может удалить /tmp/bob, так как файл /tmp/bob наследует разрешения родительского каталога.
Использование SUID ( Set User ID) прав в Unix/Linux
setuid (сокращения от англ. set user ID upon execution — «установка ID пользователя во время выполнения) являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами владельца исполняемого файла. Иногда файлы требуют разрешения на выполнение для пользователей, которые не являются членами группы владельца, в этом случае вам потребуется предоставить специальные разрешения на выполнение. Когда SUID установлен, пользователь может запускать любую программу, такую как владелец программы.
Установка SUID бит на файл.
Если SUID бит установлен на файл и пользователь выполнил его. Процесс будет иметь те же права что и владелец файла.
Например: команда passwd имеет SUID bit. Когда обычный пользователь захочет изменит свой пароль в файле /etc/passwd или /etc/shadow, то у него ничего не получиться, т.к нужны права суперпользователя (процесс командны PASSWD всегда работает с правами суперюзера).
Предположим, что я получил исполняемый файл «filename», и мне нужно установить SUID на этот файл, перейдите в командную строку и выпуск команду:
Теперь проверьте разрешения на файл с командой:
Наблюдайте за «s» буквой, которая была добавлена для SUID бита:
Чтобы выставить SUID для всех папок и файлов, используем:
Найти SUID файлы
Найти все SUID файлы для «root» пользователя:
Найти все SUID и SGID файлы:
Использование SGID ( Set Group ID ) прав в Unix/Linux
setgid (сокращения от англ. set group ID upon execution — «установка ID группы во время выполнения») являются флагами прав доступа в Unix, которые разрешают пользователям запускать исполняемые файлы с правами группы исполняемого файла.
Так же, как SUID , установив SGID бит для файла он устанавливает ваш идентификатор группы для группы файла в то время как файл выполняется. Это действительно полезно в случае когда у вас есть реальные установки в многопользовательском режиме где у пользователей есть доступ к файлом. В одной домашней категории я действительно не нашел использования для SGID. Но основная концепция является такой же, как и у SUID, файлы у которых SGID бит устанавливается, то они принадлежат к этой группе , а не к этому пользователю.
Установка бита SUID / SGID
Если SGID бит установлен на любой каталог, все подкаталоги и файлы, созданные внутри получат те же пермишены что и группы в качестве основного каталога.
Устанавливаем SGID на директорию:
Теперь, переключаемся на другого пользователя и создаем файл в папке /home/captain/test_dir:
В приведенном выше примере test_file.txt создался с группой root.
Чтобы выставить SGID для всех папок и файлов, используем:
Найти SGID файлы
Найти все файлы с использованием SGID бита, для root пользователя:
Найти все SUID и SGID файлы:
Зачем нужены SUID и SGID?
Есть достаточно много программ и файлов, которые должны принадлежать пользователю root, и в то же время – простые пользователи должны иметь возможность выполнять его. Для примера – утилита passwd, которая находится в каталоге /usr/bin/passwd и которая имеет дело с файлом /etc/passwd, редактировать который может только пользователь root.
Вот еще полезное чтиво:
Команда chmod также может использоваться для установки или отмены следующих значений в качестве префикса для обычных трех числовых привилегий:
- 0 — setuid, setgid, sticky bits не установлены.
- 1 — Установить sticky bit.
- 2 -Установить setgid bit.
- 3 -Установить setgid и sticky bits.
- 4 -Установить setuid bit.
- 5 -Установить setuid и sticky bits.
- 6 — Установить setuid и setgid bit-ы.
- 7 — setuid, setgid, sticky bits активированы.
Тема «Стандартные права (SUID, SGID, Sticky bit) в Unix/Linux» завершена.
Источник
🧟♀️ StickyBit, SUID и SGID в Linux с примерами
В этой статье мы расскажем о специальных разрешениях, которые работают с файлами и каталогами, которые называются Stickybit, SUID и SGID.
Sticky работает только для каталогов.
Если пользователь хочет создать или удалить файл / каталог в каком-либо каталоге, ему нужно разрешение на запись в этот каталог.
Разрешение на запись в каталог дает пользователю право создавать файл, а также право удалять его.
Каталог /tmp – это каталог для временных файлов / каталогов.
Этот каталог обладает всеми правами на всех трех уровнях, поскольку все пользователи должны создавать/удалять свои временные файлы.
Но так как пользователи имеют разрешение на запись в этот каталог, они могут удалить любой файл в этом каталоге.
Разрешения этого файла не влияют на удаление.
Но с установленным в каталоге стики битом любой может создать в нем файл / каталог, но может удалить только свои собственные файлы.
Файлы, принадлежащие другим пользователям, не могут быть удалены.
stickybit – Как просмотреть и установить
Вы можете заметить, что тег t добавлен в каталог /tmp, и это означает, что для этого каталога установлен бит.
В Linux стики бит может быть установлен командой chmod.
Вы можете использовать тег + t, чтобы добавить, и тег -t, чтобы удалить бит.
Примечание. В ОС Unix stickybit имеет другое назначение, но мы не обсуждаем его здесь.
Что такое SUID бит и как его установить
Когда исполняемый файл запускается, он запускается под управлением пользователя, который его выполнил.
Это означает, что когда пользователь student запускает команду ls, соответствующий процесс будет выполняться под управлением пользователя student.
Бит SUID, также известный как бит установки идентификатора пользователя, перезаписывает это поведение.
Если в программе установлен бит SUID, то эта программа будет работать как владелец этого файла, независимо от того, кто его выполняет.
У команды passwd в Linux установлен бит SUID.
Это можно увидеть в третьем поле прав доступа. ‘S’ вместо ‘x’ указывает, что установлен бит SUID.
С установленным битом SUID, когда обычный пользователь (скажем, student) запускает команду passwd, команда запускается с владельцем «root», а не с учетной записью student, поскольку root является владельцем этого файла.
Это необходимо, потому что пароли хранятся в файле /etc/shadow, который не имеет разрешения на групповом или другом уровне.
Вы должны понимать, что все пользователи не могут получить разрешение на чтение или запись этого файла по соображениям безопасности; в противном случае они будут читать / изменять пароли других пользователей.
Таким образом, это вызывает проблему: если у пользователей нет прав доступа к этому файлу, как они будут изменять свои собственные пароли?
SUID немного решает проблему.
У команды passwd установлен бит SUID, поэтому, когда обычные пользователи выполняют эту команду, они запускают ее под владельцем root, то есть владельцем команды passwd.
Как установить и сбросить бит SUID
Следует отметить, что бит SUID работает только с файлами.
Чтобы установить бит SUID на файл, используйте команду chmod следующим образом
Числовой метод для изменения разрешений также может быть использован.
Предположим, что если обычные разрешения для файла равны 744, то с установленным битом SUID они станут 4744.
Бит SUID имеет значение 4.
Как SGID Bit работает с файлами и каталогоми
В отличие от бита SUID, бит SGID работает как с файлами, так и с каталогами, но в обоих случаях он имеет различное значение.
По файлам:
Для файла он имеет значение, аналогичное значению бита SUID, то есть когда любой пользователь выполняет файл с установленным битом SGID, он всегда будет выполняться с владельцем группы этого файла, независимо от того, кто его запускает.
Например, файл /sbin/netreport имеет установленный бит SGID, который можно увидеть в «s» вместо «x» в разрешениях группы.
Этот файл имеет групповое владение группой root.
Таким образом, когда пользователь (скажем, student) выполняет его, соответствующий процесс не будет принадлежать группе student, а будет принадлежать группе root.
По каталогам:
Теперь поговорим о SGID в каталогах.
SGID для каталогов используется для создания совместных каталогов.
Чтобы понять бит SGID для каталогов, рассмотрим следующий сценарий:
Предположим, что три пользователя Джек, Джонс и Дженни вместе работают над каким-то проектом.
Все они принадлежат к группе под названием javaproject.
Для выполнения проекта им необходимо предоставить общий доступ ко всем файлам, связанным с проектом.
Все они должны видеть файлы друг друга.
Это можно сделать, просто предоставив разрешение на чтение на уровне группы.
Далее, предположим, что каталогом, используемым для проекта, является “/javaproject”.
Здесь возникает проблема: когда файл создается, он принадлежит к основной группе пользователя, создавшего файл.
Таким образом, когда разные пользователи создают свои файлы в этом каталоге, эти файлы не будут принадлежать группе javaproject group.
Что мы делаем для решения нашей проблемы, так это то, что мы устанавливаем группу каталога /javaproject равной группе javaproject, и устанавливаем бит SGID.
Когда в каталоге установлен бит SGID, все файлы и каталоги, созданные в нем, имеют групповое владение группой, связанной с этим каталогом.
Это означает, что после установки бита SGID в каталоге /javaproject все файлы и каталоги, создаваемые в этом каталоге, будут принадлежать группе «javaproject».
Более того, это поведение является рекурсивным, то есть в каталогах, созданных в этом каталоге, также будет установлен бит SGID.
Права у нового каталога также будут такими же, как и у каталога /javaproject.
Бит SGID может быть установлен командой chmod следующим образом:
Теперь, когда пользователь jones создает файл в этом каталоге, он создается под владельцем группы javaproject.
Числовое значение, соответствующее биту SGID, равно 2. Поэтому, чтобы численно добавить бит SGID, используйте следующую команду:
Источник