Linux Komut Dosyalarında Komutları Başka Bir Kullanıcı Olarak Çalıştırma

Yayınlanan: 2022-07-13
Mavi arka plan üzerinde bir dizüstü bilgisayarda Linux terminali.
fatmawati achmad zaenuri/Shutterstock.com

Doğal olarak, bir komut veya komut dosyası çalıştırdığınızda, sistem onu ​​sizin başlattığınız bir işlem olarak yürütür. Ancak komutları ve komut dosyalarını başka bir kullanıcı olarak çalıştırabilirsiniz.

Süreçlerin Sahipleri Vardır

Bir program veya komut dosyası yürütüldüğünde, Linux bir süreç oluşturur. Bu sürecin bir sahibi var. Sahibi, başka bir işlem veya bir kişi başlattıysa kullanıcı hesabının adıdır.

Bir sürecin mülkiyeti, sürecin bazı yeteneklerini ve ortamını tanımlar. Sürecin nasıl başlatıldığına bağlı olarak, üst sürecinin veya kullanıcının belirli özelliklerini devralır. Veya daha kesin olarak, kullanıcının genellikle bir kabuk olan programı başlatmak için kullandığı süreç.

Linux Terminalinden İşlemler Nasıl Yönetilir: Bilmeniz Gereken 10 Komut
İLGİLİ Linux Terminalinden İşlemler Nasıl Yönetilir: Bilmeniz Gereken 10 Komut

Bir komut veya komut dosyasını başka bir kullanıcı olarak çalıştırmak yararlı olabilir, çünkü işlem tarafından oluşturulan tüm dosyaların sahipliği uygun kullanıcıya ait olacaktır.

sudo her kullandığımızda, başka bir kullanıcı olarak bir komut çalıştırıyoruz. sudo tarafından kullanılan varsayılan kullanıcı hesabı, kök veya 'süper' kullanıcıdır. Bu nedenle, sudo genellikle yanlışlıkla super user do anlamına geldiği düşünülür. Ama bu sadece gevşek bir jargon. Aslında yerine kullanıcı do anlamına gelir.

sudo ile komutları sadece root olarak değil, başka herhangi bir kullanıcı olarak çalıştırabilirsiniz. İronik olarak, bunu yapmak için kök ayrıcalıklarına ihtiyacınız var. Ancak başka bir kullanıcının sahip olduğu bir programı veya komut dosyasını başlatmak, o işlemi diğer kullanıcıyla çalıştırmakla aynı şey değildir. Hala root olarak çalıştıracaksınız.

İşte bir işlemi başka bir kullanıcı olarak nasıl çalıştıracağınız ve komutları başka bir kullanıcı tarafından yürütülmüş gibi bir komut dosyası içinden nasıl çalıştıracağınız aşağıda açıklanmıştır.

Bir Komut Dosyasını Başka Bir Kullanıcı Olarak Çalıştırın

Birden çok kullanıcının yapılandırılmış olduğu bir bilgisayar kullanıyoruz. Biri maryq kullanıcı adına sahip Mary, diğeri dave kullanıcı adına sahip Dave.

Mary'nin ana dizininde "other-user.sh" adlı bir komut dosyası var. Senaryonun metni bu.

 #!/bin/bash

echo "Komut adı:" $0
echo "Çalışma dizini:" $(pwd)
echo "Komut dosyası kullanıcı olarak çalışıyor:" $(whoami)

$0 ortam değişkeninde tutulan komut dosyası adını yazdırır. Daha sonra çalışma dizinini yazdırmak için pwd kullanır. Son olarak, komut dosyasını başlatan kullanıcının adını yazdırmak için whoami komutunu kullanır. Ya da senaryoyu kimin başlattığını düşünüyor .

Komut dosyasındaki metni bir düzenleyiciye kopyalayın ve farklı bir kullanıcı hesabının ana dizinine “other-user.sh” olarak kaydedin.

Komut dosyasını çalıştırılabilir hale getirmemiz gerekecek. Yalnızca sahip için yürütme bayrağını ayarlamak için chmod komutunu kullanacağız ve +x (yürüt) seçeneğini ve -u (kullanıcı) seçeneğini kullanacağız. Bu, senaryoyu yalnızca Mary'nin çalıştırabileceği anlamına gelir. Dosya izinlerini ls ile kontrol edeceğiz.

 chmod u+x other-user.sh
 ls 

Komut dosyası için yürütme iznini, yalnızca Mary kullanıcısının çalıştırabileceği şekilde ayarlama

Soldan sağa, izinler şunları okur:

  • Sahibi dosyayı okuyabilir, yazabilir ve yürütebilir.
  • Grup üyeleri dosyayı okuyabilir ve yazabilir.
  • Diğerleri sadece dosyayı okuyabilir.

Yani betiği çalıştırabilen tek kullanıcılar Mary ve root. Mary senaryoyu çalıştırdığında olan budur:

 ./other-user.sh 

Mary betiği çalıştırdığında çıktı

Komut dosyasının mevcut çalışma dizininin Mary'nin ana dizini olduğu ve komut dosyasının sahibinin maryq kullanıcı hesabı olduğu söylendi.

Beklendiği gibi Dave senaryoyu çalıştıramaz.

 /home/maryq/other-user.sh 

Kullanıcı Dave betiği çalıştıramıyor, izin reddedildi

Dave'in root kullanıcı ayrıcalıkları varsa, komut dosyasını sudo kullanarak root olarak çalıştırmayı deneyebilir.

 sudo /home/maryq/other-user.sh 

Komut dosyası root tarafından çalıştırıldığında çıktı

Bu kısmi bir başarıdır. Komut dosyası çalışır, ancak komut dosyasının sahibi maryq değil köktür.

Kullanmamız gereken hile sudo -u (kullanıcı) seçeneğidir. Bu, komutu çalıştırmak istediğiniz kullanıcıyı belirlemenizi sağlar. -u seçeneğini kullanmazsanız, sudo varsayılan olarak root kullanır. Komutu Mary olarak çalıştırmak istiyorsak, kullanıcı hesabının adını sudo komutuna geçirmemiz gerekiyor.

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

Komut dosyasını Mary kullanıcısı olarak çalıştırmak için -u user seçeneğini root ile kullanma

Bu sefer komut dosyası, işlem sahibinin maryq olduğunu bildirir.

“other-user.sh” scriptine bir satır ekleyelim. Bazı metinleri echo ve çıktıyı “mary.txt” adlı bir dosyaya yönlendireceğiz.

 #!/bin/bash

echo "Komut adı:" $0 
echo "Çalışma dizini:" $(pwd) 
echo "Komut dosyası kullanıcı olarak çalışıyor:" $(whoami)
echo "Bu, /home/maryq/ dizinindeki bir dosyaya gidiyor" > /home/maryq/mary.txt

Mary'nin ana dizininde yeni dosyayı oluşturuyoruz. Bu gayet iyi çünkü senaryoyu Mary olarak biz yürütüyoruz.

 ./other-user.sh 

Bir metin dosyası oluşturmak için komut dosyasını bir kez daha çalıştırmak

Mary'nin ana dizinini kontrol edersek, dosyanın oluşturulduğunu ve dosyanın sahipliğinin maryq kullanıcı hesabına ait olduğunu görürüz.

 ls -hl mary.txt 

Komut dosyası tarafından oluşturulan dosyanın sahipliğini kontrol etme

Bu, Mary'nin senaryoyu gerçekten kendisi başlatmış olsaydı göreceğimiz davranışla aynı.

İLGİLİ: Linux'ta chmod Komutu Nasıl Kullanılır

Runuser Komutu

Şimdiye kadar kullandığımız sudo -u komutlarını bir komut dosyası içinde kullanabilirsiniz, ancak işlemleri komut dosyalarının içinden farklı bir kullanıcı olarak çalıştırmak için tasarlanmış başka bir komut vardır, runuser . Başlatılan süreçten dönüş kodunu daha iyi ele alır ve sudo 'dan daha az genel gidere sahiptir.

runuser komutunun root tarafından çalıştırılması gerekir, ancak bu, komut dosyasının tamamını root olarak çalıştırarak gerçekleştirilir. Komut dosyasının içinde sudo kullanmanıza gerek yoktur. runuser komutu komut satırında da kullanılabilir, bu nedenle komut dosyaları için tercih edilen yöntem olmasına rağmen komut dosyası kullanımıyla sınırlı değildir.

Dave, "mary.txt" dosyasını listeleyemez çünkü dosya Mary'nin ana dizinindedir ve erişimi yoktur.

 kedi /home/maryq/mary.txt 

Kullanıcı Dave Mary'nin dosyasını okuyamıyor, izin reddedildi

Ancak runuser kullanarak dosyanın içine bakabiliriz. - (login) seçeneği, Mary'nin gerçekten oturum açmış olsaydı sahip olacağı kabuk ortamına çok yakın bir ortamla yeni bir kabuk başlatır. -c (komut) seçeneğini çalıştırmak istediğimiz komut izler.

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

runuser komutunu kullanarak Mary'nin dosyasını okuma

Komutun dosyanın tam yoluna ihtiyacı olmadığını unutmayın. Dosyaya, Mary'nin ana dizinine göre yaptığı gibi başvurabiliriz.

Dave kullanıcısı olarak, içinde şu metin bulunan “run-maryq.sh” adlı bir komut dosyası oluşturacağız:

 #!/bin/bash

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

Yürütülebilir hale getireceğiz:

 chmod +x run-maryq.sh 

Komut dosyasını chmod ile çalıştırılabilir hale getirme

Çalıştırmaya çalıştığımızda ne olacağını görelim.

 ./run-maryq.sh 

Komut dosyasını normal bir kullanıcı olarak runuser içinde çalıştırma

runuser komutu, normal bir kullanıcı tarafından yürütüldüğünden şikayet eder. sudo ile tekrar çalıştıralım.

 sudo ./run-maryq.sh 

Komut dosyasını runuser içinde root olarak çalıştırma

Bu bizim istediğimiz gibi çalışır ve sanki senaryoyu Mary kendisi başlatmış gibi.

Hangisini Kullanmalı?

Komut satırında, aralarından seçim yapabileceğiniz pek bir şey yok. Ancak yine de runuser ile sudo kullanmanız gerektiğinden, sudo kendi başına da kullanabilirsiniz.

Ancak bir komut dosyasında runuser tercih edilen komuttur.

İLGİLİ: Yeni Başlayanlar İçin 10 Temel Linux Komutu