У меня есть вопрос по домашнему заданию о программировании ядра в Linux. Вопрос такой:
Какая специфическая для Linux привилегия необходима для сохранения права собственности на файл при его копировании и как ее получить?
Экспериментируя, я обнаружил, что мне нужно быть root
суперпользователем, чтобы это работало. Есть ли более конкретный способ объяснить этот эффект?
решение1
Смотритеcapabilities(7)
Страница руководства – вам нужна CAP_CHOWN
возможность изменить владельца файла через chown()
. (У root все возможности включены автоматически. На странице руководства объясняется, как получить возможности в других случаях.)
Не существует отдельного метода/возможности простосохранятьвладение, поскольку копии файлов Linux создаются путем простого чтения/записи данных в целевой файл, а затем того же самого с метаданными. (Для сравнения, Windows NT имеет SeBackupPrivilege
и SeRestorePrivilege
привилегии и вызовы BackupRead()
/ BackupWrite()
.)