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

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

  • Очистить разрешение setuid с помощью числового режима
  • Как заменить setuid возможностями файловой системы
  • Членство в группах и процессы setuid / setgid
  • Разрешить setuid для сценариев оболочки
  • Правильно использовать бит setuid
  • Как запустить программу setuid на Solaris 10?
  • Как удалить привилегии root в сценариях оболочки?
  • Нет результата команды locate
  • открытие ошибки kcheckpass / var / log / faillog
  • Что означает GID?
  • Безопасность возможностей против setuid (LD_PRELOAD и т. Д.)
  • Interesting Posts

    Загрузочный NixOS ISO не работает (18.03.132847)

    Как установить a .jpg с центром в .pdf (с использованием определенных размеров и границ страницы)?

    sox возвращает ошибку, когда я пытаюсь обрабатывать mp3-файлы

    Как предотвратить разблокировку экрана?

    Как узнать, используются ли вкладки или пробелы в vim

    Почему некоторые пакеты недоступны в моей установке Debian Jessie?

    nmap экспоненциально медленнее при сканировании большего количества портов

    Почему количество грязных страниц всегда равно 0 на 2.6?

    Отклоните SSH-соединения от стран, не включенных в список, используя hosts.allow / hosts.deny в CentOS

    Почему rm * (1) * удаляет все файлы в каталоге?

    difficalty для сохранения вывода traceroute в переменной оболочки?

    Повторное чтение таблицы разделов с ошибкой 16: занято или занято занято

    Анализ HTTP-ответа с помощью оболочки

    Существуют ли какие-либо программы создания комиксов?

    Запуск NGINX в качестве обратного прокси на Docker?

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