| طریقه استفاده از sudo |
|
|
| نویسنده مونا شکیباپور | ||||||||
| ۱۸ مهر ۱۳۸۷ | ||||||||
|
استفاده از حساب root1 براي استفاده كاري روزمره، ايده بدي است. بهتر است وقتي نياز به كمي مديريت سيستمي2 داريد از sudo براي عمل كردن به عنوان root استفاده كنيد. كن هس چگونگي اين كار را به شما نشان ميدهد. سيستم لينوكس دو نوع كاربر دارد:كاربران معمولي و كاربر root3 . هر كاربر معمولي داراي يك مجموعه قدرتمند4 از مجوزها براي مديريت فايلهايش است (و فايلهايي كه به گروهي كه در آن عضويت دارد متعلق است)، ولي يك كاربر معمولي نميتواند روي پيكربندي سيستم5، سرويسهاي ضروري شروع و توقف مثل SSH daemon اثر بگذارد، و نميتواند يك پورت privileged يا هر پورت شبكهاي كه كمتر از 1024 باشد، را نگه دارد. كاربر root مجاز به دسترسي و تغيير هر فايلي، انجام هر عملي، و اثرگذاري روي سيستم به هر نحوي كه ميخواهد، است. البته همانطور كه مرد عنكبوتي ميگويد،" قدرت، مسئوليت ميآورد. " root بايد هوشيار6 باشد زيرا يك اشتباه7 كوچك ممكن است باعث فاجعه شود. براي مثال، اختلاف فاحشي بين دستور rm -rf /a و rm -rf / است. با دادن پتانسيل اينچنين دگرگونيهاي عمده غيرمترقبه، بهترين رويه اين است كه هرگز با كابر root براي ورود به سيستم8 استفاده نكنيد تا مبادا شما قدرتي كه را كه داريد بد هدايت نكنيد يا فراموش نكنيد. در حقيقت، بسياري از توزيعهايLinux 9 ، از ورود به صورت root جلوگيري ميكنند و درعوض به كاربر ابتدايي در مواقع لزوم، امتياز و حق عمليات مثل root را ميدهد. اين مزيت كه ميتواند به ساير كاربران سيستم گسترش يابد از طريق برنامه sudo مديريت ميشود. Sudo افرادي كه به صورت root عمل ميكنند را كنترل ميكند و ميتواند روي نوع كاربري كه ميتواند به صورت root عمل كند نيز كنترل بيشتري داشته باشد. وقتي يك كار نيازمند مجوزهاي root باشد، و با فرض اينكه كاربر حق انجام عمل دم دست به عنوان root را دارد، كاربر به سادگي دستور را با sudo آغاز ميكند. براي مثال، بگوييد دايركتوري /tmp با تودههايي از فايلهاي موقتي توسط تعداد بيشماري از كاربران ايجاد شده است. هنگامي كه هر كاربر ميتواند فقط فايلهاي موقتي خودش را پاك كند، يك كاربر با حق اجراي rm به عنوان root(همانطور كه در sudo گفته شده است) ميتواند تمام دايركتوري را با يك دستور حذف كند: $ whoami khess $ sudo rm -rf /tmp/* كاربر با نام khess داراي حقوق محدود است. هرچند، آغاز كردن دستور با sudo، دستور را به گونهاي فراخواني ميكند مثل اينكه كاربر root بوده است. شما هنوز ميتوانيد يا اشتباه كنيد يا تمام /tmp را پاك كنيد، ولي sudo استفاده از مجوزهاي root را حداقل ميكند و از اين رو ريسك كاهش مييابد. من را su كن sudo يك نسخه خاص از برنامه كاربردي قديمي به نام su است كه مختصر شده " substitute user" است. su به كاربر اجازه ميدهد به طور موقت به عنوان كاربر ديگري عمل كند. به ويژه، su يك پوسته10 با ID هاي كاربر و گروه جايگزين اجرا ميكند. هر كاربر ممكن است /bin/su را صادر كند11 و به حساب هر كاربر ديگري، حتي root، اگر كلمه عبور كاربر جايگزين معلوم باشد، جابجا شود. $ whoami khess $ su - bob Password: $ whoami bob$ exit $ whoami Khess su همچنين ميتواند براي root شدن استفاده شود همانطور ميتواند براي bob شدن استفاده شود. $ su - با فرض اين كه شما كلمه عبور root را ميدانيد،- su (نام كاربري حذف شده است) ID كاربري و گروهي شما را به root تغيير ميدهد. Password: هرچند، انتشار كلمه عبور root توصيه نميشود زيرا ريسك امنيتي جدي را مطرح ميكند. اگر كلمه عبور به دست يك ناراضي بيفتد، سيستم(يا بسياري از سيستمها) ممكن است به خطر بيفتند. براي بالا بردن امنيت su، در مجوزهاي /bin/su براي فراهم كردن امكان دسترسي براي root و گروه admin، تغيير ايجاد كنيد: # chgrp admin /bin/su دراينجا، مجوزهاي خواندني و اجرايي براي "سايرين" لغو شده است، و مالك گروه تغيير يافته است تا دسترسي را به اعضاي گروه adminمحدود كند. اين تنظيم، براي يك سيستم چند كاربره توصيه شده است.# chmod o-rwx /bin/su # ls -l /bin/su r-sr-x--- root admin ' براي چه كسي شما sudo را انجام ميدهيد؟ با وجود اينكه su محدود است، استفاده از آن هنوز نيازمند داشتن كلمه عبور root است. كلمه عبور آشكار، داراي ريسك است، و تغيير متناوب كلمه عبوري root ممكن است باعث بروز مسائلي شود زيرا يادآوري كلمات عبوري ، به ويژه كه خوب رمز شده باشد، دشوار است. sudo براي حل اين دو موضوع و موضوعاتي ديگر به وجود آمده است. sudo كسي كه ميتواند root شود و آنچه كاربران ميتوانند به عنوان root اجرا كنند را فهرست ميكند. فهرست در /etc/sudoers نگهداري ميشود. به منظور مشخص كردن اينكه آيا شما مزاياي sudo را داريد، دستور sudo -l را اجرا كنيد. $ sudo -l در اينجا، بايد كلمه عبور خود را وارد كنيد تا خودتان را تآييد كنيد، و از سو استفاده افراد از مجوزهاي خود جلوگيري كنيد.اگر شما دسترسي sudoنداريد، پيامي مشابه با اين پيام دريافت خواهيد كرد:Password: Sorry, user fred may not run sudo on this host درغيراين صورت، sudo ليستي از دستورات را نمايش ميدهد كه شما مجوز اجراي آنها را داريد: fred $ sudo -l Password: User fred may run the following commands on this host: (root) /usr/local/bin/apachectl همانطور كه ميتوانيد مشاهده كنيد fred ميتواند Apache HTTP Server daemon را از طريق apachectl به عنوان root كنترل كند. بعد از فراخواني sudo و تهيه كلمه عبور، sudo "بليطي" كه براي دسترسي پنج دقيقهاي مناسب است فراهم ميكند. درحين اين پنج دقيقه، لازم نيست دوباره كلمه عبورتان را ارائه دهيد تا دستورات اضافه تري را از طريق sudo اجرا كنيد. درحقيقت، هر دستوري كه در اين پنج دقيقه اجرا ميكنيد پنجره پنج دقيقه را تمديد ميكند. هرچند، اگر شما در اين پنج دقيقه دستوري با استفاده از sudo ارسال نكنيد، بليط منقضي ميشود و شما بايد دوباره معتبر شويد و دوباره از sudo استفاده كنيد. يك مدت زمان سايرين را از ربودن مجوزهاي شما هنگامي كه براي ناهار بيرون رفتهايد يا به دلايل ديگر از كامپيوتر دور هستيد، پيش گيري ميكند. اين مثالي از يك سري دستورات sudo براي كپي و ويرايش يك فايل و راهاندازي مجدد Apache است: $ sudo cp -p index.html index.html.20070511 شما بايد قبل از هر دستوري sudo را بياوريد. اگر قبل از هر دستوري sudo را نياوريد ، سيستم فرض ميكند شما دستور را به عنوان خودتان اجرا ميكنيد13. Password: $ sudo vi index.html $ sudo apachectl restart چگونه sudo را انجام ميدهيد؟ همانطور كه در بالا نشان داده شد، sudo لازم نيست كه كليد جعبه پاندورا باشد. يك كاربر ميتواند محدود به استفاده از يك مجموعه از دستورات شود. براي مثال fred ميتواند Apacheرا از طريق apachectl متوقف، راهاندازي و دوباره راهاندازي14 كند، ولي نميتواند rm يا vi را اجرا كند. براي ويرايش كردن فهرست sudo ، /etc/sudoers شما مي توانيد از يك ويرايشگر ويژه با نام visudo استفاده كنيد. فهرست تا حدي داراي فرمت پيچيده و خاص است. ليست زير ، مثالي از فايل sudoers است. ليست يك: مثالي از فايل /etc/sudoers # User privilege specification root ALL=(ALL) ALL %admin ALL=(ALL) ALL strike ALL=(ALL) NOPASSWD:ALL # Uncomment to allow people in group wheel to run all commands %wheel ALL=(ALL) ALL * اولين فيلد هم يك نام كاربري، مثل strike ، و هم نام گروه، مثل %admin يا wheel است. * دومين فيلد ليستي از ميزبانان را مشخص ميكند.(از آنجايي كه همان فايل sudoers ممكن است روي تمام ماشينهاي شبكه براي هماهنگي كپي شده باشد، شما ممكن است اجازه مزاياي مختلف را روي ميزبانهاي مختلف بدهيد. ) مخفف ALL با هر hostname مطابقت ميكند. * سومين فيلد(در داخل پرانتز بعد از =) نام هاي كاربري يا ID ها به شمار ميآيد. يك دستور ميتواند به عنوان هر كدام از كاربران ليست شده اجرا شود كه هنگامي كه نياز به متوقف، راهاندازي و دوباره راهاندازي يا حذف كردن يك پروسه كه تحت مالكيت root نباشد داشته باشيد، مفيد واقع مي شود. (البته شما هر پروسه اي را ميتوانيد به عنوان root متوقف كنيد، ولي ممكن است نخواهيد تا هر پروسهاي را عنوان root با داشتن مجوزهاي يك سرويس root آغاز كنيد. ) دوباره، ALL با هر كاربري مطابقت ميكند. * چهارمين فيلد دستوراتي را كه ميتوانند اجرا شوند را ليست ميكند. يا به طور سادهتر، فيلدها به اين صورت هستند: Username Hosts=(Usernames or UIDs)) Commands وروديهاي چندگانه را براي هركدام از فيلدهاي بعدي با كاما از هم جدا كنيد. (براي جزئيات بيشتر به صفحه sudoers man مراجعه كنيد.)از اين رو، اين مشخصات مجوز كاربري root ALL=(ALL) ALL به كاربر root اجازه ميدهد تمام دستورات روي تمام ميزبانها را مثل هر كاربر ديگري اجرا كند. به طور مشابه، اگر شما fred باشيد و از يك سيستم desktop Linux استفاده كنيد، /etc/sudoers احتمالاً محتوي ورودي اي مشابه اين است:fred ALL=(ALL) ALL كه توسط sudo، -l منعكس ميشود:$ sudo -l براي اجراي دستور به عنوان كاربري غير از root (با اين فرض كه sudoers آن را اجازه ميدهد)، انتخاب -u را استفاده كنيد:Password: User fred may run the following commands on this host: (ALL) ALL $ sudo -u nobody /etc/init.d/some_service restart اين بعضي از سرويسها را به عنوان كاربر nobody دوباره راهاندازي ميكند. براي ارسال بيش از يك دستور به كاربر ديگر، بايد از سوييچ هر زمان كه sudo فراخواني ميشود استفاده كرد. اگر -u را حذف كنيد،كاربر root در نظر ميشود.Sudo’s and Sudon’ts در اينجا ليستي از چيزهايي كه هنگامي كه sudo را تنظيم و مورد استفاده قرار ميدهيد، بايد انجام يا اجتناب شود آمده است. انجام دهيد:* مسير كامل تمام دستورات را براي aliases و دستورات تكي مشخص كنيد. * از aliases براي ميزبانها، گروهها، و دستورات استفاده كنيد.(صفحه man را براي ايجاد aliases مشاهده كنيد.) * از اصل "حداقل مجوزها" استفاده كنيد: تنها آن مجوزي را مسلم بگيريد كه لازم است نه بيشتر، و صريح باشيد. * فايلهاي log /var/log/auth.log يا /var/log/secure را اغلب براي استفاده sudo و تخلفات چك كنيد. انجام ندهيد: * سعي نكنيد دستورات را از ALL جدا كنيد.(دوباره از aliases استفاده كنيد.) * هرگز را با اعطا ALL=(ALL) ALL به هركسي موافقت نكنيد. * NOPASSWD را براي كاربران عادي تعيين نكنيد. NOPASSWD به كاربر اجازه ميدهد تا بدون تعيين اعتبار كلمه عبور از sudo استفاده كند. You Think You’re Foolin’? مسائل زيادي با استفاده از sudo حل ميشود. بهترين آنها، اين است كه مجبور نيستيد كلمه عبور root را به هر كسي غير از administrator ها يا مالك سيستم بدهيد. استفاده هوشمندانه از sudo مي تواند استفاده با مجوز بالا را روي يك سيستم پيگيري كند. هرچند، اگر به كاربران امكان دسترسي زيادي بدهيد، sudoميتواند باعث سوء استفاده شود. براي مثال، اگر به يك كاربر اجازه دهيد به ALL دسترسي داشته باشد، كاربر ميتواند به طور دائم با استفاده از دستور sudo su - يا sudo /bin/bash root شود(تا زمانlogin بعدي شان). پيادهسازي سياستهاي sudo بايد داري يك طرح خوب فكرشده باشد. Sudo هم مي تواند . منبع: Linux Magazine پانوشتها: 2 system administration 3 root user 4 robust 5 system configuration 6 cautious 7 typo 8 log in 9 Linux distributions 10 shell 11 issue 12 restore 13 issue 14 restart بازدید: 857
|
||||||||
| آخرین بروز رسانی ( ۰۲ آذر ۱۳۸۷ ) | ||||||||
| <قبل | بعد> |
|---|
| صفحه اصلی |
| اخبار |
| مقالات |
| جستجوی پیشرفته |
| یزدلاگ در رسانه |
| تازه کاران |
| مدیریت |