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

Добрый день. У меня возник вопрос относительно настройки сервера на 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, копирование файлов производить под тем же пользователем (или пользователем в той же группе что и скачивающий), тогда проблем с настройками прав не возникнет. <br/> <br/> p.s. на сколько я знаю в каких то ftp серверах была возможность принудительно задать пользователя, под которым сервер будет запущен и авторизован, а авторизация пользователя ftp не будет соответственно авторизации ОС, тогда запущенный под root сервер решил бы твою проблему, но это огромная дыра, так давно уже не поступают. <br/> <br/> p.p.s. ftp на столько устаревший протокол, что удобные решения для него уже мало кем поддерживаются (т.е. для галочки базовый сервер еще входит в репозитарии, но нафиг никому не нужен) <br/> <br/> пользуйтесь sftp/scp, который встроен по умолчанию в ssh сервер, который есть для любой ОС на планете, стандарт безопасного подключения, на столько многофункционален. что даже vpn через него поднять можно (штатным инструментом)
Под root заходишь в /etc/sudoers: <br/> <code class="bash">EDITOR=nano visudo</code> <br/> <br/> Листаешь до секции со строкой: <br/> <pre><code class="bash"># User privilege specification
root      ALL=(ALL:ALL) ALL</code></pre> <br/> и устанавливаешь курсор в конец строки, как на скрине: <br/> Жмёшь на Enter, тем самым переводишь каретку на новую строку: <br/> Вписываешь аналогичную строку, но вместо Пользователя test, впысываешь своего Пользователя: <br/> Ну и сохраняешь: <br/> Ctrl+O <br/> Enter <br/> <br/> И выходишь из редактора: <br/> Ctrl+X <br/> <br/> Логинишься под Пользователем и радуешься жизни...
Похожие вопросы