Ruhusa za faili za Linux: chmod, chown na sudo kwa mifano
Ruhusa za faili za Linux zimewekwa na seti tatu za rwx — kwa mmiliki, kundi na wengine; hubadilishwa kwa chmod kwa umbo la alama (chmod u+x) au namba (chmod 755, ambapo r=4, w=2, x=1). Umiliki hubadilishwa na chown, na vitendo vya msimamizi hufanywa kwa sudo; hitilafu ya Permission denied karibu kila mara maana yake ni kwamba mtumiaji wako hana ruhusa inayohitajika kwenye faili au kwenye mojawapo ya saraka za njia.
Ruhusa za Linux hujibu swali "nani anaweza kufanya nini na faili". Kila faili lina mmiliki, kundi, na seti tatu za ruhusa: kwa mmiliki, kwa kundi, na kwa wengine wote. Ruhusa hubadilishwa kwa amri chmod, umiliki kwa chown, na vitendo vya msimamizi hufanywa kwa sudo. Hebu tuone jinsi ya kusoma ruhusa, kuzibadilisha, na kurekebisha hitilafu Permission denied.
Jinsi ya kuona ruhusa za faili
Ruhusa zinaonekana kwenye matokeo ya ls -l:
$ ls -l
-rw-r--r-- 1 alice developers 1204 Oct 10 14:02 notes.txt
-rwxr-xr-x 1 alice developers 356 Oct 10 14:05 deploy.sh
drwxr-x--- 2 alice developers 4096 Oct 10 13:50 secrets
Herufi kumi za kwanza zinasomwa hivi:
- Herufi ya kwanza — aina:
-faili la kawaida,dsaraka,lkiungo cha ishara. - Herufi 2–4 — ruhusa za mmiliki (user).
- Herufi 5–7 — ruhusa za kundi (group).
- Herufi 8–10 — ruhusa za wengine (others).
Baada ya hapo kuna idadi ya viungo vigumu, mmiliki (alice), kundi (developers), ukubwa, tarehe, na jina. Kwa faili moja, amri stat ni muhimu:
$ stat -c '%A %a %U:%G %n' deploy.sh
-rwxr-xr-x 755 alice:developers deploy.sh
Maana ya r, w na x
Maana ya ruhusa hutofautiana kati ya faili na saraka — hapa ndipo watu wengi huchanganyikiwa.
| Ruhusa | Kwa faili | Kwa saraka |
|---|---|---|
r (read) | kusoma yaliyomo | kuona orodha ya majina ya faili (ls) |
w (write) | kubadilisha yaliyomo | kuunda, kufuta na kubadilisha majina ya faili ndani yake |
x (execute) | kuendesha kama programu | kuingia kwenye saraka (cd) na kufikia faili kwa njia |
Zingatia: mtu anaweza kufuta faili ikiwa ana ruhusa w na x kwenye saraka, hata kama hawezi kuandika kwenye faili lenyewe. Na bila x kwenye saraka, faili lililomo haliwezi kufunguliwa, hata ruhusa ya faili ikiruhusu kusoma.
Mfumo unakagua ruhusa kwa mpangilio: ukiwa mmiliki, ruhusa za mmiliki zinatumika; kama si hivyo, na uko kwenye kundi la faili, ruhusa za kundi zinatumika; kama si hivyo pia, ruhusa za wengine. Mtumiaji root hapitii ukaguzi wa kusoma na kuandika.
Umbo la namba: 755, 644, 600
Kila ruhusa ina uzito: r = 4, w = 2, x = 1. Jumla ya uzito huzaa tarakimu kutoka 0 hadi 7 kwa kila seti kati ya tatu.
| Tarakimu | Ruhusa | Hesabu |
|---|---|---|
| 7 | rwx | 4+2+1 |
| 6 | rw- | 4+2 |
| 5 | r-x | 4+1 |
| 4 | r-- | 4 |
| 0 | --- | 0 |
Michanganyiko ya kawaida ambayo inafaa kuikariri:
| Hali | Umbo | Inatumika wapi |
|---|---|---|
644 | rw-r--r-- | faili za kawaida, usanidi, HTML |
755 | rwxr-xr-x | saraka, skripti na programu |
600 | rw------- | funguo binafsi za SSH, faili zenye nywila |
700 | rwx------ | saraka ~/.ssh, saraka binafsi |
640 | rw-r----- | usanidi unaosomwa na kundi la huduma |
777 | rwxrwxrwx | kila mtu kila kitu — karibu haitumiki kamwe |
Amri ya chmod: kubadilisha ruhusa
Hali ya namba
Umbo la namba huweka ruhusa zote kwa pamoja:
chmod 644 index.html
chmod 755 deploy.sh
chmod 600 ~/.ssh/id_ed25519
Hali ya alama
Umbo la alama hubadilisha ruhusa kwa usahihi bila kugusa zingine. Kwa nani: u mmiliki, g kundi, o wengine, a wote. Kitendo: + kuongeza, - kuondoa, = kuweka kamili.
chmod +x deploy.sh # ruhusu kuendesha
chmod u+x,g-w file # mmiliki aweze kuendesha, kundi lisiandike
chmod o-rwx secrets/ # wengine wasipate chochote
chmod g=rx app/ # kundi kusoma na kuingia tu
Kwa kurudia: faili na saraka zinashughulikiwa tofauti
Chaguo -R hutumia ruhusa kwenye mti mzima. Lakini chmod -R 755 hufanya faili zote ziweze kutekelezwa, jambo ambalo kwa kawaida halitakiwi. Ni bora kutenganisha faili na saraka kwa find:
find /srv/site -type d -exec chmod 755 {} +
find /srv/site -type f -exec chmod 644 {} +
Pia kuna njia fupi: herufi kubwa X huongeza ruhusa ya kutekeleza kwa saraka na faili ambazo tayari zinayo.
chmod -R u=rwX,go=rX /srv/site
Amri ya chown: kubadilisha mmiliki na kundi
Ni root pekee anayeweza kubadilisha mmiliki wa faili, kwa hiyo chown karibu kila mara huendeshwa kwa sudo.
sudo chown alice report.txt # mmiliki
sudo chown alice:developers report.txt # mmiliki na kundi
sudo chown :www-data index.html # kundi tu
sudo chown -R www-data:www-data /var/www/site
Kubadilisha kundi pekee kuna amri yake: sudo chgrp developers report.txt. Makundi yako mwenyewe yanaonekana kwa id au groups.
$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),1001(developers)
Kumwongeza mtumiaji kwenye kundi tumia sudo usermod -aG developers bob. Bendera -a ni ya lazima: bila hiyo, mtumiaji ataondolewa kwenye makundi yake mengine yote ya ziada. Kundi jipya huanza kutumika baada ya kuingia tena kwenye mfumo.
sudo: vitendo kama msimamizi
sudo huendesha amri moja kwa haki za root (au mtumiaji mwingine) na inakuomba nywila yako mwenyewe, si ya root. Kila mwito unaandikwa kwenye kumbukumbu, kwa hiyo inaonekana nani alifanya nini.
sudo apt update
sudo systemctl restart nginx
sudo -u postgres psql # kama mtumiaji postgres
sudo -i # shell shirikishi ya root
sudo -l # ninachoruhusiwa kufanya
Nani anaruhusiwa kufanya nini imeelezwa katika /etc/sudoers na faili zilizo kwenye saraka /etc/sudoers.d/. Hariri faili hizi kwa sudo visudo pekee: hukagua sintaksia, na kosa kwenye faili halitakufungia nje ya sudo. Kwenye Ubuntu, haki za sudo hutolewa kwa kuwa mwanachama wa kundi sudo; kwenye mifumo ya familia ya RHEL, kwa kundi wheel.
# /etc/sudoers.d/deploy — mtumiaji deploy anaruhusiwa kuanzisha upya nginx tu
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
Kwa nini sudo echo > file haifanyi kazi
Mtego unaotokea mara nyingi:
$ sudo echo "127.0.0.1 test.local" >> /etc/hosts
bash: /etc/hosts: Permission denied
Uelekezaji >> unafanywa na shell yako, si na sudo, kwa hiyo faili linafunguliwa bila haki za root. Njia sahihi ni kupitia tee:
echo "127.0.0.1 test.local" | sudo tee -a /etc/hosts
Permission denied: sababu na jinsi ya kurekebisha
Hitilafu Permission denied ina maana kwamba kernel imekataa operesheni ya mchakato wako. Hatua za uchunguzi ni zile zile kila mara: mimi ni nani (id), mmiliki ni nani na ruhusa zake ni zipi (ls -l), na ruhusa ya kila saraka katika njia ni ipi (namei -l).
$ namei -l /srv/app/config/app.env
f: /srv/app/config/app.env
drwxr-xr-x root root /
drwxr-xr-x root root srv
drwxr-x--- deploy deploy app
drwxr-xr-x deploy deploy config
-rw-r----- deploy deploy app.env
Hapa inaonekana kwamba saraka app imefungwa kwa wengine — mtumiaji asiye kwenye kundi deploy hatapita zaidi, bila kujali ruhusa za faili lenyewe.
Skripti haiendeshi
$ ./deploy.sh
bash: ./deploy.sh: Permission denied
Faili halina ruhusa ya kutekeleza. Suluhisho ni chmod +x deploy.sh, au kuiendesha kupitia interpreter: bash deploy.sh. Ikiwa sehemu ya diski imeunganishwa na chaguo noexec (hii hutokea mara nyingi kwenye /tmp), faili haliwezi kuendeshwa moja kwa moja, na ni njia ya pili pekee inayofanya kazi.
Haiwezi kuandika kwenye saraka ya mfumo
Faili zilizo kwenye /etc, /usr na /var/www zinamilikiwa na root au watumiaji wa huduma. Tumia sudo kwa mabadiliko ya mara moja, na kwa kazi ya kudumu mpe kundi ruhusa, si kila mtu.
Web server inarudisha 403
Nginx au Apache zinaendeshwa na mtumiaji www-data (kwenye Debian na Ubuntu). Inahitaji ruhusa ya kusoma faili na x kwenye saraka zote za njia. Marekebisho: sudo chown -R www-data:www-data /var/www/site, au ruhusa 755 kwa saraka na 644 kwa faili.
SSH haikubali funguo
SSH inakataa kutumia funguo ambazo ruhusa zake ni wazi sana. Ufunguo binafsi lazima uwe na ruhusa 600, saraka ~/.ssh iwe 700, na faili authorized_keys kwenye seva liwe 600.
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys
Hakuna ufikiaji wa Docker
Ujumbe permission denied while trying to connect to the Docker daemon socket unamaanisha kwamba hauko kwenye kundi docker. Endesha sudo usermod -aG docker $USER kisha uingie tena kwenye mfumo. Kumbuka, uanachama wa kundi hili kiutendaji ni sawa na haki za root.
Kwa nini chmod 777 ni wazo baya
Ushauri wa "endesha tu chmod 777" huondoa hitilafu, lakini unafungua faili kwa kuandikwa na kila mtumiaji na kila mchakato kwenye mfumo. Ikiwa programu ya wavuti itadukuliwa, mshambuliaji anaweza kubadilisha faili hizo. Njia sahihi ni kujua ni mtumiaji gani anahitaji ufikiaji, kisha kumpa ruhusa hiyo moja kwa moja — kupitia mmiliki au kundi.
umask: ruhusa za msingi
Faili jipya hupata ruhusa zilizopunguzwa na umask. Kwa thamani ya kawaida 022, faili huundwa na ruhusa 644 na saraka na 755.
$ umask
0022
Muhtasari
Ruhusa za Linux ni seti tatu za rwx kwa mmiliki, kundi na wengine. chmod hubadilisha ruhusa kwa namba (755, 644, 600) au kwa alama, chown hubadilisha mmiliki, na sudo huruhusu amri moja kuendeshwa kama root. Hitilafu ya Permission denied inapotokea, angalia mtumiaji wako, ruhusa za faili, na ruhusa za kila saraka kwenye njia, na usiitatue kwa 777. Watumiaji, makundi, ruhusa na sudo vinafundishwa kwa kina kwa vitendo katika kozi ya Linux.
Maswali ya mara kwa mara
chmod 755 inamaanisha nini?
Mmiliki anaweza kusoma, kuandika na kutekeleza (7); kundi na wengine wanaweza kusoma na kutekeleza (5). Ni mchanganyiko wa kawaida wa saraka na skripti.
chmod inatofautianaje na chown?
chmod hubadilisha ruhusa (nini kinaweza kufanywa kwa faili), wakati chown hubadilisha mmiliki na kundi (ruhusa hizo ni za nani).
Nitampaje mtumiaji haki za sudo?
Kwenye Ubuntu na Debian, mwongeze kwenye kundi sudo kwa sudo usermod -aG sudo jina; kwenye mifumo ya RHEL, kwenye kundi wheel. Mabadiliko yanaanza baada ya kuingia tena.
Ruhusa 4755 na biti ya SUID ni nini?
Tarakimu 4 mbele huwasha SUID: programu inaendeshwa kwa haki za mmiliki wa faili, si za aliyeiendesha. Mfano ni passwd; kwenye matokeo ya ls, herufi x ya mmiliki inageuka kuwa s.
Kwa nini root anaweza kusoma faili lenye ruhusa 000?
Kernel haikagui ruhusa za kawaida za kusoma na kuandika kwa root. Kumzuia root kunawezekana tu kwa njia nyingine, kwa mfano SELinux, AppArmor, au sifa ya chattr +i.
Mada hii inafundishwa kwa kina pamoja na mazoezi katika kozi “Linux: с нуля до уверенного администрирования”.
Nenda kwenye kozi