komut dosyasını nologin kabuğu olan kullanıcı olarak çalıştır


87

Tek yapmam gereken belirli bir betiği, nologin/falsebelirtilen kabuğa sahip belirli bir kullanıcı olarak çalıştırmak /etc/passwd.

Komut dosyasını root olarak çalıştırırdım ve bu başka bir kullanıcı olarak çalışmalıdır. Koşu:

~# su -c "/bin/touch /tmp/test" testuser

işe yarayacaktı ama testör için geçerli bir kabuğa ihtiyacım var. Şifreyi devre dışı passwd -d testuserbırakabileceğimi ve kabuğunu /bin/bashbiraz güvenli hale getirebileceğimi biliyorum ama kabuğum olması gerekiyor nologin/false.

Temelde ihtiyacım olan şey crontab, işleri belirli bir kullanıcı olarak çalışacak şekilde ayarladığımızda, bunun nologin/falsekabuğu ne olursa olsun ne yaptığımızdır .

ps Bu konuyu buldum Nologin kullanıcısı olarak bir komutu çalıştırma , ancak çalıştırmam gereken betiğin concatenatekomutunu nasıl yapacağım hakkında hiçbir fikrim yok su -s /bin/sh $user.

Yanıtlar:


119

-S anahtarını belirli bir kabuğu çalıştırmak için su için kullanabilirsiniz.

su -s /bin/bash -c '/path/to/your/script' testuser

(Parolasız bir kullanıcı sudoise yukarıdakilere bağlı olarak testuser.)


Ya su ise root:root -rwsr-x---?
Patryk

1
Ya kullanıcının şifresi yoksa?
CMCDragonkai

3
@Wesley Bu komutu şifresiz kullanıcı için çalıştırmak için root olmanız gerektiğini öğrendim.
CMCDragonkai 16:15

1
@lain, Kullanıcının bir kabuğunun olmaması gerekiyorsa, komutla ilgili işlem bir bash işleminin çocuğu olmamalıdır. Bu nedenle, kabuğu komut dosyasıyla değiştirmek için exec komutunu da kullanmalısınız. Senaryoyu bir init çocuğu yapmak istersen, sadece & örneğini kullanırsınsu -s /bin/bash -c 'exec /path/to/your/script &' test
Facundo Victor,

1
Kullanarak aynı sonucu elde etmek için son 20 dakikayı harcadığım runuseriçin, su -s SHELLparametrenin runuser komutunu oldukça işe yaramaz hale getirdiğini belirtmek isterim :) Teşekkürler Jan!
jirka

12

Eğer sudo -ukurulu ise , bunu yapabilirsiniz :

# whoami
root
# sudo -u apache whoami
apache
# getent passwd apache
apache:x:48:48:Apache:/var/www:/sbin/nologin

Parametreleri nasıl iletirsiniz sudo -u apache whoami?
CMCDragonkai

@ CMCDragonkai Komuttan sonraki tüm parametreler iletilir. Bunu "sudo [-u apache] [whoami <param1> <param2>]" gibi düşünebilirsiniz.
Tamirci5

Bence sudo -u, muhtemelen komutları nologin kullanıcısı olarak çalıştırmak için iyi bir fikir değil, çünkü SUDO_USERgerçek olanın komutunu çağıran ortamda ortaya çıkar . Belki de sadece onu düşünüyorum.
Miyav,

5

Komut dosyasını / bin / sh dizinine çalıştırma argümanı olarak sağlayarak:

su -s "/bin/sh /your/script/location" username

2

şimdi fark ettim :

su -s "/ bin / bash" -c "/ kutu / dokunmatik / tmp / testuser" test kullanıcısı

belki daha iyi bir yol var?


0

Aslında, bunu yapmanın en iyi yolu runuser

ayrıntılar için man sayfasına bakın

Bu araç, geliştirici onun bolg dediği gibi durumla başa çıkmak için kullanılır

Bir hizmet kök olarak çalışıyorsa ve kabuğu kullanarak UID'yi değiştirmek istediğinde runuser kullanmalıdır.

http://danwalsh.livejournal.com/55588.html

bu cevabı birçok sarayda yayınladım, bu sinir bozucu bulursanız beni bağışlayın


Bağlantıların bozulmasını önlemek için lütfen yalnızca bağlantı yanıtlarını göndermeyin. Bunun yerine, bağlantıdan en alakalı bilgiyi cevabınıza ekleyin veya alternatif olarak bağlantıyı cevap yerine yorum olarak gönderin. Daha fazla bilgi için bu serverfault.com/help/how-to-answer yardım merkezi makalesine bakın.
Federico Galli

@FedericoGalli en alakalı bilgi zaten eklenmiş, kullanımı kopyalayıp yapıştırmaya gerek yok, man sayfası yeterli bilgi
Z-Y00

-1

Kullanıcıyı belirtmek için sudo -u kullanın. Ayrıca, hedef kullanıcının ortam değişkenlerini de ayarlamak için -i bayrağını kullanın.

sudo -i -u user command

1
bu verirThis account is currently not available.
knocte

-3

Shell -s ve -c komutuyla su komutunu kullanın. Aşağıda gösterildiği gibi

 su  exec -l -c '/bin/bash /etc/update_conf.sh' -s /bin/bash

2
Bu tam olarak en yüksek puan alan cevabın çözümü.
Gerald Schneider
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.