Каковы правильные разрешения для / tmp? Я непреднамеренно выставил все это публично рекурсивно

79

Я злоупотреблял sudo.

Я создал действительно очень короткий временный каталог, которым я хотел поделиться с некоторыми пользователями в течение нескольких часов ... и я назвал этот каталог /some/path/tmp

К сожалению, я запустил sudo chown 777 -R /tmpвместо sudo chown 777 -R tmp, так что мой /tmpфайл теперь полностью публично.

Я использую общее /tmpдовольно часто (каждый день, почти каждый час) лично для коротких жизненных файлов, сценариев, множества сценариев.

Является ли это проблемой безопасности сейчас, когда она полностью предана гласности? Должен ли я изменить его обратно на более безопасные настройки или использовать общие настройки по умолчанию для дистрибутива Debian или Ubuntu - (я не знаю, какими они были)? Каковы правильные разрешения для /tmp?

Стефан Роллан
источник
Помните, что я забыл кое-что важное в своем первоначальном ответе: сокет X11 должен быть общедоступным, иначе вы не сможете запускать новые приложения с графическим интерфейсом. Я обновил свой ответ.
Жиль "ТАК - перестань быть злым"
Это было chownили chmod?
Мелебиус
@Melebius Я немного озадачен вашим вопросом: я не упомянул chmod. chown (как ch - own) - это владелец файлов, которым владеет файл. chmod (как ch - modifify) больше о том, кто может выполнять, или писать внутри, или читать содержимое файла.
Стефан Роллан
2
@ StephaneRolland Да, это то, что смутило меня. Вы можете использовать, chown 777который устанавливает право владения файлом для пользователя с идентификатором 777. Однако все ответы, включая принятый, работают с chmod. Поскольку все они устанавливают одинаковое значение разрешения для всех пользователей (владелец, группа и т. Д.), Большинство эффектов владения файлами становятся неактуальными. Однако правильная команда для исправления результата sudo chown 777 -R /tmpдолжна быть sudo chown root -R /tmp.
Мелебиус

Ответы:

117

Нормальные настройки для /tmp1777, который lsпоказывает как drwxrwxrwt. То есть: широко открыт, за исключением того, что только владелец файла может удалить его (вот что tозначает этот дополнительный бит для каталога).

Проблема с /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ваш идентификатор пользователя).

Жиль "ТАК - перестань быть злым"
источник
1
не могли бы вы объяснить второй chmod больше?
Бартломей Левандовски
@BartlomiejLewandowski go-rwx: нет разрешений для группы и других. Это устанавливает права доступа rwx------(за исключением тех файлов, которые были созданы, поскольку они chmodмогут иметь меньше разрешений, например rw-------). Другими словами, файлы будут доступны только их владельцу. /tmp/.[!.]*должен включать точечные файлы, которые обычно существуют в /tmp.
Жиль "ТАК - перестань быть злым"
@BartlomiejLewandowski: chmod -go-rwx: установить права «rwx» для владельца и группы. r = read, w = write, x = execute (для файла) или enter / traverse (для каталога). 777 = rwxrwxrwx (правая часть может рассматриваться как: «установить» r »установить» w »установить« x », установить« r »установить« w »установить« x », установить« r »установить« w »установить« x » '", который в двоичном виде представлен как" 111111111 "(1 для установки, 0 для сброса). А" 111111111 "в двоичном формате представлен в восьмеричном виде как" 777 "(восьмеричный = группы из 3 битов, каждая группа имеет значение от 0 до 7). Если "rwxr-xr--", то это будет "111101100", что в восьмеричном означает "754"
Оливье Дюлак
2
+ T упоминается как бит закрепления. Это то, что мешает кому-либо, кроме владельца, иметь возможность удалять файлы, даже если разрешения 777 в противном случае. Первоначальный залипал, чтобы ядро ​​оставляло программы обычно в памяти при выходе из программы, чтобы их не нужно было извлекать с диска при следующем запуске. Мы говорим PDP11 дней ....
Куртм
1
@GabrielFair Я заменил команду с подстановочными знаками на команду с использованием команды find, которая не столкнется с этой проблемой.
Жиль "ТАК - перестань быть злым"
10

/tmpи /var/tmpдолжен иметь права на чтение, запись и выполнение для всех; но вы также обычно добавляете sticky-bit ( o+t), чтобы пользователи не могли удалять файлы / каталоги, принадлежащие другим пользователям. Так chmod a=rwx,o+t /tmpдолжно работать.

Что касается рекурсивного изменения разрешений ... Пока владелец / группа остается такой же, как и для файлов и каталогов, это не должно быть такой большой проблемой. Но, возможно, вы можете изменить разрешение всего, что находится под /tmp(не самой / tmp), чтобы обеспечить конфиденциальность пользователей, удалив rxправа других и, возможно, группы.

Найти это хороший способ сделать это. От имени пользователя root выполните:

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-приложения.
Жиль "ТАК - перестань быть злым"
chmod a=rwX,o+t /tmp -Rдолжен сделать findмагию.
dhill
3
[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.

Аарон Д. Мараско
источник