Права доступа к файлам и владение ими – основная и все же важная концепция безопасности в Linux. Вы, наверное, уже знакомы с этими условиями. Обычно это выглядит так:
Помимо этих обычных разрешений, есть несколько специальных разрешений для файлов, и не многие пользователи Linux знают об этом.
Чтобы начать говорить о специальных разрешениях, мы собираемся предположить, что у вас есть некоторые знания об основных правах доступа к файлам. Если нет, пожалуйста, прочитайте наше превосходное руководство, объясняющее разрешение файла Linux.
Теперь мы покажем вам некоторые специальные разрешения с новыми буквами в файловой системе Linux.
В этом примере команда passwd, отвечающая за изменение пароля пользователя, имеет букву s в том же месте, которое мы ожидаем увидеть, x или – для прав пользователя. Важно отметить, что этот файл принадлежит пользователю root и корневой группе.
С этим разрешением вам не нужно предоставлять sudoдоступ конкретному пользователю, когда вы хотите, чтобы он запустил какой-либо корневой скрипт.
Что такое SUID?
Когда бит SUID установлен для исполняемого файла, это означает, что файл будет выполняться с теми же разрешениями, что и владелец исполняемого файла.
Давайте возьмем практический пример. Если вы посмотрите на двоичный исполняемый файл команды passwd, у него установлен бит SUID.
andreyex:~$ ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 59640 Mar 22 2019 /usr/bin/passwd
Это означает, что любой пользователь, выполняющий команду passwd, будет запускать ее с теми же правами, что и root.
В чем выгода? Команде passwd необходимо отредактировать файлы, такие как /etc/passwd, /etc/shadow, чтобы изменить пароль. Эти файлы принадлежат пользователю root и могут быть изменены только пользователем root. Но благодаря флагу setuid (бит SUID) обычный пользователь также сможет изменять эти файлы (принадлежащие пользователю root) и менять свой пароль.
По этой причине вы можете использовать команду passwd для изменения собственного пароля, несмотря на тот факт, что файлы, которые изменяет эта команда, принадлежат пользователю root.
Почему обычный пользователь не может изменить пароль других пользователей?
Теперь, когда вы понимаете концепцию SUID, давайте посмотрим, как установить бит SUID.
Как установить бит SUID?
Я нахожу символический способ проще при установке бита SUID. Вы можете использовать команду chmod следующим образом:
chmod u+s file_name
Вот пример:
andreyex:~$ ls -l test.txt -rwxrw-rw- 1 andreyex andreyex 0 Apr 12 17:51 test.txt andreyex:~$ chmod u+s test.txt andreyex:~$ ls -l test.txt -rwsrw-rw- 1 andreyex andreyex 0 Apr 12 17:52 test.txt
Вы также можете использовать числовой способ. Вам просто нужно добавить четвертую цифру к обычным разрешениям. Восьмеричное число, используемое для установки SUID, всегда равно 4.
andreyex:~$ ls -l test2.txt -rwxrw-rw- 1 andreyex andreyex 0 Apr 12 17:53 test2.txt andreyex:~$ chmod 4766 test2.txt andreyex:~$ ls -l test2.txt -rwsrw-rw- 1 andreyex andreyex 0 Apr 12 17:54 test2.txt
Как удалить SUID?
Вы можете использовать любой символический режим в команде chmod следующим образом:
chmod u-s test.txt
Или используйте числовой способ с 0 вместо 4 с разрешениями, которые вы хотите установить:
chmod 0766 test2.txt
Разница между маленьким s и заглавным S как бит SUID
Как найти все файлы с установленным SUID?
Если вы хотите искать файлы с этим разрешением, используйте команду find в терминале с параметром -perm.
find / -perm /4000
Структура каталогов Linux объяснена для начинающих
Это руководство объясняет структуру каталогов Linux. Вы изучите иерархию файловой системы Linux вместе с назначением различных каталогов в системе Linux.
Что такое SGID?
SGID похож на SUID. С установленным битом SGID любой пользователь, выполняющий файл, будет иметь те же права, что и владелец группы файла.
Это преимущество в обращении с каталогом. Когда разрешение SGID применяется к каталогу, все подкаталоги и файлы, созданные в этом каталоге, получат то же владение группой, что и основной каталог (а не владение группой пользователя, создавшего файлы и каталоги).
Откройте свой терминал и проверьте разрешение на файл /var/local:
andreyex:~$ ls -ld /var/local drwxrwsr-x 1 root staff 512 Apr 24 2018 /var/local
Эта папка /var/local содержит букву ‘s’ в том же месте, где вы ожидаете увидеть ‘x’ или ‘-‘ для групповых разрешений.
Практическим примером SGID является сервер Samba для обмена файлами в локальной сети. Гарантируется, что все новые файлы не потеряют нужные разрешения, независимо от того, кто их создал.
Как установить SGID?
Вы можете установить бит SGID в символическом режиме следующим образом:
chmod g+s directory_name
Вот пример:
andreyex:~$ ls -ld folder/ drwxrwxr-x 2 andreyex andreyex 4096 Apr 15 13:21 folder/ andreyex:~$ chmod g+s folder andreyex:~$ ls -ld folder/ drwxrwsr-x 2 andreyex andreyex 4096 Apr 15 13:21 folder/
Вы также можете использовать числовой способ. Вам просто нужно добавить четвертую цифру к обычным разрешениям. Восьмеричное число, используемое для SGID, всегда равно 2.
andreyex:~$ ls -ld folder2/ drwxrwxr-x 2 andreyex andreyex 4096 Apr 15 13:22 folder2/ andreyex:~$ chmod 2775 folder2 andreyex:~$ ls -ld folder2/ drwxrwsr-x 2 andreyex andreyex 4096 Apr 15 13:22 folder2/
Как убрать бит SGID?
Просто используйте -s вместо + s следующим образом:
chmod g-s folder
Удаление SGID – это то же самое, что удаление SGID. Используйте дополнительные 0 перед разрешениями, которые вы хотите установить:
chmod 0755 folder
Как найти файлы с установленным SGID в Linux
Чтобы найти все файлы с установленным битом SGID, используйте эту команду:
find . -perm /2000
Что такое Sticky Bit?
Липкий бит работает над каталогом. Если для каталога установлен липкий бит, все файлы в каталоге могут быть удалены или переименованы только владельцами файлов или пользователем root.
Обычно это используется в каталоге /tmp, который работает как корзина временных файлов.
andreyex:~$ ls -ld /tmp drwxrwxrwt 1 root root 512 Apr 12 13:24 /tmp
Как видите, папка /tmp имеет букву t в том же месте, где мы ожидаем увидеть x или – для других разрешений. Это означает, что пользователь (кроме root) не может удалить временные файлы, созданные другими пользователями в каталоге /tmp.
Как установить липкий бит?
Как всегда, вы можете использовать как символьный, так и числовой режим, чтобы установить бит закрепления в Linux.
chmod +t my_dir
Вот пример:
andreyex:~$ ls -ld my_dir/ drwxrwxr-x 2 andreyex andreyex 4096 Apr 15 13:54 my_dir/ andreyex:~$ chmod +t my_dir/ andreyex:~$ ls -ld my_dir/ drwxrwxr-t 2 andreyex andreyex 4096 Apr 15 13:54 my_dir/
Числовой способ – добавить четвертую цифру к обычным разрешениям. Восьмеричное число, используемое для закрепленного бита, всегда равно 1.
andreyex:~$ ls -ld my_dir/ drwxrwxr-x 2 andreyex andreyex 4096 Apr 15 13:55 my_dir/ andreyex:~$ chmod 1775 tmp2/ andreyex:~$ ls -ld tmp2/ drwxrwxr-t 2 andreyex andreyex 4096 Apr 15 13:55 my_dir/
Как удалить липкий бит:
Вы можете использовать символический режим:
chmod -t my_dir
Или числовой режим с 0 до обычных разрешений:
chmod 0775 tmp2
Как найти файлы с установленным битом в Linux
Эта команда вернет все файлы / каталоги с установленным битом:
andreyex:~$ find . -perm /1000
Если каталог не имеет разрешения на выполнение для всех, установка залипшего бита приведет к отображению T вместо t. Указание на то, что с липким битом все не совсем правильно.
Вывод
Мы добавили сюда эту картинку, чтобы вспомнить, что вы только что узнали:
Эта гибкость в управлении папками, файлами и всеми их разрешениями так важна в повседневной работе системного администратора. Вы можете видеть, что все эти специальные разрешения не так сложны для понимания, но их нужно использовать с предельной осторожностью.
Мы надеемся, что эта статья дала вам хорошее понимание SUID, GUID и Sticky Bit в Linux. Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.