在CentOS中配置 SFTP 环境

       做运维工作的,应该经常会碰到这样的问题,需要新上一个web项目,需要上传文件到服务器上,解决方法有很多种,常见的如sftp和ftp,今天讲如何使用sftp让系统用户用户上传项目的权限,并且实现chroot和无法使用ssh登录到系统。

       SFTP是指SSH文件传输协议(SSH File Transfer protocol)或安全文件传输协议(Secure File Transfer Protocol),它提供了可信数据流下的文件访问、文件传输以及文件管理功能。当我们为SFTP配置chroot环境后,只有被许可的用户可以访问,并被限制到他们的家目录中,换言之:被许可的用户将处于牢笼环境中,在此环境中它们甚至不能切换它们的目录。

1. 测试环境

  • MacBook Pro 15-inch i7 16GB
  • VMware Fushion 8 Pro
  • Transmit ( SFTP tools for Mac )
1
2
3
4
5
[root@test ~]# cat /etc/issue
CentOS release 6.6 (Final)
Kernel \r on an \m
[root@test ~]# rpm -qa | grep openssh-server
openssh-server-5.3p1-104.el6.i686

2. 实验步骤

2.1 增加一个sftpusers用户组
1
[root@test ~]# groupadd sftpusers
2.2 创建一个用户user01,并分配给sftpusers用户组
1
[root@test ~]# useradd -g sftpusers user01
2.3 修改用户家目录及指定不能登录shell
1
2
[root@test ~]# mkdir /sftp/
[root@test ~]# usermod -s /sbin/nologin -d /sftp/user01 -m user01
2.4 给用户创建密码(注意密码不明文显示)
1
2
3
4
5
6
7
8
[root@test ~]# passwd user01
Changing password for user user01.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
[root@test ~]#

2.5 修改ssh的配置文件,如下设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@test ~]# ll /etc/ssh/sshd_config
-rw-------. 1 root root 3879 Oct 15 2014 /etc/ssh/sshd_config
[root@test ~]# vim /etc/ssh/sshd_config

# line 132
#Subsystem sftp /usr/libexec/openssh/sftp-server #注释
Subsystem sftp internal-sftp #修改为internal-sftp

# add this lines at the end of file
Match Group sftpusers #指定一下参数仅适用的用户组sftpusers
X11Forwarding no
AllowTcpForwarding no
ChrootDirectory %h #设置chroot将用户锁在家目录,%h=家目录
ForceCommand internal-sftp #该参数强制执行内部sftp
2.6 重启ssh服务
1
2
3
[root@test ~]# /etc/init.d/sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]
2.7 设置用户家目录权限,(注意权限不能大于0755)
1
2
3
[root@test ~]# chmod 0755 /sftp/user01/
[root@test ~]# chown root /sftp/user01/
[root@test ~]# chgrp -R sftpusers /sftp/user01/
2.8 关于上传,根目录无法上传文件。

       因为用户家目录属主是root,并且权限最大0755,所以没法写,我的解决方法是在在家目录建立一个文件夹,作为上传目录,并把属主给user01即可。

1
2
[root@test ~]# mkdir /sftp/user01/upload
[root@test ~]# chown user01:sftpusers /sftp/user01/upload/

3. 测试验证

3.1 Linux 登录测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@test ~]# su - user01
This account is currently not available. #su - 切换失败

[root@test ~]# cat /etc/passwd | tail -1
user01:x:500:500::/sftp/user01:/sbin/nologin

[root@test ~]# ssh user01@localhost
The authenticity of host 'localhost (::1)' can't be established.
RSA key fingerprint is f3:fc:31:dc:7d:16:d5:ad:8c:bc:eb:69:8f:b2:0b:c9.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (RSA) to the list of known hosts.
user01@localhost's password:
This service allows sftp connections only. #ssh登录也失败,ssh设置成功
Connection to localhost closed.

[root@test ~]# sftp user01@localhost
Connecting to localhost...
user01@localhost's password:
sftp> ls
upload
sftp> pwd
Remote working directory: /
sftp>
3.2 SFTP 工具测试

       我这里使用的是Mac,但是传统的文件传输工具都差不多,Windows下有Winscp、Xftp等。

MySQL(6) 利用Linux计划任务定时同步MySQL

       

        说下实际项目场景,公司一个应用已部署主从数据库,业务也正式上线;现在客户公司领导希望可以看到每天的业务数据报表,本设定直接到从库拿数据,然后进行数据处理,生成报表,但是Java同事提出需求新增用户和权限表,这样一来,如果直接使用生产库的表会导致后台系统管理人员与领导的账户和权限混淆,经过讨论决定,按照生产库的表结构新增特殊用户表和权限表;这样操作实际是可以在从库上新增表单,且不影响主从库之间的数据同步,但是从安全性的考虑,新增表单设计需要给用户Insert权限,为了保证从库只有利用主库同步写入数据,则只能给其他用户select权限。

       最终决定,因为报表系统的使用率低,直接在报表系统的服务器安装本地mysql数据库,通过计划任务定时到从库上同步数据。

       

1. 测试环境

  • MacBook Pro 15‘ i7 16GB
  • VMware Fushion 8 Pro
  • MySQL Version 5.6
  • CentOS Linux 6.x
  • slave Server :172.16.102.129
  • local Server :172.167.102.133

2. 利用mysqldump导出sql文件

       需要注意的是,mysqldump时会锁表,需要给mysqldump传递 “–single-transaction” 参数,可以使得mysqldump时不锁表,如下:

1
/usr/bin/mysqldump -h 172.168.102.129 -u dbuser -pdbuser --single-transaction slave > slave.sql

3. 使用mysql恢复sql文件到数据库中

       需要注意的是,如果该local server的slave库中有数据表,当表名与slave server的表名相同时,数据表内的数据会被覆盖;如果local server的表在slave.sql中不存在,则不受影响,正是利用这个特性解决用户需求。

1
/usr/bin/mysql -u dbuser -pdbuser report < /home/.mysql/slave.sql

4. 编写脚本

        首先在本地某一位置作为临时sql存储地址:

1
[root@report ~]# mkdir /home/.mysql     # 这个目录可以自定义

        脚本1:

1
2
3
4
5
6
7
8
9
#!/bin/bash

TIME=`date "+%Y%m%d%H"`

rm -rf /home/.mysql/*

/usr/bin/mysqldump -h 172.168.102.129 -u dbuser -pdbuser --single-transaction slave > /home/.mysql/slave_$TIME.sql

/usr/bin/mysql -u dbuser -pdbuser report < /home/.mysql/slave_$TIME.sql

5. 增加邮件通知功能

        因为前期同事需要得知备份的执行结果,所以希望数据同步成功后获得邮件提醒,这里使用sendmail实现,在CentOS里预装是没有安装sendmail,所以我们需要安装sendmail服务,另外一个安装命令行邮件工具mailx:

1
2
3
4
5
6
7
8
[root@report ~]# yum install -y sendmail mailx

......

[root@report ~]# service sendmail start
Starting sendmail: [ OK ]
Starting sm-client: [ OK ]
[root@report ~]# chkconfig sendmail on

        完整脚本:report_sync.sh ,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash

TIME=`date "+%Y%m%d%H"`

rm -rf /home/.mysql/*

/usr/bin/mysqldump -h 172.168.102.129 -u dbuser -pdbuser --single-transaction slave > /home/.mysql/slave_$TIME.sql

/usr/bin/mysql -u dbuser -pdbuser report < /home/.mysql/slave_$TIME.sql

# send mail to adminuser
if [ $? -eq 0 ]
then
echo "report SQL sync is successfully. At time: `date` " | mail -s report-sync-successfully hello@abc.cn
else
echo " Error Error report SQL sync is Error. At time: `date` " | mail -s report-sync-error hello@abc.cn
fi

        查看下邮件通知:

6. 计划任务crontab

       和同事及客户沟通,确认每天1、5、9、13、17、21整时到从库拉去数据,Linux选择使用crontab做计划任务,crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中。通常,crontab储存的指令被守护进程激活, crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

6.1 安装crontab

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@report ~]# yum install -y vixie-cron
[root@report ~]# yum install -y crontabs

说明:
vixie-cron软件包是cron的主程序;
crontabs软件包是用来安装、卸装、或列举用来驱动 crond 守护进程的表格的程序。

cron 是linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
/sbin/service crond start #启动服务
/sbin/service crond stop #关闭服务
/sbin/service crond restart #重启服务
/sbin/service crond reload #重新载入配置

设置crond开机自启动
[root@report ~]# chkconfig crond on

7. 添加计划任务

       将脚本report_sync.sh 保存到/usr/bin下:

1
[root@report ~]# mv report_sync.sh /usr/bin

       增加计划任务:

1
2
3
4
5
6
[root@report ~]# crontab -e

# add this word.
* 1-21/4 * * * /usr/bin/report_sync.sh

# 表示在每天的1-21时间内,每4小时执行一个脚本

Linux 笔试试题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
一. 选择题 (1题1分)
1. 当登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么( )
A. NID  B. PID  C. UID  D. CID
答案:B
2. 用vi打开一个文件,如何用字母"new"来代替字母"old" ( )
A. :s/old/new/g   B. :s/old/new  C. :1,$s/old/new/g   D. :r/old/new
答案:A
3. 请选择对标准的变量PS2正确的描述( )
A. 是一个主shell提示符变量    B. 是一个一般的shell提示符变量
C. 是第二主shell提示符变量   D. 是一个连续提示符变量
答案:B
4. 哪一个命令能用来查找文件TESTFILE中只包含四个字符的行?( )
A. grep '^????$' TESTFILE    B. grep '????' TESTFILE
C. grep '^....$' TESTFILE     D. grep '....' TESTFILE
答案:C
5. 一个bash shell脚本的第一行是什么( )
A. #!/bin/bash  B. #/bin/bash  C. #/bin/csh   D. /bin/bash
答案:A
6. 用标准的输出重定向(>)像"> file01"能使文件file01的数据( )
A. 被移动  B. 被复制  C. 被打印   D. 被覆盖
答案:D
7. 下面哪个命令是用来定义shell的全局变量( )
A. exportfs  B. alias  C. exports  D. export
答案:D
8. 如果想加载一个/dev/sdb1的windows95分区到/mnt/win95目录,需要运行哪个命令( )
A. mount -t hpfs /dev/sdb1 /mnt/win95
B. mount -t hpfs /mnt/win95 /dev/sdb1
C. mount -t vfat /dev/sdb1 /mnt/win95
D. mount -t vfat /mnt/win95 /dev/sdb1
答案:C
9. 哪个文件存放用户密码信息( )
A. /boot/passwd   B. /etc/shadow   C. /var/passwd  D. /dev/passwd
答案:B
10. 假定kernel支持vfat分区,下面哪一个操作是将/dev/sda1,一个window98分区加载到/win目录( )
A. mount -s win /dev'sda1 /win
B. mount -fs=msdos /dev/sda1 /win
C. mount -t vfat /dev/sda1 /win
D. mount -t windows /win /dev/sda1
答案:C
11. 默认情况下管理员创建了一个用户,就会在( )目录下创建一个用户主目录。
A. /usr  B. /home   C. /root  D. /etc
答案:B
12. 如果要列出一个目录下的所有文件需要使用命令行( )。
A. lsl  B. ls   C. ls –a   D. ls -d
答案:C
13. 利用哪个工具可以设置用户在文件系统中的空间大小( )。
A. turboservice  B. turbofscfg  C. turbonetcfg   D. turboxcfg
答案:B
14. 哪个命令可以将普通用户转换成超级用户( )
A. super  B. passwd  C. tar   D. su
答案:D
15. 哪个命令用来显示/home及其子目录下文件名( )
A. ls -R /home  B. ls -d /home  C. ls -a /home    D. ls -l /home
答案:A
16. 在vi模式下,哪个命令用来删除光标处的字符( )
A. xd   B. x   C. dd   D. d
答案:B  dd删除一行,x删除当前字符
17. 在一行内运行多个命令需要用什么字符隔开( )
A. @  B. $   C. ;  D. *
答案:C
18. 确定myfile的文件类型的命令是( )
A. whatis myfile
B. file myfile
C. type myfile
D. type -q myfile
答案:B
19. 哪些命令组合起来能统计多少用户登录系统( )
A. who | wc –w   B. who | wc –l   C. who | wc –c   D. who | wc
答案:BD
20. 用 "rm -i",系统会提示什么来让你确认( )
A. 命令行的每个选项  B. 是否真的删除  C. 是否有写的权限   D. 文件的位置
答案:B
21. Linux启动的第一个进程init启动的第一个脚本程序是( )。
A. /etc/rc.d/init.d   B. /etc/rc.d/rc.sysinit  C. /etc/rc.d/rc5.d  D. /etc/rc.d/rc3.d
答案:B
22. 按下( )键能终止当前运行的命令
A. Ctrl-C   B. Ctrl-F   C. Ctrl-B   D. Ctrl-D
答案:a
23. 用来分离目录名和文件名的字符是( )
A. dash (-)  B. slash (/)  C. period (.)   D. asterisk(*)
答案:B
24. 系统的配置文件在( )目录下
A. /home   B. /dev  C. /etc   D. /usr
答案:C
25. 显示用户的主目录的命令是什么?( )
A. echo $HOME  B. echo $USERDIR   C. echo $ENV  D. echo $ECHO
答案:A
26. 在vi编辑器里,哪个命令能将光标移到第200行( )
A. g200  B. G200  C. :200   D. 200g
答案:C
:200可以,200G也可以
27. 用"useradd jerry"命令添加一个用户,这个用户的主目录是什么?( )
A. /etc/jerry   B. /var/jerry  C. /home/jerry   D. /bin/jerry
答案:C
28. 哪一个命令能用来删除当前目录及其子目录下名为'core'的文件( )
A. find . -name core -exec rm {} \ ;
B. find . -name core -exec rm ;
C. find . -name core -exec rm {} ;
D. find . -name core -exec rm {} -;
答案:A
29. 以下哪条命令在创建一个xp用户的时候将用户加入到root组中( )
A. useradd -g xp root  B. useradd -r root xp  C. useradd -g root xp   D. useradd root xp
答案:C
30. 不改变运行级别而重新读入inittab文件的命令是( )。
A. init s  B. init q  C. init S   D. init Q
答案:B
31. 以下哪个命令可以终止一个用户的所有进程( )
A. skillall   B. skill  C. kill   D. killall
答案:D
32. 通过修改哪个文件可以在创建用户的时候改变用 户主目录的路径( )
A. /etc/default/passwd   B. /etc/default/useradd  C. /etc/profile  D. /etc/fstab
答案:B
33. 以只读方式打开一个文件并进入vi编辑器的命令是( )
A. view -r filename   B. view filename   C. vi filename   D. vi -r filename
答案:B
34. 以下哪个命令是将缓存中的内容粘贴到光标之前( )
A. a   B. i   C. P   D. p
答案:C
35. 以下哪条vi命令能将文档5-20行间出现的abc替换成为cba ( )
A. :1,$s/abc/cba/g   B. :5,20/abc/cba/g  C. :5-20s/abc/cba/g   D. :5,20s/abc/cba/g
答案:D
. 在vi中通过哪条命令可以将ps命令执行的结果插入到文档中( )
A. :r!ps   B. :!ps   C. :!rps    D. :w!ps
答案:A
36. 以下哪个vi命令可以在当前位置插入/etc/passwd文本文件( )
A. :r /etc/passwd   B. :i /etc/passwd  C. :w /etc/passwd   D. :s /etc/passwd
答案:A
37. vi中复制整行的命令是( )
A. y1   B. yy   C. ss   D. dd
答案:B
38. 以下哪个vi命令可以给文档的每行加上一个编号( )
A. :e number   B. :set number  C. :r!date     D. :200g
答案:B
38. 以下哪些文件只有根用户才能读写( )
A. /etc/bashrc   B. /etc/profile   C. /etc/shadow    D. /etc/passwd
答案:BC
39. 使用groupdel删除一个组的时候,命令执行失败,原因可能是( )
A. 该组是系统组   B. 该组是空的   C. 该组中成员非空   D. 该组不存在
答案:CD
40. Linux中文件名构成的规则比较灵活表现在( )
A. 文件名长度多达256个字符     B. 可以使用除了/符号外的所有ASCII字符
C. 不区分大小写            D. 无扩展名限制
答案:ABD
41. 对用户的口令进行加解锁的命令是passwd,参数选项是( )
A. –l  B. –L  C. –u   D. -U
答案:AC
42. 如果你对文件和目录的权限不确定,则不能用( )命令来检测权限
A. ps   B. ck    C. lsl   D. chown
答案:ABD
43. 选择对/proc文件系统不正确的描述( )
A. 通常情况下,不提供中断、IO端口、CPU等信息   B. /proc文件系统可以提供系统核心的许多参数
C. /proc是一个虚拟的文件系统            D. 可以得到系统中运行的进程的一些信息
答案:A
44. 以下哪些符号可以用来连接多条命令( )
A. ||    B. &&   C. ;   D. |
答案:ABCD
45. 在shell中,下面哪些字符串当作普通字符串时候需要使用"\"来转义( )
A. 分号(;)   B. 双引号(")  C. 单引号(')   D. 反斜杆(\)
答案:BCD
46. Linux中提供了几个重要的工具用来改变服务和进程的运行状态和运行级别以及初始化进程,它们是( )。
A. chkconfig  B. service  C. turboservice   D. ksysv
答案:ABCD
47. 在/etc/rc.d/init.d目录下的所有脚本至少支持两个运行参数,它们是( )。
A. start   B. restart    C. stop   D. reload
答案:AC
48. Linux一般被称为是稳定的服务器系统,它的安全性表现在( )
A. 网络防火墙  B. 用户管理策略 C. 系统、目录、文件的权限控制 D. 封闭源码便于及时修正漏洞等
答案:ABC
49. 在vi中下列哪些命令不能用来在光标前插入文本( )
A. p [text]  B. i [text]  C. o [text]   D. a [text]
答案:ACD
50. 在本地的文件系统中下列哪些linux路径结构是无效的( )
A. \usr/zhang/memo   B. /usr/zhang/memo   C. //usr\zhang/memo   D. \usr\zhang\memo
答案:ACD

二、简答题 (1题3分)

1.常见的Linux发行版本都有什么?你最擅长哪一个?它的官网网站是什么?说明你擅长哪一块?

2.Linux开机启动流程详细步骤是什么?系统安装完,忘记密码如何破解?

4.某一天突然发现Linux系统文件只读,该怎么办呢?完整操作步骤。

5.安装一台系统使用DVD光盘安装,如何安装50台Linux系统如何安装呢?思考一下。

6.用虚拟机安装了一台Linux系统,突然想克隆一台服务器,克隆后发现无法上网,如何解决?

7.Linux网卡配置文件路径是什么?要使服务器上外网,必须满足的条件有哪些?需要配置什么?

8.一般可以使用什么软件远程linux服务器?通过什么上传文件和下载文件?

9./mnt目录主要用于什么?/root目录跟root用户有什么关系?/根目录与/boot目录有什么联系?

10.某一天误操作,执行了rm -rf * ,会有哪些情况发生?请举例。



三、 公有云题目 (1题5分)
1. 请解释上云的好处是什么?传统业务类型与公有云也为类型有什么区别?请举例说明。

2. 列出你用过的阿里云\AWS\Azure服务?并讲述他们的作用?

3. 请列出你觉得阿里云\AWS\Azure目前的特色和不成熟的地方是那些?你觉得应该如何改正。

4. 请用阿里云\AWS\Azure设计一个视频网站的架构图并进行解释说明。
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×