Як запобігти новому користувачеві робити щось небезпечне?


31

Нещодавно я встановив сервер Ubuntu на свій сервер, щоб спробувати Linux як новий користувач. Я слідував підручником про те, як налаштувати веб-сервер, який сказав, що мені потрібно до chmod 777реєстру веб-сервера, щоб він міг записатись.

У всякому разі, я створив новий обліковий запис для одного чувака, щоб він міг бачити деякі файли на сервері, які я розмістив у його домашньому режимі:

adduser francis

Після створення облікового запису я перевірив, який у нього доступ

groups francis

Він сказав "francis: francis", тому я не вважав проблемою, що ubuntu не включив його до жодної групи за замовчуванням, що має сенс, він створив його без додаткових дозволів з точки зору безпеки, тому все добре і денді. Через тиждень, в абсолютному і жахливому жаху, я виявив, що, хоча він не міг робити такі речі, як SUDO або заплутатися в системних каталогах, він мав повний доступ до майже всього іншого на сервері. Наприклад, він мав повний доступ для читання / запису до файлів мого веб-сервера за адресою / var / www (і, таким чином, паролі, що зберігаються у файлах конфігурації php тощо), хоча цей каталог НЕ в його домашній каталог, і я ніколи не додавав його до жодної групи, яка могла б отримати доступ до цього каталогу, і я не надав йому спеціального доступу до чого-небудь після того, як робив аддудера.

У будь-якому випадку, що тут відбувається? Як я вбиваю його доступ до чогось важливого? Він не повинен мати доступ до таких матеріалів, як / media або / var / www. Я подумав, що новим користувачам за замовчуванням заважають робити щось небезпечне або судити там, де вони не повинні бути.

Отже, підсумовуючи, мені потрібно лише дозволити йому доступ до каталогів, які я вручну вказую + до каталогів, які йому потрібні для належного функціонування (його домашній dir, vim, nano тощо.)

Дякую


30
Ви робите chmod 777 і запитуєте, чому кожен може читати, щоб там писати? читати сторінку людини для chmod
Anwar,

16
Так, 777 - це ваша проблема з кількох причин.
Android Dev

21
@Askerman - Ні, коли ви дасте 777, кожен може отримати доступ до всього , будь ласка, прочитайте це: linux.com/learn/understanding-linux-file-permissions
Android Dev

11
Всі ми робимо помилки, особливо, коли вчимося в абсолютно новому середовищі. Це добре, чому можна навчитися. Це, безумовно, розумно викласти свої уявлення про те, як працюють у Windows під час використання ОС на базі Linux. Після скасування дозволів ви повинні помітити, що користувач не може змінити нічого, чого не повинен. Якщо ви використовували в chmodіншому місці, можливо, у вас виникнуть інші проблеми.
Арронічний

8
FYI - Я підтримую це питання, тому що насправді це хороший пошук для нових людей. І це неправильне уявлення, мабуть, частіше, ніж ми думаємо. Це також хороший приклад того, чому ви не повинні просто копіювати команди, які ви знайдете в Інтернеті (навіть тут), не знаючи, що вони роблять.
Аарон

Відповіді:


40

Це як розроблено. І гірше. chmod 777 означає ... "Я хотів би, щоб власник, хтось із його групи, і хто-небудь взагалі читав, писав та виконував дозволи"

Що досить страшно.

А для веб-сервера 777 не є оптимальним. 755 (Власник має повну групу дозволів, а інші читають і виконують) - це звичайний типовий засіб, але з того, що ви сказали, хочете принаймні читати-писати або виконувати читання-запис для власника (користувача веб-сервера), а може бути група та жодних дозволів для користувача. Є більш повні питання щодо відповідних рівнів дозволів на сервері за замовчуванням, але розглянемо щось на зразок 640 або 740.

проте, ви також можете помістити користувача в його маленький світ - налаштування chroot, щоб утримувати користувача в його просторі в системі. Для цього плавають путівники - наприклад , відмінна відповідь Олі, яка може бути варіантом залежно від ваших потреб.


4
Незначна точка: "власник, хтось із його групи ..." - власник файлу не обов'язково повинен належати до групи файлів.
alex_d

2
Приємно. Мені подобається, що ви посилалися на канонічну відповідь на сервері default.
Старійшина Гік

3
Історичний жаргон для цієї ситуації « світ для читання / запису».
Каз

19

По суті, він розпадається так:

R = 4 (read)
W = 2 (write)
X = 1 (execute)

Отже, дозволів на читання було б лише 4, читання та запис було б 6, читання та виконання було б 5, а все (читання, запис, виконання) - це 7. Ось як ви обчислюєте значення октету дозволу для власника, групи власника , або всі.

При застосуванні цих дозволів chmodдо місця розташування файлів чи каталогів наведені вище числа обчислюються таким чином, як октет для кожного власника, групи та всіх:

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

Тож, якщо я хотів би дати собі та своїй групі читання, запис та виконання дозволів до папки, якою я володів, але я не хотів, щоб усі могли читати її, я б використав:

$ chmod 770 myDirectory

Для отримання додаткової інформації перегляньте головну сторінку для chmod :

$ man chmod

Якщо ви не можете запам'ятати біти, які потрібно скласти, щоб зробити правильні дозволи в потрібному порядку, ви також можете використовувати, можливо, простіше для читання chmod ugo+rwx <...>. Символи стояти ˙U Ser, г Роап, про Ther; r ead, w rite, e x ecute. Ви можете використовувати "-" для видалення (наприклад:) chmod go-wx <...>. Зауважте лише, що це лише додає або видаляє саме те, що ви вводите. chmod ugo+rwx <file>; chmod u+rwx <file> не видаляє доступ для групи / інших.
ReactiveRaven

@ReactiveRaven Це чудовий момент. Але ОП, очевидно, розгубився з приводу того, що chmod 777зробив, тож саме там я направив свої пояснення.
Аарон

@Zanna Добрий дзвінок!
Аарон

6

Як уже згадували інші, у вас не повинно бути дозволів 777

Ось корисний довідковий аркуш, який я використовую.

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+

1
Приємно! Це велика допомога людям (як я), які є візуальними учнями.
Аарон

3

Щоб ділитися файлами з людиною, якій ви зареєструвались, вам нічого не потрібно робити особливо. У установці Debian за замовчуванням користувачі мають доступ до домашніх каталогів один одного.

Наприклад,

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

Дозволи в моєму домашньому каталозі читаються (r) та доступ (x) для будь-якого користувача в моїй системі. Тільки у мене додатково є доступ до запису (w) .

Крім того, за замовчуванням umaskUbuntu є такі, що файли та каталоги, які створюють користувачі, за замовчуванням читаються у всьому світі . Ви можете встановити , umaskщоб , 077якщо ви не хочете цього.

Що це означає, що в налаштуваннях за замовчуванням, якщо користувач youхоче поділитися ~/README.txtзі мною документом , то нічого youробити не потрібно. Я просто можу його переглянути:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

Я не можу редагувати або видаляти файл, але можу скопіювати його в місце, де я маю дозвіл на запис. Потім я володію копією:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

Є вагомі причини, чому більшість системи за замовчуванням читається у всьому світі, як я пояснив в іншій відповіді на AskUbuntu . Однак у спільній системі може бути доцільним зробити домашні каталоги недоступними для власників:

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

... так як багато користувачів, мабуть, не знають про замовчування - QED ;-). Хоча було б розумніше зрозуміти користувачам, що дозволи файлів не захищають секрети.


1

У Ubuntu будь-який користувач має привілей суперусерів, які додаються до групи "sudo". Перевірте це, щоб у цій групі не було додано жодного іншого користувача.

Щоб захистити свої файли та каталогів від інших користувачів, ви можете встановити дозвіл, як запропонував містер Журнейман Гек у наведеній вище відповіді.

Ви також можете використовувати спеціальні дозволи для захисту своїх файлів та каталогів від інших.

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