Bạn có hai cách bổ sung để thực hiện điều này:
Cấp quyền cho người dùng sử dụng git
kho lưu trữ từ xa
Sử dụng gitolite3
để cung cấp lược đồ kho lưu trữ trực tiếp trung tâm (điều này được mô tả chi tiết tại đây ), về cơ bản yêu cầu bạn phải có một bare
kho lưu trữ (một trung tâm repo) để cho phép người dùng của bạn đẩy / kéo và một phiên bản kiểm tra của cùng một repo (một repo trực tiếp ) nằm trong đường dẫn thích hợp /srv/www/html
, ví dụ.
Tôi thích sử dụng gitolite3
để xử lý repo trung tâm , nhưng đó không phải là một yêu cầu, mặc dù việc kiểm soát truy cập chi tiết tốt ràng buộc với LDAP của bạn nếu cần. gitolite3
có thể cung cấp kiểm soát hạt mịn xuống cấp chi nhánh.
Nó cũng là một thực hành tốt để hạn chế khả năng của gitolite3
người dùng thông qua sudo
và xử lý các hook bằng các sudo
cuộc gọi. Đây là một ví dụ hoạt động bằng cách sử dụng các gitolite3
móc (thoải mái điều chỉnh chúng - hoặc nâng cao / sửa chúng - để phù hợp với nhu cầu của bạn):
Nội dung có liên quan của /etc/sudoers
hoặc /etc/sudoers.d/gitolite3
sẽ là một cái gì đó dọc theo dòng:
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
móc repo trung tâm :
#!/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
kịch bản:
#!/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
Giới hạn khả năng thực thi các lệnh không được ủy quyền trong trình đăng nhập
Những gì bạn cần thực hiện là một phương pháp có thể lặp lại, có thể kiểm tra được để giới hạn khả năng của người dùng thực hiện các hành động khác với sự cho phép nghiêm ngặt.
Không bắt buộc nhưng nó giúp nếu người dùng của bạn đã đăng ký LDAP và bạn đã triển khai các cơ chế để thực hiện xác thực LDAP, bằng mô-đun PAM hoặc sử dụng freeIPA và sssd
.
Để thực hiện kịch bản này, những gì tôi hiện đang làm là như sau (lưu ý rằng loại hạn chế này yêu cầu một số điều kiện được đáp ứng, nếu không, hạn chế có thể dễ dàng bị phá vỡ):
- Người dùng không thuộc
wheel
nhóm, người duy nhất được phép sử dụng su
(được thi hành thông qua PAM). Thông thường, người dùng không phải là LDAP ( sysadm
) tồn tại để cho phép các quản trị viên đáng tin cậy thực hiện các hành động trong các trường hợp khắc phục thảm họa hoặc không có LDAP.
Người dùng được bảo mật đúng cách rbash
với PATH chỉ đọc được trỏ đến riêng tư ~/bin
, ~/bin/
thư mục này chứa các liên kết đến tất cả các lệnh được phép, ví dụ:
$ 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*
người sử dụng được cung cấp một hạn chế, read-only môi trường (nghĩ về những thứ như thế LESSSECURE
, TMOUT
, HISTFILE
biến). Điều này là để tránh shell
thoát khỏi các lệnh như less
và đảm bảo kiểm toán.
trình soạn thảo được phép duy nhất là rvim
, vì lý do tương tự. Người dùng chỉ có thể thực thi sudoedit
, trong khi được cấu hình để chạy rvim
trong sudo
cấu hình:
Defaults editor=/usr/bin/rvim
nếu có các hạn chế MAC (bản phân phối GNU / Linux cụ thể mà bạn đang sử dụng đã bật SELinux), người dùng sẽ được ánh xạ tới người dùng SELinux staff_u
và được cấp quyền để thực thi các lệnh như người dùng khác theo yêu cầu thông qua sudo
. Yêu cầu cụ thể sudorules
cần được xem xét cẩn thận để ngăn người dùng tránh được những hạn chế này và cũng có thể được triển khai trong cơ sở hạ tầng LDAP hiện tại của bạn (đây là một trong những tính năng của FreeIPA).
người sử dụng /home
, /tmp
và có thể /var/tmp
được polyinstantiated qua /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
Đa thông tin của các thư mục không phải là một tính năng mới, nó đã có sẵn từ khá lâu rồi. Để tham khảo, xem bài viết này từ năm 2006 . Như một vấn đề thực tế, rất nhiều mô-đun đã được sử dụng pam_namespace
theo mặc định, nhưng cấu hình mặc định tại /etc/security/namespace.conf
không cho phép đa thông tin. Ngoài ra, /etc/security/namespace.init
nên làm cho tất cả các tệp bộ xương chỉ đọc cho người dùng và được sở hữu bởi root
.
Bằng cách này, bạn có thể chọn xem người dùng có thể thực hiện bất kỳ lệnh nào thay mặt họ (thông qua một liên kết trong ~/bin
thư mục riêng , được cung cấp qua /etc/skel
, như đã giải thích ở trên), thay mặt cho người dùng khác (thông qua sudo
) hoặc không có gì cả.