Pertanyaan Hindari memiliki subversi memodifikasi izin file Linux.


Semua basis kode saya disimpan dalam repositori subversion yang saya bubarkan di antara server web Apache beban saya yang seimbang, membuatnya mudah untuk memeriksa kode, menjalankan pembaruan, dan dengan mulus membuat kode saya dalam pengembangan ke produksi.

Salah satu ketidaknyamanan yang saya yakin ada pekerjaan mudah untuk (selain mengeksekusi skrip pada setiap checkout), adalah mendapatkan hak akses Linux (kembali) pada file yang diperbarui atau diperiksa dengan subversi. Tim keamanan kami telah menetapkan bahwa Owner dan Group diatur dalam httpd.conf file, dan semua direktori dalam documentRoot menerima izin 700, semua file yang tidak dapat dieksekusi (mis. * .php, * .smarty, * .png) menerima izin Linux sebesar 600, semua file yang dapat dieksekusi menerima 700 (mis. * .sh, * .pl, * .py). Semua file harus disetel oleh pemilik dan grup apache:apache agar dibaca oleh layanan httpd karena hanya pemilik file yang diatur untuk memiliki akses melalui izin.

Setiap kali saya menjalankan svn update, atau svn co, meskipun file tersebut tidak dapat dibuat (mis. svn update), Saya menemukan bahwa kepemilikan file semakin diatur ke akun yang menjalankan perintah svn, dan sering kali, izin file semakin diatur ke sesuatu selain dari apa yang aslinya (yaitu file .htm sebelumnya pembaruan adalah 600, tetapi setelah dan svn update, akan diatur ke 755, atau bahkan 777).

Apa cara termudah untuk memotong upaya subversi dalam memperbarui izin dan kepemilikan file? Apakah ada sesuatu yang dapat dilakukan dalam klien svn, atau pada server Linux untuk mempertahankan izin file asli? Saya menjalankan RHEL5 (dan sekarang 6 pada beberapa contoh pilihan).


32
2018-05-10 16:20


asal


Jawaban:


pemilik file akan diatur ke pengguna yang menjalankan perintah svn karena cara mengimplementasikan perintah mendasari - menghapus dan mengganti file yang diperbarui, yang akan menyebabkan kepemilikan untuk 'mengubah' ke pengguna yang relevan. Satu-satunya cara untuk mencegah ini adalah benar-benar melakukan svn sebagai pengguna bahwa file seharusnya dimiliki sebagai. Jika Anda ingin memastikan bahwa mereka dimiliki oleh pengguna tertentu, kemudian jalankan perintah sebagai pengguna itu.

Sehubungan dengan izin, svn hanya mematuhi pengaturan umask akun - mungkin seperti 066 - untuk memastikan bahwa file tidak dapat diakses ke grup dan akun lainnya, Anda perlu mengeluarkan 'umask 077' sebelum melakukan svn up, ini memastikan bahwa file hanya dapat diakses oleh akun pengguna yang mengeluarkan perintah.

Saya akan memperhatikan masalah keamanan menyebarkan data subversi ke dalam server web kecuali direktori .svn dijamin.


16
2018-05-10 16:41



Anda dapat menyimpan properti pada file di Subversion (lihat http://svnbook.red-bean.com/en/1.0/ch07s02.html). Anda sangat tertarik pada properti svn: executable, yang akan memastikan bahwa izin yang dapat dieksekusi disimpan.

Tidak ada cara umum untuk melakukan ini untuk semua izin. Subversion tidak menyimpan kepemilikan - mengasumsikan bahwa, jika Anda memeriksa sesuatu, Anda memilikinya.


9
2018-05-10 16:25



Satu hal yang dapat Anda pertimbangkan lakukan adalah menginstal svn biner di luar jalur Anda, dan meletakkan skrip pengganti (pada dan dipanggil /usr/bin/svn, atau apa pun) di jalan. Skrip akan terlihat seperti ini:

#!/bin/sh

# set umask, whatever else you need to do before svn commands

/opt/svn/svn $* # pass all arguments to the actual svn binary, stored outside the PATH

# run chmod, whatever else you need to do after svn commands

Kelemahan pasti adalah Anda mungkin harus melakukan sejumlah parsing terhadap argumen yang dilewatkan ke svn, yaitu Anda dapat meneruskan jalur yang sama ke chmod Anda, tidak menjalankan chmod untuk sebagian besar perintah svn, dll.

Mungkin ada beberapa pertimbangan keamanan di sini. Saya tidak tahu seperti apa lingkungan penyebaran Anda, tetapi Anda sebaiknya menyelidiki sedikit lebih jauh.


1
2018-03-21 18:43



Saya menulis skrip kecil yang menyimpan izin dan pemilik, menjalankan perintah SVN Anda dan memulihkan izin dan pemilik. Ini mungkin bukan hackerproof tetapi untuk penggunaan pribadi itu melakukan pekerjaan.

svnupdate.sh:

#!/usr/bin/env bash
if [ $# -eq 0 ]; then
    echo "Syntax: $0 <filename>"
    exit
fi

IGNORENEXT=0
COMMANDS=''
FILES='';
for FILENAME in "$@"
do
    if [[ $IGNORENEXT > 0 ]]; then
        IGNORENEXT=0
    else
        case $FILENAME in
            # global, shift argument if needed
            --username|--password|--config-dir|--config-option)
            IGNORENEXT=1
            ;;
            --no-auth-cache|--non-interactive|--trust-server-cert)
            ;;
            # update arguments, shift argument if needed
            -r|--revision|--depth|--set-depth|--diff3-cmd|--changelist|--editor-cmd|--accept)
            IGNORENEXT=1
            ;;
            -N|--non-recursive|-q|--quiet|--force|--ignore-externals)
            ;;
            *)
            if [ -f $FILENAME ]; then
                FILES="$FILES $FILENAME"
                OLDPERM=$(stat -c%a $FILENAME)
                OLDOWNER=$(stat -c%U $FILENAME)
                OLDGROUP=$(stat -c%G $FILENAME)
                FILECOMMANDS="chmod $OLDPERM $FILENAME; chown $OLDOWNER.$OLDGROUP $FILENAME;"
                COMMANDS="$COMMANDS $FILECOMMANDS"
                echo "COMMANDS: $FILECOMMANDS"
            else
                echo "File not found: $FILENAME"
            fi
            ;;
        esac
    fi
done
OUTPUT=$(svn update "$@")
echo "$OUTPUT"
if [[ ( $? -eq 0 ) && ( $OUTPUT != Skipped* ) && ( $OUTPUT != "At revision"* ) ]]; then
    bash -c "$COMMANDS"
    ls -l $FILES
fi

1
2017-08-05 09:00



Anda bisa menyelesaikan ini. Menggunakan setgid.

  1. Kamu punya apache:apache menjalankan server

  2. Setel izin grup pada semua file dan direktori. Server akan membaca file berdasarkan grupnya

  3. Set setgid di semua direktori - hanya di direktori: pengaturan ini pada file memiliki fungsi yang berbeda

    Contoh ('2' adalah setgid):

    chmod 2750

  4. Membuat apache grup dari semua direktori

Apa yang terjadi adalah

  • File dan direktori baru yang dibuat oleh akun apa saja akan dimiliki oleh apache kelompok

  • Direktori baru akan mewarisi setgid dan dengan demikian melestarikan struktur tanpa usaha apa pun

Lihat https://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories


1
2018-03-15 02:59



Saya juga punya masalah serupa. Saya menemukan skrip yang keren: asvn (Arsip SVN).

Anda dapat mengunduhnya di sini: https://svn.apache.org/repos/asf/subversion/trunk/contrib/client-side/asvn

Description:
Archive SVN (asvn) will allow the recording of file types not
normally handled by svn. Currently this includes devices,
symlinks and file ownership/permissions.

Every file and directory has a 'file:permissions' property set and
every directory has a 'dir:devices' and 'dir:symlinks' for
recording the extra information.

Run this script instead of svn with the normal svn arguments.

Entri blog ini (yang membantu saya menemukan skrip) http://jon.netdork.net/2010/06/28/configuration-management-part-ii-setting-up-svn/ menunjukkan penggunaan yang sederhana.


0
2018-06-25 01:32