এক্সিকিউট করার অনুমতি বিট সেট না করেই কি আমি একটি লিনাক্স বাইনারি কার্যকর করতে পারি?


25

লিনাক্সের অধীনে এক্সিকিউটেবল বাইনারি ফাইল চালানোর কোন উপায় আছে যেখানে এক্সিকিউট বিট সেট নেই? chmod +xএকটি বিকল্প নয়।

যেমন এটির অনুমতি r--r--r--কেবলমাত্র।

স্ক্রিপ্ট নির্বাহ বিট চালানো সেটিং এবং অনুবাদক, যেমন উৎস ক্ষণস্থায়ী দ্বারা একটি কুঁড়েঘর নির্বাণ ছাড়া সম্ভব bash script.shবা python script.py

সুতরাং এর মতো কিছু আছে যা execute abinaryfileঅবজেক্ট কোডটিকে মেমরিতে লোড করবে এবং চালাবে?


3
একটি অনুলিপি তৈরি এবং chmod একটি বিকল্প?
টিআইসিএল

না, আমি ভাবছি এমন পরিবেশে বাইনারি কার্যকর করার কোনও উপায় আছে যেখানে অনুমতি বিট সেট করা যায় না (প্রদত্ত ফাইল বা এটির অনুলিপিগুলিতে ...)
টম

উত্তর:


36

আপনি ELF দোভাষী হিসাবে, /lib/ld*.so ব্যবহার করতে পারেন:

$ cp /bin/ls /tmp/ls
$ chmod a-x /tmp/ls
$ /lib/ld-linux.so.2 /tmp/ls

প্রকৃত নামটি স্থাপত্যের চেয়ে স্থাপত্যের চেয়ে আলাদা। কিছু নাম অন্তর্ভুক্ত /lib/ld-linux.so.2, /lib/ld-linux-x86-64.so.2এবং /lib/ld-2.7.so। আপনি সম্ভবত এটি একা হিসাবে খুঁজে পেতে পারেন /lib/ld*


দুর্দান্ত তথ্য ..... যাইহোক এলডি কী বোঝায়?
ভিনিতে মেনন

@ ভিনিটমেনন ldহ'ল প্রোগ্রাম লিঙ্কার / লোডার। এটি প্রোগ্রাম দ্বারা ব্যবহৃত ভাগ করা লাইব্রেরিগুলি সন্ধান এবং লোড করে এবং তারপরে এটি কার্যকর করে। ld-linuxELF বাইনারি পরিচালনা করে।
ড্যানিয়েল বেক

ঠিক আছে, যদি কার্যকর কার্যকর /lib/ld-linux.so.2না হয় (তা কি সম্ভব?)
লরেন্স

@ মাল্টাসাওব্ল্যাড এএফাইক, কেবলমাত্র এক্সিকিউটেবল .soগুলি লোড করা যায় এবং ld-linuxএটি এক ধরণের গুরুত্বপূর্ণ।
ড্যানিয়েল বেক

64-বিট উবুন্টুতে এটি হ'ল/lib64/ld-linux-x86-64.so.2
টোর ক্লিংবার্গ

1

কমপক্ষে, একইভাবে নয় way অজগর জিনিসটি করার সময় আপনি এখনও বাইনারি চালাচ্ছেন। পাইথনটি হল + এক্স। আপনাকে এমন কিছু সংকলন করতে হবে যা কোনও ফাইল লোড করে এটি কার্যকর করতে পারে।

টিআইসিএলকে তার উত্তরটি একটি উত্তর হিসাবে তৈরি করা উচিত কারণ এটি যাওয়ার সর্বোত্তম উপায়।


হ্যাঁ, আমি বুঝতে পারি "পাইথন" হ'ল বাইনারি। আমি যা আশা করছিলাম তা হ'ল "" এমন কিছু সংকলন করুন যা কোনও ফাইল লোড করে এটি কার্যকর করতে পারে "ইতিমধ্যে বিদ্যমান ...
টম

@ টম আপনি এমন সি প্রোগ্রাম পাবেন যা মেমোরিতে একটি বাইনারি পড়তে পারে এবং এটি সম্পাদন করতে পারে। যদিও পাইথন সি-উপায়ে এটি করার জন্য পর্যাপ্ত পর্যায়ে রয়েছে কিনা তা আমি জানি না।
new123456

0

execলিনাক্স কার্নেলের প্রাপ্ত syscall সঙ্গে ব্যর্থ EACCESফাইলটি এক্সিকিউটেবল নয়

আপনি যখন কাজটি করতে পারেন তেমন sh myprog.shপ্রোগ্রামটি চালানোর চেষ্টা করছেন যা ./myprog.shকাজ করতে পারে না, যেহেতু আপনি এটি করেন:

এটি দিয়ে যাচাই করা যেতে পারে main.c:

#define _XOPEN_SOURCE 700
#include <errno.h>
#include <stdio.h>
#include <unistd.h>

int main(void) {
    char *argv[] = {"myprog", NULL};
    char *envp[] = {NULL};
    int ret;
    ret = execve("myprog.sh", argv, envp);
    perror("execve");
    printf("%d\n", errno);
    printf("%d\n", EACCES);
}

এবং myprog.sh:

#!/bin/sh
echo worked

যদি myprog.shমৃত্যুদন্ড কার্যকর না হয় তবে এতে mainব্যর্থ হন:

execve: Permission denied
13
13

উবুন্টু 17.10, এ পরীক্ষিত gcc -std=c99

পজিক্স 7 উল্লেখ করেছে যে:

Fexecve () বাদে এক্সিকিউটিভ ফাংশনগুলি ব্যর্থ হবে যদি:

[EACCES] নতুন প্রক্রিয়া চিত্রের ফাইলের উপসর্গের তালিকাভুক্ত ডিরেক্টরিটির জন্য অনুসন্ধানের অনুমতি অস্বীকার করা হয়েছে, বা নতুন প্রক্রিয়া চিত্র ফাইলটি কার্যকর করার অনুমতি অস্বীকার করে।

আরও যুক্তি এখানে পাওয়া যাবে: /security/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats-the

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.