ฉันจะเรียกใช้ไฟล์โดยไม่ใช้สิทธิ์ได้อย่างไร


11

ฉันจะเรียกใช้งานไฟล์โดยไม่ให้สิทธิ์ดำเนินการกับตัวเองได้chmod u+xอย่างไร

ถ้าฉันลองทำเครื่องหมายถูก 'อนุญาตให้เรียกใช้ไฟล์เป็นโปรแกรม' เครื่องหมายถูกจะถูกลบออกทันที



1
ไม่ใช่จุดอนุญาตไฟล์ทั้งหมดดังนั้นนี่จะไม่เกิดขึ้นเหรอ? : D
galois

คำตอบ:


14

ตรวจสอบความเป็นเจ้าของไฟล์

โปรดทำสิ่งนี้ก่อนสิ่งใดเพิ่มเติม (เว้นแต่คุณจะแน่ใจว่าคุณเป็นเจ้าของไฟล์)

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

กราฟิก

  1. คลิกขวาที่ไฟล์
  2. คลิก 'คุณสมบัติ'
  3. คลิกแท็บ 'การอนุญาต'
  4. ตรวจสอบให้แน่ใจว่าฟิลด์ 'เจ้าของ' แจ้งชื่อผู้ใช้ของคุณ หากไม่เห็น "เปลี่ยนความเป็นเจ้าของไฟล์" ด้านล่าง

บรรทัดคำสั่ง

  1. ดำเนินการคำสั่งนี้ในเทอร์มินัล

    [ ! -O "/path/to/file" ] && echo "You don't own the file"
    
  2. หากพิมพ์ " You don't own the file" ดู "เปลี่ยนความเป็นเจ้าของไฟล์" ด้านล่าง

เปลี่ยนความเป็นเจ้าของไฟล์

ดำเนินการคำสั่งนี้ในเทอร์มินัล

sudo chown $USER:$(id -gn $USER) "/path/to/file"

ไฟล์ปฏิบัติการ

คำตอบที่ผมพบจากการแสดงความคิดเห็นโดยLekensteynในคำตอบสำหรับคำถามเกี่ยวกับchmodบนพาร์ติชัน NTFS ซึ่งผมคิดว่าสมควรได้รับมันเป็นคำถามของตัวเองและคำตอบเครดิตเต็มไป Lekensteyn

ใช้คำสั่งนี้สำหรับไฟล์เรียกทำงาน (การแทนที่/path/to/executableด้วยพา ธ ที่ถูกต้อง):

  • ไฟล์ที่รันได้ 64 บิต:

    /lib64/ld-linux-x86-64.so.2 /path/to/executable
    
  • ไฟล์เรียกทำงาน 32 บิต:

    /lib/ld-linux.so.2 /path/to/executable
    

หากข้อมูลด้านบนใช้ไม่ได้ (หรือเกิดข้อผิดพลาดไม่พบไฟล์) ให้ลองใช้สิ่งนี้ก่อนคำสั่งด้านบน

cd "$(dirname /path/to/executable)"

คำสั่งข้างต้นทั้งหมดจะไม่ทำงานสำหรับสคริปต์ที่เป็นข้อความ (Bash, Python, Perl, ฯลฯ ) ดูด้านล่าง

ตรวจสอบว่าโปรแกรมเป็น 64 หรือ 32 บิต

ใช้คำสั่งนี้เพื่อค้นหาว่าไฟล์ที่เรียกใช้งานได้คือ 32 ( x86) หรือ 64 ( x86-64)

objdump -f "$file" | grep '^architecture' | cut -d, -f1 | sed 's/architecture: //'

ถ้ามันบอกว่าi386:x86-64เป็น 64 บิต ถ้ามันบอกi386แค่นั้นก็คือ 32 บิต


สคริป

สำหรับสคริปต์ที่ใช้ข้อความ (Bash, Python, Perl ฯลฯ ) คุณควรใช้คำสั่งที่ระบุใน#!บรรทัดแรกในไฟล์

ตัวอย่างเช่นหากบรรทัดแรกของไฟล์คือ

#!/usr/bin/env python3

จากนั้นรันคำสั่งเหล่านี้ในเทอร์มินัล (การแทนที่/path/to/fileด้วยพา ธ ที่ถูกต้อง)

cd "$(dirname /path/to/file)"       # Not strictly necessary, see section below

# Replace '/usr/bin/env python3' with the first line without the front #!
/usr/bin/env python3 /path/to/file  # Use './file' if you want

.jarไฟล์Java

สำหรับ jar ที่ใช้งานได้ของ Java คุณสามารถใช้คำสั่งเหล่านี้ (แทน/path/to/jarด้วยเส้นทางที่ถูกต้อง):

cd "$(dirname /path/to/jar)"   # Not strictly necessary, see section below
java -jar /path/to/jar

เมื่อคุณไม่ต้องการ cd "$(dirname /path/to/file)"

สถานการณ์เหล่านี้เป็นไปได้ที่คุณไม่จำเป็นต้องใช้cd "$(dirname /path/to/file)"ก่อนที่จะเรียกใช้โปรแกรมด้วยวิธีการใด ๆ : หากอย่างน้อยหนึ่งเป็นจริงคุณจะไม่ต้องการcdก่อน

  • โปรแกรมไม่ทำการดำเนินการกับไฟล์ใด ๆ (ตัวอย่าง: ใช้งานได้เท่านั้นapt-get)
  • การใช้โปรแกรมcd(หรือเทียบเท่า) เพื่อเปลี่ยนเส้นทางที่แน่นอนก่อนที่จะทำแฟ้มการดำเนินงานใด ๆ (เช่น: cd "$(dirname "$0")")
  • โปรแกรมไม่ได้อ้างอิงเส้นทางสัมพัทธ์ใด ๆ (เส้นทางที่ขึ้นต้นด้วย./หรือเริ่มต้นโดยไม่มีเครื่องหมายทับ)

หากไม่แน่ใจให้เพิ่มcd "$(dirname "$0")"(หรือเทียบเท่า) ที่ด้านบนสุดของสคริปต์ (ถ้ามี) หรือใช้cd "$(dirname /path/to/file)"ต่อไป


1
ทุกคนที่ต้องการสคริปต์นี้และทำให้มันครอบคลุมความเป็นไปได้ทั้งหมด (ถ้าคุณใช้ระบบไฟล์ MS มาก ) ยินดีต้อนรับ ฉันอาจทำเอง แต่ไม่นับ (+1 ความคิดเห็นนี้ถ้าคุณต้องการสิ่งนี้, การสนับสนุนที่เพียงพอและฉันอาจทำ)
kiri

0

หากเป็นเชลล์สคริปต์คุณสามารถ "source" มาจากเชลล์สคริปต์อื่นเช่น:

#!/bin/bash
# This script runs another script indirectly, by sucking in its contents and evaluating inline:

source /path/to/script/which/lost/its/exec/flag "$@"

"$ @" ผนวกพารามิเตอร์บรรทัดคำสั่งหากจำเป็น

ต้องบอกว่านี่อาจไม่ใช่วิธีแก้ปัญหาที่ดีที่สุดสำหรับปัญหาพื้นฐาน แต่เราไม่มีความรู้เพียงพอเกี่ยวกับปัญหานั้นในการเสนอทางเลือกอื่น


ฉันไม่เห็นว่าสิ่งนี้แตกต่างจากbash script $@
kiri

มันไม่ได้มีความแตกต่างกันในการทำงาน เป็นไปได้มากว่าฉันไม่เข้าใจปัญหาที่คุณพยายามแก้ไข - ฉันคิดว่าคุณต้องการวิธีชี้และคลิกเพื่อเรียกใช้สคริปต์ที่ไม่สามารถเรียกใช้งานได้ "ทำให้สิ่งหนึ่งที่ปฏิบัติได้และให้แหล่งอื่น ๆ " เป็นวิธีหนึ่งในการแก้ไขปัญหานั้น หากเป็นปัญหาที่ไม่ถูกต้อง ... ดี :)
Stabledog
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.