Назад | Перейти на главную страницу

Запись файла sshfs не учитывает сопоставление UID / GID

Я монтирую свой / домашний каталог удаленно с помощью sshfs. Поскольку UID и GID не совпадают на сервере и клиенте, я использую idmap=file. Кроме того, из-за требований приложения я должен монтировать все каталоги / home, а не отдельные пользовательские каталоги.

sshfs_uids:

user1:1001
user2:1000

sshfs_gids:

user1:1001
user2:1000

Команда для монтирования:

sudo sshfs -o nonempty -o transform_symlinks -o hard_remove -o allow_other -o nomap=ignore -o idmap=file -o uidfile=/root/sshfs_uids -o gidfile=/root/sshfs_gids root@myserver:/home /home

При чтении файлов все работает, как ожидалось (файлы, которые должны принадлежать user1: user1, действительно так). Однако, когда я пишу как user1, происходит следующее:

user1@myclient:~$ touch foo
user1@myclient:~$ ls -l foo
-rw-r--r--. 1 root root 0 Jun 13 13:54 foo

Мой пользователь пишет файлы как root! Даже делая ls -l от myserver появляется тот же root-владелец. Хотя я могу исправить это вручную:

user1@myclient:~$ chown user1:user1 foo
user1@myclient:~$ ls -l foo
-rw-r--r--. 1 user1 user1 0 Jun 13 13:54 foo

Возможно ли, используя параметр sshfs или fuser, сделать так, чтобы новые файлы принадлежали пользователю, который их создал? Если нет, могу ли я заставить sshfs или fuser вызывать пользовательский скрипт каждый раз, когда файл записывается, чтобы я мог исправить право собственности на файл с помощью chown?

РЕДАКТИРОВАТЬ:
Если ничего из вышеперечисленного невозможно, может ли кто-нибудь порекомендовать какое-либо альтернативное программное обеспечение для удаленной файловой системы, а именно:

  • безопасно для использования в общедоступном Интернете
  • прозрачный (после настройки) для пользователей / скриптов (а не простой scp)

  • проблема в этом случае заключается в том, что вы подключаетесь как root

    root@myserver:/home /home
    

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

    Имейте в виду, что сервер записывает данные, поэтому он будет писать, используя подключенного к нему пользователя. Решение заключается в подключении с использованием пользователя и его учетных данных, которые вы хотите записать, используя:

    user1@myserver:/home /home
    

    Я подозреваю, что вы пытались смонтировать sshfs с root (sudo), поэтому ваши файлы будут созданы пользователем, к которому была смонтирована файловая система.

    Для всех, у кого есть аналогичная проблема, я обнаружил, что ssh-tunneling nfs помогло.

    / etc / exports на myserver:

    /home localhost(insecure,rw,sync,no_subtree_check,no_root_squash)
    

    /etc/idmap.conf на myserver и myclient (цитата):

    ...
    Domain = localdomain
    ...
    

    /etc/modprobe.d/nfsd.conf в myserver:

    options nfsd nfs4_disable_idmapping=0
    

    /etc/modprobe.d/nfs.conf в myclient:

    options nfs nfs4_disable_idmapping=0
    

    Указанные выше два файла установлены /sys/module/nfsd/parameters/nfs4_disable_idmapping и /sys/module/nfs/parameters/nfs4_disable_idmapping в "N" при загрузке (цитата).

    Либо перезагрузите, либо перезапустите службы, связанные с nfs / idmap, на обеих машинах и запустите nfsidmap -c. Затем, туннель соединение:

    user1@myclient:~$ ssh -fN -L 3049:localhost:2049 user1@myserver
    user1@myclient:~$ sudo mount -t nfs4 -o port=3049 localhost:/home /home
    

    На данный момент брандмауэр для myserver должен быть открыт только на порту 22, и трафик nfs будет таким же безопасным, как и ssh.

    РЕДАКТИРОВАТЬ:
    Это не сработало, но только показалось, что сработало. По-видимому, хотя можно было подумать, что idmap должен отображать идентификаторы, это не так. По крайней мере, это происходит только на высоком уровне, поэтому некоторые операции проходят мимо.