Как установить права доступа для всех файлов?

Добрый день. У меня возник вопрос относительно настройки сервера на Debian с vsftpd. Я создал пользователя без прав root и подключаюсь к FTP через FileZilla. Я могу успешно загружать файлы на сервер, но когда я загружаю файл в папку пользователя от имени root, то сталкиваюсь с ошибкой 550 при попытке скачать этот файл созданным пользователем. Я замечаю, что для успешной загрузки необходимо менять права доступа к файлу, что является трудоемким процессом, особенно при частом обмене файлами. Как мне настроить систему так, чтобы я мог загружать файлы в папку пользователя от имени root, и чтобы пользователь мог их скачивать без необходимости постоянного изменения прав доступа?
  • 17 ноября 2024 г. 6:43
Ответы на вопрос 3
Для решения вашей проблемы с правами доступа в FTP-сервере vsftpd на Debian можно использовать следующие подходы:

### 1. Изменение прав доступа к файлам и директориям

Один из простых способов решить вашу проблему — это установить более подходящие права доступа к загружаемым файлам и директориям. Для этого можно использовать групповую принадлежность пользователей.

#### Шаги:

1. **Создайте группу** для вашего FTP-пользователя. Например, `ftpusers`.
   ```bash
   sudo groupadd ftpusers
   ```

2. **Добавьте вашего FTP-пользователя в эту группу**:
   ```bash
   sudo usermod -aG ftpusers имя_пользователя
   ```

3. **Установите группу для основной директории FTP**:
   ```bash
   sudo chown :ftpusers /path/to/ftp/directory
   ```

4. **Установите права доступа, чтобы группа могла читать и записывать файлы**:
   ```bash
   sudo chmod 2775 /path/to/ftp/directory
   ```

5. **Убедитесь, что файлы и директории, создаваемые от имени root, наследуют правильные права**. Для этого можно установить SGID-бит:
   ```bash
   sudo chmod g+s /path/to/ftp/directory
   ```

Теперь любые файлы, загруженные в эту директорию от имени `root`, будут принадлежать группе `ftpusers`, и пользователь, который также является членом этой группы, сможет их скачивать.

### 2. Настройка конфигурации vsftpd

Убедитесь, что конфигурация вашего `vsftpd` позволяет пользователям читать файлы и директории. В файле `/etc/vsftpd.conf` проверьте следующие параметры:

- Убедитесь, что включен параметр `write_enable=YES`, чтобы разрешить запись.
  
- Также убедитесь, что пользователи могут работать в своих домашний директориях:
  ```plaintext
  chroot_local_user=YES
  ```

### 3. Использование ACL (Access Control Lists)

Если стандартные права доступа не позволяют вам достигнуть желаемых результатов, можно использовать ACL для более гибкого контроля доступа.

#### Шаги:

1. **Установите пакет, если он не установлен**:
   ```bash
   sudo apt-get install acl
   ```

2. **Включите поддержку ACL для файловой системы**. Проверьте `/etc/fstab` и добавьте `acl` к нужной вам файловой системе. Например:
   ```
   UUID=... /path/to/ftp/directory ext4 defaults,acl 0 2
   ```

3. **Перемонтируйте файловую систему**:
   ```bash
   sudo mount -o remount /path/to/ftp/directory
   ```

4. **Настройте ACL для директории**:
   ```bash
   sudo setfacl -m g:ftpusers:rwx /path/to/ftp/directory
   sudo setfacl -R -m g:ftpusers:rwx /path/to/ftp/directory/*
   ```

Теперь пользователи группы `ftpusers` смогут читать и записывать файлы в папке без необходимости изменения прав доступа на каждый файл.

### Заключение

Таким образом, после настройки прав доступа и/или использования ACL, ваш FTP-пользователь сможет скачивать файлы, загруженные от имени `root`, без необходимости ручного изменения прав на каждом файле.
Правильное решение - не работать из под root, копирование файлов производить под тем же пользователем (или пользователем в той же группе что и скачивающий), тогда проблем с настройками прав не возникнет. 

p.s. на сколько я знаю в каких то ftp серверах была возможность принудительно задать пользователя, под которым сервер будет запущен и авторизован, а авторизация пользователя ftp не будет соответственно авторизации ОС, тогда запущенный под root сервер решил бы твою проблему, но это огромная дыра, так давно уже не поступают.

p.p.s. ftp на столько устаревший протокол, что удобные решения для него уже мало кем поддерживаются (т.е. для галочки базовый сервер еще входит в репозитарии, но нафиг никому не нужен)

пользуйтесь sftp/scp, который встроен по умолчанию в ssh сервер, который есть для любой ОС на планете, стандарт безопасного подключения, на столько многофункционален. что даже vpn через него поднять можно (штатным инструментом)
Под root заходишь в /etc/sudoers: 
EDITOR=nano visudo

Листаешь до секции со строкой:
# User privilege specification
root      ALL=(ALL:ALL) ALL

и устанавливаешь курсор в конец строки, как на скрине:
Жмёшь на Enter, тем самым переводишь каретку на новую строку:
Вписываешь аналогичную строку, но вместо Пользователя test, впысываешь своего Пользователя:
Ну и сохраняешь:
Ctrl+O
Enter

И выходишь из редактора:
Ctrl+X

Логинишься под Пользователем и радуешься жизни...
Похожие вопросы