У вас есть два дополнительных способа реализовать это:
Предоставление пользователям разрешений на git
удаленное использование репозиториев
Используется gitolite3
для предоставления схемы репозиториев Hub-Live (это подробно описано здесь ), для которой в основном требуется наличие bare
репозитория (репозитория- концентратора ), позволяющего пользователям извлекать / извлекать и извлеченную версию того же репо. ( живой репо), расположенный на соответствующем пути, скажем /srv/www/html
, например.
Мне нравится использовать gitolite3
для управления репозитарием концентратор , но это не является обязательным требованием, хотя довольно удобно иметь детальный контроль доступа, привязанный к вашему выбору LDAP, если это необходимо. gitolite3
может обеспечить детальный контроль вплоть до уровня филиала.
Также рекомендуется ограничивать возможности gitolite3
пользователя с помощью sudo
и обрабатывать перехваты с помощью sudo
вызовов. Это рабочий пример использования gitolite3
хуков (не стесняйтесь их адаптировать - или улучшать / исправлять - в соответствии с вашими потребностями):
Соответствующее содержание /etc/sudoers
или /etc/sudoers.d/gitolite3
будет что-то вроде:
Cmnd_Alias GITOLITE_CMDS = /usr/bin/git, /bin/chown, /bin/find, /usr/bin/xargs, /bin/chmod, /sbin/restorecon, /usr/local/sbin/publisher-hub2live
Cmnd_Alias GITOLITE_APACHE_CMDS = /usr/sbin/apachectl graceful
Defaults:gitolite3 !requiretty
Defaults:gitolite3 lecture=never
gitolite3 ALL = (root)NOPASSWD: GITOLITE_CMDS
gitolite3 APACHE_HOSTS = (root)NOPASSWD: GITOLITE_APACHE_CMDS
Хаб Репо post-update
Крюк:
#!/bin/sh
echo "****"
echo "**** Calling publisher-hub2live script [Hub's post-update hook]"
echo "****"
sudo /usr/local/sbin/publisher-hub2live "/srv/www/html" "root:apache" "2750" "640"
exit 0
publisher-hub2live
сценарий:
#!/bin/sh
echo "****"
echo "**** Pulling changes into Live [publisher-hub2live]"
echo "****"
cd "$1" || exit
umask 0022
unset GIT_DIR
/usr/bin/git pull hub master
# custom actions here
# e.g call grunt tasks
/bin/chown -R "$2" "$1"
/bin/find "$1" -type d -exec chmod "$3" {} +
/bin/find "$1" -type f -exec chmod "$4" {} +
/bin/chmod u+x "$1"/.git/hooks/post-commit
/sbin/restorecon -R -v "$1"
exec /usr/bin/git update-server-info
exit 0
Ограничение возможности выполнения неавторизованных команд в оболочке входа
То, что вам нужно реализовать, - это воспроизводимый, проверяемый метод ограничения способности пользователя выполнять действия, отличные от строго разрешенных.
Это не обязательно, но это помогает, если ваши пользователи зарегистрированы в LDAP, и вы уже развернули механизмы для выполнения аутентификации LDAP, будь то с помощью модуля PAM или с помощью freeIPA и sssd
.
Для реализации этого сценария в настоящее время я делаю следующее (имейте в виду, что для такого рода ограничений необходимо выполнение нескольких условий, в противном случае ограничение можно легко обойти):
- Пользователи не принадлежат к
wheel
группе, единственной авторизованной для использования su
(применяется через PAM). Обычно существует не-LDAP пользователь ( sysadm
), который позволяет доверенным администраторам выполнять действия в случае аварийного восстановления или недоступности LDAP.
Пользователям предоставляется надлежащая защита rbash
с доступной только для чтения переменной PATH, указывающей на частную ~/bin
, этот ~/bin/
каталог содержит ссылки на все разрешенные команды, например:
$ ll ~/bin
total 0
lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 git -> /usr/bin/git*
lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
что пользователи получают ограниченный, только для чтения окружающей среды (думаю такие вещи , как LESSSECURE
, TMOUT
, HISTFILE
переменных). Это делается для того, чтобы избежать shell
побегов из таких команд, как less
и обеспечить возможность аудита.
единственный разрешенный редактор - rvim
по той же причине. Пользователи могут только выполнять sudoedit
, которые настроены для запуска rvim
в sudo
конфигурации:
Defaults editor=/usr/bin/rvim
если установлены ограничения MAC (в конкретном используемом дистрибутиве GNU / Linux включен SELinux), пользователи сопоставляются с пользователем SELinux staff_u
и получают права на выполнение команд от имени другого пользователя в соответствии с требованиями sudo
. Необходимо sudorules
разрешить тщательный анализ конкретной разрешенной версии, чтобы пользователь не смог обойти эти ограничения, а также может быть развернут в существующей инфраструктуре LDAP (это одна из функций freeIPA).
пользователи /home
, /tmp
и, возможно /var/tmp
, полиинстанцируются через /etc/security/namespace.conf
:
/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root
/var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root
$HOME $HOME/$USER.inst/ tmpdir:create root
Полиинсталляция каталогов не является новой функцией, она доступна уже довольно давно. В качестве ссылки см. Эту статью с 2006 года . На самом деле, многие модули уже используют pam_namespace
по умолчанию, но конфигурация по умолчанию в /etc/security/namespace.conf
не включает полианализацию. Также /etc/security/namespace.init
следует сделать все скелетные файлы доступными только для чтения пользователям и принадлежать им root
.
Таким образом, вы можете выбрать, могут ли пользователи выполнять какую-либо команду от своего имени (через ссылку в личном ~/bin
каталоге, предоставляемую через /etc/skel
, как описано выше), от имени другого пользователя (через sudo
) или вообще без нее.