কোনও স্ক্রিপ্ট কার্যকর হতে পারে তবে পাঠযোগ্য নয়?


65

কোনও স্ক্রিপ্টটি পড়ার অনুমতি না থাকলে কি এটি সম্পাদন করা সম্ভব? রুট মোডে, আমি একটি স্ক্রিপ্ট তৈরি করেছি এবং আমি চাই যে অন্য ব্যবহারকারী এই স্ক্রিপ্টটি কার্যকর করুন তবে এটি পড়বেন না। আমি chmodপড়তে ও লিখতে নিষেধ করেছি কিন্তু মৃত্যুদণ্ড কার্যকর করতে দিয়েছিলাম, তবে ব্যবহারকারী মোডে, আমি বার্তাটি দেখেছি যা বলে: অনুমতি অস্বীকার করেছে।


উত্তর:


68

সমস্যাটি হল এই যে স্ক্রিপ্ট কি চলতে থাকে, কিন্তু ব্যাখ্যাকারী (হয় bash, perl, python, ইত্যাদি)। এবং দোভাষীর স্ক্রিপ্টটি পড়া দরকার। এটি একটি "নিয়মিত" প্রোগ্রামের থেকে পৃথক, যেমন ls, প্রোগ্রামটি সরাসরি কার্নেলের মধ্যে বোঝানো হয়, দোভাষী হিসাবে would যেহেতু কার্নেল নিজেই প্রোগ্রাম ফাইলটি পড়ছে, তাই পড়ার অ্যাক্সেস নিয়ে চিন্তা করার দরকার নেই। দোভাষীকে স্ক্রিপ্ট ফাইলটি পড়তে হবে, কারণ সাধারণ ফাইলটি পড়তে হবে।


2
হ্যাঁ তবে তার ক্ষেত্রে কি কোনও সমাধান আছে?
অলিভিয়ার পন্স

13
একটি সম্ভাবনা হ'ল একটি সাধারণ সি প্রোগ্রাম থাকতে পারে যা স্ক্রিপ্টটি এম্বেড করে এবং দোভাষীকে স্পষ্টভাবে কল করে। এসি প্রোগ্রাম কার্যকর করার জন্য পড়ার অনুমতি থাকা দরকার না।
আর্জেজ

1
কড়াভাবে বলতে গেলে, কার্নেল এই ক্ষেত্রে কোনও বৈষম্য করে না এবং এটি বাস্তবে শেলটি চালায় (এক্সিকিউটেবল ফাইলটি বাইনারি ছিল এমনভাবে)। তবে শেল নিজেই তত্ক্ষণাত ক্রাশ হয়ে যাবে কারণ এটি ইনপুট ফাইল (স্ক্রিপ্ট ফাইল সামগ্রী) পড়তে পারে না।
জোজেফ

34

এটি কেবল বাইনারিদের পক্ষে সম্ভব is

$ chown foo:foo bar
$ chmod 701 bar

অনিবদ্ধ ব্যবহারকারী হিসাবে:

$ ls -lha bar
-rwx-----x 1 foo foo 7.0K 2012-03-15 03:06 bar

$ cat bar
cat: bar: Permission denied

$ ./bar
baz

এখন এখানে পদাঘাতকারী. প্রচলিত উপায়ে ফাইলটি অপঠনযোগ্য হলেও আপনি আসলে ফাইলটি পড়া আটকাতে পারবেন না। এটি আসলে http://smashthestack.org/ (স্তর 13) এ একটি চ্যালেঞ্জ । পরিচিত একটি ইউটিলিটি রয়েছে যা hktraceআপনাকে ফাইলটি ব্যবহার করে পড়তে দেয় ptrace


খুব আকর্ষণীয় (hktrace)।
fthinker

1
শেল স্ক্রিপ্টটি বাইনারি ফরম্যাটে রূপান্তর করা সম্ভব?
আশিম

4
আসলে, আপনি এটি প্রতিরোধ করতে পারেন, আমি মনে করি। বর্তমান লিনাক্স কার্নেল সংস্করণগুলি প্রক্রিয়াটিকে নন-ডাম্পেবল হিসাবে সেট করে, যার অর্থ কোনও সাধারণ ব্যবহারকারী আর এটি ব্যবহার করতে পারবেন না, যদি ব্যবহারকারীকে বাইনারি পড়ার অনুমতি না দেওয়া হয়।
thejh

6

এটি সম্ভব নয়, কমপক্ষে লিনাক্সে (অন্যান্য ইউনিয়নগুলি এটির অনুমতি দিতে পারে); এটি সম্পর্কে চিন্তা করুন, যখন আপনি স্ক্রিপ্টটি চালাবেন, শেলটি কী করা উচিত তা জানতে এটি পড়তে হবে।


3
এটা অবশ্যই সম্ভব; ওপেনবিএসডি কোনও স্ক্রিপ্ট পড়ার অনুমতি ছাড়াই কার্যকর করার অনুমতি দেয়। হুডের নীচে এটি দোভাষী ব্যবহার করার জন্য একটি নকল ফাইল বর্ণনাকারী তৈরি করে এটি করে।
এলিম্যান

@ এরাডম্যান আমি এটিকে (উদাহরণ, ব্যাখ্যা এবং আমার কয়েকটি মন্তব্য সহ) একটি উত্তরে রেখেছি ।
মশবী

3

আপনি করতে পারেন, আমি মনে করি, এটি দিয়ে এটি করতে পারেন setuid

এটি বাদ দিয়ে আপনি পারবেন না কারণ বেশিরভাগ ডিস্ট্রোস (দৃশ্যত) setuidঅক্ষম করেছেন কারণ এটি একটি বিশাল সুরক্ষা গর্ত। এটি আমার উপর অক্ষম, সুতরাং আমি আসলে জানি না যে এই উত্তরটি কার্যকর হবে, আমি যাইহোক এটি পোস্ট করছি কারণ আমার মনে হয় এটি করা উচিত

যাইহোক, আমি যদি আপনি যা করতে চান তা করতে চাইলে - এবং আমার setuidস্ক্রিপ্টগুলির জন্য সক্ষম একটি ডিসট্রো ছিল - আমি এই জাতীয় কিছু করব:

$ chmod 700 myscript
$ cat > myscript-nonroot
#!/bin/sh
bash myscript
^D
$ sudo chown root:root myscript-nonroot
$ sudo chmod 4755 myscript-nonroot # make SURE this isn't world-writable!

যার অর্থ হ'ল আমি অন্য স্ক্রিপ্ট লিখব যার একমাত্র উদ্দেশ্য হ'ল রুট-পঠনযোগ্য কেবল স্ক্রিপ্ট কল করা, এটিকে রুটের মালিকানাতে পরিবর্তন করা এবং সেটআপ করার অনুমতি দেওয়া। (অন্য সবার দ্বারা অ্যাটেন্ডেন্ট অ-লিখনযোগ্য স্থিতির পাশাপাশি))

যেহেতু ম্যাসক্রিপ্ট-ননরুট ফাংশন সবার দ্বারা পঠনযোগ্য তাই এটি পড়া এবং কার্যকর করা যেতে পারে, এবং আপনি যখন দুটি লাইন পেয়ে থাকেন যেখানে আপনি আসলে আপনার স্ক্রিপ্টটি কার্যকর করেন ( bash myscript) এটি রুট হিসাবে চালিত হচ্ছে (বা অন্য কেউ আপনি চান, সঠিক ব্যবহারকারী) যতক্ষণ না র্যাপার ফাইলটি একই ব্যবহারকারীর মালিকানাধীন থাকে))


4755 এর অর্থ কী? আমি এটিতে নতুন, তাই আমি এর অর্থ কী তা জানতে চাই। আমি 755 অংশ বুঝতে। ধন্যবাদ
কেভডোগ 777

2
4সেট setuid বিট। ম্যানপেজেজে chmod ম্যান পৃষ্ঠাতে মোডগুলি বিভাগটি দেখুন ।
quodlibetor

ঠিক আছে, আমি এখনও বেশ বুঝতে পারি না, তবে 755কিছুটা বুঝতে আমার কিছুটা সময় লেগেছিল।
কেভডোগ 777

হ্যাঁ, প্রকৃতপক্ষে chmod 7550775 অষ্টালের মতো। এটিকে ঘিরে অনেকগুলি বিভ্রান্তি রয়েছে .. এই পৃষ্ঠায় ( manpagez.com/man/1/chmod ) একটি অবাস্তব এবং আনইনডেড আনুভূমিক স্ক্রোল রয়েছে যা আমি বুঝতে পারি না ...
erm3nda

2

পূর্বের বিবৃতিগুলির অর্ধেক সত্য আছে। আপনি কোনও স্ক্রিপ্ট সেটআপ করতে পারেন যাতে এটি ব্যবহারকারীর দ্বারা পঠনযোগ্য না হয় তবে এখনও কার্যকর হয়। প্রক্রিয়াটি কিছুটা আঁকানো হয়েছে, তবে এটি / etc / sudoer এ ব্যতিক্রম করে কার্যকরযোগ্য যাতে ব্যবহারকারী কোনও পাসওয়ার্ডের জন্য অনুরোধ না করে অস্থায়ীভাবে স্ক্রিপ্টটি নিজের মতো চালাতে পারেন। এই পদ্ধতি: - অন্যান্য ডিস্ট্রোদের জন্য সেটুইড প্যাচটি পেতে পারে। - আপনাকে ব্যবহারকারীকে সমস্ত কিছুর অধিকার না দিয়ে নির্দিষ্ট স্ক্রিপ্টের জন্য অস্থায়ীভাবে উচ্চতর অনুমতি দেওয়ার অনুমতি দেয়।

এই পোস্টে নির্দেশ অনুসরণ করুন: ফাইল অনুমতি শুধুমাত্র কার্যকর


1

এই পরিস্থিতিতে আমি একটি NOPASSWD বিকল্পের সাথে সুডো ব্যবহার করেছি যাতে ব্যবহারকারীরা স্ক্রিপ্টটি না পড়তে পারা যায়।


0

এটি ওপেনবিএসডি-তে কাজ করে

ইতিমধ্যে @ ইরাদম্যানের একটি মন্তব্যে যেমনটি উল্লেখ করা হয়েছে , ওপেনবিএসডি তে এটি সম্ভব।

মূল হিসাবে:

hzy# cat <<'EOT' >/tmp/foo; chmod 001 /tmp/foo
#! /bin/sh
: this is secret
echo done
EOT

নিয়মিত ব্যবহারকারী হিসাবে:

hzy$ cat /tmp/foo
cat: /tmp/foo: Permission denied
hzy$ /tmp/foo
done

যে পাসিং করে কাজ করে /dev/fd/3ব্যাখ্যাকারী (বা যাই হোক না কেন স্ক্রিপ্ট খোলা FD যায়)। এই কৌশলটি লিনাক্সে কাজ করবে না , যেখানে /dev/fd/Nবিশেষ অক্ষরের ডিভাইস নেই dup(2)যা খোলার সাথে সাথে এফডির কোনও ফিরিয়ে দেয় না, তবে "ম্যাজিক" মূল ফাইল / ডেন্ট্রির সাথে যুক্ত হয়, যা স্ক্র্যাচ থেকে ফাইলটি খোলে [1] এটি ফ্রি / নেটবিএসডি বা সোলারিসে প্রয়োগ করা যেতে পারে ...

তবে এটি যা ফাটল তা নয়

মূলত x(সম্পাদন) অনুমোদনের অর্থ হ'ল rশেবাং রয়েছে এমন কোনও ফাইলের (পড়ার) অনুমতি প্রদান [2]:

hzy$ cat /tmp/foo
cat: /tmp/foo: Permission denied
hzy$ ktrace -ti /tmp/foo
done
hzy$ kdump | tail -n8
 70154 sh       GIO   fd 10 read 38 bytes
       "#! /bin/sh
        : this is secret
        echo done
       "
 70154 sh       GIO   fd 1 wrote 5 bytes
       "done

ktraceএকমাত্র উপায় নয়; যদি দোভাষী গতিসম্পন্নভাবে এক্সিকিউটেবলের মতো সংযুক্ত থাকে perlবা python, একটি LD_PRELOADএড হ্যাক যা read(2)ফাংশনটিকে ওভাররাইড করে তার পরিবর্তে ব্যবহার করা যেতে পারে।

এবং না, সেটআপ করে দেওয়া কোনও নিয়মিত ব্যবহারকারীকে এর সামগ্রী দেখতে বাধা দেয় না; তিনি কেবল এটির অধীনে চালাতে পারতেন ptrace(2), যার ফলে সেটুইড বিট উপেক্ষা করা হবে:

মূল হিসাবে:

hzyS# cat <<'EOT' >/tmp/bar; chmod 4001 /tmp/bar
#! /bin/sh
: this is secret
id
EOT

নিয়মিত ব্যবহারকারী হিসাবে:

hzyS$ ktrace -ti /tmp/bar
uid=1001(duns) euid=0(root) gid=1001(duns) groups=1001(duns)
hzyS$ kdump
    ... nothing, the kernel disabled the ktrace ...
hzyS$ cc -Wall -xc - -o pt <<'EOT'
#include <unistd.h>
#include <sys/types.h>
#include <sys/ptrace.h>
#include <sys/wait.h>
#include <signal.h>

int main(int ac, char **av){
        int s; pid_t pid;
        if((pid = fork()) == 0){
                ptrace(PT_TRACE_ME, 0, 0, 0);
                execvp(av[1], av + 1);
        }
        while(wait(&s) > 0 && WIFSTOPPED(s)){
                s = WSTOPSIG(s);
                ptrace(PT_CONTINUE, pid, (caddr_t)1, s == SIGTRAP ? 0 : s);
        }
}
EOT
hzyS$ ./pt ktrace -ti /tmp/bar
uid=1001(duns) gid=1001(duns) groups=1001(duns)
hzyS$ kdump | tail -5
 29543 sh       GIO   fd 10 read 31 bytes
       "#! /bin/sh
        : this is secret
        id
       "

(দুঃখিত, এটি প্রদর্শন করার জন্য এটি যদি সবচেয়ে সোজা উপায় না হয়)

[1] এটি ব্যবহার করে লিনাক্সে অনুকরণ করা যেতে পারে binfmt_misc, তবে দোভাষীকে সংশোধন করতে হবে, বা একটি মোড়ক ব্যবহার করতে হবে; ইচ্ছাকৃতভাবে হাস্যকরভাবে সুরক্ষিত করা একটি উদাহরণের জন্য এই উত্তরের শেষ অংশটি দেখুন ।

[2] বা সাধারণভাবে, কোনও ফাইল যার ফলে execve()ফেরত আসবে না ENOEXEC


-2

হ্যাঁ, আপনি যদি রুট ব্যবহারকারী হন তবে আপনি পড়ার অনুমতি ছাড়াই ফাইলটি কার্যকর করতে পারেন

# echo "echo hello" > test
# chmod 100 test
# ll test
---x------ 1 root root 10 Nov 29 12:13 test
# ./test
hello

তবে আপনি যদি অন্য কোনও ব্যবহারকারীর সাথে লগ ইন করেন তবে আপনি এই ফাইলটি কার্যকর করতে পারবেন না

$ ./test
-bash: ./test: Permission denied

3
এটি সত্যই প্রশ্নের উত্তর দেয় না, কারণ মূলটি অনুমতি ছাড়াই এমনকি ফাইলটি পড়তে পারে।
wjandrea

-5

আপনার স্ক্রিপ্টগুলি অপঠনযোগ্য এখনও এক্সিকিউটেবল করার জন্য আপনার কাছে 3 টি বড় বিকল্প রয়েছে:

প্রথম বিকল্প

এটি ম্যানুয়ালি এনক্রিপ্ট করতে ওপেনসেল কমান্ডটি ব্যবহার করুন। এবং ভবিষ্যতে, আপনি যখন স্ক্রিপ্টটি চালাতে চান, আপনাকে আবার ওপেনসেলটি ম্যানুয়ালি চালাতে হবে এবং ডিক্রিপ্টের জন্য পাসওয়ার্ড সরবরাহ করতে হবে।

ওপেনসেল সহ এনক্রিপশন:

বিড়াল thycript.sh | ওপেনসেল এসস -128-সিবিসি -a -সাল্ট-কে আপনার পাসওয়ার্ড> thycript.enc

ওপেনসেল দিয়ে ডিক্রিপশন:

বিড়াল thycript.enc | openssl aes-128-cbc -a -d -salt -k yourpassword> thycript.dec

thycript.dec আপনার মূল স্ক্রিপ্ট thycript.sh এর মতই হবে

দ্বিতীয় বিকল্প

আপনার স্ক্রিপ্টটি স্বয়ংক্রিয়ভাবে এনক্রিপ্ট করতে এবং স্ক্রিপ্টটির এনক্রিপ্ট করা সংস্করণটি কার্যকর করার জন্য www.Enscryption.com এর মতো সাইট ব্যবহার করুন । অনুপ্রবেশকারীদের আপনার স্ক্রিপ্টে প্রসেস করা বা আপনি যে গোপনীয় গোপনীয়তাগুলি প্রকাশ করতে চান তা উন্মোচন করতে এটি বেশ কঠিন করার জন্য এই সাইটটি ওপেনস্লেলের এনক্রিপশন ক্ষমতা এবং কিছু অন্যান্য অবলম্বন পদ্ধতি ব্যবহার করে। এই সাইটের সাহায্যে আপনি শেল স্ক্রিপ্টগুলি এবং কমান্ড লাইন পারল, পাইথন, রুবি স্ক্রিপ্টগুলি এনক্রিপ্ট করতে পারেন। আমি পিএইচপি পাশাপাশি মনে করি।

তৃতীয় বিকল্প

Shc এর মতো একটি সরঞ্জাম ব্যবহার করুন । দেখে মনে হচ্ছে এটি ২০১২ সাল থেকে আপডেট হয়নি but তবে আমি এটি অতীতে ব্যবহার করেছি। আপনি যে ওএসটি এটি ব্যবহার করতে চান তার জন্য আপনাকে আপনার স্ক্রিপ্টটি সংকলন করতে হবে, যদি ওএস আপনি এটি সংকলন করতে ব্যবহার করেন তার চেয়ে আলাদা হয়।

সারাংশ:

যদি আপনার কোডটি গোপন করা আপনার পক্ষে খুব গুরুত্বপূর্ণ, তবে কেবল অনুমতি এবং মালিকানার উপর নির্ভর করা আপনাকে সহায়তা করবে, মূল হিসাবে যে কেউ এটিকে পেতে পারে। এটা ঠিক একটি ঘটনা। আপনি কী করতে পারেন, যদি আপনি সত্যিই কারও দ্বারা আপনার কোডটি অননুমোদিত দেখার প্রতিরোধ করতে চান তবে ওপেনসেল কমান্ডের চারপাশে একটি স্ক্রিপ্ট লিখতে হবে। এটি তৈরি করুন যাতে স্ক্রিপ্টটি চলার আগে এটি একটি পাসওয়ার্ডের জন্য অনুরোধ জানাবে এবং পাসওয়ার্ড দেওয়ার পরে এটি কোনও অস্থায়ী ফাইলটিতে না লিখে স্ক্রিপ্টটি চালাবে। যদি এটি খুব বেশি কাজের মতো মনে হয় তবে আপনার উদ্দেশ্যে 2 এবং 3 বিকল্পগুলি পর্যাপ্ত হওয়া উচিত।


"Shc" লিঙ্কটি পূর্বের এক পৃষ্ঠায়ও নির্দেশ করে। আপনি কি এই পৃষ্ঠা / পরিষেবার সাথে যুক্ত কোনও সুযোগেই আছেন?
পিএইচকে

3
আপনি যদি আপনার স্ক্রিপ্টটি সাইফার করেন তবে এটি কী ছাড়াই চলতে সক্ষম হবে না। আপনি যদি এটি চালানোর জন্য কোনও ব্যবহারকারীর কাছে কীটি প্রেরণ করেন তবে এটির সামগ্রীটি দেখতে সক্ষম হবেন। এই anwers এত বোকা ...
erm3nda
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.