มีลิงก์สัญลักษณ์มาตรฐานไปยังไดเรกทอรีบ้านของผู้ใช้ปัจจุบันหรือไม่?


9

เชลล์สามารถขยาย~ไปยังโฮมไดเร็กทอรีของคุณ $HOMEมักจะมีข้อตกลงเดียวกัน แต่บ่อยครั้งที่คุณต้องการอ้างถึงโฮมไดเรกทอรีผู้ใช้ปัจจุบันจากบริบทที่อาจไม่รองรับการขยายตัวดังกล่าว

ฉันมีไฟล์ config ที่ใช้$HOMEงานได้ แต่~ไม่ได้และในทางกลับกัน

ฉันเดาว่าฟิวส์สามารถให้บางอย่างตามเส้นเหล่านี้ได้เช่น/var/myself->$HOME

โดยที่ฉันสามารถวางค่าในไฟล์กำหนดค่าเพื่อชี้ไปยังสิ่งต่าง ๆ ที่ต้องการ /var/myself/backdrops/pornography/wtf/yarly.jpg

มีบางอย่างเช่นนี้อยู่แล้ว? ถ้าไม่เป็นเช่นนั้นมีเหตุผลที่ดีไหมหากไม่มีสิ่งนี้?


2
นี่เป็นความคิดที่ดีจริงๆและฟิวส์สามารถทำสิ่งนี้ได้เล็กน้อยถ้าฉันจำอินเทอร์เฟซได้อย่างถูกต้อง
Michael Mrozek

คำตอบ:


6

ฉันเข้าใจความกังวลของคุณ แต่คำตอบคือ "ไม่" ไม่มีสิ่งนั้น
วิธีการตามปกติคือขอเส้นทางบ้านของผู้ใช้ OS หรือรับตัวแปร $ HOME

ตัวเลือกทั้งหมดเหล่านี้ต้องการการเข้ารหัสจากแอปพลิเคชันเสมอ แอปพลิเคชั่นจำนวนมากเช่นทุบตีเสนอ "นามแฝง" ~ (open (2) ไม่ได้แปลว่า)

แน่นอน vfs หรือโมดูลฟิวส์สามารถนำไปใช้ในการทำเช่นนี้ อาจมีบางอย่างที่ต้องทำฉันจะถามอย่างนั้น!

แต่มันจำเป็นจริงๆเหรอ? คุณสามารถใช้วิธีแก้ปัญหาเช่น:

  • สร้างสคริปต์เพื่อเริ่มโปรแกรมที่ลิงก์ $ HOME ไปยังเส้นทางสัมพัทธ์หรือตำแหน่งที่รู้จัก

  • ใช้ pam_exec เพื่อลิงก์ $ HOME dir ไปยังตำแหน่งที่รู้จักhttp://www.kernel.org/pub/linux/libs/pam/Linux-PAM-html/sag-pam_exec.html


ฉันขอเครื่องมือ vfs: unix.stackexchange.com/questions/1811/…
Keymon

0

เคล็ดลับอย่างหนึ่ง (บน Linux อย่างน้อย) คือการเปลี่ยนไดเรกทอรีเป็น$HOMEก่อนเรียกใช้แอพจากนั้นใช้/proc/self/cwd/...ในไฟล์ปรับแต่ง


ฉันชอบความแฮ็กของเรื่องนี้ แต่สันนิษฐานว่ามันจะเจอปัญหาเพราะกระบวนการเปลี่ยนไดเรกทอรีปัจจุบัน ฉันต้องการ / proc / PID / iwd สำหรับไดเรกทอรีการทำงานเริ่มต้น
Lerc

... และสำหรับเรื่อง / proc / PID / home
Lerc

@ เล็ดลอดถ้ามันกำลังจะอยู่ในไฟล์ปรับแต่งมันจะต้อง/proc/selfไม่ใช่/proc/PIDเพราะคุณไม่สามารถรู้ได้ล่วงหน้าว่า PID นั้นจะเป็นอย่างไร
Neil Mayhew

@Lerc ใช่ถ้ากระบวนการเปลี่ยนไดเรกทอรีแล้วมันจะล้มเหลว แต่โดยปกติแล้วโปรแกรมจะอ่านไฟล์กำหนดค่าหนึ่งครั้งเมื่อพวกเขาเริ่มต้นแล้วแคชค่าในหน่วยความจำ ทุกอย่างขึ้นอยู่กับโปรแกรมที่คุณใช้งานและหากโปรแกรมไม่ยืดหยุ่นเพียงพอทั้งในบรรทัดคำสั่งหรือในไวยากรณ์ไฟล์กำหนดค่าคุณจะติดขัด
Neil Mayhew

ใช่ฉันหมาย / proc / PID / บ้านหมายความว่าทุก proc / dirs PID ควรสนับสนุนเรื่องนี้จึงรวม / proc / ตนเอง
Lerc

0

โปรแกรมส่วนใหญ่อนุญาตให้คุณระบุพา ธ ไปยังไฟล์กำหนดค่าในบรรทัดคำสั่ง ดังนั้นคุณสามารถเขียน wrapper ที่ใช้ไฟล์กำหนดค่ามาตรฐานกรองมันเพื่อทดแทนสิ่งต่าง ๆ เช่น$HOMEสำหรับผู้ใช้ปัจจุบันแล้วส่งไฟล์กำหนดค่าชั่วคราวที่แก้ไขแล้วไปยังโปรแกรม


หากคุณทำเช่นนั้นคุณจะสามารถระบุเส้นทางไปยังไฟล์ปรับแต่งได้อย่างมีประสิทธิภาพจากผู้ใช้ อาจเป็นไปได้ถ้าคุณได้รับการชุมนุมแฟนซีด้วย wrapper exe
Lerc

0

คุณสามารถขอรับ pid ของผู้ใช้ requestin และถามระบบของไดเรกทอรีบ้านของเขา / เธอ ดังนั้นจึงเป็นไปได้

อย่างไรก็ตามฉันไม่แน่ใจว่าไม่มีโปรแกรม SUID ที่จะถือว่า FS เป็นแบบคงที่หรือไม่

แก้ไข:

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
} 

รหัสด้านบนไม่เหมาะ แต่ควรใช้กับกรณีทั่วไป


คุณจะหาโฮมไดเร็กตอรี่ของเขาได้อย่างไรหลังจากที่คุณรู้ว่ามันคืออะไร
WhyNotHugo

การใช้หรือgetpwuid getpwuid_r
Maciej Piechotka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.