![Apache、组权限和用户上传](https://linux22.com/image/53792/Apache%E3%80%81%E7%BB%84%E6%9D%83%E9%99%90%E5%92%8C%E7%94%A8%E6%88%B7%E4%B8%8A%E4%BC%A0.png)
我有一个名为“digitalgoods”的文件夹,其所有权如下: apache:apache 位于 htdocs 文件夹之外,因此公众无法访问。然而,我需要一组用户(Jack、John、James)可以访问同一个文件夹——我们将他们全部称为“上传者”。
我希望“上传者”能够尽可能轻松地将文件上传到“digitalgoods”文件夹,然后 apache 可以通过购买访问该文件夹。
我的问题是设置这个的最佳方法是什么?我目前正在使用 SSH 访问服务器,但是安装 ftp 服务器以便用户获得访问权限是否更有意义?如果是这样,我应该在帐户和权限方面做什么?或者我应该将每个用户的主目录设置为“digitalgoods”并以某种方式适当修改权限以通过 SSH 进行访问?
我试图让客户尽可能轻松地上传文件。感谢这方面的任何帮助。
答案1
有 2 种解决方案使用 2 个不同的 ftp 服务器
1 - 将 proftpd 与 VirtualServer 功能和本地用户强制结合使用。我的配置文件的片段:
ServerType standalone
DefaultServer on
AccessGrantMsg "User %u logged in."
DeferWelcome off
# Use pam to authenticate (default) and be authoritative
AuthPAMConfig proftpd
AuthOrder mod_auth_pam.c* mod_auth_unix.c
<VirtualHost xxx.xxx.xxx.xxx>
ServerAdmin [email protected]
ServerName "FTP"
TransferLog /var/log/proftpd/transfer.log
ExtendedLog /var/log/proftpd/full.log ALL
DefaultRoot /var/www/digitalgoods
User apache
Group apache
AllowOverwrite yes
MaxLoginAttempts 3
RequireValidShell no
</VirtualHost>
创建3个用户,并让他们使用ftp。它们将被“chroot”,/var/www/digitalgoods
并且上传的任何文件都将具有设置为的权限apache:apache
2 - 使用 vsftpd chroot,并创建 3 个用户,其用户 ID 与 apache 相同,并且主目录将被 chroot(是的,这是一个拼凑,但它应该可以工作):
内容/etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
check_shell=NO
syslog_enable=YES
connect_from_port_20=YES
xferlog_std_format=NO
idle_session_timeout=3600
ftpd_banner=FTP XXX
chroot_local_user=YES
ls_recurse_enable=YES
listen=YES
pam_service_name=vsftpd
userlist_enable=NO
userlist_deny=NO
tcp_wrappers=YES
由于我们使用的是最小权限,因此我们必须声明将访问此 ftp 的登录名:/etc/vsftpd/user_list
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
#
devel
manuals
创建 2 个用户 ( /etc/passwd
) 并使用 apache 用户的相同用户 ID(同样,这是一个该死的拼凑,但至少你将有 2 个用户以相同的权限上传到他们的 chrooted 主页)。有了它,check_shell=NO
您不需要为这些用户提供有效的 shell
[root@]# grep 'apache\|desenv\|man\|' /etc/passwd
apache:x:48:48:Apache:/var/www:/sbin/nologin
devel:x:48:48::/var/www/digitalgoods:/sbin/nologin
manuals:x:48:48::/var/www/digitalgoods:/sbin/nologin