Anda memiliki dua cara pelengkap untuk mengimplementasikan ini:
Memberikan izin kepada pengguna untuk menggunakan git
repositori dari jarak jauh
Gunakan gitolite3
untuk menyediakan skema repositori hub-live (ini dijelaskan secara rinci di sini ), yang pada dasarnya mengharuskan Anda untuk memiliki bare
repositori ( repo hub ) untuk memungkinkan pengguna Anda mendorong / menarik dari dan versi check-out dari repo yang sama ( repo langsung ) yang terletak di jalur yang sesuai, misalnya /srv/www/html
, misalnya.
Saya suka menggunakan gitolite3
untuk menangani hub repo, tapi itu bukan persyaratan, meskipun agak nyaman untuk memiliki kontrol akses berbutir halus terikat dengan LDAP pilihan Anda jika perlu. gitolite3
dapat memberikan kendali halus hingga ke tingkat cabang.
Ini juga merupakan praktik yang baik untuk membatasi kemampuan gitolite3
pengguna melalui sudo
, dan menangani kait melalui sudo
panggilan. Ini adalah contoh kerja menggunakan gitolite3
kait (jangan ragu untuk menyesuaikannya - atau meningkatkan / memperbaikinya - sesuai dengan kebutuhan Anda):
Konten yang relevan dari /etc/sudoers
atau /etc/sudoers.d/gitolite3
akan menjadi sesuatu di sepanjang baris:
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
hub repo post-update
hook:
#!/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
naskah:
#!/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
Membatasi kemampuan untuk mengeksekusi perintah yang tidak diotorisasi dalam shell login
Apa yang Anda perlu terapkan adalah metode yang dapat direproduksi dan dapat diaudit yang membatasi kemampuan pengguna untuk melakukan tindakan selain yang diizinkan secara ketat.
Ini tidak diperlukan tetapi akan membantu jika Anda memiliki pengguna terdaftar di LDAP, dan Anda telah menggunakan mekanisme untuk melakukan otentikasi LDAP, baik itu melalui modul PAM, atau menggunakan freeIPA dan sssd
.
Untuk menerapkan skenario ini, apa yang saya lakukan saat ini adalah sebagai berikut (perlu diketahui bahwa pembatasan semacam ini mengharuskan beberapa kondisi terpenuhi, jika tidak, pembatasan dapat dengan mudah dielakkan):
- Pengguna bukan milik
wheel
grup, satu-satunya yang diizinkan untuk menggunakan su
(diberlakukan melalui PAM). Biasanya, pengguna non-LDAP ( sysadm
) ada untuk memungkinkan administrator tepercaya melakukan tindakan dalam kasus pemulihan bencana atau tidak tersedianya LDAP.
Para pengguna diberi tanda aman yang benar rbash
dengan PATH hanya baca yang mengarah ke pribadi ~/bin
, ~/bin/
direktori ini berisi tautan ke semua perintah yang diizinkan, misalnya:
$ 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*
pengguna diberi dibatasi, read-only lingkungan (memikirkan hal-hal seperti LESSSECURE
, TMOUT
, HISTFILE
variabel). Ini untuk menghindari shell
lolos dari perintah seperti less
dan memastikan kemampuan audit.
satu-satunya editor yang diizinkan adalah rvim
, untuk alasan yang sama. Pengguna hanya dapat mengeksekusi sudoedit
, yang dikonfigurasi untuk berjalan rvim
dalam sudo
konfigurasi:
Defaults editor=/usr/bin/rvim
jika pembatasan MAC diterapkan (distribusi GNU / Linux spesifik yang Anda gunakan telah mengaktifkan SELinux), pengguna dipetakan ke pengguna SELinux staff_u
dan diberikan hak untuk mengeksekusi perintah sebagai pengguna lain sebagaimana diharuskan melalui sudo
. Kebutuhan khusus yang sudorules
diizinkan harus ditinjau dengan cermat untuk mencegah pengguna menghindari batasan-batasan ini, dan juga dapat digunakan dalam infrastruktur LDAP Anda yang ada (ini adalah salah satu fitur freeIPA).
pengguna /home
, /tmp
dan mungkin /var/tmp
dipolisiasi melalui /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
Polyinstantiation direktori bukan fitur baru, sudah tersedia cukup lama sekarang. Sebagai referensi, lihat artikel ini dari 2006 . Faktanya, banyak modul yang sudah digunakan pam_namespace
secara default, tetapi konfigurasi default di /etc/security/namespace.conf
tidak mengaktifkan polyinstantiation. Juga, /etc/security/namespace.init
harus membuat semua file kerangka hanya-baca untuk pengguna dan dimiliki oleh root
.
Dengan cara ini Anda dapat memilih apakah pengguna dapat menjalankan perintah atas nama mereka sendiri (melalui tautan di ~/bin
direktori pribadi , disediakan melalui /etc/skel
, seperti dijelaskan di atas), atas nama pengguna lain (via sudo
) atau tidak sama sekali.