이를 구현하는 두 가지 보완 방법이 있습니다.
사용자에게 git
저장소를 원격으로 사용할 수있는 권한 부여
gitolite3
허브 라이브 리포지토리 스키마를 제공하는 데 사용 합니다 ( 여기 에 자세히 설명되어 있음). 기본적으로 사용자가 동일한 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에 등록되어 있고 PAM 모듈 또는 freeIPA 및를 사용하여 LDAP 인증을 수행하는 메커니즘을 이미 배포 한 경우 도움이됩니다 sssd
.
이 시나리오를 구현하려면 현재 수행중인 작업은 다음과 같습니다 (이러한 종류의 제한은 몇 가지 조건을 충족해야하며, 그렇지 않으면 제한을 쉽게 피할 수 있음).
- 사용자는
wheel
그룹 에 속하지 않으며 사용 권한이있는 유일한 그룹입니다 su
(PAM을 통해 시행). 일반적으로 비 LDAP 사용자 ( sysadm
)는 재난 복구 또는 LDAP를 사용할 수없는 경우 신뢰할 수있는 관리자가 작업을 수행 할 수 있도록하기 위해 존재합니다.
사용자에게 rbash
private을 가리키는 읽기 전용 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
있는 whic 실행하도록 구성 rvim
의 sudo
구성 :
Defaults editor=/usr/bin/rvim
MAC 제한이있는 경우 (사용중인 특정 GNU / Linux 배포판에 SELinux가 활성화되어있는 경우) 사용자는 SELinux 사용자에 매핑되고을 staff_u
통해 다른 사용자로 명령을 실행할 수있는 권한이 부여됩니다 sudo
. sudorules
사용자가 이러한 제한을 피하지 못하도록 허용 된 특정 사항 을주의 깊게 검토해야하며 기존 LDAP 인프라 (freeIPA 기능 중 하나)에도 배포 할 수 있습니다.
사용자가 ' /home
, /tmp
그리고 아마도 /var/tmp
통해 polyinstantiated 있습니다 /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
.