Cara Menjalankan Perintah sebagai Pengguna Lain di Skrip Linux

Diterbitkan: 2022-07-13
Terminal Linux pada laptop dengan latar belakang biru.
fatmawati achmad zaenuri/Shutterstock.com

Cukup alami, ketika Anda menjalankan perintah atau skrip, sistem menjalankannya sebagai proses yang diluncurkan oleh Anda. Tetapi Anda dapat menjalankan perintah dan skrip sebagai pengguna lain.

Proses Memiliki Pemilik

Ketika sebuah program atau skrip dijalankan, Linux membuat sebuah proses. Proses itu memiliki pemilik. Pemiliknya adalah proses lain atau nama akun pengguna jika seseorang meluncurkannya.

Kepemilikan proses mendefinisikan beberapa kemampuan dan lingkungan proses. Bergantung pada bagaimana proses diluncurkan, itu mewarisi atribut tertentu dari proses induknya atau pengguna. Atau, lebih tepatnya, proses yang digunakan pengguna untuk meluncurkan program yang biasanya berupa shell.

Cara Mengelola Proses dari Terminal Linux: 10 Perintah yang Harus Anda Ketahui
TERKAIT Cara Mengelola Proses dari Terminal Linux: 10 Perintah yang Harus Anda Ketahui

Menjalankan perintah atau skrip sebagai pengguna lain dapat bermanfaat karena kepemilikan file apa pun yang dibuat oleh proses akan menjadi milik pengguna yang sesuai.

Setiap kali kami menggunakan sudo , kami menjalankan perintah sebagai pengguna lain. Akun pengguna default yang digunakan oleh sudo adalah pengguna root atau 'super'. Karena itu, sudo sering disalahartikan sebagai singkatan dari super user do . Tapi itu hanya jargon kendur. Ini sebenarnya singkatan dari pengguna pengganti do .

Dengan sudo , Anda dapat menjalankan perintah seperti pengguna lain, tidak hanya sebagai root. Ironisnya, Anda memerlukan hak akses root untuk melakukannya. Tetapi meluncurkan program atau skrip yang dimiliki oleh pengguna lain tidak sama dengan menjalankan proses itu seperti pengguna lain itu. Anda masih akan menjalankannya sebagai root.

Berikut cara menjalankan proses sebagai pengguna lain, dan cara menjalankan perintah dari dalam skrip seolah-olah telah dijalankan oleh pengguna lain.

Jalankan Script sebagai Pengguna lain

Kami menggunakan komputer yang memiliki banyak pengguna yang dikonfigurasi. Salah satunya adalah Mary, yang memiliki nama pengguna maryq, dan yang lainnya adalah Dave dengan nama pengguna dave.

Mary memiliki skrip yang disebut "pengguna lain.sh" di direktori rumahnya. Ini adalah teks naskahnya.

 #!/bin/bash

echo "Nama skrip:" $0
echo "Direktori kerja:" $(pwd)
echo "Skrip berjalan sebagai pengguna:" $(whoami)

Itu mencetak nama skrip, yang disimpan dalam variabel lingkungan $0 . Kemudian menggunakan pwd untuk mencetak direktori kerja. Terakhir, ia menggunakan perintah whoami untuk mencetak nama pengguna yang meluncurkan skrip. Atau siapa yang menurutnya meluncurkan skrip.

Salin teks dari skrip ke editor dan simpan sebagai "pengguna lain.sh" di direktori beranda akun pengguna yang berbeda.

Kita harus membuat skrip dapat dieksekusi. Kami akan menggunakan perintah chmod dan menggunakan opsi +x (eksekusi) dan opsi -u (pengguna) untuk mengatur flag eksekusi hanya untuk pemilik. Itu berarti hanya Mary yang dapat menjalankan skrip. Kami akan memeriksa izin file dengan ls .

 chmod u+x pengguna lain.sh
 ls 

Menyetel izin eksekusi untuk skrip sehingga hanya pengguna Mary yang dapat menjalankannya

Dari kiri ke kanan, izinnya berbunyi:

  • Pemilik dapat membaca, menulis, dan mengeksekusi file.
  • Anggota grup dapat membaca dan menulis file.
  • Orang lain hanya dapat membaca file.

Jadi satu-satunya pengguna yang mampu menjalankan skrip adalah Mary dan root. Inilah yang terjadi ketika Mary menjalankan skrip:

 ./pengguna-lain.sh 

Output ketika Mary menjalankan skrip

Kami diberitahu bahwa direktori kerja skrip saat ini adalah direktori home Mary, dan pemilik skrip adalah akun pengguna maryq.

Seperti yang diharapkan, Dave tidak dapat menjalankan skrip.

 /home/maryq/pengguna-lain.sh 

Pengguna Dave tidak dapat menjalankan skrip, izin ditolak

Jika Dave memiliki hak pengguna root, ia dapat mencoba menjalankan skrip sebagai root, menggunakan sudo .

 sudo /home/maryq/other-user.sh 

Output saat skrip dijalankan oleh root

Ini adalah keberhasilan parsial. Skrip berjalan, tetapi pemilik skrip adalah root, bukan maryq.

Trik yang perlu kita terapkan adalah opsi sudo -u (pengguna). Ini memungkinkan Anda menentukan pengguna yang ingin Anda jalankan perintahnya. Jika Anda tidak menggunakan opsi -u , sudo default menggunakan root. Jika kita ingin menjalankan perintah sebagai Mary, kita harus memberikan nama akun pengguna mereka ke perintah sudo .

sudo -u maryq /home/maryq/other-user.sh

Menggunakan opsi pengguna -u dengan root untuk menjalankan skrip sebagai pengguna Mary

Kali ini skrip melaporkan bahwa pemilik proses adalah maryq.

Mari tambahkan baris ke skrip "pengguna lain.sh". Kami akan echo beberapa teks dan mengarahkan output ke file bernama “mary.txt.”

 #!/bin/bash

echo "Nama skrip:" $0 
echo "Direktori kerja:" $(pwd) 
echo "Skrip berjalan sebagai pengguna:" $(whoami)
echo "Ini akan masuk ke file di /home/maryq/" > /home/maryq/mary.txt

Kami sedang membuat file baru di direktori home Mary. Ini baik-baik saja karena kami menjalankan skrip sebagai Mary.

 ./pengguna-lain.sh 

Menjalankan skrip sekali lagi sehingga membuat file teks

Jika kita memeriksa di direktori home Mary, kita akan melihat file telah dibuat, dan kepemilikan file adalah milik akun pengguna maryq.

 ls -hl mary.txt 

Memeriksa kepemilikan file yang dibuat oleh skrip

Ini adalah perilaku yang sama yang akan kita lihat jika Mary benar-benar meluncurkan skripnya sendiri.

TERKAIT: Cara Menggunakan Perintah chmod di Linux

Perintah runuser

Anda dapat menggunakan perintah sudo -u yang telah kami gunakan sejauh ini di dalam skrip, tetapi ada perintah lain, runuser , yang dirancang untuk menjalankan proses sebagai pengguna yang berbeda dari skrip di dalam. Ini memiliki penanganan kode pengembalian yang lebih baik dari proses yang diluncurkan, dan memiliki lebih sedikit overhead daripada sudo .

Perintah runuser perlu dijalankan oleh root, tetapi itu dilakukan dengan menjalankan seluruh skrip sebagai root. Anda tidak perlu menggunakan sudo di dalam skrip. Perintah runuser dapat digunakan pada baris perintah juga, jadi tidak terbatas pada penggunaan skrip, meskipun ini adalah metode yang disukai untuk skrip.

Dave tidak dapat membuat daftar file "mary.txt" karena berada di direktori home Mary dan dia tidak memiliki akses.

 cat /home/maryq/mary.txt 

Pengguna Dave tidak dapat membaca file Mary, izin ditolak

Namun, kita dapat mengintip ke dalam file menggunakan runuser . Opsi - (login) meluncurkan shell baru dengan lingkungan yang sangat dekat dengan lingkungan shell yang akan dimiliki Mary jika mereka benar-benar login. Opsi -c (command) diikuti oleh perintah yang ingin kita jalankan.

 sudo runuser - maryq -c 'cat mary.txt' 

Membaca file Mary menggunakan perintah runuser

Perhatikan bahwa perintah tidak memerlukan path lengkap ke file. Kita dapat mereferensikan file dengan cara yang sama seperti yang dilakukan Mary, relatif terhadap direktori home-nya.

Sebagai pengguna Dave, kami akan membuat skrip yang disebut "run-maryq.sh" dengan teks ini di dalamnya:

 #!/bin/bash

runuser -l maryq -c 'cat mary.txt'

Kami akan membuatnya dapat dieksekusi:

 chmod +x run-maryq.sh 

Membuat skrip dapat dieksekusi dengan chmod

Mari kita lihat apa yang terjadi ketika kita mencoba menjalankannya.

 ./run-maryq.sh 

Menjalankan skrip dengan runuser di dalamnya, sebagai pengguna biasa

Perintah runuser mengeluh karena dijalankan oleh pengguna biasa. Mari kita jalankan lagi dengan sudo .

 sudo ./run-maryq.sh 

Menjalankan skrip dengan runuser di dalamnya, sebagai root

Itu berfungsi seperti yang kami inginkan, dan seolah-olah Mary sendiri yang meluncurkan skripnya.

Yang Mana yang Digunakan?

Di baris perintah, tidak banyak yang bisa dipilih di antara mereka. Tetapi karena Anda tetap harus menggunakan sudo dengan runuser , Anda sebaiknya menggunakan sudo sendiri.

Tetapi dalam skrip, runuser adalah perintah yang disukai.

TERKAIT: 10 Perintah Dasar Linux untuk Pemula