Vsftpd에서 쓰기만 가능하고 삭제는 못하게 권한 설정 하는법 있을까요?

ftp에 파일을 업로드는 할 수 있는데, 업로든 한 파일이든, 원래 있던 파일이든 삭제가 불가능하게…

local_umask=022
write_enable=YES

이 두개를 건드리면 될 것 같긴 한데… 문제는 local_umask가 굳이 업로드 한 파일이 아니더라도 모든 파일의 권한을 수정하나요? 개념이 잘 잡히지가 않아서…
그렇다면 저걸 수정해서 write 권한을 없애고, 그 밑 write_enable=yes만 해놓으면 될까요?
으음… 아무래도 복잡하네요 ㅠㅜ

[quote="Circleses":33n10g9g]ftp에 파일을 업로드는 할 수 있는데, 업로든 한 파일이든, 원래 있던 파일이든 삭제가 불가능하게…

local_umask=022
write_enable=YES

이 두개를 건드리면 될 것 같긴 한데… 문제는 local_umask가 굳이 업로드 한 파일이 아니더라도 모든 파일의 권한을 수정하나요? 개념이 잘 잡히지가 않아서…
그렇다면 저걸 수정해서 write 권한을 없애고, 그 밑 write_enable=yes만 해놓으면 될까요?
으음… 아무래도 복잡하네요 ㅠㅜ[/quote:33n10g9g]

그렇게 하는 권한이 존재합니다.
파일접근권한중 sticky_bit라는 특별권한이 존재합니다.
r,w,x의 일반 접근권한 말고 t 가 있습니다.

이런 스티키비트는 디렉토리와 파일에 각각 적용할 수 있구요…
디렉토리에 스티키비트가 설정되었고, 디렉토리에 쓰기권한을 모든 사용자에게 허용했다면,
그 디렉토리에 모든 사용자는 파일을 만들고, 수정이 가능합니다만…
소유자 이외 사용자의 디렉토리 삭제는 거부됩니다.
그리고 그 디렉토리내에, 있는 파일에 스티키비트가 설정되었다면…
해당파일은 모든 사람들이 수정할 수 있지만, 소유자 이외 사용자의 파일 삭제는 거부됩니다.

umask 022는 chmod 755와 같습니다.
이럴때 스티키비트를 적용하시려면 chmod 1755 라고 하시거나 chmod a+rx,u+w,+t 라고 하시면 됩니다.
이걸 마스크로 적용하시려면 1022가 됩니다.

참고로 이것은 플래그 같은 개념으로 한 비트를 차지합니다.
스티키비트는 비트0(1), set_gid는 비트1(2), set_uid는 비트2(4) 입니다.
set_uid는 실행시 실행자의 권한으로 실행되는 것이 아니라,
소유자의 권한으로 실행되게 허용하는 것입니다. set_gid는 set_uid를 그룹에 적용한 것입니다.

의견 감사합니다. 실제로 해보니까 잘 먹히더군요.
단, umask라는게 업로드 된 파일에 한해서 먹히는 것이더라구요. vsftpd내에선…

저같은 경우 ftp에서 접속시에만 권한을 바꿀수 있으면 좋겠는데 말이지요.
아무래도 외장하드에 쓰려면 외장하드 전체에 적용하면 되긴 하겠다만은…

원래 있던 파일들은 파일접근권한을 그렇게 부여하면 되지 않습니까?
sudo chmod +t /ftp_dir

명령어 블랙리스트/화이트리스트 옵션으로 가능합니다. 설정파일 옵션명은 cmds_denied/cmds_allowed 입니다.

저도 예전에 그 기능이 필요해서 [url=https://kldp.org/node/100996:15gs6glb]화이트리스트 방식으로 설정[/url:15gs6glb]했었는데, 현재 버전에는 블랙리스트도 설정 가능하군요.

cmds_denied=DELE,RMD
를 추가하면 될 듯 합니다.