Sudo yaparken belirli bir sahiple (kullanıcı / grup) dosya ve dizin oluşturma


22

Bir wgetşey gerekir (cwd sıkıştırılmış bir dosya sonuçları), sonra onu ayıklamak, sonra bazı kopyala / taşı / değişiklik şeyler yapmak ve belki de sonunda (indirilen arşivden) bir komut dosyası yürütmek zorunda.

Şimdi bu görevlerin tümü doğrudan ( wget, ayıkla vb.) Veya dolaylı olarak (komut dosyasını çalıştırma) dosya ve dizinler oluşturmaya neden olur (tümü geçerli çalışma dizininde). Tüm bu şeyleri yapıyorum root(nihai, istenen kullanıcı ile yapmanın bir yolu yok).

Sorun şudur: İşlemde oluşturulan her şey root'a veya sudo kullanıcısına aittir. İşim bittiğinde (ve bazen orta yoldayken), işleri düzeltmek için bir dizi chmodve chownkomut vermeliyim.

Şimdi bir şekilde sisteme "Şu andan itibaren root olarak komutlar verdiğimde oluşturduğunuz herhangi bir dosya veya dizin, böyle ve bu tür sahiplik ve izinlerle yaratacağınızı" söylese iyi olur.

Yanıtlar:


26

sudo -u username touch filenameKomut dosyanız olarak yürütüldüğünde her zaman yapabilirsiniz root. sudoersYapılandırmanıza bağlı olarak genellikle şifre gerekmez .

Alternatif olarak çalıştırın su username -c touch filename. Ek bağımsız değişkenler kullanıcının kabuğuna sağlanır ve kabuğun -cseçeneği, belirtilen komutları kurallara göre yürütür.


Bazı komutlar (gibi mkdir) izinleri belirtmek için bağımsız değişkenleri destekler:

mkdir -m 0700 foo

Varsayılan olarak, dosya işlemleri umaskkabuk kümesine uyar. Hangi izinlerin reddedileceğini tanımlar . Bir umaskait 0022örneğin yapar değil grubu ve diğerleri için ayarlanan yazma izinlerini. 0077Grup ve diğer kişilerin izin almasını önlemek için olarak ayarlayın .


Açık setgiddizinleri içinde oluşturulan tüm dosyaların grup üyeliğini devralmasını sağlayacak şekilde ayarlayabilirsiniz :

chmod g+s someDir

Bazı Unix'ler ( ) için aynı davranışı destekler , ancak Linux'u desteklemez.setuidchmod u+s


1
İstediğiniz şey için özel bir destek olmadığını varsaymanın güvenli olduğunu düşünüyorum. Yalnızca süper kullanıcı chownfarklı bir kullanıcıya dosya gönderebilir ve bunun gibi bir varsayılan ayarlamanın kullanıcı hataları potansiyeli vardır ve rootkullanıcı fark etmeden diğer kullanıcılara izin verir .
Daniel Beck

10

Başka bir yol var, bence oldukça zarif. Kurulumu kullanma (1)

Örneğin, zabbix-agentd, / var / run içinde bir alt klasöre ihtiyaç duyar, ancak son dağıtımlar / var / run için tmpfs kullanır, bu nedenle dizin yeniden başlatılamaz. / Etc / sysconfig / zabbix-agentd içeren bir dosya oluşturarak çözdüm:

install -g zabbix -o zabbix -d /var/run/zabbix

1
-m 0700Örneğin ekleyin . Cevap.
Yüzük Ø

3
Not installdizin oluşturur ve daha sonra sahibi / grup değiştirir. Bu nedenle dizinde belirtilen sahip / grubun bulunmadığı kısa bir süre vardır. Bazı bağlamlarda önemli olabilir.
user368507

Bu Alpine Linux üzerinde çalışıyor
Mauricio Sánchez

3

Unix benzeri sistemlerde, yeni oluşturulan dosyalar ve dizinler, bunları oluşturan işlemin sahibi tarafından sahiplenir. Standart yardımcı programların normalde oluşturulan dosyaların sahibini değiştirme seçeneği yoktur.

Orijinal kullanıcının UID'si ve GID'si olan değişkenler

Bazı komutları tekrar tekrar çalıştırırsanız, değişkenleri kullanabilir $SUDO_UIDve $SUDO_GIDçağıran kullanıcıya başvurabilirsiniz sudo:

sudo sh -c "do_something ; chown -R \"\$SUDO_UID:\$SUDO_GID\" files and directories"

Oluşturulan dosyaların ve dizinlerin listesini otomatik olarak alma

Oluşturulan (ve muhtemelen değiştirilen) dosya ve dizinlerin listesini otomatik olarak almak istiyorsanız, komutlarınızı sistem aramasına stracedayalı gözetim altında çalıştırabilirsiniz ptrace():

strace -qqfe open,creat,mkdir,link,symlink,mknod -o '|your_processing_of_strace_output' do_something

veya örneğin mekanizmaya dayanan Installwatch'ı kullanabilirsiniz LD_PRELOAD.

Daha fazla çalışma için fikirler

Yukarıda belirtilen yöntemlere dayanarak, oluşturulan / değiştirilen dosyaların sahibini ve muhtemelen erişim haklarını otomatik olarak değiştirecek bir araç oluşturmak mümkündür. Kullanımı şu kadar basit olabilir:

sudo watch-chown do_something
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.