То, что файл не может быть удален, не зависит от полномочий файла, устанавливаемых на только для чтения, но на полномочиях родительского каталога.
Когда у Вас есть доступ для записи к каталогу, можно удалить файлы только для чтения в том каталоге, даже если Вы не владеете теми файлами сами (ссылка).
# file removal test
(
mkdir -p test
echo hello > test/file.txt
chmod -w test
chmod -w test/file.txt
sudo chown root:wheel test/file.txt
#sudo chflags uchg test/file.txt
ls -ld test test/file.txt
rm -fv test/file.txt
echo
chmod 700 test # set write permission
ls -ld test test/file.txt
rm -fv test/file.txt
)
Если Вы удаляете доступ для записи к test
каталог в Вашем примере выше, gnutar
(на Mac OS X), не может удалить test/1.txt
и жалуется:
# gnutar: ./test/1.txt: Cannot open: File exists
# gnutar: Exiting with failure status due to previous errors
# After
tartest() {
dirperms="$1"
mkdir -p test
[[ -f test/1.txt ]] && chmod +w test/1.txt
echo "Before" > test/1.txt
gnutar -czf ./test.tgz ./test
echo "After" > test/1.txt
chmod -w test/1.txt
chmod "${dirperms}" test
gnutar -xzf ./test.tgz
cat test/1.txt
return 0
}
tartest 755
tartest 555
Нормальные настройки для /tmp
1777, который ls
шоу как drwxrwxrwt
. Это: широко открытый, за исключением того, что только владелец файла может удалить его (это что это дополнительное t
разрядные средства для каталога).
Проблема с a /tmp
с режимом 777 то, что другой пользователь мог удалить файл, что Вы создали и заменяете контентом их выбора.
Если Ваш /tmp
tmpfs файловая система, перезагрузка восстановит все. Иначе, выполненный chmod 1777 /tmp
.
Кроме того, много файлов в /tmp
потребность быть частным. Однако по крайней мере один каталог критически должен быть читаемым миром: /tmp/.X11-unix
, и возможно некоторые другие подобные каталоги (/tmp/.XIM-unix
, и т.д.). Следующая команда должна главным образом установить вещи право:
chmod 1777 /tmp
find /tmp -mindepth 1 -name '.*-unix' -exec chmod 1777 {} + -prune -o -exec chmod go-rwx {} +
Т.е. сделайте все файлы, и частные каталоги (удалите все полномочия для группы и другого), но сделайте сокеты X11 доступными для всех. Управление доступом на этих сокетах осуществляется сервером, не полномочиями файла. Могут быть другие сокеты, которые должны быть общедоступными. Выполненный find /tmp -type s -user 0
обнаружить корневые сокеты, которые Вы, возможно, должны сделать доступным для мира. Могут быть сокеты, принадлежавшие другим пользователям системы также (например, связываться с системной шиной); исследуйте с find /tmp -type s ! -user $UID
(где $UID
Ваш идентификатор пользователя).
/tmp
и /var/tmp
должен был считать, пишут и выполняют права для всех; но Вы были бы обычно также добавлять липко-разрядное (o+t
), чтобы препятствовать тому, чтобы пользователи удалили файлы/каталоги, принадлежащие другим пользователям. Так chmod a=rwx,o+t /tmp
должен работать.
Что касается изменяющихся полномочий рекурсивно... Пока владелец/группа остается, как это для файлов и каталогов, это не должна быть так большая часть проблемы. Но Вы могли, возможно, изменить разрешение всего под /tmp
(не/tmp самостоятельно) для обеспечения конфиденциальности пользователей, путем удаления rx
права других и возможно группы.
Находка является хорошим способом сделать это. Как корень, сделайте:
cd /tmp
find . -type f -exec chmod u=rw,go= {} \; # (or u=rw,g=r,o= {})
find . -type d -exec chmod u=rwx,go= {} \; # (or u=rwx,g=rx,o= {})
/tmp/.X11-unix/*
читаемый миром также, или Вы не сможете запустить X приложений больше.
– Gilles 'SO- stop being evil'
09.04.2013, 01:51
[root@Niflheim tmp]# ls -alF .
total 1632
drwxrwxrwt 15 root root 4096 Apr 7 04:24 ./
drwxr-xr-x 28 root root 4096 Apr 2 21:02 ../
[root@Niflheim tmp]# stat -c '%A %a %n' .
drwxrwxrwt 1777 .
От машины CentOS 5.9.
go-rwx
: никакие полномочия для группы и других. Это устанавливает полномочия наrwx------
(за исключением того, что файлы, которые были созданы начиная сchmod
может закончиться с меньшим количеством полномочий, например.rw-------
). Другими словами, файлы будут доступны только их владельцем./tmp/.[!.]*
должен включать точечные файлы, которые обычно существуют в/tmp
. – Gilles 'SO- stop being evil' 08.04.2013, 12:28