පහත දැක්වෙන්නේ ඔබට මුරපදයකින් තොරව විධානයක් ක්රියාත්මක කිරීමට අවශ්ය අවස්ථාව සඳහා නිශ්චිත විකල්ප සමූහයක් තිබේ නම් පමණි, එහිදී විකල්පයන්ගෙන් කොටසක් විචල්ය වේ. AFAIK sudoers ප්රකාශ වල විචල්යයන් හෝ අගය පරාසයන් භාවිතා කළ නොහැක, එනම් ඔබට පැහැදිලිවම ප්රවේශ වීමට ඉඩ දිය හැකි command option1
නමුත් command option2
භාවිතා නොකෙරේ :
user_name ALL=(root) /usr/bin/command option1
නමුත් මෙම ව්යුහය නම් command option1 value1
, එහිදී value1
වෙනස් විය හැක, ඔබ එක් එක් හැකි වටිනාකම සඳහා පැහැදිලි sudoers රේඛා තිබිය යුතු බව value1
. ෂෙල් ස්ක්රිප්ට් එය වටා මගක් සපයයි.
මෙම පිළිතුර එම්. අහමඩ් සාෆර්ගේ පිළිතුරෙන් ආනුභාව ලත් අතර එහි ආරක්ෂක ගැටළුව විසඳයි.
- ඔබ නොමැතිව විධානය අමතන තැන ෂෙල් ස්ක්රිප්ට් එකක් සාදන්න
sudo
.
- ස්ක්රිප්ට් එක root-වරප්රසාදිත ෆෝල්ඩරයක සුරකින්න (උදා
/usr/local/bin/
), ගොනුව root සතු (උදා chown root:wheel /usr/local/bin/script_name
) වෙනත් අයට ලිවීමේ ප්රවේශයක් නොමැතිව කරන්න (උදා chmod 755 /usr/local/bin/script_name
).
Visudo භාවිතා කරමින් sudoers සඳහා ව්යතිරේකය එක් කරන්න:
user_name ALL=(root) NOPASSWD: /usr/local/bin/script_name
.
ඔබගේ ස්ක්රිප්ට් ධාවනය කරන්න sudo script_name
.
උදාහරණයක් ලෙස, මට මැකෝස් හි දර්ශන නින්දේ වේලාව වෙනස් කිරීමට අවශ්යයි. මෙය සිදු කරන්නේ:
sudo pmset displaysleep time_in_minutes
මුරපද ටයිප් කිරීමේ කරදරය යුක්තිසහගත නොකරන අහිංසක ක්රියාවක් නින්දේ වේලාව වෙනස් කිරීම ගැන මම සලකා බලමි, නමුත් pmset
බොහෝ දේ කළ හැකි අතර මෙම වෙනත් දේවල් සුඩෝ මුරපදය පිටුපස තබා ගැනීමට මම කැමතියි.
එබැවින් මට පහත පිටපත ඇත /usr/local/bin/ds
:
#!/bin/bash
if [ $# -eq 0 ]; then
echo 'To set displaysleep time, run "sudo ds [sleep_time_in_minutes]"'
else
if [[ $1 =~ ^([0-9]|[1-9][0-9]|1[0-7][0-9]|180)$ ]]; then
pmset displaysleep $1
else
echo 'Time must be 0..180, where 0 = never, 1..180 = number of minutes'
fi
fi
sudoers
ගොනුව අවසානයේ මට පහත පේළිය ඇත:
user_name ALL=(root) NOPASSWD: /usr/local/bin/ds
කල් ඉකුත්වීම මිනිත්තු 3 කින් සැකසීමට, මම මගේ ස්ක්රිප්ට් එක සාමාන්ය පරිශීලක ගිණුමෙන් ධාවනය කරමි user_name
:
sudo ds 3
PS මගේ බොහෝ ස්ක්රිප්ට් ආදාන වලංගු කිරීම අනිවාර්ය නොවේ, එබැවින් පහත සඳහන් දෑ ද ක්රියාත්මක වේ:
#!/bin/bash
pmset displaysleep $1
/path/to/my/program
පයිතන් පිටපතක් නම් මෙය තවමත් ක්රියාත්මක වේද?