Cara menghalangi root dari menjalankan skrip

10

The GlassFish server aplikasi menyediakan script untuk mengelola server aplikasi dan juga memulai dan menghentikan mereka dan saya ingin membatasi user root dari menjalankan script ini. Alasannya adalah bahwa beberapa pengembang utama lupa untuk mengelola server sebagai pengguna yang tidak memiliki hak istimewa dan jika mereka me-restart server aplikasi sebagai pengguna root, maka server aplikasi harus dijalankan oleh pengguna root [*].

Ini bukan pilihan untuk menghindari memberikan akses root dan pengembang lupa karena mereka sudah terbiasa melakukan ini pada mesin lokal mereka. Saya ingin asadminskrip diubah agar dijalankan sebagai pengguna yang tidak memiliki hak istimewa atau secara opsional menampilkan pesan kesalahan setiap kali skrip dijalankan oleh root.

Bash shell digunakan.

[*]: Saya sudah mencoba untuk memperbaiki hak atas file, tetapi meskipun saya telah melacak banyak file yang dimiliki dan di-rooting oleh root, aplikasi mengalami kesalahan aneh dan saya harus menjalankannya sebagai root lagi.

tronda
sumber

Jawaban:

18

Mirip dengan jawaban lain, tetapi ke arah yang Anda inginkan.

if [[ $EUID -eq 0 ]]; then
  echo "This script must NOT be run as root" 1>&2
  exit 1
fi

Atau, Anda dapat menggunakan sudodalam skrip untuk memaksa eksekusi sebagai pengguna yang tidak memiliki hak istimewa menggunakan -ubendera untuk menentukan pengguna yang akan dijalankan. Saya tidak menggunakan GlassFish, tapi inilah skrip pseudo proto-contoh.

#!/bin/bash

if [ $1 == "start" ]; then
  sudo -u nobody /usr/bin/glassfish
fi

Semoga Anda mendapatkan idenya. Maaf saya tidak benar-benar tahu seperti apa skrip itu, atau nama pengguna yang tidak memiliki hak istimewa.

bahamat
sumber
2

@Tepang memiliki ide yang tepat. Saya tidak tahu mana yang paling portabel, tetapi di sini ada cara lain untuk mendeteksi apakah pengguna root:

id -u
$UID

Atau, Anda bisa memaksanya berjalan sebagai pengguna lain dengan parameter yang sama:

if [[ "$USER" != appuser ]]
then
    exec sudo -u appuser "$0" "$@"
fi
l0b0
sumber
1
Ini terbelakang. Dia ingin root tidak menjalankan skrip ini.
bahamat
Doh, lupa sudosedikit. Sekarang seharusnya melakukan pekerjaan.
l0b0
@TobySpeight Tidak, skrip tidak melakukan apa pun jika pengguna root, seperti yang dimaksudkan. Saya percaya perubahan Anda juga menghasilkan argumen tambahan jika $@kosong, dan saya telah mengubahnya untuk menggunakan pola yang ditemukan di tempat lain.
l0b0
Terima kasih @TobySpeight, diubah. Saya yakin saya telah melihat formulir itu di suatu tempat sebagai cara untuk memastikan tidak ada argumen yang diteruskan dengan benar. Juga memperbaiki cek, yang pasti memiliki bug (itu bukan bom fork, tetapi hanya akan menyebut dirinya tanpa batas.
l0b0
Saya berpendapat itu adalah bom fork, karena setiap instance akan membayar shell baru untuk sudo(tidak menggunakan exec) dan orang tua akan menunggu untuk itu, sehingga Anda akhirnya akan berakhir dengan tabel proses penuh. Masih layak untuk dimasukkan execke sana (jika Anda tidak bermaksud kode setelah fidijalankan sebagai pengguna yang salah).
Toby Speight