Довольно часто нужно менять права у файла при помощи chmod. Изменяют права чаще всего для запуска файла или для скрытия файла от посторонних глаз. Команда chmod довольно часто используется.
оператор | описание |
---|---|
+ | добавить определенные права |
- | удалить определенные права |
= | установить определенные права |
# операторы для команды chmod
+ - =
# Делает файл "file1" доступным для исполнения всем пользователям.
chmod +x script1.sh
# запрет на выполнение
chmod -x script1.sh
# любой пользователь сможет запустить "file1" с привилегиями владельца файла.
chmod u+s /f1/f3/file1
# разрешение на чтение
chmod o+r /folder/file
# снятие разрешения чтения файла
chmod o-r /folder/file
#забрать все права
chmod o= /folder/file
# Выдает право на запись/чтение владельцу файла "file1", и право на чтение
# всем остальным (восьмеричное число).
chmod 644 file1
# Выдает право на чтение, запись и исполнение файлов в каталоге,
# дополнительно устанавливает "sticky bit".
# Это означает, что удалять файлы в этом каталоге могут только владельцы файлов,
chmod 1777 directory-name
С ключом -R команда chmod будет рекурсивно накидывать всем файлам права 777 на выполнение. Даже если в папке folder одна тысяча файлов, то все они будут иметь права 777 или rwx.
# широкие полномочия
chmod -R +777 ./folder
chmod -R +777 ./folder
# аналогичная запись
chmod -R +rwx ./folder
chmod -R -rwx ./folder
Вы можете проверить свои права. Предлагаю простенький скрипт.
# Еще один способ отличить root-а от не root-а:
ROOTUSER_NAME=root
username=`id -nu` # Или... username=`whoami`
if [ "$username" = "$ROOTUSER_NAME" ]
then
echo "Рутти-тутти. - root!"
else
echo "Вы - лишь обычный юзер."
fi
Таблица с правилами владельца
значение | описание |
---|---|
u | владелец |
g | группа |
o | прочие пользователи |
a | все пользователи (или ugo) |
Таблица атрибутами
значение | описание |
---|---|
r | атрибут чтения. разрешает читать файл |
w | атрибут записи, разрешает редактировать, удалять, переименовывать или добавлять файлы |
x | атрибут выполнения, позволяющий запускать на выполнение |
s | suid - атрибут, позволяющий любому пользователю запустить файл на выполнение с правами его владельца sudo |
Символьное представление выглядит примерно так: r:w:x|r:w:x|r:w:x. Я специально поставил разделитель |, чтобы показать три блока.
Числовое представление выглядит примерно так: 4:2:1|4:2:1|4:2:1.
Владельцы: u | g | o | a. Например, chmod u=rwx,g=rx,o=rx filename.txt - эта команда установит права «rwxr-xr-x» (755) для файла filename.txt
chmod 0777 filename.txt - эта команда разрешает всем все действия (чтение, запись, выполнение) с файлом.
Воспользуйтесь выводом команды ls -l. В одном из столбцов будет символьное представление прав файла.
значение | описание |
---|---|
0 | --- |
1 | --x |
2 | -w- |
3 | -wx |
4 | r-- |
5 | r-x |
6 | rw- |
7 | rwx |
Например, -rw-rw-rw равносильно chmod 666 file.txt. Предлагаю вам простой способ для накидывания прав. Запомнить все таблицы сложно и не нужно. Вы добавляете большие права файлу chmod 777 file.txt и потом лишаете его некоторых прав. Допустим файлы нельзя выполнять chmod o-x file.txt. Прочие пользователи (не root) не смогут запускать файл, но смогут читать и записывать информацию в файл.
Довольно часто нужно создать папку с нужными правами. Смотрите статью как создать папки mkdir BASH. Если при создании файла указали не верные права, то вам не нужно заново создавать файл. Вы можете воспользоваться командой chmod с нужными ключами.
Вы можете изменить владельца файла, директории или ссылки. Файлы с включённым режимом StickyBit может удалить только владелец файла (u=user2).
#смена владельца папки
sudo chown user2 dir1/
#смена группы владеющей файлом
sudo chgrp group1 file.txt
#включить StickyBit
sudo chmod 1777 dir1
#выключить StickyBit
sudo chmod 0777 dir1