ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Sftp部署及优化
[打印本页]
作者:
温锦文欧普厨电及净水器总代理
时间:
2024-10-8 17:16
标题:
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 sshd
复制代码
3.创建sftp账号
下面是每次创建账号需要的操纵
3.1 创建目录结构
~]# mkdir –p /data/projectname/projectname
~]# chmod 775 /data/projectname/projectname
复制代码
3.2 创建sftp用户
~]# useradd -s /bin/false -d /data/projectname CHN-projectname-b
~]# useradd -s /bin/false -d /data/projectname CHN-projectname-a
复制代码
3.3设置sftp用户密码
~]# echo ‘CHN-projectname-b:password1’|chpasswd
~]# echo ‘CHN-projectname-a:password2’|chpasswd
#可以使用其他方式配置密码
复制代码
3.4 创建权限组
~]# groupadd projectnameRW
复制代码
3.5 把需要写权限加入到权限组中
~]# usermod -aG projectnameRW CHN-projectname-b
如果CHN-projectname-a也需要写权限,加入到权限组(projectnameRW)即可
复制代码
3.6 配置目录权限
~]# chown root:projectnameRW /data/projectname/projectname
复制代码
3.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-project
复制代码
3.8重启sshd服务
~]# systemctl restart sshd
复制代码
4.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 address
复制代码
4.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 AUTHPRIV
复制代码
8.sftp打开用户认证数量限制
~]# cat /etc/rsyslog.conf
......
authpriv.* /var/log/sftp.log
复制代码
9.sftp配置每个用户最大打开文件数
~]# systemctl restart sshd
~]# systemctl restart rsyslog
复制代码
10.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/sftp
复制代码
10.2 sftp日记监控,触发连接数限制
监控sftp日记,指定sftp用户触发连接数限制,告警通知
~]# cat /etc/security/limits.d/95-sftp-limit.conf
@sftpusername hard nproc 400 #限制用户连接数为200,这里配置数量为连接数*2
复制代码
11.SFTP高可用
11.1 多台sftp底层存储使用阿里云NAS
使用nas作为/data盘. acl授权命令改为nfs4_setfacl.
11.2 多台sftp创建用户时,保持UID,GID一致.
多台sftp server创建用户用此脚本创建.
[code]#!/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 "\033[31;5mParameter incorrect. Please check below example: \033[0m" echo -e "\033[33;1mfor example:\033[0m" echo "ScriptName USER PASSWORD" exit 1fi############ USAGE #################### Function ################## get /etc/passwd from each serverget_passwd_file() {scp -q ${sshuser}@${1}:/etc/passwd ${workdir}/passwdfile_${1}_${shijian}}### get /etc/group from each serverget_group_file() {scp -q ${sshuser}@${1}:/etc/group ${workdir}/groupfile_${1}_${shijian}}### find the maximum user idfind_max_user_id() {awk -F':' '{ print $3 }' ${workdir}/passwdfile_${1}_${shijian} | grep -v 65534 | sort -n | tail -n 1}### find the maximum group idfind_max_group_id() {awk -F':' '{ print $3 }' ${workdir}/groupfile_${1}_${shijian} | grep -v 65534 | sort -n | tail -n 1}### get max id among all serversget_max_id() {if [ $# -eq 0 ]thenecho "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 "\033[32;1m ${1} port ${2} alived\033[0m"else echo -e "\033[31;5m Server ${1} Port ${2} cannot connect , please check it manually ~! \033[0m" exitfi}### add user in 2 serversadd_user() {for i in {1..4}doserverip=`eval echo '$'"server${i}"`ssh ${sshuser}@${serverip} "sudo /sbin/groupadd -g ${next_gid} ${1}"if [ $? -eq 0 ]then echo -e "\033[32;1m Group ${1} creation in ${serverip} done \033[0m"else echo -e "\033[31;5m Group ${1} creation in ${serverip} failed , please check it manually ~! \033[0m" exitfissh ${sshuser}@${serverip} "sudo /sbin/useradd -s /bin/false -u ${next_uid} -g ${next_gid} ${1}"if [ $? -eq 0 ]then 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}
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4