Geçerli kullanıcıların giriş dizinine standart sembolik bir bağlantı var mı?


9

Kabuk ~ana dizininize genişleyebilir . $HOMEgenellikle aynı anlaşmaya sahiptir, ancak genellikle bu genişlemeyi desteklemeyen bir bağlamdan geçerli kullanıcıların giriş dizinine başvurmak istersiniz.

$HOMEÇalışır ama ~çalışmıyor ve tersi yapılandırma dosyaları vardı .

Sigortanın bu hatlar boyunca bir şey sağlayabileceğini tahmin ediyorum /var/myself->$HOME

Bununla ben gibi şeyleri göstermek için yapılandırma dosyaları değerleri yerleştirebilirsiniz /var/myself/backdrops/pornography/wtf/yarly.jpg

Zaten böyle bir şey var mı? Değilse, böyle bir şeyin olmamasının iyi nedenleri var mı?


2
Bu gerçekten iyi bir fikir gibi görünüyor ve arayüzü doğru hatırlarsam sigorta bunu oldukça önemsiz yapabilirdi
Michael Mrozek

Yanıtlar:


6

Endişenizi anlıyorum ama cevap “hayır”. Böyle bir şey yok.
Genel yöntem, işletim sistemine kullanıcının ana yolunu sormak veya $ HOME değişkenini elde etmektir.

Tüm bu seçenekler her zaman uygulamadan biraz kodlamaya ihtiyaç duyar. Bash gibi birçok uygulama "takma ad" sunar (open (2) bunu tercüme etmez).

Elbette bunu yapmak için bir vfs veya bir sigorta modülü uygulanabilir. Muhtemelen bunu yapacak bir şey var, bunu soracağım!

Ama gerçekten gerekli mi? Şunun gibi bir geçici çözüm kullanabilirsiniz:



0

Bir hile (en azından Linux'ta) $HOME, uygulamayı çalıştırmadan önce dizini değiştirmek ve ardından /proc/self/cwd/...yapılandırma dosyasında kullanmak olacaktır.


Ben bu hackishness gibi ama muhtemelen süreç mevcut dizini değiştirir sorunlara koşacaktı. İlk çalışma dizini için / proc / PID / iwd istiyorum.
Lerc

... ve bu konuda a / proc / PID / home
Lerc

Bir yapılandırma dosyasında gidiyorsa @Lerc, olması gerekenden /proc/selfdeğil /proc/PIDsen PID olacak ne olduğunu önceden bilemeyiz çünkü.
Neil Mayhew

@Lerc, evet, işlem dizini değiştirirse başarısız olur, ancak genellikle programlar başlangıçta bir kez yapılandırma dosyasını okur ve sonra bellekteki değerleri önbelleğe alır. Her şey çalıştığınız programa bağlıdır ve program komut satırında veya yapılandırma dosyası sözdiziminde yeterli esneklik sunmuyorsa, sıkışıp kalırsınız.
Neil Mayhew

Evet, demek istiyorum ki / proc / PID / home, tüm proc / PID dizinlerinin bunu desteklemesi ve böylece / proc / self
Lerc

0

Çoğu program, komut satırında yapılandırma dosyasının yolunu belirtmenize izin verir. Böylece, standart bir yapılandırma dosyası alan bir sarmalayıcı yazabilir $HOME, geçerli kullanıcı gibi şeyleri değiştirmek için filtreleyebilir ve daha sonra değiştirilmiş, geçici yapılandırma dosyasını programa geçirebilirsiniz .


Bunu yaparsanız, yapılandırma dosyasından kullanıcıdan uzak bir yol belirleme yeteneğini etkili bir şekilde aldınız. Bir sarıcı exe ile ralli fantezi alırsanız yapılabilir olabilir.
Lerc

0

Kullanıcının istediği pid'i alabilir ve ana dizininin sistemine sorabilirsiniz. Yani mümkün.

Ancak FS'yi statik olarak kabul edecek bir SUID programı olup olmadığından emin değilim.

Düzenle:

struct fuse_context *ctx = fuse_get_context ();
struct passwd pwd, *ppwd;
char buffer[1024];
int status = getpwuid_r (ctx->ui, &pwd, buffer, sizeof(buffer), &ppwd);
if (status == 0) {
  if (ppwd == NULL) {
    // No record found
  } else {
    // Handle record
  }
} else {
    // Handle error
} 

Yukarıdaki kod ideal değildir, ancak yaygın durumlar için çalışması gerekir.


Hangi kullanıcı olduğunu öğrendikten sonra ana dizinini nasıl bulursunuz?
WhyNotHugo

getpwuidVeya tuşlarını kullanarak getpwuid_r.
Maciej Piechotka
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.