FreeBSD гарын авлага
Өмнөх | Бүлэг 3. Юниксийн үндэс | Дараах

# 3.3. Зөвшөөрлүүд

FreeBSD нь BSD UNIX®-ээс уламжилж байх үедээ, UNIX-н үндсэн хэдэн бүтэц дээр суурилсан. Эхний бөгөөд хамгийн чухал тунхаглал нь FreeBSD бол олон хэрэглэгчийн үйлдлийн систем юм. Систем нь олон хэрэглэгчийн хоорондоо хамааралгүй олон үйлдлийг ачаалж чаддаг. Хэрэглэгч болгонд шаардагдах компьютерийн төхөөрөмж, санах ой мөн процессорын давтамжийг зөв шударга хуваарилахыг систем хариуцдаг.

Систем олон хэрэглэгчтэй ажиллах болохоор, системийн хийх ёстой зүйл нь хэн тухайн нөөцийг унших, бичих, гүйцэтгэх вэ гэдгийг зохицуулах юм. Эдгээр зөвшөөрлүүд нь гурав гурваараа нийлүүлэгдсэн гурван хэсэг тоо байдаг. Нэг нь файлын эзэмшигчид, нөгөөх нь файлын хамаарагддаг бүлэгт, үлдсэн нь хүн болгонд гэж хуваарилагдана. Энэ тоон дараалал нь дараах маягаар ажилладаг.:

Утга | Зөвшөөрөл | Жагсаах харуулалт
--- | --- | ---
0 | Уншигдахгүй, бичигдэхгүй, гүйцэтгэгдэхгүй | `---`
1 | Уншигдахгүй, бичигдэхгүй, гүйцэтгэгдэнэ | `--x`
2 | Уншигдахгүй, бичигдэнэ, гүйцэтгэгдэхгүй | `-w-`
3 | Уншигдахгүй, бичигдэнэ, гүйцэтгэгдэнэ | `-wx`
4 | Уншигдана, бичигдэхгүй, гүйцэтгэгдэхгүй | `r--`
5 | Уншигдана, бичигдэхгүй, гүйцэтгэгдэнэ | `r-x`
6 | Уншигдана, бичигдэнэ, гүйцэтгэгдэхгүй | `rw-`
7 | Уншигдана, бичигдэнэ, гүйцэтгэгдэнэ | `rwx`

Та ls(1) тушаалыг `-l` сонголттой хэрэглэж файлын эзэмшигч, бүлэг, мөн хүн болгонд хуваарилсан зөвшөөрлийг харуулсан баганатай дэлгэрэнгүй мэдээллийг харж болно. Жишээлбэл, `ls -l` тушаалыг нэг сан дотор гүйцэтгэвэл дараах маягаар харагдана:

    % ls -l
    total 530
    -rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
    -rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
    -rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt
    ...

Энд `ls -l` тушаалын эхний баганыг авч үзье:

    -rw-r--r--

Хамгийн эхний (зүүн талын) тэмдэг нь үүнийг ердийн файл юм уу, эсвэл сан, онцгой тэмдэг төхөөрөмж, сокет, эсвэл ямар нэгэн холбоост файл мөн эсэхийг илэрхийлдэг. Энэ тохиолдолд `-` нь ердийн файлыг зааж байна. Дараагийн гурван тэмдэгт `rw-` нь энэ тохиолдолд энэ файлын эзэмшигчид зөвшөөрөл өгч байна. Дараагийн гурван тэмдэгт `r--` нь файлын хамаарах бүлэгт эрх өгч байна. Сүүлийн гурван тэмдэгт `r--` нь бусад бүх хүмүүст эрх өгч байна. Зураас нь зөвшөөрөл өгөөгүйг илэрхийлдэг. Энэ файлын тохиолдолд, файлыг унших бичих эрхийг эзэмшигчид нь өгөөд, бүлэг нь файлыг унших эрхтэй, бусад хүмүүс энэ файлыг зөвхөн унших эрхтэй гэж заагдсан байна. Дээр тайлбарласан хүснэгтийн дагуу, энэ файлын зөвшөөрөл нь `644` гэж дээрх гурван төрөлд заагдаж байна.

Энэ бол сайн бөгөөд сайхан хэрэг, гэхдээ төхөөрөмж рүү хандах зөвшөөрлийг систем яаж хянах вэ? FreeBSD бараг ихэнх төхөөрөмжийг нээж уншиж өгөгдөл бичдэг файл мэт хандаж уншиж бичдэг. Тэдгээр онцгой төхөөрөмжүүд нь `/dev` сан дотор байрладаг.

Сангууд ч гэсэн бас файл мэт хандагддаг. Тэд нарт бас уншигдах, бичигдэх, гүйцэтгэгдэх зөвшөөрлүүд байдаг. Сангийн гүйцэтгэгдэх тэмдэг нь файлаас арай өөрөөр хэрэгждэг. Хэрэв сан нь гүйцэтгэгдэнэ гэж тэмдэглэгдсэн бол, энэ сан нь дамжиж өнгөрүүлэгдэж болох буюу “cd” тушаалыг (сан сольдог) хэрэглэж ийшээ орж болно гэсэн үг. Энэ нь мөн сан дотор харагдаж байгаа файлууд уруу хандаж болно гэсэн үг. (бас нэг зүйл, мэдээжээр, файлууд бас өөр дээрээ зөвшөөрөл агуулсан байгаа).

Ерөнхийдөө бол, сан доторх файлуудыг жагсааж харахыг хүсвэл, уг санд уншигдах зөвшөөрөл суугдсан байх ёстой. Хэрэв санд байгаа файлыг устгана гэвэл бичигдэх болон гүйцэтгэгдэх зөвшөөрлүүд уг санд суугдах ёстой.

Мөн нэмээд хэдэн зөвшөөрлийн битүүд байдаг, гэхдээ тэдгээр нь ажилладаг файлын setuid дугаар болон sticky сан зэрэг тусгай зориулалтаар хэрэглэгддэг. Файлын зөвшөөрлийн талаар нэмэлт мэдээлэл авахыг хүсвэл chmod(1) гарын авлага хуудаснаас хараарай.

## 3.3.1. Тэмдэгт зөвшөөрлүүд

Хамтарч бичсэн Том Рөүдс.

Сан эсвэл файлд тоон утганы оронд заримдаа тэмдгэн зөвшөөрлийг хэрэглэдэг. Тэмдгэн зөвшөөрлийг бичихдээ (хэн) (үйлдэл) (зөвшөөрөл) гэсэн дарааллаар бичих бөгөөд дараах утгуудыг авдаг:

Сонголт | Үсэг | Илэрхийлэл нь
--- | --- | ---
(хэн) | u | Хэрэглэгч
(хэн) | g | Бүлгийн эзэмшигч
(хэн) | o | Бусад
(хэн) | a | Бүгд (“ертөнц”)
(үйлдэл) | + | Зөвшөөрөл нэмэх
(action) | - | Зөвшөөрлийг устгах
(үйлдэл) | = | зөвхөн тухайн зөвшөөрлийг суулгах
(зөвшөөрөл) | r | Унших
(зөвшөөрөл) | w | Бичих
(зөвшөөрөл) | x | Гүйцэтгэх
(зөвшөөрөл) | t | Sticky бит
(зөвшөөрөл) | s | UID эсвэл GID суулгах

Эдгээр утгууд нь өмнөх жишээ шиг chmod(1) тушаалтай хэрэглэгддэг бөгөөд гэхдээ үсэг хэрэглэнэ. Жишээлбэл, та `FILE` уруу бусад хэрэглэгчид хандахыг хориглохдоо:

    % chmod go= FILE

Файлд нэгээс олон өөрчлөлт хийх шаардлага гарвал таслалаар тусгаарласан мөр бичиж болно. Жишээлбэл, дараах тушаал нь бүлэг болон “дэлхийг” `FILE` дээр бичих эрхийг нь аваад дараа нь хүн болгонд гүйцэтгэж болно гэсэн эрх өгч байна:

    % chmod go-w,a+x FILE

## 3.3.2. FreeBSD файлын туг

Хамтран бичсэн Том Рөүдс.

Өмнө ярилцсан файлын зөвшөөрлөөс гадна FreeBSD нь “файлын туг” хэрэглээгээр хангагдсан байдаг. Эдгээр туг нь файлд нэмэлт нууцлалын болон хяналтын түвшин тогтоож өгдөг, гэхдээ санд бол үгүй.

Эдгээр файлын тугнууд нь файлд нэмэлт түвшний хяналт тогтоож өгснөөрөө зарим тохиолдолд `root` хэрэглэгч хүртэл файлыг устгах юм уу өөрчилж чадахгүй болгож тусалдаг.

Файлын тугнууд нь энгийн загвартай chflags(1) багажаар ашиглагддаг. Жишээлбэл, `file1` файл дээр устгагдахгүй гэсэн туг хатгахыг системд зөвшөөрүүлэхийн тулд дараах тушаалыг гүйцэтгэнэ:

    # chflags sunlink file1

Хэрэв устгагдахгүй тугийг буцааж авна гэвэл өмнөх тушаал дээрээ `sunlink`-ын өмнө “no” залгаж ажиллуулна:

    # chflags nosunlink file1

Энэ файлын тугийг харахын тулд ls(1) тушаалыг `-lo` сонголттой хамт ажиллуулна:

    # ls -lo file1

Тушаалын гаралт нь дараах маягаар харагдах ёстой:

    -rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1

Нэлээн хэдэн тугнууд нь файлд зөвхөн `root` хэрэглэгчээр нэмэгдэж устгагдана. Бусад тохиолдолд файлын эзэмшигч нь тугийг суулгах боломжтой. Администраторуудыг chflags(1) болон chflags(2) гарын авлагуудыг уншихыг зөвлөж байна.

## 3.3.3. setuid, setgid, болон sticky буюу наалдамхай зөвшөөрлүүд

Хувь нэмэр болгон оруулсан Том Рөүдс.

Өмнө хэлэлцсэн зөвшөөрлүүдээс гадна бүх администраторуудын мэдэх ёстой өөр гурван тусгай тохиргоо байдаг. Эдгээр нь `setuid`, `setgid` болон `sticky` буюу наалдамхай зөвшөөрлүүд юм.

Эдгээр тохиргоонууд нь ерөнхийдөө энгийн хэрэглэгчдэд зөвшөөрөгддөггүй ажиллагаагаар хангадаг бөгөөд UNIX-ийн зарим нэг үйлдлүүдэд чухал байдаг. Эдгээрийг ойлгохын тулд жинхэнэ хэрэглэгчийн ID болон хүчинтэй хэрэглэгчийн ID-ийн ялгааг дурдах хэрэгтэй.

Жинхэнэ хэрэглэгчийн ID нь процессийг эзэмшдэг юм уу эсвэл процессийг эхлүүлдэг UID юм. Хүчинтэй хэрэглэгчийн UID нь процессийн ажиллаж байгаа тэр хэрэглэгчийн ID юм. Жишээ нь passwd(1) хэрэгсэл нь хэрэглэгч өөрсдийн нууц үгээ сольж байгаа болохоор жинхэнэ хэрэглэгчийн ID-аар ажиллах боловч нууц үгийн санд өөрчлөлт хийхийн тулд `root` хэрэглэгчийн хүчинтэй ID-аар ажилладаг. Ингэснээр энгийн хэрэглэгчдэд “`Permission Denied`” буюу зөвшөөрөл хаалттай гэсэн алдааг харуулалгүйгээр өөрсдийн нууц үгсийг солих боломжийг олгодог.

> Тэмдэглэл: `nosuid` mount(8) тохиргоо нь эдгээр хоёртын файлуудыг дуугай амжилтгүй болоход хүргэдэг. Энэ нь хэрэглэгчдэд мэдэгдэлгүйгээр ажиллагаа амжилтгүй болно гэсэн үг юм. mount(8) гарын авлагын дагуу энэ тохиргоо нь `nosuid` гүйцэтгэл хялбаршуулагчийн хамгаалж болох шиг бүрэн найдвартай бас биш юм.

setuid зөвшөөрлийг зөвшөөрлийн цуглуулгын өмнө дөрвийн тоог (4) доорх жишээн дээрх шигээр тавьж тохируулж болно:

    # chmod 4755 suidexample.sh

``suidexample.sh`` файл дээрх зөвшөөрлүүд нь одоо доорх шиг харагдах ёстой:

    -rwsr-xr-x   1 trhodes  trhodes    63 Aug 29 06:36 suidexample.sh

Энэ жишээн дээр `s` нь ажиллуулах битийг сольж файлын эзэмшигчид зориулсан зөвшөөрлүүдийн цуглуулгын хэсэг болж байгаа нь харагдах ёстой. Энэ нь `passwd` зэрэг дээшлүүлсэн зөвшөөрлүүдийг шаарддаг хэрэгслүүдийг зөвшөөрдөг.

Жинхнээр нь үүнийг харахын тулд хоёр терминал нээ. Нэг дээр нь энгийн хэрэглэгчээр `passwd` процессийг эхлүүл. Шинэ нууц үг хүлээж байхад нь процессийн хүснэгтийг шалгаад `passwd` тушаалын хэрэглэгчийн мэдээллийг хар.

Терминал A дээр:

    Changing local password for trhodes
    Old Password:

Терминал B дээр:

    # ps aux | grep passwd

    trhodes  5232  0.0  0.2  3420  1608   0  R+    2:10AM   0:00.00 grep passwd
    root     5211  0.0  0.2  3620  1724   2  I+    2:09AM   0:00.01 passwd

Дээр харуулснаар `passwd` нь энгийн хэрэглэгчээр ажиллаж байгаа боловч `root` хэрэглэгчийн хүчинтэй UID ашиглаж байна.

`setgid` зөвшөөрөл нь `setuid` зөвшөөрөлтэй адил үүргийг гүйцэтгэдэг, гэхдээ бүлгийн тохиргоог өөрчилдөг. Програм юм уу эсвэл хэрэгсэл нь энэ тохиргоотойгоор ажиллахдаа процессийг эхлүүлсэн хэрэглэгч биш файлыг эзэмшиж байгаа бүлэг дээр тулгуурласан зөвшөөрлүүдийг олгодог.

Файл дээр `setgid` зөвшөөрлийг тохируулахдаа дараах жишээн дээрх шиг `chmod` тушаалыг өмнөө хоёртой (2) өгнө:

    # chmod 2755 sgidexample.sh

Шинэ тохиргоог өмнөх шигээ харж болох бөгөөд `s` нь одоо бүлгийн зөвшөөрлийн тохиргоонд зориулагдсан талбарт байгааг анхаараарай:

    -rwxr-sr-x   1 trhodes  trhodes    44 Aug 31 01:49 sgidexample.sh

> Тэмдэглэл: Эдгээр жишээнүүд дээр бүрхүүлийн скрипт нь хэдийгээр ажиллах боломжтой файл боловч өөр EUID буюу хүчинтэй хэрэглэгчийн ID-аар ажиллахгүй. Энэ нь яагаад гэвэл бүрхүүлийн скрипт нь setuid(2) системийн дуудлагуудад хандаж чадахгүйтэй холбоотой юм.

Бидний хэлэлцсэн эхний хоёр тусгай зөвшөөрлийн битүүд нь (`setuid` болон `setgid` зөвшөөрлийн битүүд) дээшлүүлсэн зөвшөөрлүүдийг зөвшөөрч системийн аюулгүй байдлыг доошлуулж болох юм. Системийн аюулгүй байдлыг чангатгаж чадах гурав дахь тусгай зөвшөөрлийн бит байдаг нь `sticky bit` буюу наалдамхай бит юм.

`sticky bit` нь санд тавигдсан үед файл устгалтыг зөвхөн файлыг эзэмшигчид зөвшөөрдөг. Энэ зөвшөөрлийн цуглуулга нь `/tmp` зэрэг нийтийн сангаас файлыг эзэмшдэггүй хэрэглэгч уг файлыг устгахаас хамгаалахад ашиг тустай байдаг. Энэ зөвшөөрлийг ашиглахын тулд зөвшөөрлийн урд нэгийг (1) тавьж өгнө. Жишээ нь:

    # chmod 1777 /tmp

Одоо үр дүнг `ls` тушаал ашиглан харах боломжтой:

    # ls -al / | grep tmp

    drwxrwxrwt  10 root  wheel         512 Aug 31 01:49 tmp

`sticky bit` буюу наалдамхай бит зөвшөөрөл нь цуглуулгын хамгийн сүүлд байгаа `t`-ээс ялгаатай юм.

Өмнөх | Эхлэл | Дараах
Виртуал консол болон терминал | Дээш | Сангийн бүтэц

Энэ болон бусад баримтуудыг ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/ хаягаас татаж авч болно.

FreeBSD-ийн талаар <questions@FreeBSD.org> хаягтай холбоо барихаасаа өмнө баримтыг уншина уу.
Энэ бичиг баримттай холбоотой асуулт байвал <doc@FreeBSD.org> хаягаар цахим захидал явуулна уу.
Энэ бичиг баримтын орчуулгатай холбоотой асуулт байвал <admin@mnbsd.org> хаягаар цахим захидал явуулна уу.