সেই কোডটিতে কোনও শব্দের বিভাজন নেই (সেই বৈশিষ্ট্যে যা অব্যক্ত বিস্তৃতিতে ভেরিয়েবলগুলি বিভক্ত হয়) যেমনটি $myvar
উদ্ধৃত হয়নি।
একটি কমান্ড ইনজেকশন দুর্বলতা যেমন $myvar
পাস করার আগে প্রসারিত হয় bash
। সুতরাং এর বিষয়বস্তু ব্যাশ কোড হিসাবে ব্যাখ্যা করা হয়!
সেখানে থাকা স্পেসগুলি শব্দের বিভক্তিরcd
কারণে নয় , তবে শেল বাক্য গঠনতে বিভিন্ন টোকেন হিসাবে বিভক্ত হবে বলে একাধিক যুক্তি পাঠিয়ে দেবে। এর মান সহ bye;reboot
, এটি পুনরায় চালু হবে! ¹
এখানে, আপনি চান:
sudo bash -c 'cd -P -- "$1"' bash "$myvar"
(যেখানে আপনি বিষয়বস্তু পাস $myvar
যে ইনলাইন স্ক্রিপ্ট প্রথম আর্গুমেন্ট হিসেবে; নোট কিভাবে উভয় $myvar
এবং $1
আটকান IFS-শব্দ-বিভাজন (এবং globbing) এর নিজ নিজ শেল জন্য উদ্ধৃত করা হয়েছে)।
বা:
sudo MYVAR="$myvar" bash -c 'cd -P -- "$MYVAR"'
(যেখানে আপনি $myvar
পরিবেশের পরিবর্তনশীলের বিষয়বস্তুগুলি পাস করেন )।
অবশ্যই আপনি চালিয়ে দরকারী কিছু অর্জন করা হবে না শুধুমাত্র cd
যে ইনলাইন লিপিতে (কিনা চেক ছাড়া অন্য root
করতে পারেন cd
সেখানে প্রবেশ)। সম্ভবত, আপনি সেই স্ক্রিপ্টটি cd
সেখানে চান এবং তারপরে সেখানে অন্য কিছু করুন:
sudo bash -c 'cd -P -- "$1" && do-something' bash "$myvar"
যদি অন্যথায় আপনার অ্যাক্সেস না থাকে এমন কোনও ডিরেক্টরিতে sudo
সক্ষম হওয়ার উদ্দেশ্যে যদি উদ্দেশ্যটি হয় cd
তবে তা সত্যিই কাজ করতে পারে না।
sudo sh -c 'cd -P -- "$1" && exec bash' sh "$myvar"
bash
এর বর্তমান ডিরেক্টরিতে একটি ইন্টারেক্টিভ শুরু করবে $myvar
। কিন্তু যে শেল হিসাবে চলমান হবে root
।
আপনি করতে পারেন:
sudo sh -c 'cd -P -- "$1" && exec sudo -u "$SUDO_USER" bash' sh "$myvar"
bash
বর্তমান ডিরেক্টরিটি থাকার সাথে একটি অনিচ্ছাকৃত ইন্টারেক্টিভ পেতে $myvar
, তবে যদি আপনাকে cd
প্রথমে সেই ডিরেক্টরিটিতে প্রবেশের অনুমতি না থাকে তবে আপনি যদি বর্তমান ডিরেক্টরিটি তৈরি করেন তখনও আপনি সেই ডিরেক্টরিতে কিছু করতে সক্ষম হবেন না।
$ myvar=/var/spool/cron/crontabs
$ sudo sh -c 'cd -P -- "$1" && exec sudo -u "$SUDO_USER" bash' sh "$myvar"
bash-4.4$ ls
ls: cannot open directory '.': Permission denied
একটি ব্যতিক্রম হ'ল যদি আপনার নিজেরাই ডিরেক্টরিতে অনুসন্ধানের অনুমতি পেয়ে থাকেন তবে এর পথের ডিরেক্টরিগুলির একটিতে না থেকে:
$ myvar=1/2
$ mkdir -p "$myvar"
$ chmod 0 1
$ cd 1/2
cd: permission denied: 1/2
$ sudo sh -c 'cd -P -- "$1" && exec sudo -u "$SUDO_USER" bash' sh "$myvar"
bash-4.4$ pwd
/home/stephane/1/2
bash-4.4$ mkdir 3
bash-4.4$ ls
3
bash-4.4$ cd "$PWD"
bash: cd: /home/stephane/1/2: Permission denied
¹ কড়া কথায় বলতে গেলে (আক্ষরিক) $myvar
মতো মানের জন্য শেল $(seq 10)
দ্বারা এই কমান্ডের প্রতিস্থাপনের প্রসার ঘটলে শব্দ বিভাজন অবশ্যই হবেbash
root
cd
ভিতরেই কেবল প্রভাব রয়েছেbash -c
।