5.5.1. Смена владельца файла: chown() , fchown() и lchown()

5.5.1. Смена владельца файла: chown(), fchown() и lchown()

Владелец и группа файла изменяются с помощью трех сходных системных вызовов.

#include <sys/types.h> /* POSIX */

#include <unistd.h>

int chown(const char *path, uid_t owner, gid_t group);

int fchown(int fd, uid_t owner, gid_t group);

int lchown(const char *path, uid_t owner, gid_t group);

chown() работает с аргументом имени файла, fchown() работает с открытым файлом, а lchown() работает с символической ссылкой вместо файла, на который эта ссылка указывает. Во всех других отношениях эти три вызова работают идентично, возвращая 0 в случае успеха и -1 при ошибке.

Стоит заметить, что один системный вызов изменяет как владельца, так и группу файла. Чтобы изменить лишь владельца или лишь группу, передайте (-1) в качестве того идентификационного номера, который должен остаться без изменений.

Хотя вы могли бы подумать, что можно передать соответствующее значение из полученного заранее struct stat для файла или файлового дескриптора, этот метод больше подвержен ошибкам. Возникает условие состязания: между вызовами stat() и chown() владелец или группа могут измениться.

Вы могли бы поинтересоваться: «Зачем нужно изменять владельца символической ссылки? Права доступа и владение ей не имеют значения». Но что случится, если пользователь уходит, а все его файлы все еще нужны? Необходима возможность изменения владельца всех файлов этого лица на кого-то еще, включая символические ссылки.

Системы GNU/Linux обычно не позволяют рядовым пользователям (не root) изменять владельца («отдавать») своих файлов. Смена группы на одну из групп пользователя, конечно, разрешена. Ограничение в смене владельцев идет от BSD систем, у которых тоже есть этот запрет. Главная причина в том, что разрешение пользователям отдавать файлы может нарушить дисковый учет. Рассмотрите такой сценарий:

$ mkdir mywork /* Создать каталог */

$ chmod go-rwx mywork /* Установить права доступа drwx------ */

$ cd mywork /* Перейти в него */

$ myprogram > large_data_file /* Создать большой файл */

$ chmod ugo+rw large_data_file /* Установить доступ -rw-rw-rw- */

$ chown otherguy large_data_file /* Передать файл otherguy */

В этом примере large_data_file теперь принадлежит пользователю otherguy. Первоначальный пользователь может продолжать читать и записывать файл из-за его прав доступа. Но дисковое пространство, которое он занимает, будет записано на счет otherguy. Однако, поскольку он находится в каталоге, который принадлежит первому пользователю и к которому otherguy не может получить доступ, otherguy не имеет возможности удалить файл.

Некоторые системы System V разрешают пользователям передавать свои файлы. (При смене владельца соответствующие биты файлов setuid и setgid сбрасываются.) Это может быть особенной проблемой, когда файлы извлекаются из архива .tar или .cpio; извлеченные файлы имеют UID и GID, закодированный в архиве. На таких системах программы tar и cpio имеют опции, предотвращающие это, но важно знать, что поведение chown() действительно отличается на разных системах.

В разделе 6.3 «Имена пользователя и группы» мы увидим, как соотносить имена пользователя и группы с соответствующими числовыми значениями

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

5.10 CМЕНА ВЛАДЕЛЬЦА И РЕЖИМА ДОСТУПА К ФАЙЛУ

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

5.10 CМЕНА ВЛАДЕЛЬЦА И РЕЖИМА ДОСТУПА К ФАЙЛУ Смена владельца или режима (прав) доступа к файлу является операцией, производимой над индексом, а не над файлом. Синтаксис вызова соответствующих системных функций:chown(pathname, owner, group)chmod(pathname, mode)Для того, чтобы поменять владельца


1.4.5. Понятие владельца файла, права доступа к файлам и каталогам

Из книги Fedora 8 Руководство пользователя автора Колисниченко Денис Николаевич

1.4.5. Понятие владельца файла, права доступа к файлам и каталогам Первоначально в DOS, а затем и в Windows не было такого понятия, как "владелец файла" и "права доступа к файлу". Права доступа к файлам и каталогам появились только в файловой системе NTFS, но фактически NTFS "пришла в


Приложение В. Команды chmod и chown: изменение прав доступа

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

Приложение В. Команды chmod и chown: изменение прав доступа В Linux есть понятие владельца файла (каталога) и прав доступа к нему. С данными понятиями мы познакомились в главе I, но подробно не рассматривали их. Здесь мы поговорим об этом подробнее.В Linux существует три типа прав


4.6.1. Команды chown и chgrp

Из книги Системное программирование в среде Windows автора Харт Джонсон М

4.6.1. Команды chown и chgrp Эти команды служат для смены владельца файла и группы файла. Выполнять смену владельца может только суперпользователь, смену группы может выполнить сам владелец файла или суперпользователь. Для того, чтобы иметь право сменить группу, владелец должен


Установка размера файла, инициализация файла и разреженные файлы

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла


11.3.5. Смена владельца и группы файла

Из книги Ubuntu 10. Краткое руководство пользователя автора Колисниченко Д. Н.

11.3.5. Смена владельца и группы файла Точно так же, как права доступа, информация о группе и владельце файла хранится в inode, поэтому все жесткие ссылки на файл имеют одинакового владельца и группу. Похожий системный вызов используется для смены владельца и группы файла.#include


5.8. Права доступа и атрибуты файла. Команды chown, chmod и chattr

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

5.8. Права доступа и атрибуты файла. Команды chown, chmod и chattr 5.8.1. Права доступа к файлам и каталогам Для каждого каталога и файла вы можете задать права доступа. Точнее права доступа автоматически задаются при создании каталога (файла), а вы, при необходимости, можете их


5.8.2. Смена владельца файла

Из книги Linux программирование в примерах автора Роббинс Арнольд

5.8.2. Смена владельца файла Если вы хотите «подарить» кому-то файл, т. е. сделать какого-то пользователя владельцем файла, то вам нужно использовать команду chown: chown <пользователь> <файл> Примечание Возможно, что после изменения владельца файла вы сами не сможете


Изменение владельца базы данных

Из книги Цифровой журнал «Компьютерра» № 200 автора Журнал «Компьютерра»

Изменение владельца базы данных Восстановленный файл базы данных или созданный из gbak имеет владельцем того пользователя, который выполнил восстановление. Следовательно, выполнение копирования и восстановления является механизмом для изменения владельца базы данных.!


5.5. Смена владельца, прав доступа и времени изменения

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

5.5. Смена владельца, прав доступа и времени изменения Несколько других системных вызовов дают вам возможность изменять другие относящиеся к файлу сведения: в частности, владельца и группу файла, права доступа к файлу и времена доступа и изменения


5.5.4. Использование fchown() и fchmod() для обеспечения безопасности

Из книги Ноутбук [секреты эффективного использования] автора Пташинский Владимир

5.5.4. Использование fchown() и fchmod() для обеспечения безопасности В исходных системах Unix были только системные вызовы chown() и chmod(). Однако, на сильно загруженных системах эти системные вызовы попадают в условия состязания, посредством чего злоумышленник может организовать


1.7. Команды chown и chgrp

Из книги автора

1.7. Команды chown и chgrp Создав файл, вы автоматически становитесь его владельцем, но можете передать право владения другому пользователю, у которого есть запись в файле /etc/passwd. Только системный администратор либо фактический владелец может передавать права на файл другому


1.7.1. Пример использования команды chown

Из книги автора

1.7.1. Пример использования команды chown Вот как можно поменять владельца файла с помощью команды chown:$ ls -l-rwxrwxrwx 1 louise admin 345 Sep 20 14:33 project$ chown pauline project $ ls -l-rwxrwxrwx 1 pauline admin 345 Sep 20 14:33 projectПраво владения файлом project переходит от пользователя louise к


Глава 10 Обеспечение безопасности ноутбука и его владельца

Из книги автора

Глава 10 Обеспечение безопасности ноутбука и его владельца • Как защитить ноутбук• Как защититься от ноутбукаПрименительно к взаимодействию с ноутбуком проблема безопасности расщепляется на две составляющие: как обеспечить безопасность портативному компьютеру и


Дилемма владельца проекта

Из книги автора

Дилемма владельца проекта Один из аргументов против метода, за который я выступаю, заключается в том, что он частично лишает владельцев проекта уверенности и власти. Владельцы проекта, для которого была создана специальная группа, могут рассчитывать на полную отдачу