내가 찾은 모든 유사한 질문의 주제인 SSHFS 마운트 지점 마운트에 대해 묻는 것이 아닙니다.
내 마운트 지점( /path/to/sshfs/mount/
)이 올바르게 마운트되었으며 내 사용자로서 예상되는 모든 파일을 나열하고 읽고 쓸 수 있습니다.
스크립트를 로컬 디렉터리에 복사할 수 있는 권한이 있습니다. 그러나 스크립트에는 라이브러리 파일과 리소스가 포함된 여러 하위 디렉터리가 필요하므로 로컬로 복사하는 것보다 스크립트가 있는 곳에서 스크립트를 실행하는 것을 선호합니다. 게다가 그렇지 않다.필요의도한 작업을 수행하기 위해 로컬 컴퓨터에 복사됩니다.
불행하게도 SSHFS 마운트의 경우 스크립트는 시스템 디렉터리에 일부 파일을 설치하고 시스템에 존재하는 다양한 사용자에 대한 파일을 업데이트해야 하므로 많은 작업을 수행하려면 루트 권한이 필요합니다.
이건 내 잘못이야:
$ cd /path/to/sshfs/mount/
$ sudo ./myscript.sh
sudo: unable to execute ./myscript.sh: Permission denied
내가 수행한 검사는 다음과 같습니다.
$ ls -la
-rwxr-x--- 1 myuser team 8173 Dec 15 06:33 myscript.sh
$ sudo -i
[sudo] password for myuser:
#
$ cat /etc/fstab
myuser@myserver:/path/to/sshfs/mount/ /path/to/sshfs/mount/ fuse.sshfs x-systemd.automount,_netdev,user,follow_symlinks,identityfile=/path/to/.ssh/key_file,allow_other,default_permissions 0 2
이는 필수 퓨즈.conf 옵션이 활성화되었음을 나타냅니다.
$ cat /etc/fuse.conf
user_allow_other
실행할 수 있는 SSHFS 구성은 다음과 같습니다.
$ sudo /path/to/sshfs/mount/myscript.sh
답변1
mount 명령은 exec
다음 noexec
마운트 옵션을 지원합니다.
exec: 바이너리 파일 실행을 허용합니다.
noexec: 마운트된 파일 시스템에서 바이너리 파일이 직접 실행되는 것을 허용하지 않습니다.
설치 옵션을 지정하지 않더라도 noexec
설치 옵션을 지정하면 설치 옵션이 적용됩니다 users
.
- 사용자: 다른 일반 사용자가 파일 시스템을 마운트하더라도 모든 사용자가 파일 시스템을 마운트 및 마운트 해제할 수 있습니다.
사용자 옵션은 noexec, nosuid 및 nodev 옵션을 의미합니다.(옵션 라인 users,exec,dev,suid와 같은 후속 옵션으로 대체되지 않는 한)
이 명령은 noexec
암시적으로 적용되고 있음을 보여줍니다.
findmnt /path/to/sshfs/mount
myuser@myserver:/path/to/sshfs/mount/ fuse.sshfs rw,nosuid,nodev,noexec,relatime,user_id=0,group_id=0,default_permissions,allow_other
따라서 이 문제에 대한 해결책은 간단합니다. exec
마운트 옵션을 추가하기만 하면 됩니다.
답변2
나는 당신이 권한에 대해 약간 혼란스러워하고 있다고 생각합니다.
sshfs 액세스는 ssh 세션을 인증하는 사용자로만 파일에 액세스할 수 있도록 허용합니다. MountainX가 말했듯이 파일 시스템은 noexec로 마운트될 수 있지만 수정은 간단합니다.
$ sudo bash myscript.sh
그러나 스크립트가 로컬 시스템에서는 루트 권한을 가진 루트로 실행되지만 원격 파일 시스템에서는 SSH 인증 사용자의 권한만 갖게 됩니다. 추가 쉘 스크립트는 일반적으로 다른 명령을 함께 문자열로 묶습니다. 그 중 일부는 sshfs 마운트 지점에 올바르게 매핑되는 상대 경로일 수 있습니다. 다른 사람들은 다른 곳을 지적할 수도 있습니다. 이것은 곧 일어날 사고처럼 보입니다.