Действия по воспроизведению:
germar@host:~$ cd /tmp/
germar@host:/tmp$ touch test && chmod u+s test && ls -la test
-rwSr--r-- 1 germar germar 0 Nov 2 20:11 test
germar@host:/tmp$ chown germar:germar test && ls -la test
-rw-r--r-- 1 germar germar 0 Nov 2 20:11 test
Протестировано с Debian squeeze и Ubuntu 12.04
permissions
users
chown
Germar
источник
источник
Ответы:
Не ошибка в соответствии с документацией chown:
$
info coreutils 'chown invocation'
источник
info coreutils
раньше. Я только прочитал man-страницу и искал в Интернете.Это по замыслу, и это стандартное поведение. Цитируя стандарт POSIX :
(
s
это setuid (или setgid в столбце группы), кстати, не липкий.)Это поведение соответствует поведению основного системного вызова (за исключением того, что в некоторых системах биты setxid очищаются только для исполняемых файлов).
Причина удаления бита setuid заключается в том, что смена владельца также меняет того, каким пользователем будет эффективный идентификатор пользователя процесса. В частности, в системах, где пользователь может выдать файл,
cp /bin/sh foo; chmod u+s foo; chown joe foo
будет создан исполняемый файл setuid, принадлежащий joe, гигантская дыра в безопасности.источник