வழிகாட்டி

லினக்ஸ் கோப்பு அனுமதிகள்: chmod, chown, sudo எடுத்துக்காட்டுகளுடன்

புதுப்பிக்கப்பட்டது: · Skillaria.Top

லினக்ஸில் கோப்பின் அனுமதிகள் மூன்று rwx தொகுப்புகளால் வரையறுக்கப்படுகின்றன — உரிமையாளர், குழு மற்றும் மற்றவர்களுக்கு; chmod மூலம் அவற்றை குறியீட்டு வடிவிலோ (chmod u+x) அல்லது எண்ணிலோ (chmod 755, இதில் r=4, w=2, x=1) மாற்றலாம். உரிமையாளரை chown மாற்றும்; நிர்வாகச் செயல்கள் sudo மூலம் நடக்கும்; Permission denied பிழை என்றால் பெரும்பாலும் கோப்பிலோ பாதையின் ஏதோ ஒரு கோப்பகத்திலோ உங்களுக்கு தேவையான உரிமை இல்லை என்று பொருள்.

லினக்ஸ் அனுமதிகள் "யார் இந்தக் கோப்பில் என்ன செய்யலாம்" என்ற கேள்விக்குப் பதில் சொல்கின்றன. ஒவ்வொரு கோப்புக்கும் ஓர் உரிமையாளர், ஒரு குழு, மூன்று அனுமதித் தொகுப்புகள் உண்டு: உரிமையாளருக்கு, குழுவுக்கு, மற்ற அனைவருக்கும். அனுமதிகளை chmod மாற்றும், உரிமையாளரை chown மாற்றும், நிர்வாகச் செயல்கள் sudo மூலம் நடக்கும். அனுமதிகளை எப்படி படிப்பது, மாற்றுவது, Permission denied பிழையை எப்படி சரிசெய்வது என்று பார்ப்போம்.

கோப்பின் அனுமதிகளை எப்படிப் பார்ப்பது

அனுமதிகள் 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

முதல் பத்து எழுத்துகளை இப்படிப் படியுங்கள்:

  • முதல் எழுத்து — வகை: - சாதாரணக் கோப்பு, d கோப்பகம், l குறியீட்டு இணைப்பு.
  • 2–4 எழுத்துகள் — உரிமையாளரின் (user) அனுமதிகள்.
  • 5–7 எழுத்துகள் — குழுவின் (group) அனுமதிகள்.
  • 8–10 எழுத்துகள் — மற்றவர்களின் (others) அனுமதிகள்.

அதன் பின்னால் கடின இணைப்புகளின் எண்ணிக்கை, உரிமையாளர் (alice), குழு (developers), அளவு, தேதி, பெயர் வருகின்றன. ஒரு கோப்புக்கு stat கட்டளை பயனுள்ளது:

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

r, w, x பொருள்

கோப்புகளுக்கும் கோப்பகங்களுக்கும் அனுமதிகளின் பொருள் வேறுபடுகிறது — இங்குதான் பெரும்பாலானோர் குழம்புகின்றனர்.

அனுமதிகோப்புக்குகோப்பகத்துக்கு
r (read)உள்ளடக்கத்தைப் படிக்கலாம்கோப்புகளின் பெயர்ப் பட்டியலைப் பார்க்கலாம் (ls)
w (write)உள்ளடக்கத்தை மாற்றலாம்உள்ளே கோப்புகளை உருவாக்கலாம், நீக்கலாம், பெயர் மாற்றலாம்
x (execute)நிரலாக இயக்கலாம்கோப்பகத்துக்குள் நுழையலாம் (cd), பாதை வழியாக கோப்புகளை அணுகலாம்

கவனியுங்கள்: கோப்பகத்தில் w மற்றும் x இருந்தால், கோப்பிலேயே எழுத அனுமதி இல்லாவிட்டாலும் ஒருவர் அதை நீக்கலாம். கோப்பகத்தில் x இல்லாவிட்டால், கோப்பின் r அனுமதி இருந்தாலும் உள்ளே உள்ள கோப்பைத் திறக்க முடியாது.

அமைப்பு அனுமதிகளை வரிசைப்படி சரிபார்க்கிறது: நீங்கள் உரிமையாளர் என்றால் உரிமையாளரின் அனுமதிகள் பொருந்தும்; இல்லையெனில் நீங்கள் கோப்பின் குழுவில் இருந்தால் குழுவின் அனுமதிகள்; அதுவும் இல்லையெனில் மற்றவர்களின் அனுமதிகள். root பயனர் படிக்க, எழுத அனுமதி சோதனையைத் தவிர்க்கிறார்.

எண் வடிவம்: 755, 644, 600

ஒவ்வொரு அனுமதிக்கும் ஒரு எடை உண்டு: r = 4, w = 2, x = 1. எடைகளின் கூட்டுத்தொகை மூன்று தொகுப்புகளில் ஒவ்வொன்றுக்கும் 0 முதல் 7 வரையிலான ஓர் இலக்கத்தைத் தருகிறது.

இலக்கம்அனுமதிகணக்கு
7rwx4+2+1
6rw-4+2
5r-x4+1
4r--4
0---0

மனப்பாடமாக வைத்திருக்க வேண்டிய பொதுவான சேர்க்கைகள்:

முறைவடிவம்எங்கே பயன்படுகிறது
644rw-r--r--சாதாரணக் கோப்புகள், உள்ளமைவுகள், HTML
755rwxr-xr-xகோப்பகங்கள், ஸ்கிரிப்ட்கள், நிரல்கள்
600rw-------தனிப்பட்ட SSH விசைகள், கடவுச்சொல் கோப்புகள்
700rwx------~/.ssh கோப்பகம், தனிப்பட்ட கோப்பகங்கள்
640rw-r-----சேவையின் குழு படிக்கும் உள்ளமைவு
777rwxrwxrwxஎல்லோருக்கும் எல்லாமே — கிட்டத்தட்ட ஒருபோதும் தேவைப்படுவதில்லை

chmod கட்டளை: அனுமதிகளை மாற்றுதல்

எண் முறை

எண் முறை முழு அனுமதியையும் ஒரே நேரத்தில் அமைக்கிறது:

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

குறியீட்டு முறை

குறியீட்டு வடிவில் குறிப்பிட்ட அனுமதிகளை மட்டும் மாற்றலாம், மற்றவை அப்படியே இருக்கும். யாருக்கு: u உரிமையாளர், g குழு, o மற்றவர்கள், a அனைவரும். செயல்: + சேர், - நீக்கு, = அப்படியே அமை.

chmod +x deploy.sh        # இயக்க அனுமதி
chmod u+x,g-w file        # உரிமையாளர் இயக்கலாம், குழு எழுத முடியாது
chmod o-rwx secrets/      # மற்றவர்களுக்கு எதுவும் இல்லை
chmod g=rx app/           # குழு படிக்கலாம், நுழையலாம் மட்டும்

மீண்டும் மீண்டும்: கோப்புகளையும் கோப்பகங்களையும் வேறுவேறாக

-R விருப்பம் முழு மரத்திலும் அனுமதிகளைப் பயன்படுத்துகிறது. ஆனால் chmod -R 755 எல்லாக் கோப்புகளையும் இயக்கக்கூடியதாக்கும், இது பொதுவாக விரும்பத்தக்கதல்ல. find மூலம் கோப்புகளையும் கோப்பகங்களையும் பிரித்து அமைப்பது நல்லது:

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

ஒரு குறுக்கு வழியும் உண்டு: பெரிய X ஏற்கனவே இயக்க அனுமதி உள்ள கோப்பகங்களுக்கும் கோப்புகளுக்கும் மட்டுமே அதைச் சேர்க்கும்.

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

chown கட்டளை: உரிமையாளரையும் குழுவையும் மாற்றுதல்

கோப்பின் உரிமையாளரை root மட்டுமே மாற்ற முடியும், எனவே chown கிட்டத்தட்ட எப்போதும் sudo உடன் இயக்கப்படுகிறது.

sudo chown alice report.txt               # உரிமையாளர்
sudo chown alice:developers report.txt    # உரிமையாளரும் குழுவும்
sudo chown :www-data index.html           # குழு மட்டும்
sudo chown -R www-data:www-data /var/www/site

குழுவை மட்டும் மாற்ற தனிக் கட்டளை உண்டு: sudo chgrp developers report.txt. உங்கள் குழுக்களை id அல்லது groups காட்டும்.

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

ஒரு பயனரை குழுவில் சேர்க்க sudo usermod -aG developers bob. -a விருப்பம் கட்டாயம்: அது இல்லையென்றால் பயனர் மற்ற கூடுதல் குழுக்கள் அனைத்திலிருந்தும் நீக்கப்படுவார். புதிய குழு மீண்டும் உள்நுழைந்த பிறகே செயல்படும்.

sudo: நிர்வாகியாகச் செயல்படுதல்

sudo ஒரு கட்டளையை root (அல்லது வேறு பயனர்) உரிமைகளுடன் இயக்கும்; root-இன் கடவுச்சொல்லுக்குப் பதிலாக உங்கள் சொந்தக் கடவுச்சொல்லைக் கேட்கும். ஒவ்வொரு அழைப்பும் பதிவில் சேமிக்கப்படும், எனவே யார் என்ன செய்தார் என்பது தெரியும்.

sudo apt update
sudo systemctl restart nginx
sudo -u postgres psql       # postgres பயனராக
sudo -i                     # ஊடாடும் root ஷெல்
sudo -l                     # எனக்கு என்னென்ன அனுமதி உள்ளது

யார் என்ன செய்யலாம் என்பது /etc/sudoers மற்றும் /etc/sudoers.d/ கோப்பகத்தின் கோப்புகளில் எழுதப்பட்டுள்ளது. இவற்றை sudo visudo மூலம் மட்டுமே திருத்துங்கள்: அது தொடரியலைச் சரிபார்க்கும், கோப்பில் பிழை இருந்தாலும் sudo அணுகலை இழக்க மாட்டீர்கள். Ubuntu-வில் sudo உரிமை sudo குழுவின் உறுப்பினர் என்பதன் மூலம் வழங்கப்படுகிறது; RHEL குடும்ப அமைப்புகளில் wheel குழு மூலம்.

# /etc/sudoers.d/deploy — deploy பயனர் nginx-ஐ மறுதொடக்கம் செய்ய மட்டும் அனுமதி
deploy ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx

sudo echo > file ஏன் வேலை செய்யவில்லை

அடிக்கடி விழும் பொறி:

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

>> திசைமாற்றத்தை செய்வது உங்கள் ஷெல், sudo அல்ல; அதனால் கோப்பு root உரிமை இல்லாமல் திறக்கப்படுகிறது. சரியான வழி tee மூலம்:

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

Permission denied: காரணங்களும் தீர்வுகளும்

Permission denied என்றால் உங்கள் செயல்முறையின் செயலை கர்னல் மறுத்துவிட்டது என்று பொருள். கண்டறியும் படிகள் எப்போதும் ஒன்றே: நான் யார் (id), உரிமையாளர் யார், அனுமதிகள் என்ன (ls -l), பாதையின் ஒவ்வொரு கோப்பகத்தின் அனுமதிகள் என்ன (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

இங்கே app கோப்பகம் மற்றவர்களுக்கு மூடப்பட்டிருப்பது தெரிகிறது — deploy குழுவில் இல்லாத பயனர் கோப்பின் அனுமதி எதுவாக இருந்தாலும் அதைத் தாண்டிச் செல்ல முடியாது.

ஸ்கிரிப்ட் இயங்கவில்லை

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

கோப்புக்கு இயக்க அனுமதி இல்லை. தீர்வு chmod +x deploy.sh, அல்லது ஒரு விளக்கி (interpreter) மூலம் இயக்குவது: bash deploy.sh. பகிர்வு noexec விருப்பத்துடன் ஏற்றப்பட்டிருந்தால் (பெரும்பாலும் /tmp), கோப்பை நேரடியாக இயக்க முடியாது; இரண்டாவது வழி மட்டுமே வேலை செய்யும்.

கணினி கோப்பகத்தில் எழுத முடியவில்லை

/etc, /usr, /var/www கோப்புகள் பொதுவாக root அல்லது சேவைப் பயனரின் உடைமை. ஒருமுறை மாற்றங்களுக்கு sudo பயன்படுத்துங்கள்; தொடர் வேலைக்கு எல்லோருக்கும் அல்ல, ஒரு குழுவுக்கு அனுமதி கொடுங்கள்.

இணைய சேவையகம் 403 தருகிறது

Nginx அல்லது Apache www-data பயனராக இயங்குகின்றன (Debian மற்றும் Ubuntu-வில்). அவைக்கு கோப்புகளைப் படிக்கும் அனுமதியும், பாதையின் அனைத்துக் கோப்பகங்களிலும் x அனுமதியும் தேவை. தீர்வு: sudo chown -R www-data:www-data /var/www/site, அல்லது கோப்பகங்களுக்கு 755, கோப்புகளுக்கு 644.

SSH விசையை ஏற்கவில்லை

அனுமதிகள் மிக அதிகமாகத் திறந்திருந்தால் SSH விசையைப் பயன்படுத்த மறுக்கிறது. தனிப்பட்ட விசை 600 ஆக இருக்க வேண்டும், ~/.ssh கோப்பகம் 700, சேவையகத்தின் authorized_keys கோப்பு 600.

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

Docker-ஐ அணுக முடியவில்லை

permission denied while trying to connect to the Docker daemon socket என்றால் நீங்கள் docker குழுவில் இல்லை. sudo usermod -aG docker $USER இயக்கி மீண்டும் உள்நுழையுங்கள். இந்தக் குழு உறுப்பினர் நடைமுறையில் root உரிமைக்கு சமம் என்பதை மறக்காதீர்கள்.

chmod 777 ஏன் மோசமான யோசனை

"chmod 777 போடுங்கள்" என்ற ஆலோசனை பிழையை நீக்கும், ஆனால் கோப்பை அமைப்பின் ஒவ்வொரு பயனரும் செயல்முறையும் எழுதக்கூடியதாக்கிவிடும். இணையப் பயன்பாடு ஹேக் செய்யப்பட்டால், தாக்குபவர் அந்தக் கோப்புகளை மாற்றிவிடலாம். சரியான வழி: எந்தப் பயனருக்கு அணுகல் தேவை என்பதைக் கண்டறிந்து, உரிமையாளர் அல்லது குழு மூலம் அந்தப் பயனருக்கு மட்டும் அனுமதி கொடுப்பது.

umask: இயல்பு அனுமதிகள்

புதிய கோப்புகள் umask குறைத்த அனுமதிகளுடன் உருவாகின்றன. பொதுவான மதிப்பு 022 என்றால் கோப்புகள் 644 உடனும், கோப்பகங்கள் 755 உடனும் உருவாகும்.

$ umask
0022

சுருக்கம்

லினக்ஸ் அனுமதிகள் உரிமையாளர், குழு, மற்றவர்களுக்கான மூன்று rwx தொகுப்புகள். chmod எண் (755, 644, 600) அல்லது குறியீட்டு வடிவில் அனுமதிகளை மாற்றும், chown உரிமையாளரை மாற்றும், sudo ஒரு கட்டளையை root ஆக இயக்கும். Permission denied பிழை வந்தால் பயனர், கோப்பின் அனுமதி, பாதையின் ஒவ்வொரு கோப்பகத்தின் அனுமதி ஆகியவற்றைச் சரிபாருங்கள்; 777 போட்டு பிரச்சினையை மறைக்காதீர்கள். பயனர்கள், குழுக்கள், அனுமதிகள், sudo ஆகியவை லினக்ஸ் பாடநெறியில் விரிவாகவும் நடைமுறையுடனும் கற்பிக்கப்படுகின்றன.

அடிக்கடி கேட்கப்படும் கேள்விகள்

chmod 755 என்றால் என்ன?

உரிமையாளர் படிக்கலாம், எழுதலாம், இயக்கலாம் (7); குழுவும் மற்றவர்களும் படிக்கலாம், இயக்கலாம் (5). கோப்பகங்கள் மற்றும் ஸ்கிரிப்ட்களுக்கான பொதுவான சேர்க்கை இது.

chmod-க்கும் chown-க்கும் என்ன வேறுபாடு?

chmod அனுமதிகளை மாற்றும் (கோப்பில் என்ன செய்யலாம்), chown உரிமையாளரையும் குழுவையும் மாற்றும் (அந்த அனுமதிகள் யாருடையவை).

ஒரு பயனருக்கு sudo உரிமையை எப்படி வழங்குவது?

Ubuntu மற்றும் Debian-இல் sudo usermod -aG sudo பெயர் என்று sudo குழுவில் சேர்க்கவும்; RHEL குடும்ப அமைப்புகளில் wheel குழுவில். மீண்டும் உள்நுழைந்த பிறகு மாற்றம் செயல்படும்.

4755 அனுமதி மற்றும் SUID பிட் என்றால் என்ன?

முதல் இலக்கம் 4 SUID-ஐ இயக்கும்: நிரல் அதை இயக்கியவரின் உரிமையில் அல்ல, கோப்பின் உரிமையாளரின் உரிமையில் இயங்கும். passwd இதற்கு உதாரணம்; ls வெளியீட்டில் உரிமையாளரின் x-க்குப் பதில் s தெரியும்.

000 அனுமதி கொண்ட கோப்பை root ஏன் படிக்க முடிகிறது?

சாதாரண படிக்க, எழுத அனுமதிகளை கர்னல் root-க்கு சோதிப்பதில்லை. root-ஐக் கட்டுப்படுத்த SELinux, AppArmor, அல்லது chattr +i போன்ற பிற வழிமுறைகள் தேவை.

இந்தத் தலைப்பை வீடியோவில் கற்றுக்கொள்ளுங்கள்

“Linux: с нуля до уверенного администрирования” பாடநெறியில் இந்தத் தலைப்பு பயிற்சியுடன் விரிவாக விளக்கப்பட்டுள்ளது.

பாடநெறிக்குச் செல்