Soru Bir root cronjob'dan farklı bir kullanıcı olarak nasıl komut çalıştırabilirim?


Bir NFS sınırlaması ve bir Cron sınırlaması arasında sıkışmış gibi görünüyor.

Bu yüzden, diğer şeylerin yanı sıra, bazı dosyaları bir NFS bağdaştırıcısı üzerinde rsync gereken bir kabuk betiği çalıştıran (RHEL5 üzerinde) kök cron'um var. Ve NFS mount'undaki dosyalar, mod 700 ile apache kullanıcısına aittir, bu nedenle sadece apache kullanıcısı rsync komutunu çalıştırabilir - root olarak çalışan bir izin hatası verir (NFS, nadir bir durumdur, görünüşte, root kullanıcısının nerede olduğu) tümüyle güçlü değil?)

Sadece rsync'i elle çalıştırmak istediğimde, "sudo -u apache rsync ..." yi kullanabilirim. Ama sudo cron'da hiçbir workie yok - "sudo: pardon, sudo 'yu çalıştırmak için bir tty'ye sahip olmalısınız" diyor.

Tüm betiği apache (yani apache'nin crontab dosyasından) olarak çalıştırmak istemiyorum çünkü betiğin diğer kısımları root gerektiriyor - bu sadece apache olarak çalıştırılması gereken bir komut. Ve gerçekten diğer uygulamalarda önemli değişiklikler içereceğinden, dosyalardaki modu değiştirmemeyi tercih ederim.

Cron'dan "sudo -u apache" yi başarmanın bir yolu olmalı?

Teşekkürler! soymak


21
2017-08-25 16:57


Menşei


Bunu SuperUser.com'a taşıyarak daha iyi sunulabilir. - Robert
Bu eski bir sorudur, ancak yine de arama sıralarında oldukça yüksek olduğunu ve yanıtların hiçbirinin NFS bağlayıcısına neden kök izinlerinin uygulanmadığını ele almadığını. Bunun üzerine tökezleyen herkes için sebep root_squash. Bu blogun, bu seçeneğin neden gerekli olduğu ve genellikle varsayılan olarak ayarlandığı için oldukça iyi bir açıklaması vardır. fullyautolinux.blogspot.com/2015/11/... - BryKKan


Cevaplar:


su --shell = / bin / bash --session-command = "/ yol / to / komut -argument = bir şey" kullanıcı adı &

Benim için çalışıyor (CentOS)


17
2018-02-18 03:42



Eklemek zorundaydım export TERM=xterm; içinde benim emrimden önce --session-command değişken. Böylece, ben bitti su --shell=/bin/bash --session-command="export TERM=xterm; /path/to/command -argument=something" username & - Steve Tauber
Ubuntu (12.04) üzerinde çalışmıyor su komut desteklemiyor --session-command seçeneği. - Lambart
cevabı netleştirmek için, root'un crontab'ına su --shell=/bin/bash --session-command="/path/to/command -argument=something" username - NoelProf


kullanım su yerine sudo:

su -c "rsync ..." apache

7
2017-08-25 17:00



Evet! Ama hayır. Apache kullanıcısı normal bir giriş kabuğuna sahip değildir, bu nedenle su -c sözdizimi yalnızca "Bu hesap şu anda kullanılamıyor" değerini döndürür. Ve apache kullanıcısının bu amaçla girilen girişinin değiştirilmesi kötü bir fikir gibi görünüyor. Hm, sanırım bu soru "Apache kullanıcısı olarak bir root cronjob'dan nasıl bir komut çalıştırabilirim?" Başlıklı olmalı. Ve belki de güvenlik açıkları getirilmeden yapamazsınız? - rob
Kullanılacak olan kabuğu açıkça belirtirseniz yardımcı olur mu? -s geçiş (örneğin -s /bin/sh)? En azından Ubuntu'da, söz konusu kullanıcının / etc / passwd dosyasında geçerli bir kabuk olmaması durumunda bu yardımcı olur. - Jukka Matilainen
@JukkaMatilainen - Evet, ubuntu da benim için çalıştı. - runamok


RHEL'de varsayılan olarak sudo terminalsiz işlemler için izin verilmez (tty). Bu ayarlandı /etc/sudoers.

Tty-less'e izin verebilirsiniz sudo Bu talimatlara sahip belirli kullanıcılar için:

https://serverfault.com/questions/111064/sudoers-how-to-disable-requiretty-per-user


3
2017-11-10 16:35





/ etc / crontab içine yerleştirin ve kullanıcı alanında root yerine apache belirtin


1
2018-03-27 00:36



Debian 6'mda çalışmıyor. - f.ardelian


Eğer sürekli olarak apache ile uğraşmak isterseniz:

chsh apache

Bu kullanıcı için kabuğu değiştirmenizi sağlar


1
2017-10-26 13:54