Mengapa SMF nyata kehilangan data konfigurasi ketika diekspor di SmartOS?

10

Saya menjalankan proses server di bawah SMF (Server Management Facility) pada Joyent's Base64 1.8.1 SmartOS image.

Bagi mereka yang tidak tahu tentang SmartOS, itu adalah distribusi berbasis cloud dari IllumOS dengan KVM. Tetapi pada dasarnya itu seperti Solaris dan mewarisi dari OpenSolaris. Jadi, bahkan jika Anda belum pernah menggunakan SmartOS, saya berharap dapat memanfaatkan beberapa pengetahuan Solaris tentang ServerFault.

Masalah saya adalah bahwa saya ingin pengguna yang tidak berhak diizinkan untuk memulai kembali layanan yang mereka miliki. Saya telah mengetahui cara melakukannya dengan menggunakan RBAC dan menambahkan otorisasi ke /etc/security/auth_attrdan menghubungkan otorisasi itu dengan pengguna saya.

Saya kemudian menambahkan yang berikut ini ke manifes SMF saya untuk layanan:

<property_group name='general' type='framework'>
  <!-- Allow to be restarted-->
  <propval name='action_authorization' type='astring'
    value='solaris.smf.manage.my-server-process' />
  <!-- Allow to be started and stopped -->
  <propval name='value_authorization' type='astring'
    value='solaris.smf.manage.my-server-process' />
</property_group>

Dan ini berfungsi dengan baik saat diimpor. Pengguna saya yang tidak memiliki hak diizinkan untuk memulai kembali, memulai dan menghentikan proses servernya sendiri (ini untuk penerapan kode otomatis).

Namun, jika saya mengekspor manifes SMF, data konfigurasi ini hilang ... yang saya lihat di bagian itu adalah ini:

<property_group name='general' type='framework'>
  <property name='action_authorization' type='astring'/>
  <property name='value_authorization' type='astring'/>
</property_group>

Adakah yang tahu mengapa ini terjadi? Apakah sintaks saya salah, atau apakah saya hanya menggunakan SMF secara salah?

Scott
sumber
1
Komentar Hmmm tampaknya telah menghilang dari sini tanpa kata atau menyebutkan.
redsquare

Jawaban:

16

Karena svccfg (1M) rusak, dan saya merusaknya.

Kembali pada tahun 2007, saya menambahkan fitur ke SMF yang memungkinkan untuk grup properti yang dapat berisi informasi sensitif, hanya dapat dibaca oleh pengguna dengan hak istimewa yang sesuai. Idenya adalah bahwa Anda dapat menambahkan properti "read_authorization" ke grup properti, dan siapa pun yang tidak memiliki hak istimewa (pada dasarnya, root) atau memiliki salah satu otorisasi yang dinamai oleh properti itu tidak akan dapat membaca nilai-nilai properti apa pun dalam grup. Ini terintegrasi di bawah komit ini , dan digunakan oleh (setidaknya) produk penyimpanan Sun ZFS untuk menyimpan hal-hal seperti kata sandi LDAP.

Sebagai bagian dari pekerjaan itu, kami ingin memastikan bahwa pengguna yang memiliki hak istimewa yang dapat membaca nilai-nilai ini tidak akan secara tidak sengaja mengekspos mereka dengan mengekspor status layanan atau membuat arsip repositori SMF. Jadi saya menambahkan bendera '-a' ke perintah ekspor dan arsip di svccfg yang secara eksplisit akan mengekspor semua nilai properti, dan mengubah default untuk mengecualikan apa pun yang dilindungi baca.

Sayangnya, pembatasan ini tidak diterapkan dengan benar; dalam hal ini, kami hanya menolak untuk mengekspor beberapa properti tertentu dalam grup properti "umum" dengan nilai. Sisanya diekspor tanpa nilai apa pun, yang Anda lihat. Dan sayangnya, menggunakan opsi -a tidak akan membantu di sini, karena saat kita mencapai titik yang relevan, kita tidak lagi memiliki konteks yang diperlukan untuk mengetahui bahwa Anda telah melewati itu. Bahkan adil untuk mempertanyakan apakah bendera ini harus diminta untuk mengekspos nilai-nilai ini: identitas otorisasi yang memungkinkan perubahan status layanan memang sensitif, dan akan berguna bagi penyerang. Tidak ada keraguan yang ada dalam pikiran saya ketika saya menulis ini, dan masuk akal untuk membatasi itu dari pandangan orang lain kecuali itu diinginkan secara eksplisit. Namun dalam versi S10 sebelumnya, XML yang diekspor dan arsip berisi itu, jadi itu pasti perubahan yang tidak kompatibel. Anda akan dimaafkan karena kesal tentang hal itu. Tetapi masalah sebenarnya di sini adalah -a tidak berfungsi ketika grup properti yang dimaksud adalah "umum". Bagaimana Anda orang pertama yang memukul ini, saya tidak tahu.

Anda dapat mengikuti masalah ini di halamannya, di sini . Sementara itu, Anda dapat mempertimbangkan untuk mengatasinya dengan menambahkan nilai properti secara manual dalam XML yang dihasilkan. Perhatikan bahwa Anda juga dapat membacanya melalui svcprop (1) jika perlu. Anda memiliki permintaan maaf saya. Terima kasih kepada Deirdre Straughan karena membawa pertanyaan ini menjadi perhatian saya.

Keith M Wesolowski
sumber
1
Wow. Terima kasih Keith. Mengingat Anda adalah orang yang menulis kode asli, saya cukup yakin bahwa saya dapat dengan aman menandai jawaban ini sebagai benar :-) Terima kasih banyak atas latar belakang terperinci untuk masalah ini.
Scott