LPIC 104.5 часть четвертая: suid, sgid и sticky биты

Поделиться
HTML-код
  • Опубликовано: 12 сен 2024
  • Помимо установки различных комбинаций стандартных разрешений (read, write и execute) в Linux мы можем устанавливать на объекты файловой системы специальные биты:
    suid - запуск файла от имени его владельца;
    sgid - запуск файла с заменой свой группы на группу владельцев; или для папки - замена группы владельцев для всех вложенных объектов;
    sticky - защита содержимого папки от удаления (кроме владельца папки и root никто ничего удалить не сможет).

Комментарии • 55

  • @KirillSemaev
    @KirillSemaev  6 лет назад +3

    Свежий мануал: github.com/ksemaev

  • @Kreoni
    @Kreoni 9 лет назад +18

    Кирилл, большое тебе спасибо за твои занятия. Устроился работать к хостинг провайдеру на 1-ую линию поддержки (всё на юниксах, естественно), очень хочу на вторую линию, чтобы подтянуться как админ в линуксе, до этого работал виндовым админом 3 года. Твои аналогии с виндой очень помогают понять че к чему.
    Заметил, что в линуксе проблема со структурированной литературой, по той же винде достаточно почитать книжек для подготовки к сертификации (enterprise admina получил), там шаг за шагом всё объясняется, после чего закрепляется лабораторными.
    Так же по сертификату Cisco - качаешь CCNA exploration и поехали, страница за страницей, всю модель OSI и принцип работы TCP/IP раскрывается шаг за шагом.
    Посмотрел за неделю уже половину твоих занятий, это единственное, что походит на структурированное обучение, шаг за шагом, за что я тебе бесконечно благодарен, за твой труд. Собственно, и возникает вопрос к тебе, есть ли вообще подобная структурированная литература хоть какая то? Centos Bible более менее, читал, Немета советуют, в общем то и всё. Но то ли это? Как ты сам учился? (именно про юниксы).
    С уважением.

    • @KirillSemaev
      @KirillSemaev  9 лет назад +6

      +Valeriy Afonin Спасибо за то что доверил свое обучение моим видео, приятно) Я не верю в литературу в области айти, слишком быстро развивается и меняется сфера, устаревают руководства за год-три полностью, так что посоветовать читать не могу ничего. Только практика)

  • @sashashad
    @sashashad 3 года назад +1

    Спасибо за урок!
    Всё понятно и оговорки можно докомпелировать уже у себя в голове - достаточно подумоть.

  • @EugeneNuke
    @EugeneNuke 8 лет назад +25

    Очень косячный урок.
    Про sticky для папок наврал. С установленным stiky bit из папки файлы удалять может суперпользователь(root) или владелец этих ФАЙЛОВ или владелец папки. Т.е., если в папку, доступную на запись для всех пользователей (/tmp) разные пользователи накидают своих файлов, то удалять они смогут только свои файлы.
    Если поставить SUID/SGID на bash скрипт (как в уроке), то все команды из скрипта всё равно будут выполняться из под залогиненного пользователя, так как при вызове из скрипта другой команды выполняются системные вызовы fork/exec, которые не наследуют SUID/SGID, поэтому пользователь/группа изменятся только для встроенных команд оболочки (типа cd, echo, kill...). И потом, проще было объяснить урок введя понятия *реальные* и *эффективные* UID/GID.
    Можно было скопировать программу */usr/bin/id* к себе в папку, поставить ей SUID/SGID и показать как всё работает.

    • @KirillSemaev
      @KirillSemaev  8 лет назад +10

      Да, я много тут информации опустил чтоб не запугать, и в результате накосячил( Текстом буду объяснять, спасибо что заметили!

    • @kimiside
      @kimiside 7 лет назад +1

      Если Вам не очень сложно, перезапишите пожалуйста. Мало того, что оговариваетесь, так ещё и вопросы остаются. Например, совершенно не очевидно для новичков, нужны ли «x» права для остальных, чтобы выполнить скрипт с SUID, или его уже достаточно. Про sticky bit на папке и овнера файлов тут уже писали. Про то, что дебиан и многие другие оси игнорируют suid на шелл-скриптах и выполняют их от имени запустившего - тоже не сказали.

    • @EugeneNuke
      @EugeneNuke 7 лет назад +13

      Если лично у вас или вашей группы нет права на исполнение (x), то установка SUID не даст вам права выполнить файл.
      SUID/SGID на разного рода скриптах (bash, perl, etc) тупо игнорируются ядром linux.

    • @sashashad
      @sashashad 3 года назад

      @@EugeneNuke Тогда зачем нужен SUID например для команды /bin/ping если на неё итак для остальных есть (x) - её итак все могут запускать.

    • @EugeneNuke
      @EugeneNuke 3 года назад +1

      @@sashashad ping использует протокол ICMP, а не стандартные TCP/UDP, поэтому должен использовать RAW socket, который доступен только привилегированным пользователям/процессам (через RAW socket можно собрать сетевой пакет с любым содержимым)

  • @user-gt8ix9bi4l
    @user-gt8ix9bi4l 4 года назад +1

    Спасибо за видео. Кстати очень доходчиво объяснили тему. Всё понятно.

  • @rsvrsv1680
    @rsvrsv1680 7 лет назад +7

    Про Sticky Bit. Т.е. создаем, например общий каталог , чтобы все могли туда писать. Но тогда любой может и удалять чужие файлы, что не есть хорошо. А вот если установить Sticky Bit, то каждый сможет удалять только свои файлы. linoxide.com/how-tos/stickbit-suid-guid/

    • @sashashad
      @sashashad 3 года назад

      вот бы в Windows такую фичу!

  • @Zvezd83
    @Zvezd83 9 месяцев назад +1

    Какой же крутой преподаватель

  • @KirillSemaev
    @KirillSemaev  9 лет назад +1

    +Kirill Scherbenok правильно запутались, я там бред сказал) Правлю.

  • @kmx7771
    @kmx7771 3 года назад +4

    Как то странно этот LPIC построен. Напмомню что до сих пор, а это конец курса почти, ни про создание пользоветелей ни групп, речь не шла, зато мы меняем им права

    • @sashashad
      @sashashad 3 года назад

      Да, это какой-то трешхолд

  • @alexpyatka2583
    @alexpyatka2583 3 года назад +1

    🙋👍

  • @markpoll2469
    @markpoll2469 9 лет назад +1

    Урок получился очень интересный. Спасибо. Желательно побольше практических примеров примеров, а не выдуманных (то есть где, когда и зачем это применяется).
    Вопрос: как создать безопасную общую папку для пользователей локального компьютера? guid подойдет ? Как для конкретной папки сделать umask ? Еще раз спасибо.

    • @KirillSemaev
      @KirillSemaev  9 лет назад

      Mark Poll Я именно теоретическую часть тут емко стараюсь давать без практических примеров особенных, по ним отдельный плейлист. Что значит безопасная общая папка не совсем понимаю, уточните пожалуйста. umask, ниже Кирилл пишет, действительно не лучшей вариант для отдельной папки, тут лучше acl настраивать, но мы до этого еще не дошли: askubuntu.com/questions/44534/how-to-set-umask-for-a-specific-folder

    • @markpoll2469
      @markpoll2469 9 лет назад

      Kirill Semaev я уже все сделал. Создал папку в home, создал группу и добавил кого надо :) и права 770. Вот это наверное безопасно. Когда будет новые уроки ?

    • @KirillSemaev
      @KirillSemaev  9 лет назад +1

      Mark Poll ну разобрались и ок) сегодня начинаю записывать и выкладывать следующую серию уроков практических

  • @ДмитрийЕремеев-о4п
    @ДмитрийЕремеев-о4п 9 лет назад +1

    На 5:58 оговорка? "и по умолчанию права на пинг есть только у рута, но если мы хотим, чтоб все пользователи могли пользоваться рутом" -по смыслу "пингом" подходит -", то мы должны разрешить им от имени рута запускать программу пинг". А за урок спасибо!

    • @KirillSemaev
      @KirillSemaev  9 лет назад +1

      Дмитрий Еремеев я тут вообще как-то криво сказал)) Права сразу есть у всех потому как стоит suid-бит) Спасибо за отметку, сейчас поправлю.

  • @user-mm4wc5cm3x
    @user-mm4wc5cm3x 8 лет назад +3

    Спасибо за видео.
    Не совсем понял смысл sticky бит на папку.
    Допустим коварный andrey не сможет сделать rm -f file.txt. Ну, а что ему помешает сделать, например, echo 0 > file.txt?

    • @KirillSemaev
      @KirillSemaev  8 лет назад +3

      +Сергей Архангельский Это правильный вопрос. Sticky бит он не для защиты файлов, а для защиты структуры ветки папок, подпапок и файлов. То есть если вам надо создать определенную структуру, из которой пользователи не могут выходить (набор файлов и папок с заданными именами), но при этом наплевать что именно в ней хранят пользователи - это ваш вариант.
      У меня так в проектной организации сделано - мне безразлично что там у них внутри в сетевой папке, но мне надо чтоб они не плодили там лишних подпапок на верхних уровнях, и не могли переименовать существующие.

    • @user-mm4wc5cm3x
      @user-mm4wc5cm3x 8 лет назад +2

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

  • @oleksandrlytvyn532
    @oleksandrlytvyn532 3 года назад

    Спасибо

  • @DmitriNesterov
    @DmitriNesterov Год назад

    Здравствуйте! Спасибо за Ваши лекции! Есть вопрос. Есть группа readers. Есть скрипт letsread есть файл /usr/local/files/toread Нужно, чтобы пользователи группы readers могли прочитать файл, запустив скрипт letsread, но не командой cat /usr/local/files/letsread Что-то никак не соберу полученные знания для решения. Гуру, подскажите!

  • @OPELLlEK
    @OPELLlEK 9 лет назад +1

    Как-то на этом уроке я поплыл. Не могу сообразить, в чём практическая разница - устанавливать SUID, или просто выдавать права на выполнение (x) другим пользователям? Кроме того, что в одном случае что-либо будет запускаться непосредственно пользователем, либо в случае с SUID пользователем, но от имени владельца. Это нужно только для файлов, которые root требуют, чтобы sudo не писать?
    Также непонятная разница между SUID и SGID. И то и другое нужно для того, чтобы другие пользователи (others), то бишь не-владельцы файла и не входящие в группу владельцев, могли этот файл запускать. Какая разница, делают они это от имени группы или от имени владельца файла? И тем более, когда два этих бита одновременно стоят. Т.е. если всё же какая-то разница есть, то, по идее, запуск от имени владельца по правам должен как бы перекрывать запуск от имени группы.
    Немного каша в голове, извиняюсь. Если вопрос непонятен, попробую переформулировать.

    • @KirillSemaev
      @KirillSemaev  9 лет назад +1

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

    • @KirillSemaev
      @KirillSemaev  9 лет назад +5

      +3y6pe
      2) SGID редко ставится на файл (тем более вместе с SUID), чаще на папку (а-ля включение наследование). Тем не менее можно установить SUID и SGID на скрипт, тогда скрипт будет запускаться с правами владельца, но файлы, создаваемые скриптом будут иметь в качестве GID группу владельцев скрипта. То есть тонкое такое извращение, не уверен что оно пригодиться когда-то, но суть в нем))

    • @OPELLlEK
      @OPELLlEK 8 лет назад +2

      +Kirill Semaev Оказывается, забыл поблагодарить. Собственно, спасибо за разъяснение)

  • @ВалераЯковенко-э9у
    @ВалераЯковенко-э9у 5 лет назад +1

    Спасибо, за все видео, очень познавательно и главное доходчиво) Вопрос по уроку. Создал баш скриптик, от пользователя root. Внутри обычная команда echo. Добавил файлу Suid/Sgid биты.
    -rwSrwS--x 1 root root 33 янв 9 20:24 aaa.sh* , так выглядят права на файл. Но при этом при попытке запуска от обычного (моего) пользователя, пишет что отказано в доступе.
    valera@ValerasPC:~$ ./aaa.sh
    /bin/bash: ./aaa.sh: Permission denied
    Вот собственно и вопрос, почему отказано в доступе на выполнение, если есть специальные биты, так помимо этого есть права на выполнение у others?

    • @lexjust
      @lexjust 4 года назад

      у меня возник аналогичный вопрос

    • @sashashad
      @sashashad 3 года назад

      Цитирую
      Evgenii Ianiuk
      5 лет назад
      "Если поставить SUID/SGID на bash скрипт (как в уроке), то все команды из скрипта всё равно будут выполняться из под залогиненного пользователя, так как при вызове из скрипта другой команды выполняются системные вызовы fork/exec, которые не наследуют SUID/SGID, поэтому пользователь/группа изменятся только для встроенных команд оболочки (типа cd, echo, kill...). И потом, проще было объяснить урок введя понятия реальные и эффективные UID/GID.
      Можно было скопировать программу /usr/bin/id к себе в папку, поставить ей SUID/SGID и показать как всё работает."

    • @dmitryturmanov5441
      @dmitryturmanov5441 2 года назад

      Надо перед тем как сделать суид гутд чтоб был +х

  • @Patifonii
    @Patifonii 3 года назад +1

    сейчас на ping нет этого бита. Но он все равно работает )

  • @sashashad
    @sashashad 3 года назад

    А почему нельзя поставить SUID на папку? Типа подменить владельцев файлов внутри папки

  • @niksarov
    @niksarov 5 месяцев назад

    thnk

  • @user-ro2do2uh5y
    @user-ro2do2uh5y 6 лет назад

    я как раз голову ломал почему на сломаном WSL ping не запускается обычным пользователем
    а в винде что-нибудь подобное есть?
    есть конечно runas но не то, засвечивает пароль или с savecred надо заморачиваться.

    • @KirillSemaev
      @KirillSemaev  5 лет назад

      не в курсе по винде, все забыл уже по ней счастливо

  • @sergiusvysokochtimiy
    @sergiusvysokochtimiy 8 лет назад +2

    SUID не отвечает за права выполнения, команда будет будет выполнена по любому если установлен х для этого пользователя. SUID - это разрешение заходить в комнаты в которые разрешено заходить владельцу. К примеру, чтобы пользоваться туалетом ключ надо взять у владельца. SUID - и есть этот ключ. Не утверждаю, но кажется что так. К примеру ping и без SUID запуститься но не получит доступа к ... чему нибудь без прав ROOT.

    • @KirillSemaev
      @KirillSemaev  8 лет назад

      +Sergius Vysokochtimiy я запутался о чем вы, но с выводами согласен)

    • @sashashad
      @sashashad 3 года назад

      Отличное кстати объяснение если вчитаться. Благодарю!

  • @yataganenko
    @yataganenko 8 лет назад +2

    ЗАЧЕМ suid НУЖЕН???
    файл -rwx------ 1 yat yat 24 Ноя 7 16:06 1.sh
    захожу с другого пользователя zsh: Отказано в доступе: ./1.sh
    только поставлю chmod o+x 1.sh работает но в ps показывает другого пользователя(того от которого запустил) а не yat
    ТАК ЗАЧЕМ ЖЕ ОН НУЖЕН ТОГДА????

    • @KirillSemaev
      @KirillSemaev  8 лет назад

      Сейчас попробую смоделирую, а то запутался в вопросе, я в нем нигде не вижу ничего про suid)

    • @KirillSemaev
      @KirillSemaev  8 лет назад +4

      +Eugene Solodovnyk
      так вроде понял. У вас стояли права 700 и владелец yat. Соответственно ни у кого ни на что прав нет кроме него.
      вы поставлили 711 и у вас заработало, но от другого пользователя.
      Во-первых, вы кажется неправильно пишете, если бы вы поставили suid, то я бы понял вопрос. Только тогда у вас на файл было бы разрешение 4700 изначально, т.е. не -rwx------ а rws------
      Тогда все понятно. Права 700, какие там биты не ставь не даст прав другим на исполнение. У других должны быть права на запуск (ваше o+x) и тогда они смогут запускать скрипт, но от имени владельца.
      То есть само по себе право 700, ставь там suid не ставь, все равно никому кроме владельца запускать ничего не дает.
      Так яснее?)

    • @yataganenko
      @yataganenko 8 лет назад

      +Kirill Semaev, да права 4700.
      А почему ps показывает что не владелец запустил скрипт, а тот пользователь от которого я запускаю?

    • @kimiside
      @kimiside 7 лет назад +5

      Вы наверняка уже всё выяснили, но вопрос висит, люди читают, поэтому отвечу: Многие линукс-системы игнорируют SUID для интерпретируемых исполняемых файлов, т.е. для shell-скриптов, программ на python и прочих языках, способных компилировать скрипт на лету. Это сделано исключительно для безопасности. Совершенно не unix way, конечно, не доверяют юзерам, но видимо слишком большие и частые дыры появлялись по этой причине.

    • @sashashad
      @sashashad 3 года назад

      @@KirillSemaev О, так понятнее. Выходит это просто позволяет выполнить От имени владельца, но со своими правами?

  • @fivaproldge
    @fivaproldge 6 лет назад

    че-т много косяков (судя по каментам). Пропущу-ка я этот видос )) Все предыдущие смотрел, лайков отгрузил

    • @KirillSemaev
      @KirillSemaev  5 лет назад +2

      да, я его переписать быть должен) Может и переписал, не помню уже)

  • @sergeystal15
    @sergeystal15 3 года назад

    я нефига не понял, я установил эти биты но выполнить без рута от другого пользователя ничего не могу. смысл этих битов я не понял!

    • @АрсМаг
      @АрсМаг 3 года назад +1

      Тут не совсем верное объяснение)
      Внутри скрипта команды будут выполняться от пользователя который запустил скрипт