อนุญาตให้ใช้ไฟล์เท่านั้น


12

ฉันจะตั้งค่าไฟล์ให้สามารถเรียกใช้งานได้เฉพาะผู้ใช้รายอื่น แต่ไม่สามารถอ่าน / เขียนได้เหตุผลในการนี้ฉันกำลังดำเนินการบางอย่างด้วยชื่อผู้ใช้ของฉัน แต่ฉันไม่ต้องการให้รหัสผ่าน ฉันเหนื่อย :

chmod 777 testfile
chmod a=x
chmod ugo+x

ฉันยังคงได้รับอนุญาตปฏิเสธเมื่อดำเนินการในฐานะผู้ใช้รายอื่น


เมื่อดำเนินการไม่เป็นผู้ใช้รายอื่น และนี่เป็นสคริปต์หรือโปรแกรมไบนารีหรือไม่ ล่ามจะต้องอ่านสคริปต์
psusi

คุณมี shebang ที่ด้านบนของไฟล์หรือไม่? #! / bin / sh
J Baron

คำตอบ:


10

คุณต้องอ่านและดำเนินการอนุญาตในสคริปต์เพื่อให้สามารถดำเนินการได้ หากคุณไม่สามารถอ่านเนื้อหาของสคริปต์คุณจะไม่สามารถดำเนินการได้

tony@matrix:~$ ./hello.world
hello world
tony@matrix:~$ ls -l hello.world
-rwxr-xr-x 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ chmod 100 hello.world
tony@matrix:~$ ls -l hello.world
---x------ 1 tony tony 17 Jul 13 22:22 hello.world
tony@matrix:~$ ./hello.world
bash: ./hello.world: Permission denied

อันที่จริงได้รับการปรับปรุงเพื่อสะท้อนให้เห็นว่ามันเป็นความจริงสำหรับสคริปต์ที่พิจารณาคำถามเดิมเป็นสิ่งที่ฉันสงสัยว่าเป็นกรณี
EightBitTony

13

มีความจริงครึ่งหนึ่งของข้อความก่อนหน้านี้ คุณสามารถตั้งค่าสคริปต์เพื่อไม่ให้ผู้ใช้อ่านได้ แต่ยังสามารถใช้งานได้ กระบวนการนี้ถูกดึงออกมาเล็กน้อย แต่ทำได้โดยการยกเว้นใน / etc / sudoer เพื่อให้ผู้ใช้สามารถเรียกใช้สคริปต์ด้วยตัวคุณเองเป็นการชั่วคราวโดยไม่ต้องใส่รหัสผ่าน ตัวอย่างด้านล่าง:

สคริปต์บางอย่างที่ฉันต้องการแบ่งปันกับผู้ใช้:

me@OB1:~/Desktop/script/$ chmod 700 somescript.pl
me@OB1:~/Desktop/script/$ ls -l somescript.pl
-rwx------ 1 me me 4519 May 16 10:25 somescript.pl

สร้างเชลล์สคริปต์ที่เรียก 'somescript.pl' และบันทึกไว้ใน / bin /:

me@OB1:/bin$ sudo cat somescript.sh
[sudo] password for me: 
#!/bin/bash
sudo -u me /home/me/Desktop/script/somescript.pl $@

ขั้นตอนทางเลือกสร้าง symlink เพื่อ somescript.sh ใน / bin /:

sudo ln -s /bin/somescript.sh /bin/somescript

ตรวจสอบให้แน่ใจว่าเชลล์สคริปต์สามารถอ่าน / เรียกใช้งานได้กับผู้ใช้ (ไม่มีสิทธิ์การเข้าถึงเพื่อเขียน)

sudo chmod 755 /bin/somescript.sh
me@OB1:/bin$ ls -l somescript*
lrwxrwxrwx 1 root root  14 May 28 16:11 somescript -> /bin/somescript.sh
-rwxr-xr-x 1 root root 184 May 28 18:45 somescript.sh

สร้างข้อยกเว้นใน / etc / sudoer โดยเพิ่มบรรทัดเหล่านี้:

# User alias specification
User_Alias  SCRIPTUSER = me, someusername, anotheruser

# Run script as the user 'me' without asking for password
SCRIPTUSER ALL = (me) NOPASSWD: /home/me/Desktop/script/somescript.pl

หลักฐานในการปั๊ม:

someuser@OB1:~$ somescript
***You can run me, but can't see my private parts!***

someuser@OB1:~$ cat /home/me/Desktop/script/somescript.pl
cat: /home/me/Desktop/script/somescript.pl: Permission denied

วิธีนี้ควรจะดีกว่าพยายามทำให้งงงวยกับFilter::CryptoหรือPAR::Filter::CryptoหรือAcme::Bleachที่สามารถย้อนกลับวิศวกรรมโดยผู้ใช้ที่กำหนด กันไปสำหรับการรวบรวมสคริปต์ของคุณเพื่อไบนารี แจ้งให้เราทราบหากคุณพบสิ่งผิดปกติในวิธีนี้ สำหรับผู้ใช้ขั้นสูงเพิ่มเติมคุณอาจต้องการลบส่วน User_Alias ​​โดยสมบูรณ์และแทนที่ SCRIPTUSER ด้วย '% groupname' วิธีนี้คุณสามารถจัดการผู้ใช้สคริปต์ของคุณด้วยusermodคำสั่ง


6

หากคุณให้ผู้ใช้รายอื่นเรียกใช้งานโปรแกรมพวกเขาสามารถรู้ทุกอย่างที่โปรแกรมกำลังทำอยู่ไม่ว่าไฟล์โปรแกรมนั้นจะสามารถอ่านได้หรือไม่ก็ตาม สิ่งที่พวกเขาต้องทำคือชี้โปรแกรมดีบั๊ก (หรือโปรแกรมที่เหมือนดีบักเกอร์strace) ไบนารีที่ปฏิบัติการได้สามารถทำงานได้ถ้ามันสามารถเรียกใช้งานได้และไม่สามารถอ่านได้ (สคริปต์ไม่สามารถทำได้เนื่องจากล่ามจำเป็นต้องสามารถอ่านสคริปต์ได้) แต่สิ่งนี้ไม่ได้ให้ความปลอดภัยใด ๆ แก่คุณ

หากคุณต้องการให้คนอื่นเพื่อให้สามารถรันโปรแกรมของคุณเป็นกล่องสีดำโดยไม่ปล่อยให้พวกเขาเห็นว่าสิ่งที่โปรแกรมจะทำคุณจะต้องให้สิทธิพิเศษในการยกระดับสคริปต์ของคุณ: ทำให้มันsetuidให้กับผู้ใช้ของคุณ เฉพาะ root เท่านั้นที่สามารถใช้เครื่องมือดีบั๊กในโปรแกรม setuid โปรดทราบว่าการเขียนโปรแกรม setuid ที่ปลอดภัยไม่ใช่เรื่องง่ายและภาษาส่วนใหญ่ไม่เหมาะ ดูที่อนุญาตให้ setuid บนเชลล์สคริปต์สำหรับคำอธิบายเพิ่มเติม หากคุณกำลังจะเขียนโปรแกรม setuid ฉันขอแนะนำ Perl ซึ่งมีโหมด (โหมด taint) ที่ตั้งใจอย่างชัดเจนเพื่อให้สคริปต์ setuid ที่ปลอดภัยเป็นไปได้


-1

คุณสามารถตั้งค่าการอนุญาตไฟล์ด้วยคำสั่ง chmod ทั้งผู้ใช้รูทและเจ้าของไฟล์สามารถตั้งค่าการอนุญาตไฟล์ได้ chmod มีสองโหมดสัญลักษณ์และตัวเลข

ก่อนอื่นคุณต้องตัดสินใจว่าคุณจะตั้งค่าการอนุญาตสำหรับผู้ใช้ (u) กลุ่ม (g) คนอื่น (o) หรือทั้งสาม (a) หรือไม่ จากนั้นคุณสามารถเพิ่มการอนุญาต (+) ลบ (-) หรือลบการอนุญาตก่อนหน้านี้และเพิ่มการอนุญาตใหม่ (=) ถัดไปคุณจะตัดสินใจว่าคุณตั้งค่าสิทธิ์ในการอ่าน (r) เขียนสิทธิ์ (w) หรือเรียกใช้สิทธิ์ (x) สุดท้ายคุณจะบอก chmod ว่าไฟล์ใดที่คุณต้องการเปลี่ยนสิทธิ์

นี่คือตัวอย่างเล็ก ๆ น้อย ๆ

ล้างสิทธิ์ทั้งหมด แต่เพิ่มสิทธิ์การอ่านสำหรับทุกคน:

$ chmod a=r filename

หลังจากคำสั่งการอนุญาตของไฟล์จะเป็น -r - r - r--

เพิ่มสิทธิ์ดำเนินการสำหรับกลุ่ม:

$ chmod g+x filename

ตอนนี้การอนุญาตของไฟล์จะเป็น -r - r-xr--

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

$ chmod u + wx ชื่อไฟล์

หลังจากนี้สิทธิ์ของไฟล์จะเป็น -rwxr-xr--

ลบสิทธิ์ดำเนินการจากทั้งเจ้าของไฟล์และกลุ่ม หมายเหตุอีกครั้งว่าคุณสามารถตั้งค่าทั้งสองได้อย่างไร:

$ chmod ชื่อ ug-x

ตอนนี้สิทธิ์คือ -rw-r - r--

นี่เป็นการอ้างอิงด่วนสำหรับการตั้งค่าการอนุญาตไฟล์ในโหมดสัญลักษณ์:

Which user?
u   user/owner
g   group
o   other
a   all
What to do?
+   add this permission
-   remove this permission
=   set exactly this permission
Which permissions?
r   read
w   write
x   execute

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