BASH Scripting, su to www-data untuk perintah tunggal

26

Saya sedang mengotomatisasi pembuatan repositori subversi dan situs web terkait seperti yang dijelaskan dalam posting blog yang saya tulis ini . Saya mengalami masalah di sekitar bagian di mana saya su ke pengguna data-www untuk menjalankan perintah berikut:

svnadmin create /svn/repository

Ada cek di awal skrip yang memastikan skrip berjalan sebagai root atau sudo, dan semuanya setelah itu satu perintah perlu dijalankan sebagai root. Apakah ada cara yang baik untuk menjalankan satu perintah itu sebagai www-data dan kemudian kembali ke root untuk menyelesaikan?

Brendon Dugan
sumber

Jawaban:

24

Cukup gunakan su - www-data -c 'svnadmin create /svn/repository'di skrip Anda dijalankan oleh root. Sehingga hanya perintah ini yang dijalankan oleh pengguna data-www.


Pembaruan untuk pemirsa di masa depan :

Jika Anda menerima "This account is currently not available"kesalahan, pertimbangkan untuk menggunakan:

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

(@Petr berharga menyebutkan tentang -sbendera untuk mengakomodasi www-datakebijakan tanpa masuk pengguna)

johnshen64
sumber
1
Ya, sepertinya saya lupa aturan dasar penulisan ... RTFM. Terima kasih!
Brendon Dugan
15
Mencoba ini, saya mendapatkan kesalahanThis account is currently not available.
rubo77
Saya juga mendapatkan kesalahan ini, tetapi jawaban futbolsalas15 di bawah ini berfungsi dengan baik.
Andrew
18
Gunakan su - www-data -s /bin/bash -c 'your_command'untuk membuat ini bekerja. Pengguna www-data memiliki shell /usr/sbin/nologinjadi tanpa -sparameter itu mengarah ke pesan kesalahan.
Petr
63

Dengan 'su' mungkin meminta kata sandi, dan www-data tidak memiliki kata sandi. Saya merekomendasikan perintah sudo:

 sudo -u www-data command

Syaratnya adalah bahwa pengguna Anda harus root, atau dikonfigurasi dalam file sudoers

futbolsalas15
sumber
4
Wow, mengapa ini bukan jawaban yang dipilih? Butuh waktu terlalu lama untuk menemukan ini.
Kapten Hypertext
3

Gunakan 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.
MikeyB
sumber
2
Perlu dicatat bahwa perintah su tidak berfungsi dengan akun yang telah menonaktifkan login (seperti www-data). Anda harus menggunakan sudo.
Frantumn
2

2 pendekatan yang mungkin :


1) sudoperintah:

Dalam kebanyakan kasus, Anda akan memiliki akses ke sudoperintah dan solusinya adalah:

sudo -u target_user target_command


2) superintah (jika sudo tidak diinstal. Ex. alpine-linux images):

su - target_user -c 'target_command'

Jika Anda menerima kesalahan 'Akun ini saat ini tidak tersedia' , pengguna memiliki kebijakan tidak masuk (akses shell). Jika demikian, pertimbangkan untuk menggunakan:

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

(Berdasarkan komentar berharga @Petr tentang -sbendera untuk mengakomodasi www-datakebijakan tanpa masuk pengguna)

Tukang es
sumber