我有一个带有 Digital Ocean 的 CentOs 6.4 版,我想成功创建 SFTP 用户并将它们囚禁到用户自己的 chroot 主目录中,但我担心我会把它弄得一团糟。
我已经尝试了很多事情,太多了,无法在这里列出,因为大多数可能不正确或没有多大意义,但我觉得应该是正确的过程,我尝试过的是:-
创建一个组sftp:-
groupadd sftp
Run Code Online (Sandbox Code Playgroud)
创建一个用户并设置他们的主目录:-
useradd -d /var/www/vhosts/domain.com dummyuser
Run Code Online (Sandbox Code Playgroud)
为用户设置密码:-
passwd dummyuser
Run Code Online (Sandbox Code Playgroud)
将用户组更改为“sftp”:-
usermod -g sftp dummyuser
Run Code Online (Sandbox Code Playgroud)
将用户的外壳设置为/bin/false:-
usermod -s /bin/false dummyuser
Run Code Online (Sandbox Code Playgroud)
在sshd_config( /etc/ssh/) 中编辑子系统:-
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
Run Code Online (Sandbox Code Playgroud)
将以下内容添加到sshd_config文件底部:-
Match group sftp
X11Forwarding no
ChrootDirectory %h
AllowTcpForwarding no
ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)
我确保以下所有目录都是root:root:-
/var
/var/www
/var/www/vhosts
/var/www/vhosts/domain.com
Run Code Online (Sandbox Code Playgroud)
如果我然后尝试通过 SFTP 与用户dummyuser(在 WinSCP 中)登录到服务器,我会得到以下信息:-
Authentication log (see session log for details):
Using username "dummyuser".
Authentication failed.
Run Code Online (Sandbox Code Playgroud)
我想要实现的只是将用户监禁到他们的主目录。我还设置并配置了 vsftpd。用户可以正常登录,但可以访问整个服务器 - 我根本没有设法让监狱工作。
忘了提,然后我sshd也重新启动了:-
service sshd restart
Run Code Online (Sandbox Code Playgroud)
当 WinSCP 中产生错误时,他们的帮助页面在这里。
/var/log/secure
Run Code Online (Sandbox Code Playgroud)
我用server_name.
Apr 28 14:20:56 server_name sshd[9944]: Accepted password for dummyuser from 80.194.255.4 port 44402 ssh2
Apr 28 14:20:56 server_name sshd[9944]: pam_unix(sshd:session): session opened for user dummyuser by (uid=0)
Apr 28 14:20:56 server_name sshd[9946]: fatal: bad ownership or modes for chroot directory component "/var/www/vhosts/"
Apr 28 14:20:56 server_name sshd[9944]: pam_unix(sshd:session): session closed for user dummyuser
Run Code Online (Sandbox Code Playgroud)
fak*_*ker 15
这是一个常见的陷阱:
直到 chroot 主目录的所有文件夹都必须归root用户所有并且只能由用户写入。
文件夹不能是组可写的 - 即使组是root.
我在 CentOS 6.5 上找到并成功配置了 sftp:http : //www.thegeekstuff.com/2012/03/chroot-sftp-setup/
编辑 sshd 配置:
vim /etc/ssh/sshd_config
#Subsystem sftp /usr/libexec/openssh/sftp-server (comment out the default with "#")
add:
Subsystem sftp internal-sftp
Match Group sftp-only
ChrootDirectory /var/www/%u
AllowTCPForwarding no
X11Forwarding no
ForceCommand internal-sftp
Run Code Online (Sandbox Code Playgroud)
退出并保存。
然后:
mkdir /etc/skel2
groupadd sftp-only
getent group |grep sftp-only (take note the GID (Group ID). Here, in my example it's 500)
Run Code Online (Sandbox Code Playgroud)
对于名为“testuser”的新用户(GID 500 的 sftp-only 组成员):
useradd --base-dir /var/www --gid 500 --skel /etc/skel2 --create-home --shell /sbin/nologin testuser
Run Code Online (Sandbox Code Playgroud)
(我使用空的 /etc/skel2,所以 CentOS 默认不会复制 .bashrc 等文件)
mkdir -p /var/www/testuser/home/testuser
chown root:sftp-only /var/www/testuser
chmod 750 /var/www/testuser
chown root:root /var/www/testuser/home
chmod 755 /var/www/testuser/home
chown testuser:sftp-only /var/www/testuser/home/testuser
chmod 770 /var/www/testuser/home/testuser
Run Code Online (Sandbox Code Playgroud)
所以在这个例子中,我让它安全地访问管理网站的外部咨询公司。创建完所有这些后,您可以执行以下操作:
mkdir /var/www/testuser/home/testuser/www.somesite.com
chown testuser:apache /var/www/testuser/home/testuser/www.somesite.com
chmod xxx (permissions to the website as needed, usually 750 so apache would get read access)
Run Code Online (Sandbox Code Playgroud)
可以根据需要对所有这些进行微调。
希望这有帮助!
Guy Boisvert IngTegration inc. http://www.ingtegration.com
| 归档时间: |
|
| 查看次数: |
48954 次 |
| 最近记录: |