root va sudo — imtiyozlar qanday ishlaydi

~10 daq · Linux · Foydalanuvchilar va ruxsatlar

Muammodan boshlaylik

apt install nginx
E: Could not open lock file /var/lib/dpkg/lock-frontend - open (13: Permission denied)
E: Unable to acquire the dpkg frontend lock, are you root?

"Are you root?" — dastur o'rnatish, tizim sozlamalarini o'zgartirish, xizmatlarni boshqarish oddiy foydalanuvchiga ruxsat etilmagan. Buning uchun root huquqi kerak. Lekin doimo root sifatida ishlash — juda xavfli. Yechim — sudo.


root — "xudo" foydalanuvchi

root (UID 0) — Linux da cheksiz huquqli foydalanuvchi:

  • Istalgan faylni o'qish, o'zgartirish, o'chirish
  • Istalgan jarayonni to'xtatish
  • Tizimni butunlay buzish — ogohlantirishsiz
rm -rf /etc        # oddiy foydalanuvchi: Permission denied
                   # root: ... tizim endi yuklanmaydi

root uchun "Permission denied" yo'q. Shuning uchun root sifatida doimiy ishlash — o'qlangan qurol bilan yurish kabi.


sudo — vaqtincha root bo'lish

sudo ("superuser do") — bitta buyruqni root huquqi bilan bajarish:

sudo apt install nginx
[sudo] password for otabek:

O'z parolingizni kiriting (root ning emas). Keyingi ~15 daqiqa davomida qayta so'ramaydi.

Qolgan hamma narsa — oddiy foydalanuvchi sifatida. Faqat haqiqatan kerak bo'lgan joyda — sudo.

Kim sudo ishlata oladi?

Ubuntu da — sudo guruhi a'zolari (Debian/Fedora da ba'zan wheel):

groups                          # sudo bormi?
sudo usermod -aG sudo malika    # malikaga ruxsat berish

Ruxsatsiz urinish:

malika is not in the sudoers file. This incident will be reported.

Foydali sudo shakllari

sudo !!                     # oxirgi buyruqni sudo bilan takrorlash
sudo -i                     # root sessiyasini ochish (prompt # bo'ladi)
sudo -u www-data ls /var/www    # boshqa foydalanuvchi nomidan
sudo -l                     # menga nima ruxsat etilgan
sudo -k                     # parol keshini tozalash

sudo -i — ketma-ket ko'p administrator buyrug'i kerak bo'lganda. Ishingiz tugashi bilan — exit.

[!WARNING] Prompt # bo'lsa — siz root siz. Har bir buyruqni ikki marta o'ylab yozing. Ish tugagach darhol exit.


sudo va yo'naltirish

13-darsda ko'rgan muhim tuzoq:

sudo echo "nameserver 8.8.8.8" > /etc/resolv.conf     # ❌ Permission denied

sudo faqat echo ga tegishli. > ni sizning oddiy shell ingiz bajaradi. To'g'ri usullar:

echo "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf       # ustidan yozish
echo "127.0.0.1 dokon.local" | sudo tee -a /etc/hosts       # oxiriga qo'shish
sudo sh -c 'echo "..." >> /etc/hosts'                       # butun buyruq root bilan

sudoers — kimga nima ruxsat

sudo sozlamalari — /etc/sudoers. Uni hech qachon to'g'ridan-to'g'ri tahrirlamang:

sudo visudo

visudo saqlashdan oldin sintaksisni tekshiradi. Xato qilsangiz va oddiy muharrirda saqlasangiz — sudo butunlay ishlamay qoladi va uni tuzatish uchun ham sudo kerak bo'ladi.

Qo'shimcha qoidalar uchun — alohida fayl yaxshiroq:

sudo visudo -f /etc/sudoers.d/deploy
# deploy foydalanuvchisi faqat dokon xizmatini qayta ishga tushira oladi, parolsiz
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart dokon

Bu CI/CD uchun juda foydali (avtomatik deploy parol kirita olmaydi) — lekin to'liq NOPASSWD: ALL emas, faqat aniq buyruq.

Qoida tuzilishi:

kim  qayerda=(kim_sifatida)  buyruqlar
%sudo  ALL=(ALL:ALL)  ALL          ← sudo guruhiga hamma narsa

sudo loglari

Har bir sudo buyrug'i yoziladi:

sudo grep sudo /var/log/auth.log | tail
journalctl _COMM=sudo | tail       # (26-dars)
Nov 06 14:23:01 server sudo: otabek : TTY=pts/0 ; PWD=/home/otabek ; USER=root ; COMMAND=/usr/bin/apt install nginx

Kim, qachon, qayerdan, qanday buyruq — hammasi qayd etiladi. root sifatida ishlaganda esa bunday aniq tarix yo'q.


root ga to'g'ridan-to'g'ri kirish

Ubuntu da root paroli standart holatda o'rnatilmagan — root sifatida kirib bo'lmaydi, faqat sudo orqali. Bu ataylab qilingan.

VPS lar esa ko'pincha root login bilan beriladi. Birinchi ish (42-dars):

  1. Oddiy foydalanuvchi yaratish va sudo ga qo'shish
  2. SSH da root kirishini o'chirish (PermitRootLogin no)

Nima uchun shunday?

Nima uchun sudo bor — administrator shunchaki root sifatida kirib ishlasa bo'lmaydimi?

Uch sabab. Xatolardan himoya: oddiy foydalanuvchi sifatida ishlaganda xato buyruq (rm -rf noto'g'ri papkada) faqat sizning fayllaringizga zarar yetkazadi; sudo esa har bir xavfli harakatni ongli qaror qiladi. Javobgarlik: jamoada hamma root bo'lsa, kim nima qilgani noma'lum; sudo har bir buyruqni ism bilan yozadi. Nozik ruxsatlar: sudoers orqali kimgadir faqat bitta buyruqni ruxsat berish mumkin — to'liq root paroli bermasdan. Bu — eng kam imtiyoz tamoyilining amaldagi ko'rinishi.


Xulosa

Eslab qoling:

  • root (UID 0) — cheksiz huquq, ogohlantirishsiz
  • sudo buyruq — bitta buyruqni root bilan; o'z parolingiz
  • sudo guruhi — kimlar sudo ishlata oladi
  • sudo !!, sudo -i (root sessiya — exit ni unutmang), sudo -u
  • echo ... | sudo tee fayl — himoyalangan faylga yozish
  • /etc/sudoers — faqat visudo orqali; qo'shimchalar — /etc/sudoers.d/
  • NOPASSWD — faqat aniq buyruqlar uchun
  • Har bir sudo — /var/log/auth.log da

Keyingi dars

20-dars: Ruxsatlar — rwx, chmod, raqamli yozuv (755, 644)