Linux入门攻坚——30、sudo、vsftpd

su:Switch User,即切换用户
  su [-l user] -c ‘COMMAND’
如:su -l root -c ‘COMMAND’
如果没有指定-l user,则默认是root

sudo:可以让某个用户不需要拥有管理员的密码,而可以执行管理员的权限。
  需要授权,授权之后,能够让某用户以另外一个用户的身份运行命令。
授权依赖配置文件:sudoers
sudo的用法 : # sudo COMMAND

配置文件sudoers:/etc/sudoers
root    ALL=(ALL)     ALL
%wheel    ALL=(ALL)    ALL

以上每一列的含义如下:
第一列:用户名(带%的是组名),如root、test;运行命令者的身份(who,即user)。
第二列:等号左边的ALL表示允许从任何主机登录当前的用户账户,即通过哪些主机(where,即host);等号右边的ALL表示第一列的用户可以切换成系统中任何一个其它用户,即以哪个用户的身份(whom,即runas)(如:su test)。
第三列:第一列的用户能下达的命令,ALL表示可以下达任何命令。也可以指定特定命令,即运行哪些命令(which,即command),如/sbin/useradd,/sbin/userdel
配置项:
users    hosts=(runas)   commands
users:可以是username,或#uid或user_alias或%group_name或%#gid
hosts:ip、hostname、netaddr
commands:command name、directory、sudoedit

Alias_Type NAME = item1, item2, ...
    NAME:必须是全部大写
    Alias_Type:User_Alias、Host_Alias、Runas_Alias、Cmnd_Alias

测试:修改sudo配置文件,添加用户及可以执行命令

添加用户:

可执行的命令:

测试执行:

设置的命令出错了,是/sbin/ip,而不是/usr/sbin/ip,修改后:

sudo有个检票机制,即在输入用户密码后的5分钟内,执行命令不需要再次输入密码,使用sudo -k可以取消这次检票功能,即需要再次输入密码。

sudo的选项:
  -V:显示版本号
  -h:显示版本编号及指令的使用方式说明,即帮助
  -l:显示出自己(执行sudo的使用者)的权限
  -k:强迫使用者在下一次执行sudo时问密码
  -b:将要执行的指令放在后台执行
  -u user:以user用户身份运行

文件共享服务:应用层  ftp

NFS:Network File System(基于RPC:Remote Procedure Call,远程过程调用)
Samba:在Linux实现CIFS(SMB)协议,跨平台
DAS,NAS,SAN
mogileFS
mooseFS
hadoop HDFS

FTP,文件传输协议:采用C/S模型,即客户端和服务器,基于tcp,采用双TCP连接方式,两个连接:
  命令连接/控制连接:21/tcp,用于传输命令及命令执行信息,整个FTP会话期间一直保持打开
  数据连接:用于数据的上传下载文件列表发送等,数据传输结束后数据连接将终止。分两种情况
    主动模式:20/tcp,服务器端使用tcp的20端口主动连接客户端,用于数据连接,客户端的端口是客户端控制连接端口号加1,如果占用,再加1,以此类推。
    被动模式:主动模式中客户端一般有防火墙,容易连接失败,服务器通过控制连接,告诉客户端一个服务器随机端口号,由客户端连接这个端口。这就是被动模式。
数据传输模式:二进制模式和文本(ASCII模式)两种,(服务器客户端采用自动模式协商决定)
● 文本传输器使用ASCII字符,并由回车键和换行符分开,而二进制不用转换或格式化就可传字符,二进制模式比文本模式更快,并且可以传输所有ASCII值,所以系统管理员一般将FTP设置成二进制模式。
●  二进制模式用来传送可执行文件,压缩文件,和图片文件。如果用ASCII模式传,会显示一堆乱码,必须重新用BINARY模式传。用HTML和文本编写的文件必须用ASCII模式上传,用BINARY模式上传会破坏文件,导致文件执行出错。
    ftp server --> ftp client

主动方式也称为PORT方式,是FTP协议最初定义的数据传输连接方式,主要特点是:
● FTP客户端通过向FTP服务器发送PORT命令,告诉服务器该客户端用于传输数据的临时端口号
● 当需要传送数据时,服务器通过TCP端口号20与客户端的临时端口建立数据传输通道,完成数据传输。
在建立数据连接的过程中,由服务器主动发起连接,因此被称为主动方式。

被动方式也称为PASV方式,被动方式的主要特点是:
●  FTP客户端通过向FTP服务器发送PASV命令,告诉服务器进入被动方式。服务器选择临时端口号并告知客户端
●  当需要传送数据时,客户端主动与服务器的临时端口号建立数据传输通道,完成数据传输
在整个过程中,由于服务器总是被动接收客户端的数据连接,因此被称为被动方式。

数据的类型:
  结构化数据
  半结构化数据
  非结构化数据

服务器端程序:
  vsftpd:very Secure ftp Daemon
  proftpd:
客户端层序:
  CLI:ftp、lftp
  GUI:gftp、FlashFXP、Cuteftp

FTP的典型消息:
消息号及含义:
125:数据连接打开,传输开始;  200:命令OK ;  226:数据传输完毕;  331:用户名OK;  
425:不能打开数据连接;  426:数据连接被关闭,传输被中断;  452:错误写文件;
500:语法错误,不可识别的命令;

vsftpd:
支持基于IP的虚拟FTP服务器;支持虚拟用户;支持PAM或xinetd/tcp_wrappers的认证方式;支持两种运行方式:独立和Xinetd;支持每个虚拟用户具有独立的配置;支持带宽限制等。

安装:yum install vsftpd
查看安装文件:

启动:

用户认证:虚拟用户:仅用于访问某特定服务中的资源
nsswitch:network service switch,名称解析框架,配置文件:/etc/nsswitch.conf
                 模块:/lib64/libnss*,/usr/lib64/libnss*
pam:pluggable authentication module,模块:/lib64/security/,
           配置文件:/etc/pam.conf,/etc/pam.d/* 

/etc/vsftpd:配置文件目录
  /etc/init.d/vsftpd:服务脚本
  /usr/sbin/vsftpd:主程序
基于PAM实现用户认证:
  /etc/pam.d/*
  /lib/security/*
  /lib64/security/*
  支持虚拟用户  

文件目录:
  /var/ftp:只对root用户具有写权限
上传和下载: 下载一般风险较少,上传则风险较大。

FTP用户类型
匿名用户:anonymous或ftp
本地用户:账号名称、密码等信息保存在passwd、shadow文件中
虚拟用户:使用独立的账号/密码数据文件
ftp:系统用户
  匿名用户(映射为ftp用户)--> 系统用户,anonymous_enable=YES|NO,共享资源位置:/var/ftp
  虚拟用户 --> 系统用户,资源位置是给虚拟用户指定的映射成为的系统用户的家目录
  系统用户:local_enable=YES|NO,访问的是系统用户的家目录。

/var/ftp:ftp用户的家目录
  匿名用户访问目录

通过上面的命令,可以看到匿名用户是映射到ftp用户

chroot:禁锢用户于其家目录中

系统用户:write_enable=YES:上传文件

文件服务权限:文件系统权限*文件共享权限

测试操作:
启动vsftpd服务后,直接ftp登录:

可以看到,即使是匿名用户登录,也需要输入用户名。

匿名用户显示当前目录为"/",即根目录,当实际文件系统目录是/var/ftp
配置vsftpd:文件/etc/vsftpd/vsftpd.conf

anonymous_enable=NO,禁止匿名访问

添加系统用户,使用系统用户登录:
  useradd test01
配置中增加:local_enable=YES
使用系统用户登录:

可以看到,使用系统用户,登录的默认路径是系统用户的家目录,而且可以切换到其他系统路径,这是很危险的操作。一般正常应该锁定(禁锢)在FTP的根目录,即/var/ftp

chroot:禁锢用户于其家目录中。
系统用户,配置文件中:write_enable=YES:允许系统用户上传文件

使用匿名用户登录,再次测试上传文件:

发现无法上传。
在配置文件中有 #anon_upload_enable=YES,就是用来设置匿名用户是否可以上传文件,默认是不允许。
将此项设置打开,即anon_upload_enable=YES,重新加载配置后,再次测试上传。

发现依然没有上传成功,但是提示信息变化了,由原来的550 Permission denied变为553 Could not create file。即原来是权限拒绝变成了无法创建文件。

/var/ftp以及/var/ftp/pub两个目录的属主属组都是root,且只有属主root才具有写权限,即w权限。
而启动ftp进程处理数据传输的用户是ftp,所以需要目录对ftp用户具有写权限。
创建一个子目录,使其对ftp用户具有写权限:


所以,文件服务权限取决于:文件系统权限 * 文件共享权限
测试在此目录下创建子目录和删除文件:

不能创建子目录,不能删除文件。这两项属于不同的权限设置,在配置文件中,有如下设置项:
anon_mkdir_write_enable=YESanon_other_write_enable=YES,即是来开启匿名用户创建子目录和删除文件的权限。
先测第一项,创建目录:

能创建,不能删除,开放第二项other配置:

dirmessage_enable=YES,启动目录的欢迎信息,在目录下创建.message文件,文件中写上相关信息,在进入此目录时显示此文件中的信息。

banner_file=/var/vsftpd-banner,登录FTP站点时,显示的欢迎信息,欢迎信息定义在一个文件中,这里假设定义在/var/vsftpd-banner

ftpd_banner=My FTP Server 12,不是很复杂的提示信息或欢迎信息,可以直接用ftpd_banner=xxx来实现。
xferlog_enable=YES,启用ftp的日志功能,但是光启动这一项还不行,还要启用xferlog_file=/var/log/xferlog,即指定日志文件的位置:

日志的格式,使用xferlog_std_format=YES,标准格式。
#chown_uploads=YES 和 #chown_username=whoever
上传后改变属主。改变以后,当前用户对文件的权限就会受到限制。
#idle_session_timeout=600,控制链接的空闲时间。
#data_connection_timeout=120,数据传输链接的超时时间。
#ascii_upload_enable=YES 和 #ascii_download_enable=YES,以ascii进行上传下载
#chroot_list_enable=YES 和 #chroot_list_file=/etc/vsftpd/chroot_list,第一项是启用禁锢用户功能,第二项指定一个文件,在文件中列出需要禁锢的用户列表。在chroot_list中添加test01:

此时,test01用户被禁锢在FTP的根目录下。
#chroot_local_user=YES,如果想禁锢所有的系统用户,可以使用这条配置,上面两条就不需要了。
使用root用户进行登录测试:

不允许登录。在/etc/vsftpd目录下有ftpusers文件,其中每一行是一个系统用户名,这些用户不允许登录vsftpd。

默认vsftpd使用的是pam认证,在vsftpd.conf配置文件中。有pam_service_name=vsftpdp配置项。
PAM使用vsftpd文件,如下:

可以看到,PAM认证使用ftpusers文件,默认是deny。
vsftpd还可以使用user_list文件进行登录用户的控制。配置文件中有userlist_enable=YES,说明启用user_list文件进行用户控制,默认文件中的用户不允许登录,即有一个默认配置项:userlist_deny=YES

将test03加入这个文件中,测试:

可以发现无法登陆;如果修改默认权限配置,即增加userlist_deny=NO,即允许登录,再次测试:

可以看到,test03登录成功,root还是登录失败,但是可以输入密码了,因为还要受到ftpusers文件设定权限的限制。将ftpusers中的root去掉,再次测试:

root登录成功。
max_clients=# 最大并发连接数
max_per_ip=# 每个客户端IP地址可同时发起的最多并发请求数数
local_max_rate=# 系统用户(本地用户)的最大传输速率设置
anon_max_rate=# 匿名用户的最大传输速率设置
pasv_min_port=#   pasv_max_port=# 将使客户端连接时的端口范围在最小值和最大值之间。
chown_uploads=YES
chown_username=nobody
  启用上传文件修改属主,属主改为nobody。

虚拟用户:所有的虚拟用户会被统计映射为一个指定的系统账号,访问的共享位置即为此系统用户的家目录;各虚拟用户可被赋予不同的访问权限,主要是通过匿名用户的权限控制参数进行指定。
构建基于虚拟用户的vsftpd服务器——虚拟用户账号基于文件
1、建立虚拟FTP用户的账号数据库文件;
2、创建FTP根目录及虚拟用户映射的系统用户;
3、建立支持虚拟用户的PAM认证文件;
4、在vsftpd.conf文件中添加支持配置;
5、为个别虚拟用户建立独立的配置文件;
6、重新加载vsftpd配置;
7、使用虚拟FTP账号访问测试;

1、创建虚拟FTP用户账户文件,在/etc/vsftpd/目录下创建vusers.list,格式为每两行代表一个用户,奇数行代表用户名,偶数行代表密码。如:
user01
pass01
user02
pass02
将上述文件转化为Berkeley DB格式的数据文件,使用db_load 转换工具,需安装 db4-utils-4.3.29-9.fc6.i386.rpm 软件包。


在使用 db_load 命令时,“-f”选项用于指定用户名/密码列表文件,“-T”选项允许非Berkeley DB的应用程序使用从文本格式转换的DB数据文件,“-t hash”选项指定读取数据文件的基本方法。将帐号文件的权限设置为600,可以有效提高安全性。
2、创建FTP根目录及虚拟用户映射的系统用户,vsftpd虚拟用户需要有一个对应的系统用户帐号(该帐号无需设置密码及登录Shell),该用户帐号的宿主目录作为所有虚拟用户登录后的共同FTP根目录。

3、建立支持虚拟用户的PAM认证文件:/etc/pam.d/vsftpd.vu
PAM配置文件(名称可以自行定义)主要用于为程序提供用户认证控制,vsftpd服务使用的默认PAM配置文件为/etc/pam.d/vsftpd,可以参考该文件的格式建立新的PAM配置文件,用于虚拟用户认证控制 。如下文件,其中db=就是上一步vusers.list转换的vusers.db,不需要加后缀。

4、在vsftpd.conf文件中添加支持配置:
pam_service_name=vsftpd.vu,指定PAM验证使用的文件,即上一步创建的文件;
local_enable=YES,因为映射的是本地用户登录,所以这一项要配置成YES;
guest_enable=YESguest_username=virtualuser,配置虚拟用户可以访问;
userlist_enable=YESuserlist_deny=NO先注释掉,将匿名用户的配置注释掉,即以anon开头的配置注释掉。
测试,使用虚拟用户可以登录,但是不能创建目录,不能上传文件:

在vsftpd.conf配置文件中添加guest_enable、guest_username配置项,将访问FTP服务的所有虚拟用户对应到同一系统用户帐号virtualuser。并修改pam_service_name配置项,指向上一步建立的PAM配置文件/etc/pam.d/vsftpd.vu
在vsftpd服务中,虚拟用户帐户默认作为匿名用户处理以降低权限,因此对应的权限设置通常使用以anon_开头的配置项。例如,在设置虚拟用户所上传文件的默认权限掩码时应采用配置项anon_umask而不是local_umask。
5、为个别虚拟用户建立独立的配置文件
在vsftpd.conf文件中添加用户配置目录支持
 user_config_dir=/etc/vsftpd/vusers_dir ,这里目录为vusers_home
为用户user01、user02建立独立的配置目录及文件, 配置文件名与用户名同名

此时可以创建目录,可以上传文件。
一个很奇怪的问题是:在使用CentOS的ftp命令登录时,只能创建目录,不能上传文件,改为lftp就可以。

构建基于虚拟用户的vsftpd服务器——虚拟用户账号基于Mysql
1、安装mysql数据库,系统上已经编译安装了MariaDB,此步骤略过;
2、安装相关包:yum install mysql-devel pam_mysql
3、准备数据库及相关表;首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。
mysql> create database vsftpd;
mysql> grant select on vsftpd.* to vsftpd@localhost identified by '123456';
mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by '123456';
mysql> flush privileges;
mysql> use vsftpd;
mysql> create table users (
 id int AUTO_INCREMENT NOT NULL,
 name char(20) binary NOT NULL,
password char(48) binary NOT NULL,
 primary key(id) );

  添加测试的虚拟用户,根据需要添加所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储。

mysql> insert into users(name,password) values('vuser01',password('123456'));
mysql> insert into users(name,password) values('vuser02',password('123456'));

4、配置vsftpd
1)建立pam认证所需文件

#vi /etc/pam.d/vsftpd.mysql
添加如下两行
auth required /lib64/security/pam_mysql.so user=vsftpd passwd=123456 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /lib64/security/pam_mysql.so user=vsftpd passwd=123456 host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。

2)修改vsftpd的配置文件,使其适应mysql认证

建立虚拟用户映射的系统用户及对应的目录,利用上一次的虚拟用户:
# useradd -s /sbin/nologin -d /var/myftproot virtualuser
# chmod go+rx /var/myftproot

请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES

而后添加以下选项
guest_enable=YES
guest_username=vuser

并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql
5、重启vsftpd,访问测试:

6、配置虚拟用户具有不同的访问权限:与上一个使用文件的虚拟用户一样,vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。
配置vsftpd为虚拟用户使用配置文件目录:
# vim vsftpd.conf   , 添加如下选项
user_config_dir=/etc/vsftpd/vusers_home
创建所需要目录,并为虚拟用户提供配置文件:
# mkdir /etc/vsftpd/vusers_home/
# cd /etc/vsftpd/vusers_home/
# touch vuser01
配置虚拟用户的访问权限:
虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。修改/etc/vsftpd/vusers_config/vuser01文件,在里面添加如下选项即可。
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}

lftp命令:支持命令行补全,语法着色等
lftp [-d] [-e cmd] [-p port] [-u user[,pass]] [site]  登录ftp服务器
lftpget [-c] [-d] [-v] URL [URL...] 下载文件命令
axel,可以多线程下载,支持断点续传。

ftp协议是明文的,如要安全,使用:
  ftps:SSL
  sftp:SSH
 

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值