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.