Dosyayı bir kullanıcı için değil, yalnızca komut dosyası için erişilebilir hale getirebilir miyim?


11

Ben sistemde sınırlı erişime sahip bir kullanıcı var (yani, o bir sudoer değil); ona Bob diyelim .

Ben bir komut dosyası veya ikili, ben, sistem yöneticisi, güven ve kök olarak çalışan hiçbir sorun olurdu; hadi senaryoyu çağıralım get-todays-passphrase.sh. Bu komut dosyasının işi, içinde bulunan "özel" (Bob dışında bir kullanıcı / gruba veya hatta köke sahip olan) bir dosyadan veri okumak /srv/daily-passphrasesve yalnızca dosyadan belirli bir satır çıktısı almak: bugünün tarihine karşılık gelen satır .

Bob gibi Kullanıcılar edilir değil o dosyada listelenen olsa bile, yarının parolayı bilmek izin verdi. Bu nedenle, dosya /srv/daily-passphrasesBob gibi root olmayan kullanıcıların bu yüzden, Unix izinleri ile korunmaktadır değil , doğrudan dosyaya erişmek için izin verdi. Ancak, get-todays-passphrase.shkomut dosyasını istedikleri zaman çalıştırmalarına izin verilir , bu da "filtrelenmiş" verileri döndürür.


Özetlemek gerekirse ( TL; DR versiyonu):

  1. Bob korunan dosyayı okuyamıyor
  2. Komut dosyası korumalı dosyayı okuyabilir
  3. Bob herhangi bir zamanda dosyayı okuyabilen komut dosyasını çalıştırabilir

Bunu Unix dosya izinleri ile yapmak mümkün müdür? Veya Bob bir komut dosyası başlatırsa, komut dosyası her zaman Bob ile aynı izinlerle çalışmaya mahkum olur mu?

Yanıtlar:


13

Bu aslında yaygın ve oldukça basittir. sudokullanıcının çağırabileceği belirli uygulamaları sınırlamanıza olanak tanır. Başka bir deyişle, onlara kök ya da hiçbir şey vermek zorunda değilsiniz; belirli bir komutu çalıştırmalarınasudo izin verebilirsiniz . Bu tam olarak istediğiniz şeydir ve kullanıcıların Git depolarını SSH ve benzeri aracılığıyla itmesine izin vermek gibi şeyler için çok yaygın bir uygulamadır.

Bunu yapmak için tek yapmanız gereken /etc/sudoersşeye benzeyen bir satır eklemek

bob ALL=(root) NOPASSWD: /path/to/command/you/trust

( NOPASSWD:Kısım gerekli değildir, ancak bu durumda çok yaygındır. Değildir) Bu noktada, bobçağırabileceği /path/to/command/you/trustaracılığı Sudo, ama başka bir şey.

Bununla birlikte, birisine kök vermek - burada yaptığımız şey - tam olarak istediğiniz şey olmayabilir. Özellikle, betiğinizde herhangi bir kusur varsa, kutunuzun köklenmesine izin verme riskiyle karşı karşıya kalırsınız. Bu nedenle, bunun yerine, özel dosya söz sahibi olmak, özellikle bir kullanıcı oluşturmayı tercih edebilir specialuser-o zaman chownonlara dosyası ve sahip /etc/sudoersmarka bobbu özel kullanıcı olmak. Bu durumda, satır eklemek sudoersyeterlidir olurdu

bob ALL=(specialuser) NOPASSWD: /path/to/command/you/trust

7
Ben "kök" yol gitmemeyi öneriyorum - bu amaç için özel bir kullanıcı / grup oluşturun.
guntbert

İyi bir nokta; Cevabı cevaplayacağım.
Benjamin Pollack

7

Önsöz:

Yorumlarda belirtildiği gibi ve bu cevapta açıklanan nedenlerden dolayı linux çekirdeği bir komut dosyası işlenirken setuid / setguid bitini yok sayar . Ben Benjamin'in cevabını çoğaltmayacağım ama yerine cevabımı doğru yapmak için script'i executabe ile değiştireceğim .


Kısa cevap: setgid kullanın

Ayrıntılı adımlar:

  1. Yeni bir grup oluşturun (ör. Readpass)
  2. Bu grubu parola dosyasının sahibi yap sudo chown :readpass thatfile
  3. Dosyayı yalnızca grubuna göre okunabilir yapma sudo chmod g=r,o= thatfile
  4. Çalıştırılabilir yapın sgid readpass:sudo chmod g+s thatfile

Bu şekilde çalıştırılabilir dosya sahibi grubun izinleriyle çalışacak ve böylece dosyayı okuyabilecektir.


2
Setgid ve setuid komut dosyalarında kolayca çalıştırılamaz, değil mi?
muru

1
Linux'ta bir script setgid dosyası oluşturamazsınız: setgid biti yok sayılır. Bunun yerine, bob'un thatfilegrupla çalışmasına izin veren bir sudo kuralı ekleyin readpass.
Gilles 'SO- kötü olmayı bırak'
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.