Gabay

Permissions sa Linux: chmod, chown, at sudo na may halimbawa

Na-update: · Skillaria.Top

Tatlong set ng rwx ang nagtatakda ng permissions sa Linux para sa may-ari, grupo, at iba pa; binabago ang mga ito gamit ang chmod sa symbolic (chmod u+x) o numeric na anyo (chmod 755, kung saan r=4, w=2, x=1). Ang chown ang nagpapalit ng may-ari, at ang mga gawaing administrador ay ginagawa gamit ang sudo; halos palaging ibig sabihin ng Permission denied ay kulang ang user sa kailangang permission sa file o sa isa sa mga direktoryo sa path.

Sinasagot ng permissions sa Linux ang tanong na "sino ang maaaring gumawa ng ano sa file na ito". May may-ari, grupo, at tatlong set ng permission ang bawat file: para sa may-ari, para sa grupo, at para sa lahat ng iba. Binabago ang mga ito gamit ang chmod, binabago ang may-ari gamit ang chown, at ang mga gawaing administrador ay ginagawa gamit ang sudo. Ituturo ng artikulong ito kung paano basahin ang permissions, paano baguhin ang mga ito, at paano ayusin ang error na Permission denied.

Paano tingnan ang permissions ng file

Nakikita ang permissions sa output ng 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

Ganito binabasa ang unang sampung karakter:

  • Unang karakter — uri: - ay regular na file, d ay direktoryo, l ay symbolic link.
  • Karakter 2–4 — permissions ng may-ari (user).
  • Karakter 5–7 — permissions ng grupo (group).
  • Karakter 8–10 — permissions ng iba (others).

Kasunod nito ang bilang ng hard link, ang may-ari (alice), ang grupo (developers), laki, petsa, at pangalan. Para sa iisang file, mas maginhawa ang stat:

$ stat -c '%A %a %U:%G %n' deploy.sh
-rwxr-xr-x 755 alice:developers deploy.sh

Ano ang ibig sabihin ng r, w, at x

Magkaiba ang kahulugan ng permissions para sa file at direktoryo, at ito ang pangunahing dahilan ng kalituhan.

PermissionPara sa filePara sa direktoryo
r (read)basahin ang nilalamanmakita ang listahan ng mga file (ls)
w (write)baguhin ang nilalamangumawa, magbura, at magpalit ng pangalan ng mga file sa loob
x (execute)patakbuhin bilang programapumasok sa direktoryo (cd) at ma-access ang mga file sa pamamagitan ng path

Pansinin: maaaring magbura ng file ang taong may w at x sa direktoryo, kahit hindi siya pinapayagang magsulat sa mismong file. At kung walang x sa direktoryo, hindi mo mabubuksan ang file sa loob nito, kahit pinapayagan ng file ang pagbasa.

Sinusuri ng sistema ang permissions ayon sa pagkakasunod: kung ikaw ang may-ari, ang permission ng may-ari ang gagamitin; kung hindi ngunit kabilang ka sa grupo ng file, ang permission ng grupo; kung wala sa dalawa, ang permission ng iba. Nilalampasan ng user na root ang pagsusuri ng permission sa pagbasa at pagsulat.

Numeric na anyo ng permissions: 755, 644, 600

May bigat ang bawat permission: r = 4, w = 2, x = 1. Ang kabuuan ng mga bigat ang nagbibigay ng digit mula 0 hanggang 7 para sa bawat isa sa tatlong set.

DigitPermissionKuwenta
7rwx4+2+1
6rw-4+2
5r-x4+1
4r--4
0---0

Mga karaniwang set na dapat tandaan:

ModeAnyoSaan ginagamit
644rw-r--r--regular na file, config, HTML
755rwxr-xr-xdirektoryo, script, at programa
600rw-------private SSH key, file na may password
700rwx------direktoryong ~/.ssh, personal na direktoryo
640rw-r-----config na kailangang basahin ng grupo ng serbisyo
777rwxrwxrwxlahat ay pwede sa lahat — halos hindi kailangan

Ang chmod: pagpalit ng permissions

Numeric na mode

Itinatakda ng numeric na anyo ang buong permissions nang sabay-sabay:

chmod 644 index.html
chmod 755 deploy.sh
chmod 600 ~/.ssh/id_ed25519

Symbolic na mode

Binabago ng symbolic na anyo ang partikular na bahagi nang hindi ginagalaw ang iba. Target: u may-ari, g grupo, o iba, a lahat. Aksyon: + idagdag, - alisin, = itakda nang eksakto.

chmod +x deploy.sh        # payagan ang pagpapatakbo
chmod u+x,g-w file        # pwedeng patakbuhin ng may-ari, alisin ang write sa grupo
chmod o-rwx secrets/      # walang anumang permission ang iba
chmod g=rx app/           # ang grupo ay basa at makapasok lamang

Recursive: magkaiba ang file at direktoryo

Ang opsyong -R ay nag-aaplay ng permissions sa buong puno ng direktoryo. Ngunit gagawing executable ng chmod -R 755 ang lahat ng file, na karaniwang hindi kailangan. Mas tama na paghiwalayin ang file at direktoryo gamit ang find:

find /srv/site -type d -exec chmod 755 {} +
find /srv/site -type f -exec chmod 644 {} +

May mas maikling paraan din: ang malaking X ay nagdadagdag ng execute para lamang sa mga direktoryo at sa mga file na mayroon nang execute.

chmod -R u=rwX,go=rX /srv/site

Ang chown: pagpalit ng may-ari at grupo

Tanging root ang makapagpapalit ng may-ari ng file, kaya halos palaging pinapatakbo ang chown gamit ang sudo.

sudo chown alice report.txt               # may-ari
sudo chown alice:developers report.txt    # may-ari at grupo
sudo chown :www-data index.html           # grupo lamang
sudo chown -R www-data:www-data /var/www/site

Para sa grupo lamang, may hiwalay na utos na chgrp: sudo chgrp developers report.txt. Makikita ang mga grupo mo sa id o groups.

$ id
uid=1000(alice) gid=1000(alice) groups=1000(alice),27(sudo),1001(developers)

Para idagdag ang user sa grupo: sudo usermod -aG developers bob. Kailangan ang opsyong -a: kung wala ito, tatanggalin ang user sa lahat ng iba pang karagdagang grupo. Magkakabisa ang bagong grupo pagkatapos mag-log in muli.

sudo: pagkilos bilang administrator

Pinapatakbo ng sudo ang isang utos bilang root (o ibang user) at hinihingi ang sarili mong password, hindi ang password ng root. Naka-log ang bawat tawag, kaya makikita kung sino ang gumawa ng ano.

sudo apt update
sudo systemctl restart nginx
sudo -u postgres psql       # bilang user na postgres
sudo -i                     # interactive na shell ng root
sudo -l                     # ano ang pinapayagan sa akin

Nakasulat sa /etc/sudoers at sa mga file sa /etc/sudoers.d/ kung sino ang pinapayagang gawin ang ano. I-edit lamang ang mga ito gamit ang sudo visudo: sinusuri nito ang syntax bago i-save, kaya ang pagkakamali sa file ay hindi magtatanggal ng sudo access mo. Sa Ubuntu, ibinibigay ang sudo sa pamamagitan ng pagiging miyembro ng grupong sudo; sa mga sistemang RHEL, grupong wheel.

# /etc/sudoers.d/deploy — pinapayagan ang user na deploy na i-restart lamang ang nginx
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx

Bakit hindi gumagana ang sudo echo > file

Karaniwang bitag ito:

$ sudo echo "127.0.0.1 test.local" >> /etc/hosts
bash: /etc/hosts: Permission denied

Ang redirection na >> ay ginagawa ng iyong shell, hindi ng sudo, kaya nabubuksan ang file nang walang root na pahintulot. Ang tamang paraan ay gamit ang tee:

echo "127.0.0.1 test.local" | sudo tee -a /etc/hosts

Permission denied: mga dahilan at paano ayusin

Ang Permission denied ay nangangahulugang tinanggihan ng kernel ang operasyon ng iyong process. Palaging pareho ang proseso ng pag-diagnose: sino ako (id), sino ang may-ari at ano ang permissions (ls -l), at ano ang permissions ng bawat direktoryo sa path (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

Makikita rito na sarado sa iba ang direktoryong app. Hindi makakalagpas ang user na wala sa grupong deploy, gaano man kabukas ang permissions ng mismong file.

Hindi tumatakbo ang script

$ ./deploy.sh
bash: ./deploy.sh: Permission denied

Walang permission na execute ang file. Ang solusyon: chmod +x deploy.sh, o patakbuhin sa pamamagitan ng interpreter: bash deploy.sh. Kung naka-mount ang partisyon na may opsyong noexec (karaniwan sa /tmp), hindi mo ito mapapatakbo nang direkta; ang ikalawang paraan lamang ang gagana.

Hindi makasulat sa system directory

Pag-aari ng root o ng system user ang mga file sa /etc, /usr, at /var/www. Gamitin ang sudo para sa iisang pagbabago; para sa tuloy-tuloy na trabaho, bigyan ng permission ang grupo, hindi ang lahat.

Nagbabalik ng 403 ang web server

Tumatakbo ang nginx o Apache bilang user na www-data (sa Debian at Ubuntu). Kailangan nito ng read sa mga file at x sa lahat ng direktoryo sa path. Ayusin gamit ang sudo chown -R www-data:www-data /var/www/site, o itakda ang 755 sa mga direktoryo at 644 sa mga file.

Hindi tinatanggap ng SSH ang key

Tumatanggi ang SSH na gumamit ng key na sobrang bukas ang permissions. Dapat 600 ang private key, 700 ang direktoryong ~/.ssh, at 600 ang file na authorized_keys sa server.

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_ed25519 ~/.ssh/authorized_keys

Walang access sa Docker

Ang mensaheng permission denied while trying to connect to the Docker daemon socket ay nangangahulugang wala ka sa grupong docker. Patakbuhin ang sudo usermod -aG docker $USER at mag-log in muli. Tandaan na ang pagiging miyembro ng grupong ito ay praktikal na katumbas ng root.

Bakit masamang ideya ang chmod 777

Inaalis ng payong "chmod 777 mo na lang" ang error, pero binubuksan nito ang file para sa pagsulat ng bawat user at bawat process sa sistema. Kapag nakompromiso ang web application, mababago ng umaatake ang mga ganitong file. Ang tamang gawin ay alamin kung aling user ang talagang nangangailangan ng access at ibigay ang permission sa kanya, sa pamamagitan ng may-ari o grupo.

umask: mga default na permission

Ang bagong file ay tumatanggap ng permissions batay sa maskara ng umask. Sa karaniwang halagang 022, nagkakaroon ng 644 ang mga bagong file, at 755 ang mga direktoryo.

$ umask
0022

Buod

Ang permissions sa Linux ay tatlong set ng rwx para sa may-ari, grupo, at iba. Binabago ng chmod ang permissions sa numeric (755, 644, 600) o symbolic na anyo, binabago ng chown ang may-ari, at pinapayagan ng sudo ang pagpapatakbo ng isang utos bilang root. Kapag nakakita ng Permission denied, suriin ang user, ang permissions ng file, at ang permissions ng bawat direktoryo sa path, at huwag ayusin sa 777. Ang mga user, grupo, permission, at sudo ay itinuturo nang detalyado sa kursong Linux.

Mga madalas itanong

Ano ang ibig sabihin ng chmod 755?

Nababasa, nasusulatan, at napapatakbo ng may-ari (7); nababasa at napapatakbo ng grupo at ng iba (5). Ito ang pamantayang set para sa direktoryo at script.

Ano ang pagkakaiba ng chmod at chown?

Binabago ng chmod ang permissions (ano ang maaaring gawin sa file), habang binabago ng chown ang may-ari at grupo (kanino ang mga permission na iyon).

Paano magbibigay ng sudo access sa isang user?

Sa Ubuntu at Debian, idagdag siya sa grupong sudo gamit ang sudo usermod -aG sudo pangalan; sa mga sistemang RHEL, sa grupong wheel. Magkakabisa ang pagbabago pagkatapos mag-log in muli.

Ano ang 4755 at ang SUID bit?

Ang unang digit na 4 ang nag-eenable ng SUID: tumatakbo ang programa bilang may-ari ng file, hindi bilang nag-execute nito. Ganito gumagana ang passwd; sa output ng ls, makikita ang s sa lugar ng x ng may-ari.

Bakit nababasa ng root ang file na may permission na 000?

Hindi sinusuri ng kernel ang karaniwang read at write permissions para sa root. Maaari lamang itong limitahan ng ibang mekanismo, gaya ng SELinux, AppArmor, o ng chattr +i attribute.

Pag-aralan ito sa video

Detalyadong tinatalakay ang paksang ito, may praktis, sa kursong “Linux: с нуля до уверенного администрирования”.

Pumunta sa kurso