Система полномочий в Linux имеет очень важное значение, поскольку благодаря ей можно разделять привилегии между пользователями, ограничить доступ к нежелательным файлам или возможностям, контролировать доступные действия для сервисов и многое другое. В Linux существует всего три вида прав - право на чтение, запись и выполнение, а также три категории пользователей, к которым они могут применяться - владелец файла, группа файла и все остальные.
Эти права применяются для каждого файла, а поскольку все в системе Linux, даже устройства, считаются файлами, то, получается что эти права применимы ко всему. Мы более подробно рассматривали как работают права доступа к файлам Linux в отдельной статье, а в этой, я хочу остановиться на команде chmod, которая используется для установки прав.
Содержание статьи
Команда chmod Linux
Эта команда имеет типичный для команд linux синтаксис, сначала команда, затем опции, а в конце файл или папка, к которой ее нужно применить:
$ chmod опции права /путь/к/файлу
Сначала рассмотрим какими бывают права доступа linux и как они устанавливаются. Пред этим рекомендую прочитать статью про права, ссылка на которую есть выше. Есть три основных вида прав:
- r - чтение;
- w - запись;
- x - выполнение;
- s - выполнение от имени суперпользователя (дополнительный);
Также есть три категории пользователей, для которых вы можете установить эти права на файл linux:
- u - владелец файла;
- g - группа файла;
- o - все остальные пользователи;
Синтаксис настройки прав такой:
группа_пользователейдействиевид_прав
В качестве действий могут использоваться знаки "+" - включить или "-" - отключить. Рассмотрим несколько примеров:
- u+x - разрешить выполнение для владельца;
- ugo+x - разрешить выполнение для всех;
- ug+w - разрешить запись для владельца и группы;
- o-x - запретить выполнение для остальных пользователей;
- ugo+rwx - разрешить все для всех;
Но права можно записывать не только таким способом. Есть еще восьмеричный формат записи, он более сложен для понимания, но пишется короче и проще. Я не буду рассказывать как считать эти цифры, просто запомните какая цифра за что отвечает, так проще:
- 0 - никаких прав;
- 1 - только выполнение;
- 2 - только запись;
- 3 - выполнение и запись;
- 4 - только чтение;
- 5 - чтение и выполнение;
- 6 - чтение и запись;
- 7 - чтение запись и выполнение.
Права на папку linux такие же, как и для файла. Во время установки прав сначала укажите цифру прав для владельца, затем для группы, а потом для остальных. Например, :
- 744 - разрешить все для владельца, а остальным только чтение;
- 755 - все для владельца, остальным только чтение и выполнение;
- 764 - все для владельца, чтение и запись для группы, и только чтение для остальных;
- 777 - всем разрешено все.
Каждая из цифр не зависит от предыдущих, вы вбираете именно то, что вам нужно. Теперь давайте рассмотрим несколько опций команды, которые нам понадобятся во время работы:
- -c - выводить информацию обо всех изменениях;
- -f - не выводить сообщения об ошибках;
- -v - выводить максимум информации;
- --preserve-root - не выполнять рекурсивные операции для корня "/";
- --reference - взять маску прав из указанного файла;
- -R - включить поддержку рекурсии;
- --version - вывести версию утилиты;
Теперь, когда вы знаете опции и как настраиваются права доступа chmod, давайте рассмотрим несколько примеров как работает команда chmod linux.
Примеры использования chmod
Я не буду приводить много примеров, так как там и так все более-менее понятно после пояснения правил создания выражений установки прав. Сначала самый частый случай - разрешить выполнения скрипта владельцу:
chmod u+x file
Или можно воспользоваться цифровой записью:
chmod 766 file
ls - l file
Недостаток цифровой записи в том, что вы не можете модифицировать уже существующие права доступа linux. Например, в первом варианте вы просто добавили флаг выполнения для владельца файла, а все остальные права оставили неизменными. В восьмеричном варианте мы полностью заменили текущие права новыми - все для владельца и чтение/запись для группы и остальных. Как видите, права установлены как и ожидалось. Теперь отключим выполнение владельцем:
chmod u-x file
И снова проверяем:
ls -l file
Дальше разрешим только чтение всем, кроме владельца:
chmod 744 file
ls -l file
Или отберем все права:
chmod ugo-rwx file
Файлы с правами 000 недоступны никаким пользователям, кроме суперпользователя и владельца. Вернем права обратно:
chmod 755 file
ls -l file
Такая же ситуация с файлами, владельцем которых вы не являетесь, если вы хотите изменить их права - используйте sudo. Из модификаторов прав вы можете конструировать любые последовательности, я думаю тут нет смысла разбирать их все. Для того чтобы поменять права на все файлы в папке используйте опцию -R:
chmod -R ug+rw dir
ls -l dir/
Также вы можете смотреть подробную информацию про вносимые изменения, например:
chmod -Rv ug+rw dir
Выводы
В этой небольшой статье была рассмотрена команда chmod linux. Она очень часто используется наряду с такими командами, как chown и umask для управления правами. Надеюсь, эта информация была полезной для вас. Если у вас остались вопросы, спрашивайте в комментариях!
Здравствуйте, подскажите пожалуйста. Возможно ли настроить на одну папку разных пользователей с разными правами для удалённого доступа через SAMBA?? Например, у меня стоит задача, чтобы группа пользователей имела лишь права для чтения, а один пользователь имел полные права. На группу права прописать смог, но добавил их путем редактирование папки через графический интерфейс, а для одного пользователя сделать полные права смог лишь поменяв владельца на него, при том более никто зайти не сможет. Консольно, я так и не понял, как возможно прописать Хотелось бы, чтобы и сам, как админ мог залезть удалённо, а не напрямую через права root сервера. Что нужно для этого сделать?
Права, правда пописал как полные:
[DESIGN]
comment = All users upload
browsable = yes
public = yes
path = /archive1/DESIGN
create mode = 0777
directory mask = 0777
available = yes
writable = yes
Можете помочь меня поправить, что делаю не так и что мне стоит изменить для грамотной настройки? Уж прошу прощения, новичок ещё в этом деле.
Попробуй так.
В smb.conf (зависит от дистра например /etc/samba/smb.conf)
[DESIGN]
writable = yes
# имеют права на чтение
read list = user_name1
#имеют права на запись
write list = user_name2 user_name3
#имеют право подключаться
valid users = user_name1 user_name2
user_name3
#запрет всех кроме valid users
guest ok = no
Попробуй так.
В smb.conf (зависит от дистра например /etc/sambs/smb.conf)
[DESIGN]
writable = yes
# имеют права на чтение
read list = user_name1
#имеют права на забись
write list = user_name2 user_name3
#имеют право подключаться
valid users = user_name1 user_name2
user_name3
#запрет всех кроме valid users
guest ok = no
Спасибо большое! Очень помогло))
цифры запомнить проще так:
1 - выполнение;
2 - запись;
4 - чтение;
остальные - производные от их сумм
3 - (1+2) выполнение + запись;
5 - (1+4) выполнение + чтение;
6 - (2+4) запись + чтение ;
7 - (1+2+4) выполнение + запись + чтение .
Это единственный русскоязычный сайт по линуксу где объясняют нормально!
Подскажите, пожалуйста, как вернуть стандартные настройки, у меня пока root, стоит, а то я не могу скачать файлы с сервера, думаю, что своими руками накосячил
chmod x first.py весёлая несуществующая команда.а всякие,,гуру,,с пеной у рта доказывают её работоспособность
выглядит интересно, учитывая, что права на выполнение выданы, но вот кому - вопрос хороший))
не говори, хорошо подметил
непонятна фраза:
"Недостаток цифровой записи в том, что вы не можете модифицировать уже существующие права доступа linux".
а чем вы занимались показывая примеры? просьба развернуть утверждение
Модифицировать = «изменить» по-русски.
То есть числом задать заново без учёта прежних прав доступа можно, а изменить или дополнить — нельзя.
Например, на одних файлах было разрешено чтение и запись, а на других только чтение.
Если заново добавить права на исполнение числом, то придётся задать и на чтение и запись, и прежние значения заменятся.
А если буквой, то только добавится право на исполнение, а чтение и запись останутся как было, на разных файлах по-разному.
Но работает же иногда? Т.е. на какой-то бубунте это не обязательно, но мы ведь не просто так пишем вначале файла #!/usr/bin/python?
chmod +x file
Ни как не реагирует. Подскажите в чем может быть дело?
chmod +rx file
Потому что для того что бы выполнить нужно считать этот файл)
Ubuntu был увлечён подобно юноше девицей, таки, по ложной причине симпатии, --
Убунту на языке зулу означает "человечность". Оказалось только в номинации,
как коммерческий ход: маркетинг всё, жажда свободы ничто, ты не ты когда голоден.
По самой задумке формирования ОС, ОС, -- дырявая, Убунту, -- она, девочка,
как все девочки должны продырявиться, -- циничная игра в слова и в дикую дефлорацию.
Отключили запрещение гостевого режима, -- всякая попытка запустить
ОС с запретом гостевого режима приводит к краху ОС.
Удаление анонимного юзера в списках пользователей приводит к краху ОС Ubuntu.
Вычеркнул Ubuntu из списков допустимых к использованию ОС, чего и вам желаю, вычеркните
из допустимых ОС к использованию.
С уважением, Владимир.
"Также есть три категории пользователей, для которых вы можете установить эти права на файл".
Фактически категорий четыре, ведь еще есть a (all) то есть пользователи входящие в любую из групп ugo. Хотя это тоже самое может быть проще иногда писать a вместо ugo.
Категорий три, a (all) это синтаксический сахар команды chmod, да иногда это может быть удобнее.
Очень долго искал описание "a" - а ведь оно используется. Неплохо было бы добавить в статью.
Здравствуйте. Подскажите пожалуйста, есть ли вариант, чтобы записать команду для смены прав доступа одной строкой (буквами)?
Например: rw-r--r-- Тут пользователю надо запретить запись, группе разрешить исполнение, а остальным разрешить запись.
Буду очень признателен!
полагаю - sudo chmod 456 /Dir/File1
1 - только выполнение;
2 - только запись;
3 - выполнение и запись;
4 - только чтение;
5 - чтение и выполнение;
6 - чтение и запись;
7 - чтение запись и выполнение.