Які правильні дозволи для / tmp? Я ненавмисно все це публічно рецидивував


78

Я зловживав sudo.

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

На жаль, я запустив sudo chown 777 -R /tmpзамість цього sudo chown 777 -R tmp, тому мій /tmpфайл зараз повністю відкритий.

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

Чи є це питання безпеки зараз, коли він повністю налаштований на загальний доступ? Чи варто повернути його назад на більш безпечні налаштування чи подобаються загальні настройки за замовчуванням для дистрибутива Debian або Ubuntu - (я не знаю, які вони були)? Для чого правильні дозволи /tmp?


Будьте уважні, що я забув щось важливе у своїй початковій відповіді: розетка X11 повинна бути загальнодоступною, інакше ви не зможете запускати нові програми GUI. Я оновив свою відповідь.
Жиль

Це було chownчи chmod?
Мелебій

@Melebius Мене трохи спантеличено вашим запитанням: я не згадував chmod. chown (наприклад, ch - own) - це право власності на файли, яким користувач володіє файлом. chmod (наприклад, ch - модифікувати) - це більше про те, хто може виконати або написати всередину чи прочитати вміст файлу.
Стефан Ролланд

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щоб відкрити root-розетки, які, можливо, знадобляться для доступу до світу. Можуть бути розетки, що належать і іншим користувачам системи (наприклад, для зв'язку з системною шиною); досліджуйте find /tmp -type s ! -user $UID(де $UIDваш ідентифікатор користувача).


1
ви могли б пояснити другий chmod більше?
Bartlomiej Lewandowski

@BartlomiejLewandowski go-rwx: немає дозволів для групи та інших. Це встановлює дозволи rwx------(за винятком того, що файли, створені з моменту, chmodможуть мати менше дозволів, наприклад rw-------). Іншими словами, файли будуть доступні лише їх власникові. /tmp/.[!.]*полягає у включенні точкових файлів, які зазвичай існують у /tmp.
Жиль

@BartlomiejLewandowski: chmod -go-rwx: встановити права "rwx" на Власника та Групу. r = прочитати, w = записати, x = виконати (для файлу) або ввести / пройти (для каталогу). 777 = rwxrwxrwx (праву частину можна побачити як: "set 'r' set 'w' set 'x', set 'r' set 'w' set 'x', set 'r' set 'w' set 'x '", який у двійковій формі представлений як" 111111111 "(1 для множини, 0 для скидання). А" 111111111 "у двійковій формі представлений у восьмериці як" 777 "(восьмерична = групи з 3 біт, кожна група має значення 0 до 7). "Якщо" rwxr-xr-- "це було б" 111101100 ", що в восьмериці -" 754 "
Олів'є Дулак

2
+ T називається клейким бітом. Ось що не дозволяє власнику інших користувачів, окрім власника, видаляти файли, навіть якщо дозвіл 777 в іншому випадку. Клейкий біт спочатку мав змусити ядро ​​залишати звичайні програми в пам’яті, коли вони виходили, щоб їм не довелося вибирати з диска при наступному запуску. Ми говоримо PDP11 днів ....
kurtm

1
@GabrielFair Я замінив команду за допомогою підстановок на одну, використовуючи функцію find, яка не зіткнеться з цією проблемою.
Жиль

10

/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-програми.
Жиль

chmod a=rwX,o+t /tmp -Rповинні робити findмагію.
холод

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.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.