Как безопасно деактивировать разрешения для поддерева

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

Все это делается с использованием одного скрипта и занимает пару секунд. Если другой пользователь не оставил там файлы или каталоги с неправильными разрешениями или группой.

Затем развертывание завершается с ошибкой, и мы выполняем

sudo chgrp -R sudo /our/root/directory sudo chmod -R g=u,o-rwx /our/root/directory && 

Я бы хотел, чтобы мы сделали это без необходимости вводить пароль.

Я знаю, что setuid не работает над сценарием оболочки (по уважительной причине). Я думал об использовании скрипта setuid perl, но он больше не поддерживается. Я мог бы написать C-оболочку и скрипт, но наличие двух файлов не было ни удобным, ни безопасным. Я мог бы написать весь материал на C, используя системные вызовы, но мне потребовались бы годы.

Поэтому я спрашиваю: какой простой и безопасный способ достичь этого? Написание короткого кода C в порядке.

Это Ubuntu 16.04, если это имеет значение.


(*) Мы используем группу sudo и разрешение rwxrwx--- или rw-rw---- для всего дерева.

4 Solutions collect form web for “Как безопасно деактивировать разрешения для поддерева”

Напишите сценарий оболочки и дайте разрешающим пользователям разрешения вызвать его с помощью sudo. Используйте директиву NOPASSWD если вы не хотите, чтобы пользователи NOPASSWD свой пароль (обратите внимание, что порядок имеет значение, см. NOPASSWD Как запустить определенную программу как root без подсказки пароля?» ).

Убедитесь, что sudo настроен для удаления всех переменных из среды, за исключением нескольких безопасных (например, LC_* и LANG ). В любом случае это так по умолчанию на Ubuntu, поэтому на Ubuntu вам не нужна строка Defaults если вы не изменили настройку env_reset .

 Defaults!/usr/local/bin/fix-our-permissions env_reset %our-app-maintainers ALL = NOPASSWD: /usr/local/bin/fix-our-permissions 

В качестве альтернативы, люди получают доступ к области развертывания через файловую систему, которая налагает фиксированное право собственности и разрешения, такие как bindfs . См. Раздел « Автоматическое изменение разрешения файла при записи в папку». Все файлы, созданные в каталоге, должны принадлежать bob


Но на самом деле никто не должен развертывать вручную. Развертывание должно запускаться вручную, но оно должно выполняться автоматизированной службой, которая запускается в учетной записи пользователя системы, захватывает версию из CI, загружает ее и перезапускает демона.

Я думаю, вы можете сделать программу, которая контролирует вашу папку, и если он найдет какие-то проблемы, он изменит разрешение папки или контента, вы сделаете это в Crontab (root) или запустите его как службу (root). это альтернатива.

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

оставьте ссылку здесь

Вы можете использовать ACL ( setfacl ); что может предотвратить проблемы с допуском.

Альтернативой является то, что вы загружаете файлы в новую пустую папку и затем заменяете старый. Это можно сделать атомарно, ln -sf символическую ссылку на эту папку ( ln -sf ).

  • Нужно ли в этом случае установить бит uid?
  • Как разрешить пользователю выполнять скрипт, принадлежащий root? Сетуид больше не работает
  • Разрешение файла с помощью setuid и октал 4000
  • в чем цель setuid включена без исполняемого бита?
  • установите umask (разрешения) аналогично setgid в каталоге
  • Процесс Python не может создать файл в каталоге, продолжает получать `разрешение отказано` IOError
  • Опция mount noexec подразумевает nosuid?
  • Как заставить пользователей устанавливать списки управления доступом в каталогах, которыми они не владеют?
  • Как запустить программу setuid на Solaris 10?
  • Как установка бита Setuid влияет на сценарии оболочки, которые запускаются при загрузке системы, до того, как произошел какой-либо логин?
  • Использование find -perm для поиска файлов setuid
  • Interesting Posts

    clonezilla – восстановить образ раздела ОС ОС Windows для большего / меньшего раздела

    Как изменить право собственности на символические ссылки?

    Правило iptables для вывода порта и ip на экземпляр AWS

    Как получить PID на терминал в начале * каждого * процесса?

    Сравнение двух файлов с использованием awk-языка

    Почему эти две команды дат дают разные результаты?

    Не удалось подключиться к сети

    как я могу найти файлы на основе разных имен и удалять их все в одной строке

    mount to nfs server failed, системная ошибка: нет маршрута к хосту

    SSH запрашивает фразу-пароль, хотя ssh-agent / keychain работает

    Как заставить udisksctl действовать для другого пользователя?

    Запустите команду a как определенный пользователь и несколько групп с sudo

    Застрял в сером экране после новой установки Kali Linux 2.0

    Удаление старых версий пакетов в папке резервного копирования

    Эффективный способ сравнения в awk

    Linux и Unix - лучшая ОС в мире.