BASH Scripting, tek komut için www-data'ya uygundur


26

Yazdığım bu blog yazısında anlatıldığı gibi, yıkılma havuzları ve ilgili web sitelerinin oluşturulmasını otomatikleştirmeye çalışıyorum . Aşağıdaki komutu çalıştırmak için www-data kullanıcısına başvurduğum bölümün tam çevresinde sorun yaşıyorum:

svnadmin create /svn/repository

Komut dosyasının başında, root veya sudo olarak çalıştığından emin olan bir kontrol var ve bundan sonra gelen her komutun root olarak çalıştırılması gerekiyor. Bu komutu www-data olarak çalıştırmak ve daha sonra bitirmek için root komutuna geri dönmek için iyi bir yol var mı?

Yanıtlar:


24

su - www-data -c 'svnadmin create /svn/repository'Senaryoda sadece root tarafından çalıştır. Böylece sadece bu komut www-data kullanıcısı tarafından çalıştırılır.


Gelecekteki izleyiciler için güncelleme :

Bir "This account is currently not available"hata alırsanız , kullanmayı düşünün:

su - www-data -s /bin/bash -c 'svnadmin create /svn/repository'

(@Petr 'in kullanıcının giriş yapmama politikasına -suyması için bayrak konusunda değerli sözleri www-data)


1
Evet, görünüşe göre temel komut dosyası kuralını unuttum ... RTFM. Teşekkürler!
Brendon Dugan

15
Bu çalışıyorum, ben hata olsunThis account is currently not available.
rubo77

Ayrıca bu hatayı alıyorum, ancak aşağıdaki futbolsalas15'in cevabı iyi çalışıyor.
Andrew,

18
su - www-data -s /bin/bash -c 'your_command'Bu işi yapmak için kullanın . Kullanıcı www-data kabuğu vardır, /usr/sbin/nologinbu nedenle -sparametre olmadan hata mesajına yol açar.
Petr

63

'Su' ile muhtemelen bir şifre isteğinde bulunur ve www-data'da şifre yoktur. Bu komutu öneriyorum sudo:

 sudo -u www-data command

Şart, kullanıcınızın sudoers dosyasında kök veya yapılandırılmış olması gerektiğidir


4
Vay, neden bu seçilen cevap değil? Bunu bulmak çok uzun sürdü.
Kaptan Hypertext

3

Kullanım su:

   su [options] [username]

   The options which apply to the su command are:

   -c, --command COMMAND
       Specify a command that will be invoked by the shell using its -c.

2
Su komutlarının, girişleri engelli hesaplarla (www-data gibi) çalışmadığı unutulmamalıdır. Sudo kullanmanız gerekecek.
Frantumn

2

2 Muhtemel yaklaşımlar :


1) sudokomutu:

Çoğu durumda sudokomuta erişebileceksiniz ve bu yüzden çözüm basitçe:

sudo -u target_user target_command


2) sukomut (eğer sudo kurulmamışsa Ex. alpine-linux images):

su - target_user -c 'target_command'

'Bu hesap şu anda kullanılamıyor' hatası almanız durumunda , kullanıcının geçerli bir giriş yapma (kabuk erişimi) politikası yoktur. Eğer öyleyse, kullanmayı düşünün:

su - target_user -s /bin/bash -c 'target_command'

(@Petr'in kullanıcının giriş yapma politikasına uymamak için -sbayrakla ilgili değerli yorumuna dayanarak www-data)

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.