向国旗敬礼 发表于 2024-10-8 17:21:14

Sftp部署及优化

1.SFTP规划

SFTP Server Port: 30022
按照项目进行分类,来创建sftp账号
命名规范:
用户名权限sftp目录Chroot目录Group地区+项目+用户(组或个人)rw/r/data/项目/项目/项目项目+RW例:CHN-projectname-arw/data/projectname/projectname/projectnameprojectnameRWCHN-projectname-br/data/projectname/projectname/projectname只有写权限才需要加入对应的组2.配置SFTP

2.1 修改ssh配置

只用第一次修改ssh配置文件
~]# vi /etc/ssh/sshd_config
#Subsystem        sftp        /usr/libexec/openssh/sftp-server
Subsystem       sftp    internal-sftp
Match Group sftp
Match LocalPort 20912
ChrootDirectory%h   #chroot到所创建用户时的家目录
ForceCommand    internal-sftp
~]# systemctl restart sshd3.创建sftp账号

下面是每次创建账号需要的操作
3.1 创建目录结构

~]# mkdir –p /data/projectname/projectname
~]# chmod 775 /data/projectname/projectname3.2 创建sftp用户

~]# useradd -s /bin/false -d /data/projectname CHN-projectname-b
~]# useradd -s /bin/false -d /data/projectname CHN-projectname-a3.3设置sftp用户密码

~]# echo ‘CHN-projectname-b:password1’|chpasswd
~]# echo ‘CHN-projectname-a:password2’|chpasswd
#可以使用其他方式配置密码3.4 创建权限组

~]# groupadd projectnameRW3.5 把需要写权限加入到权限组中

~]# usermod -aG projectnameRW CHN-projectname-b
如果CHN-projectname-a也需要写权限,加入到权限组(projectnameRW)即可3.6 配置目录权限

~]# chown root:projectnameRW /data/projectname/projectname3.7 配置ACL权限

#针对需要多个用户对同一个目录进行读写,需要使用到ACL权限
如果是第一次新建,比较简单,2条命令即可
~]# chmod –R g+s /data/CN-project/CN-project
~]# setfacl -Rm d:g:groupname:rwx /data/CN-project/CN-project

如果是已经在使用的sftp,并且sftp的家目录有数据,手动执行以下命令
~]# chmod -R g+s /data/CN-project/CN-project
~]# setfacl -Rm d:g:groupname:rwx /data/CN-project/CN-project
~]# chown -R :groupname /data/CN-project/CN-project
~]# chmod -R 775 /data/CN-project/CN-project3.8重启sshd服务

~]# systemctl restart sshd4.sftp客户端使用

4.1 Linux6

~]# sftp -oPort=30022 CHN-project-user@10.0.0.1
-oPort=30022:SFTP server Port
CHN-project-user:SFTP Username
10.0.0.1:SFTP Server address4.2 Linux7

~]# sftp -P 30022 CHN-project-user@10.0.0.1
CHN-project-user@10.0.0.1's password:    <--输入密码7.sftp开启每个用户连接数限制

~]# cat /etc/ssh/sshd_config
......
Subsystem       sftp    internal-sftp -l VERBOSE -f AUTHPRIV
Match Group sftp
Match LocalPort 20912
ChrootDirectory%h
ForceCommand    internal-sftp -l VERBOSE -f AUTHPRIV8.sftp打开用户认证数量限制

~]# cat /etc/rsyslog.conf
......
authpriv.*                        /var/log/sftp.log9.sftp配置每个用户最大打开文件数

~]# systemctl restart sshd
~]# systemctl restart rsyslog10.sftp监控项

10.1 监控sftp连接数

~]# cd /etc/logrotate.d/
~]# vi sftp
/var/log/sftp.log {
    monthly   #默认每月执行一次日志轮询
    missingok
    rotate 6   #保存6个日志文件
    compress
    delaycompress
    dateext
    create 0600 root root
    sharedscripts
    postrotate
                /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}
~]# systemctl restart rsyslog

测试
~]# logrotate --dbug --verbose --force /etc/logrotate.d/sftp10.2 sftp日志监控,触发连接数限制

监控sftp日志,指定sftp用户触发连接数限制,告警通知
~]# cat /etc/security/limits.d/95-sftp-limit.conf
@sftpusername hard nproc 400   #限制用户连接数为200,这里配置数量为连接数*211.SFTP高可用

11.1 多台sftp底层存储使用阿里云NAS

使用nas作为/data盘. acl授权命令改为nfs4_setfacl.
11.2 多台sftp创建用户时,保持UID,GID一致.

多台sftp server创建用户用此脚本创建.
#!/bin/bash########################################################## Function : Add user in 2 SFTP servers               ## Version: 1.0                                        ######################################################################env define############sshuser=osadmin   #多台sftp配置免密用户workdir=/tmpshijian=`date +%Y_%M_%d_%H_%m`server1=10.0.0.1server2=10.0.0.2server3=10.0.0.3server4=10.0.0.4sftpport=30022sshport=22new_user=${1}user_pass=${2}############env define########################   USAGE ############if [[ $# != 2 ]];then    echo -e "\033thenecho "No input , please check"else      min=$1      max=$1      sum=0      for i in "$@"      do                if [ $min -gt $i ]                then                        min=$i                fi                if [ $max -lt $i ]                then                        max=$i                fi      sum=$[$sum+$i]done      echo $maxfi}### check if all server alivecheck_server_alive() {nc -4 -w 2 -z ${1} ${2}if [ $? -eq 0 ]then    echo -e "\033then    echo -e "\033then    echo -e "\033[32;1m User ${1} creation in ${serverip} done \033[0m"else    echo -e "\033[31;5m User ${1} creation in ${serverip} failed , please check it manually ~! \033[0m"      exitfissh ${sshuser}@${serverip} "sudo /bin/passwd ${1}
页: [1]
查看完整版本: Sftp部署及优化