Как удалить/добавить suid, guid, sticky bit в linux

Немного чёрной магии

Помните, я говорил, что права задаются тремя числами? Для владельца, для группы и для остальных? Это не вся правда. Есть ещё одно число, которое творит настоящую чертовщину в мозгу неопытных пользователей. По умолчанию этот блок не затрагивается (как будто там стоит 0), но если указать явно, то вот что значит тот самый блок:

SUID (4000, “u+s”) – если этот бит назначен на исполняемом файле, то файл запустится от имени владельца файла (а не того пользователя, кто этот файл запустил).

Допустим, у нас есть скрипт, добавляющий новое правило в файрволл. Само-собой, операция требует повышенных прав (root) и обычный пользователь запустив такой скрипт получит отказ в доступе. Но если назначить скрипту SUID-бит и владелец скрипта будет root, то пользователь сможет его запускать от имени root соответственно. Это круто, но в то же время может быть опасно.

Если SUID назначен на каталог – то файл запустится от имени владельца каталога.

SGID (2000, “g+s”) – практически то же самое, только вместо владельца – берётся группа владельца.

Sticky (1000, “t”) – вот тут начинается самая жесть. Если у нас есть каталог, на котором установлен t-бит, то удалить из этого каталога файлы может только владелец, несмотря на то, что на каталоге может стоять право 777.

Поясню. Допустим, у нас есть каталог /tmp. В него может писать кто угодно. Сделаем там права 777 – т.е. полная помойка. Но вам бы не хотелось, чтобы я мог удалять ваши файлы? А мне бы не хотелось, чтобы вы удаляли мои. Поэтому на каталог вешаем бит “t” и всё. Сохранять в каталог могут все, а удалять – только своё.

Установка Sticky-бита на файл не имеет смысла сейчас, современные версии ОС его игнорируют. Раньше он использовался для запрета выгрузки файла из памяти.

Sticky bit

Устанавливается для каталогов. Только владелец файла, владелец каталога или root может переименовать или удалить файл. Без выставленного sticky bit, любой пользователь, имеющий wx-права на каталог, может удалить или переименовать содержащиеся в нём файлы независимо от владельца файлов.

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

SUID

Рассмотрим пример применения бита SUID. В системе любой пользователь может поменять себе пароль. Новый пароль записывается в файл /etc/shadow:

$ ls -l /etc/shadow
-rw-r-----  1 root shadow 500 2005-03-02 17:14 /etc/shadow
$

Как видно из прав доступа файла shadow, право на запись имеет только суперпользователь root (Наличие право на чтение для группы — это особенность дистрибутива Slackware Linux, в других дистрибутивах права доступа обычно устанавливаются в 600). То есть другие пользователи системы не имеют права изменять содержимое этого файла, поэтому они не имеют права на изменение пароля. Но ведь каким-то образом им удается изменить свой пароль!

Для изменения пароля используется программа passwd.

$ ls -l /usr/bin/passwd
-rws--x--x  1 root bin 37880 2004-06-21 23:20 /usr/bin/passwd*
$

Обратите внимание на символ s, который стоит вместо x в правах хозяина файла. Наличие этого символа говорит о том, что у этого файла установлен бит SUID

А это значит, что программа будет выполняться с правами пользователя, которому принадлежит файл — с правами пользователя root! Root имеет право на запись в файл shadow, и именно поэтому обыкновенный пользователь может изменить свой пароль.

$ ls -l test
-rwxr-x--x  1 artur users 12 2005-06-06 11:53 test*
$ chmod 4751 test
$ ls -l test
-rwsr-x--x  1 artur users 12 2005-06-06 11:53 test*
$

4 — это обозначение бита SUID. При установке SUID-бита с использованием символьного формата записи, строка будет выглядеть так:

$ chmod u+s test
$ ls -l test
-rwsr-x--x  1 artur users 12 2005-06-06 11:53 test*
$

Для сброса специальных бит при числовом формате записи прав желательно явно указывать ноль в соответствующей позиции:

$ chmod 0751 test
$ ls -l test
-rwxr-x--x  1 artur users 12 2005-06-06 11:53 test*
$

SUID-бит — это очень опасный механизм. Вы как администратор системы должны постоянно контролировать наличие файлов с установленным SUID-битом. Это можно сделать при помощи программы поиска файлов в файловой системе find.

$ find /usr/bin -perm +4000
/usr/bin/lppasswd
/usr/bin/crontab
/usr/bin/chfn
/usr/bin/chsh
/usr/bin/chage
/usr/bin/expiry
/usr/bin/newgrp
/usr/bin/passwd
/usr/bin/gpasswd
/usr/bin/sudo
/usr/bin/procmail
/usr/bin/rcp
/usr/bin/rsh
/usr/bin/traceroute6
/usr/bin/rlogin
/usr/bin/traceroute
$

E) What is SUID numerical value?

It has the value 4.

Please comment your thoughts about SUID usage in your company.

Post Views: 155,361

The following two tabs change content below.

Mr Surendra Anne is from Vijayawada, Andhra Pradesh, India. He is a Linux/Open source supporter who believes in Hard work, A down to earth person, Likes to share knowledge with others, Loves dogs, Likes photography. He works as Devops Engineer with Taggle systems, an IOT automatic water metering company, Sydney . You can contact him at surendra (@) linuxnix dot com.

Latest posts by Surendra Anne

  • Docker: How to copy files to/from docker container — June 30, 2020
  • Anisble: ERROR! unexpected parameter type in action: Fix — June 29, 2020
  • FREE: JOIN OUR DEVOPS TELEGRAM GROUPS — August 2, 2019
  • Review: Whizlabs Practice Tests for AWS Certified Solutions Architect Professional (CSAP) — August 27, 2018
  • How to use ohai/chef-shell to get node attributes — July 19, 2018

SGID

Бит SGID на исполняемые файлы устанавливается очень редко. Его основное назначение — организация работы группы пользователей над файлами одного проекта.

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

Предположим, что для размещения файлов проекта выделена отдельная директория, например, /usr/local/project. Для пользователей, работающих над проектом, создана специальная группа pr1, в которую добавлены пользователи artur и user1. На директорию установлены следующие права доступа:

$ ls -ld /usr/local/project
drwxrwx--- 2 root pr1 4096 2005-06-06 14:58 /usr/local/project
$

Поскольку пользователи artur и user1 входят в группу pr1, они имеют право на создание файлов в этой директории. Каждый пользователь создал в директории новый файл.

$ ls -l /usr/local/project/
итого 0
-rw-rw----  1 artur users 0 2005-06-06 15:06 artur_file
-rw-rw----  1 user1 user1 0 2005-06-06 15:09 file_user1
$

Как видно из прав доступа к файлам, artur ничего не может сделать с файлом пользователя user1 и наоборот. Они могут только удалить эти файлы, но не изменить их содержимое. Почему так получилось? Дело в том, что файл принадлежит пользователю, его создавшему, и основной группе пользователя. У artur основная группа — users, у user1 — user1. Поэтому эти файлы принадлежат именно эти группам.

Для решения проблемы необходимо сделать так, что бы все вновь создаваемые файлы принадлежали той группе, в которую входят оба пользователя. Это можно сделать, установив SGID-бит на директорию /usr/local/project. Тогда все создаваемые в этой директории файлы будут принадлежать не основным группам пользователей, а группе, которой принадлежит директория project.

# chmod g+s /usr/local/project
# ls -ld /usr/local/project
drwxrws--- 2 root pr1 4096 2005-06-06 15:09 /usr/local/project
# rm /usr/local/project/*
#

Изменение прав доступа к директории производил суперпользователь root. У root символ приглашения командной строки обычно заканчивается на #.

Обратите внимание на символ s, который стоит вместо x в правах группы. Таким образом обозначается бит SGID.. Теперь пользователь artur создаст в директории project свой файл (во всех дальнейших примерах необходимо учитывать, что установлена umask 007):

Теперь пользователь artur создаст в директории project свой файл (во всех дальнейших примерах необходимо учитывать, что установлена umask 007):

$ touch /usr/local/project/artur_file
$ ls -l /usr/local/project/
итого 0
-rw-rw----  1 artur pr1 0 2005-06-06 15:20 artur_file
$

Новый файл принадлежит пользователю artur и группе pr1, а не группе users. Если в этой директории создаст файл пользователь user1, файл тоже будет принадлежать группе pr1.

$ touch /usr/local/project/file_user1
$ ls -l /usr/local/project
итого 0
-rw-rw----  1 artur pr1 0 2005-06-06 15:20 artur_file
-rw-rw----  1 user1 pr1 0 2005-06-06 15:22 file_user1
$

Теперь оба пользователя могут работать с файлами этого проекта.

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

$ mkdir /usr/local/project/dir
$ ls -l /usr/local/project
итого 4
-rw-rw----  1 artur pr1    0 2005-06-06 15:20 artur_file
drwxrws---  2 user1 pr1 4096 2005-06-06 15:24 dir/
-rw-rw----  1 user1 pr1    0 2005-06-06 15:22 file_user1
$

What is SGID?

SGID (Set Group ID up on execution) is a special type of file permissions given to a file/folder. Normally in Linux/Unix when a program runs, it inherit’s access permissions from the logged in user. SGID is defined as giving temporary permissions to a user to run a program/file with the permissions of the file group permissions to become member of that group to execute the file. In simple words users will get file Group’s permissions when executing a Folder/file/program/command.

SGID is similar to SUID. The difference between both is that SUID assumes owner of the file permissions and SGID assumes group’s permissions when executing a file instead of logged in user inherit permissions.

How can I setup SGID for a file?

SGID can be set in two ways

1) Symbolic way (s)

2) Numerical/octal way (2, SGID bit as value 2)

Use chmod command to set SGID on file: file1.txt

Symbolic way:

chmod g+s file1.txt

Let me explain above command we are setting SGID(+s) to group who owns this file.

Numerical way:

chmod 2750 file1.txt

Here in 2750, 2 indicates SGID bit’set, 7 for full permissions for owner, 5 for read and execute permissions for group, and no permissions for others.

How can I check if a file is set with SGID bit or not?

Use ls –l to check if the x in group permissions field is replaced by s or S

For example: file1.txt listing before and after SGID set

Before SGID set:

ls -l

total 8

-rwxr--r-- 1 xyz xyzgroup 148 Dec 22 03:46 file1.txt

After SGID set:

ls -l

total 8

-rwxr-sr-- 1 xyz xyzgroup 148 Dec 22 03:46 file1.txt

Some FAQ’s related to SGID:

Where is SGID used?

1) When implementing Linux group disk quota.

I am seeing “S” ie Capital s in the file permissions, what’s that?

After setting SUID or SGID to a file/folder if you see ‘S’ in the file permission area that indicates that the file/folder does not have executable permissions for that user or group on that particular file/folder.

chmod g+s file1.txt

output: -rwxrwSr-x 1 surendra surendra 0 Dec 27 11:24 file1.txt

so if you want executable permissions too, apply executable permissions to the file.

chmod g+x file1.txt

output: -rwxrwsr-x 1 surendra surendra 0 Dec 5 11:24 file1.txt

you should see a smaller ‘s’ in the executable permission position.

How can I find all the SGID set files in Linux/Unix.

find / -perm /2000

The above find command will check all the files which is set with SGID bit(2000).

Can I set SGID for folders?

Yes, you can if it’s required (you should remember one thing, that Linux treats everything as a file)

How can I remove SGID bit on a file/folder?

chmod g-s file1.txt

Post your thoughts on this.

Post Views: 64,736

The following two tabs change content below.

Mr Surendra Anne is from Vijayawada, Andhra Pradesh, India. He is a Linux/Open source supporter who believes in Hard work, A down to earth person, Likes to share knowledge with others, Loves dogs, Likes photography. He works as Devops Engineer with Taggle systems, an IOT automatic water metering company, Sydney . You can contact him at surendra (@) linuxnix dot com.

Latest posts by Surendra Anne

  • Docker: How to copy files to/from docker container — June 30, 2020
  • Anisble: ERROR! unexpected parameter type in action: Fix — June 29, 2020
  • FREE: JOIN OUR DEVOPS TELEGRAM GROUPS — August 2, 2019
  • Review: Whizlabs Practice Tests for AWS Certified Solutions Architect Professional (CSAP) — August 27, 2018
  • How to use ohai/chef-shell to get node attributes — July 19, 2018

What is SUID?

When the SUID bit is set on an executable file, this means that the file will be executed with the same permissions as the owner of the executable file.

Let’s take a practical example. If you look at the binary executable file of the passwd command, it has the SUID bit set.

This means that any user running the passwd command will be running it with the same permission as root.

What’s the benefit? The passwd command needs to edit files like /etc/passwd, /etc/shadow to change the password. These files are owned by root and can only be modified by root. But thanks to the setuid flag (SUID bit), a regular user will also be able to modify these files (that are owned by root) and change his/her password.

This is the reason why you can use the passwd command to change your own password despite of the fact that the files this command modifies are owned by root.

Why can a normal user not change the password of other users?

Note that a normal user can’t change passwords for other users, only for himself/herself. But why? If you can run the passwd command as a regular user with the same permissions as root and modify the files like /etc/passwd, why can you not change the password of other users?

If you check the code for the passwd command, you’ll find that it checks the UID of the user whose password is being modified with the UID of the user that ran the command. If it doesn’t match and if the command wasn’t run by root, it throws an error.

The setuid/SUID concept is tricky and should be used with utmost cautious otherwise you’ll leave security gaps in your system. It’s an essential security concept and many commands (like ping command) and programs (like sudo) utilize it.

Now that you understand the concept SUID, let’s see how to set the SUID bit.

How to set SUID bit?

I find the symbolic way easier while setting SUID bit. You can use the chmod command in this way:

Here’s an example:

You can also use the numeric way. You just need to add a fourth digit to the normal permissions. The octal number used to set SUID is always 4.

How to remove SUID?

You can use either the symbolic mode in chmod command like this:

Or, use the numeric way with 0 instead of 4 with the permissions you want to set:

Difference between small s and capital S as SUID bit

Remember the definition of SUID? It allows a file to be executed with the same permissions as the owner of the file.

But what if the file doesn’t have execute bit set in the first place? Like this:

If you set the SUID bit, it will show a capital S, not small s:

The S as SUID flag means there is an error that you should look into. You want the file to be executed with the same permission as the owner but there is no executable permission on the file. Which means that not even the owner is allowed to execute the file and if file cannot be executed, you won’t get the permission as the owner. This fails the entire point of setting the SUID bit.

If you want to search files with this permission, use find command in the terminal with option -perm.

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

vipw 
запускает текстовый редактор, указанный в переменной среды EDITOR (или редактор по умолчанию, обычно vi), загружая в него копию файла /etc/passwdсистемах GNU/Linux /etc/shadow, во FreeBSD /etc/master.passwd). После закрытия редактора переносит временную копию в сам файл. Не позволяет двум пользователям выполнять редактирование одновременно.
useradd 
создаёт новую учётную запись.
usermod 
изменяет данные учётной записи.
userdel 
удаляет существующую учётную запись.
chfn 
изменяет поле GECOS.
chsh 
устанавливает новый командный интерпретатор.
passwd 
задаёт новый пароль пользователя.

Утилиты useradd, userdel и usermod бинарные и низкоуровневые, существуют во всех дистрибутивах.

$ sudo useradd alice
$ sudo passwd alice

Учётная запись заблокирована, пока не задан пароль.

Для запуска администратором рекомендуется использовать более высокоуровневые обёртки adduser/deluser. Это скрипты, написанные на perl.

Пример: добавить пользователя в группу:

$ sudo adduser  

Learn SUID with examples:

Example1:  passwd command

When we try to change our password we will use passwd command, which is owned by root. This passwd command file will try to edit some system config files such as /etc/passwd, /etc/shadow etc when we try to change our password. Some of these files cannot be opened or viewed by normal user only root user will have permissions. So if we try to remove SUID and give full permissions to this passwd command file it cannot open other files such as /etc/shadow file to update the changes and we will get permission denied error or some other error when tried to execute passwd command. So passwd command is set with SUID to give root user permissions to normal user so that it can update /etc/shadow and other files.

Example2: ping command

Similarly if we take ping command, when we have to execute this command internally it should open socket files and open ports in order to send IP packets and receive IP packets to remote server. Normal users don’t have permissions to open socket files and open ports. So SUID bit is set on this file/command so that whoever executes this will get owner (Root user’s) permissions to them when executing this command. So when this command start executing it will inherit root user permissions to this normal user and opens require socket files and ports.

Example3: crontab and at command

When scheduling the jobs by using crontab or at command it is obvious to edit some of the crontab related configuration files located in /etc which are not writable for normal users. So crontab/at commands are set with SUID in-order to write some data.

How can I setup SUID for a file?

SUID can be set in two ways

1) Symbolic way (s, Stands for Set) 
2) Numerical/octal way (4)

Use chmod command to set SUID on file: file1.txt

Symbolic way:

chmod u+s file1.txt

Here owner permission execute bit is set to SUID with +s

Numerical way:

chmod 4750 file1.txt

Here in 4750, four indicates SUID bit set, seven for full permissions for owner, five for read and execute permissions for group, and no permissions for others.

How can I check if a file is set with SUID bit or not?

Use ls –l to check if the x in owner permissions field is replaced by s or S

For example: Listing file1.txt before and after SUID set

Before setting SUID bit:

ls -l
total 8
-rwxr--r-- 1 xyz xyzgroup 148 Dec 22 03:46 file1.txt

After setting SUID bit:

ls -l
total 8
-rwsr--r-- 1 xyz xyzgroup 148 Dec 22 03:46 file1.txt

Sticky bit

Устанавливается для каталогов. Только владелец файла, владелец каталога или root может переименовать или удалить файл. Без выставленного sticky bit, любой пользователь, имеющий wx-права на каталог, может удалить или переименовать содержащиеся в нём файлы независимо от владельца файлов.

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

Установка бита SUID

Бит SUID легко изменить с помощью chmod. Символический режим u + s устанавливает бит SUID, а символический режим us очищает бит SUID.

Чтобы проиллюстрировать некоторые концепции бита SUID, мы создали небольшую программу под названием htg. Он находится в корневом каталоге пользователя dave, и для него не установлен бит SUID. Когда он выполняется, он отображает реальные и действующие идентификаторы пользователей (UID).

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

Набираем следующее:

ls -lh htg
./htg

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

Давайте скопируем его в каталог / usr / local / bin, чтобы другие могли его использовать.

Мы вводим следующее, используя chmod для установки бита SUID, а затем проверяем, установлен ли он:

sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

Итак, программа скопирована, и бит SUID установлен. Мы запустим его снова, но на этот раз запустим копию в папке / usr / local / bin:

htg

Несмотря на то, что Дэйв запустил программу, эффективным идентификатором является пользователь root. Итак, если Мэри запускает программу, происходит то же самое, как показано ниже:

htg

Настоящий идентификатор — Мэри, а эффективный — root. Программа работает с разрешениями пользователя root.

Специальные разрешения для файловой системы Linux (SUID, SGID, Sticky)

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>style=»clear:both;»>

  1. Контекст безопасностиПредпосылка: файл имеет владельца и группу, процесс также имеет владельца и группу(1) Возможность запуска любой исполняемой программы как процесса зависит от того, имеет ли инициатор разрешения на выполнение для файла программы(2) После запуска в качестве процесса его владельцем является инициатор, а процесс принадлежит группе, к которой принадлежит инициатор.(3) Разрешение процесса на доступ к файлу зависит от инициатора процесса:(a) Инициатор процесса, если владелец файла, применяет разрешение владельца файла(b) Инициатор процесса, который принадлежит к той же группе файлов, применяет права доступа к группе файлов(c) Ни один из вышеперечисленных, применять «другие» разрешения

2.SUID

Пример из блога JimmyNie:

3.SGID

4.Sticky

5. Отображены несколько разрешений:

Перепечатано по адресу: https://blog.51cto.com/12928116/2375195

Интеллектуальная рекомендация

19.03.21 Я загрузил комплексные обучающие видеоуроки Photoshop CC 2015 и обучающие видеоуроки по новым функциям PS CC 2015. Я просмотрел несколько видео, но мне кажется, что они в основном объясняют н…

проверка данных весеннего mvc Два способа проверки данных Spring MVC: 1.JSR303 2.Hibernate Validator Второй метод является дополнением к первому методу Шаги для проверки данных с использованием Hibern…

Существует два способа вызова между сервисами Springcloud: RestTemplate и Feign. Здесь мы представляем сервисы вызова RestTemplate. 1. Что такое RestTemplate RestTemplate — это структура веб-запросов …

1. Понимать предварительный, средний, последующий порядок и иерархическую последовательность бинарных деревьев; Свяжите язык C со структурой данных двоичного дерева; Освойте с…

Вам также может понравиться

Последнее обучение, как использовать Kaldi, чтобы проснуться без использования WSTF, поэтому вам нужно глубоко пойти в Kaldi для обучения. Временное состояние обучения. Три изображения представляют со…

Во время простоя некоторые веб-страницы, которые мы создали, не были завершены, но не хотят, чтобы другие видели, вы можете создать простой эффект шифрования страницы на странице этой веб-страницы, ан…

Расширенные статьи серии Zookeeper 1. NIO, ZAB соглашение, 2PC представления концепции 2. Лидер выборов 3. Рукописный распределенный замок, центр настройки ==================================== 1. NIO,…

Посмотрите на конечный эффект первым DemoPreview.gif SETP1 эффект капли воды Первая реакция на эффект капли воды — нарисовать замкнутую кривую. С помощью события MotionEvent измените радиус во время п…

Права доступа к файлам

Основной механизм безопасности в операционной системе Linux прост. Каждый процесс несет на себе UID и GID своего владельца. Когда создается файл, он получает UID и GID создающего его процесса. Файл также получает набор разрешений доступа, определяемых создающим процессом. Эти разрешения определяют доступ к этому файлу

  • для владельца файла,
  • для других членов группы владельца файла,
  • для всех прочих пользователей.

Для каждой из этих трех категорий определяется три вида доступа:

  • чтение (read, r),
  • запись (write, w),
  • исполнение файла (execute, x).

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

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

Три варианта записи прав пользователя
двоичная восьмеричная символьная права на файл права на директорию
000 --- нет нет
001 1 --x выполнение чтение файлов и их свойств
010 2 -w- запись нет
011 3 -wx запись и выполнение всё, кроме чтения списка файлов
100 4 r-- чтение чтение имён файлов
101 5 r-x чтение и выполнение доступ на чтение
110 6 rw- чтение и запись чтение имён файлов
111 7 rwx все права все права

Часть разрешений имеет смысл только в сочетании с другими. Из первых четырёх пунктов (не дающих права на чтение файла) для файлов обычно используется только «—», то есть полный запрет доступа к файлу данному типу пользователей. Для директорий из всего списка обычно применяются только 0, 5 и 7 — запрет, чтение и выполнение, и полный доступ.

Файлы

Право на запись (w) даёт пользователю возможность записывать или изменять файл.

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

$ ls -la a.out 
---x--x--x 1 sobols sobols 8632 Mar  5 14:39 a.out
$ ./a.out 
Hello, world!

Право на запись может существовать при отсутствии права на чтение.

$ ls -la data.txt 
--w------- 1 sobols sobols 42 Mar  5 14:44 data.txt
$ echo "hello" >>data.txt 
$ cat data.txt 
cat: data.txt: Permission denied

Каталоги — это файлы, они обладают теми же самыми режимами защиты, что и обычные файлы.

Отличие состоит в том, что бит x интерпретируется для каталогов как разрешение не исполнения, а входа в каталог, доступа к inode’ам файлов. Чтобы сделать cd в каталог, нужно, чтобы он имел бит x.

Бит r разрешает получение списка файлов в каталоге.

Право на запись (w) для каталога — возможность создавать новые файлы или удалять файлы из этого каталога. Если на каталоге стоит возможность записи (w), то файл внутри этого каталога можно будет удалить, даже если право на запись для него не установлено. (В соответствии с концепцией файловой системы POSIX).

Символические ссылки

Биты доступа, выставленные на символических ссылках, в UNIX-системах игнорируются (исключением является macOS). Имеют значение установки прав, выставленные для файла, на который линк указывает.

На Linux команда ls -l всегда печатает lrwxrwxrwx (777) для символических ссылок.

Жёсткие ссылки

У жёстких ссылок, указывающих на один inode, одинаковые владелец и права доступа. Чтобы иметь возможность создать хардлинк на файл, нужно быть или его владельцем, или иметь как минимум rw-доступ.

How SGID Bit work on file and directory

Unlike SUID bit, SGID bit works on both files and directories, but it has a different meaning in both cases.

On files:

For file, it has similar meaning as the SUID bit, i.e. when any user executes a file with SGID bit set on it, it will always be executed with the group ownership of that file, irrespective of who is running it. For example, the file /sbin/netreport has SGID bit set, which can be seen in the ‘s’ instead of ‘x’ in group permissions.

This file has group ownership of root group. So when a user (say student) executes it, then the corresponding process will not have group ownership of student, but that of root group.

On directories:

Now let’s talk about SGID on directories. SGID on directories is used for creating collaborative directories. To understand SGID bit on directories, consider the following scenario:

Suppose three users jack, jones and jenny are working together on some project. All of them belong to a group named javaproject. For the course of the project, they need to share all the files related to the project. All of them must be able to see each other’s file. This can be done simply by providing read permission on group level. Further, suppose that the directory used for the project is «/javaproject».

Here, a problem arises that when a file is created, it belongs to the primary group of the user who created the file. So, when different users create their files in this directory, those files will not have group ownership of javaproject group.

What we do for our problem is that we set the group of /javaproject directory to be javaproject group, and set the SGID bit set on it. When SGID bit is set on a directory, all the files and directory created within it has the group ownership of the group associated with that directory. It means that after setting SGID bit on /javaproject directory, all the files and directories being created in this directory will have the group ownership of «javaproject» group. Moreover, this behavior is recursive, i.e. the directories created in this directory will have SGID bit set as well. The permissions for the new directory will also be same as that of /javaproject directory.

The SGID bit can be set with chmod command as follows:

Now when jones user creates a file in this directory, it is created under the group ownership of javaproject group.

The numeric value corresponding to SGID bit is 2. So to add SGID bit numerically, use the following command:

Thanks for reading this article and refer sticky bit wiki page as well.

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

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

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

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

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: