Я монтирую свой / домашний каталог удаленно с помощью 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?
РЕДАКТИРОВАТЬ:
Если ничего из вышеперечисленного невозможно, может ли кто-нибудь порекомендовать какое-либо альтернативное программное обеспечение для удаленной файловой системы, а именно:
проблема в этом случае заключается в том, что вы подключаетесь как 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 должен отображать идентификаторы, это не так. По крайней мере, это происходит только на высоком уровне, поэтому некоторые операции проходят мимо.