ฉันจะรู้ได้อย่างไรว่า zsh ทำงานด้วยสิทธิ์พิเศษหรือไม่


2

ใน. zshrc ของฉันฉันมีคำสั่งที่เปิดใช้อินสแตนซ์ของโปรแกรมต่าง ๆ เช่น Mozilla Firefox และ Evolution เห็นได้ชัดว่าฉันไม่ต้องการที่จะเปิดพวกเขาเป็นรากดังนั้นฉันต้องการตรวจสอบว่าฉันเป็นรากก่อนที่จะเปิดพวกเขา ฉันจะทำสิ่งนี้ได้อย่างไร

คำตอบ:


2

คุณสามารถใช้คำสั่งแบบมีเงื่อนไขเช่น:

PRGCMD="firefox"
PRGUSR="user"
if [[ $UID == 0 || $EUID == 0 ]]; then
   # root
   echo Running programm as User $PRGUSR
   sudo -u $PRGUSR ${(z)PRGCMD}
else
   ${(z)PRGCMD}
fi

มันจะตรวจสอบครั้งแรกถ้าID ผู้ใช้จริงหรือรหัสผู้ใช้ที่มีประสิทธิภาพเป็นที่เป็นzeroroot

ถ้าเป็นเช่นนั้นจะใช้sudoเพื่อเรียกใช้โปรแกรมที่กำหนดไว้ในตัวแปรPRGCMDเป็นผู้ใช้ definded PRGUSRในตัวแปร (คุณสามารถละเว้นบรรทัดนี้หากคุณต้องการข้อความเตือนเท่านั้น)

${(z)PRGCMD}แยกคำราวกับว่าบรรทัดคำสั่ง zshในกรณีที่PRGCMDมีช่องว่างเช่นพารามิเตอร์ไปยังโปรแกรม

ตัวแปรสั้น ๆ ซึ่งรันโปรแกรมเฉพาะที่ไม่ใช่รูทคือ: [[ $UID != 0 || $EUID != 0 ]] && firefox


นอกจากนี้คุณอาจต้องการรวม%#ไว้ในพรอมต์ของคุณเพื่อให้คุณสามารถเห็นว่าเชลล์ปัจจุบันของคุณมีสิทธิ์ จากman zshmisc:

%#     A `#' if the shell is running with privileges, a `%' if not.  Equivalent to `%(!.#.%%)'.  The definition of `privileged', for  these
       purposes,  is that either the effective user ID is zero, or, if POSIX.1e capabilities are supported, that at least one capability is
       raised in either the Effective or Inheritable capability vectors.

รหัสตัดสินถ้าเปลือกทำงานที่มีสิทธิ์ (ที่กำหนดไว้ในprivasserted()ในutils.c) สามารถ IMHO ไม่สามารถทำได้ในรหัสเปลือกดังนั้นหากคุณต้องการพฤติกรรมเดียวกันแน่นอนมันอาจจะดีที่สุดที่จะแยกเอาท์พุทของ%#การขยายตัวพรอมต์:

[[ $(print -P "%#") == '#' ]] && echo shell privileged || echo shell not privileged

ฉันคิดถึงสิ่งนี้ อย่างไรก็ตามมันเป็นไปได้ที่เชลล์จะไม่รูทและยังมีสิทธิพิเศษ - ฉันต้องการตรวจสอบเดียวกัน% # ในข้อความแจ้ง
Demi

1
@Demetri: ฉันขยายคำตอบเพื่อแก้ไขพฤติกรรมของการ%#ขยายที่รวดเร็ว
mpy

@Demetri: ฉันอยากรู้ว่าการแยกวิเคราะห์print -P "%#"แก้ปัญหาของคุณหรือไม่ :)หากโย่โปรดพิจารณาที่จะยอมรับคำตอบของฉัน
mpy

1
อ่าใช่มันแก้ปัญหาได้แล้ว! ขออภัย
Demi

1
หรือถ้าคุณชอบ squiggles:[[ ${(%):-%#} = \# ]] && echo root
Tom Hale
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.