Как помешать новому пользователю сделать что-нибудь опасное?

31

Я недавно установил сервер Ubuntu на свой сервер, чтобы опробовать linux как нового пользователя. Я следовал руководству по настройке веб-сервера, в котором говорилось, что мне нужен chmod 777каталог веб-сервера, чтобы его можно было записать.

В любом случае, я создал новую учетную запись для одного парня, чтобы он мог видеть некоторые файлы на сервере, которые я поместил в его домашнюю директорию:

adduser francis

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

groups francis

В нем говорилось: «Фрэнсис: Фрэнсис», поэтому я не думал, что проблема в том, что убунту не включил его в какие-либо группы по умолчанию, что имеет смысл, он создал его без дополнительных разрешений в плане безопасности, так что все в порядке. Неделю спустя, в абсолютном и полном ужасе, я обнаружил, что, хотя он не мог делать такие вещи, как SUDO или возиться с системными каталогами, он имел полный доступ почти ко всему остальному на сервере. Например, он имел полный доступ на чтение / запись к файлам моего веб-сервера в / var / www (и, следовательно, к паролям, хранящимся в файлах конфигурации php и т. Д.), Хотя этот каталог НЕ находится в его домашнем каталоге, и я никогда не добавлял его в какие-либо группы, которые могли бы доступ к этому каталогу, и я не предоставил ему какой-либо специальный доступ к чему-либо когда-либо после выполнения adduser.

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

Подводя итог, мне нужно только разрешить ему доступ к каталогам, которые я вручную указываю +, к каталогам, которые ему нужны для правильной работы (его домашний каталог, vim, nano и т. Д.)

Спасибо

Askerman
источник
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другом месте, у вас могут быть другие проблемы.
Arronical
8
К вашему сведению, я поднимаю этот вопрос, потому что на самом деле это хороший вопрос для новых людей. И это заблуждение, вероятно, более распространено, чем мы думаем. Это также хороший пример того, почему вы не должны просто копировать команды, которые вы найдете в Интернете (даже здесь), не зная, что они делают.
Аарон

Ответы:

40

Это как задумано. И хуже. chmod 777 означает ... «Я бы хотел, чтобы владелец, кто-либо из его группы и кто-либо другой имели права на чтение, запись и выполнение»

Что довольно ужасно.

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

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

Подмастерье
источник
4
Незначительный момент: «владелец, любой в его группе ...» - владелец файла не обязательно должен принадлежать к файловой группе.
alex_d
2
Ницца. Мне нравится, что вы ссылались на канонический ответ по сервофо
Старейшина Гик
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; г EAD, ш обряде, е х ecute. Вы можете использовать «-» для удаления (например:) chmod go-wx <...>. Просто отметьте, что это только добавляет или удаляет именно то, что вы печатаете. chmod ugo+rwx <file>; chmod u+rwx <file> не удаляет доступ для группы / другого.
ReactiveRaven
@ReactiveRaven Отличный момент. Но ОП явно не понимал, что chmod 777сделал, и именно туда я и направил свои объяснения.
Аарон
@ Занна Хороший звонок!
Аарон,
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 |
+------------+------+-------+
WhyAyala
источник
1
Ницца! Это большая помощь людям (таким как я), которые являются визуальными учениками.
Аарон
3

Чтобы поделиться файлами с человеком, которому вы дали логин, вам не нужно ничего делать конкретно. При установке Debian по умолчанию пользователи имеют доступ к домашним каталогам друг друга.

Например,

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

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

Кроме того, по умолчанию umaskв Ubuntu такие файлы и каталоги, которые создаются пользователями, по умолчанию доступны для чтения всем пользователям . Вы можете установить , 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 ;-). Хотя было бы разумнее, чтобы пользователи знали, что права доступа к файлам не защищают секреты.

zwets
источник
1

В Ubuntu любой пользователь имеет привилегию суперпользователя, добавленную в группу «sudo». Пожалуйста, проверьте, чтобы другие пользователи не были добавлены в эту группу.

Чтобы защитить ваши файлы и каталог от других пользователей, вы можете установить разрешение, как это было предложено г-ном Журманом Гиком в ответе выше.

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

Пунит Диксит
источник