Linux Komut Dosyalarında Komutları Başka Bir Kullanıcı Olarak Çalıştırma
Yayınlanan: 2022-07-13Doğ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ç.
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
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
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
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
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
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
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
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
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'
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
Çalıştırmaya çalıştığımızda ne olacağını görelim.
./run-maryq.sh
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
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