服务端环境搭建

配置ssh-sftp

在服务器上开通SFTP文件服务,允许某些用户上传及下载文件。但是这些用户只能使用SFTP传输文件,不能使用SSH终端访问服务器,并且SFTP不能访问系统文件(即所谓的“Jail(监狱)”)。系统管理员则既能使用SFTP传输文件,也能使用SSH远程管理服务器。

  1. 安装OpenSSH服务器

    1
    sudo apt-get install openssh-server
  2. 为SFTP访问创建用户组,便于管理权限

    1
    sudo addgroup sftp-users
  3. 创建SFTP用户,并配置相应权限

    1
    2
    3
    4
    sudo adduser austin
    sudo usermod -G sftp-users -s /bin/false austin
    //将austin从所有其他用户组中移除并加入到sftp-users组,并且关闭其Shell访问
    // -s /bin/false 指定登录shell,这里不允许ssh登录
  4. 创建SSH用户组,并把管理员加入到该组

    1
    2
    3
    sudo addgroup ssh-users
    sudo usermod -a -G ssh-users admin \\-a参数的意思是不从其他用户组用移除
    sudo usermod -a -G ssh-users root \\额外增加root用户ssh访问
  5. 准备“监狱”的根目录及共享目录

    1
    2
    3
    4
    sudo mkdir /home/sftp_root
    sudo mkdir /home/sftp_root/shared
    sudo chown admin:sftp-users /home/sftp_root/shared
    sudo chmod 770 /home/sftp_root/shared

    “监狱”的根目录必须满足以下要求:所有者为root,其他任何用户都不能拥有写入权限。因此,为了让SFTP用户能够上传文件,还必须在“监狱”根目录下再创建一个普通用户能够写入的共享文件目录。为了便于管理员通过SFTP管理上传的文件,我把这个共享文件目录配置为:由admin所有,允许sftp-users读写。这样,管理员和SFTP用户组成员就都能读写这个目录了。

  6. 修改SSH配置文件
    sudo nano /etc/ssh/sshd_config
    在sshd_config文件的最后,添加以下内容:

    1
    2
    3
    4
    5
    6
    AllowGroups ssh-users sftp-users
    Match Group sftp-users
    ChrootDirectory /home/sftp_root
    AllowTcpForwarding no
    X11Forwarding no
    ForceCommand internal-sftp

    这些内容的意思是:
    只允许ssh-uers及sftp-users通过SSH访问系统;
    针对sftp-users用户,额外增加一些设置:将“/home/sftp_root”设置为该组用户的系统根目录(因此它们将不能访问该目录之外的其他系统文件);禁止TCP Forwarding和X11 Forwarding;强制该组用户仅仅使用SFTP。

  7. service sshd reload

问题记录
> SFTP – subsystem request failed on channel X

修改:

You are using sftp to connect your server in a chrooted environment and you met the error below.

subsystem request failed on channel 0
Couldn’t read packet: Connection reset by peer

This causes because of wrong external library configured in your sshd_config. So, edit your sshd_config and use internal-sftp. Because openssh already has internal sftp functionality and you dont need any external libraries.

Find the line beginning with “Subsystem”. Comment out and add the following line.

1
2
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

配置定时任务

  1. crontabl命令

    1
    2
    3
    4
    5
    6
    7
    8
    9
    crontab: invalid option -- 'h'
    crontab: usage error: unrecognized option
    usage: crontab [-u user] file
    crontab [ -u user ] [ -i ] { -e | -l | -r }
    (default operation is replace, per 1003.2)
    -e (edit user's crontab)
    -l (list user's crontab)
    -r (delete user's crontab)
    -i (prompt before deleting user's crontab)
  1. 编辑添加定时任务 crontabl -u root -e

    1
    2
    3
    * * * * * php /home/forge/default/artisan schedule:run >> /dev/null 2>&1
    //下面是crontab的格式:
    //分 时 日 月 星期 要运行的命令
  1. 确保cmd能够正常执行

    1
    php /home/forge/default/artisan schedule:run
  1. 查看cron服务

    1
    2
    3
    4
    5
    //查看状态
    /etc/init.d/cron status
    //重启cron服务
    /etc/init.d/cron restart