Skip to content

Latest commit

 

History

History
237 lines (131 loc) · 12.1 KB

3.22_20170628_sudo和网络文件共享.md

File metadata and controls

237 lines (131 loc) · 12.1 KB

sudo和文件共享服务

切换用户使用su或su -,su只是切换到root身份,shell环境仍然是普通用户的shell,su -是用户和shell环境都切换到了root。使用-c COMMAND可以变更为使用者的身份并且执行指令后变回原来的使用者。使用-l选项表示改变身份时,也同时变更工作目录,以及HOME、SHELL、USER、logname,此外也会变更PATH环境变量。

sudo可以让某用户不需要管理员的密码,就可以拥有管理员的权限。sudo是一种授权机制,授权之后能够让某用户以另外一个用户的身份运行命令。sudo的配置文件是/etc/sudoers。也可以使用visudo来编辑配置文件。授权在配置文件中以类似root ALL=(ALL) ALL的格式进行授权,也可以对用户组进行授权。其中第一个字段user是运行命令者的身份,第二字段host是通过哪些主机,等号右侧ranas表示以哪个用户的身份运行,第三个字段command表示可以运行哪些命令。

user host=(runas) commands

user可以使用username、#uid、user_alias、%group、%#gid等;host可以使用ip、hostname、network等;command可以使用command name、directory

在配置文件中,指定用户别名User_Alias USERNAME = 1user,2user,...,其中定义的用户名必须为大写字母,可以把这个看作为定义的一个用户组。指定命令别名Cmnd_Alias COMMANDS = command1,command2,这可以看做命令的集合。Alias_Type有User_Alias、Host_Alias、Runas_Alias、Cmnd_Alias。

用户在使用sudo时,需要验证当前用户的密码,sudo有检票时间,检票时间的有效时长是5分钟,如果5分钟之内都没执行sudo,再次执行sudo需要输入用户密码。使用sudo -k清除检票记录的用户密码。sudo默认以root身份运行命令,也可以使用sudo -u user来指定以哪个用户运行命令。

对于一些没有root密码的管理员,可以使用sudo su -来切换到root用户。

对于sudo授权,如果要对用户授权关于密码的操作,那么要禁止用户修改管理员密码,定义一个Cmnd_alias=/usr/bin/passwd [a-z]*,!/usr/bin/passwd root

sudo的所有操作会记录在日志中。

文件共享服务

在linux中,有三种文件共享服务

  • 工作在应用层的ftp服务
  • 工作在内核的nfs:跨平台困难(windows)
  • 跨平台文件协作服务samba:在linux实现CIFS(SMB)协议

存储模型有三种:DAS、NAS、SAN

  • DAS:直接附加存储,直接附加在主板上的存储
  • NAS:网络附加存储,文件级别共享
  • SAN:块级别共享

###vsftpd

ftp(File Transfer Protocol)是应用层协议,CS架构,监听在tcp21端口,服务端监听在tcp21号端口监听命令连接。ftp需要传输两种数据:

  • 命令连接:文件管理类命令,始终在线链接,
  • 数据连接:数据传输,按需创建及关闭的连接。

ftp的数据传输格式支持文本格式传输和二进制传输。ftp的传输有主动连接和被动连接两种模式,主动连接由服务器创建连接,被动连接是由客户端创建连接。主动连接中客户端命令连接使用随机端口连接服务端21号端口,数据连接使用服务端tcp20号端口主动连接客户端50000+1号端口,如果端口占用,继续加1,实际上客户端会将自己已经打开的端口通知服务器。被动模式中,命令连接依然是由客户端发起,客户端使用随机端口连接服务端21号端口,数据连接也由客户端发起,客户端使用50000+1(或以此类推)向服务端随机端口连接,随机端口会在命令连接中告知客户端。

ftp的Server端有:wu-ftpd、proftpd、pureftp、vsftpd、ServU。

ftp的Client端有:ftp、lftp、wget、curl、filezilla、gftp(Linux GUI)、flashfxp、cuteftp

ftp和http协议相似,也有响应码

  • 1XX:信息
  • 2XX:成功类的状态码
  • 3XX:提示需进一步提供补充类信息的状态码
  • 4XX:客户端错误
  • 5XX:服务端错误

ftp也有用户认证,ftp既支持系统用户认证也支持虚拟用户认证,虚拟用户仅用于访问特定服务的资源。ftp还支持匿名用户登录。即使使用了匿名或虚拟账户,最后还是要以一个系统用户运行程序。

系统中有两个应用框架,名称解析框架nsswitch(network service swithc)/etc/nsswitch.conf(相关模块/lib64/libnss* 和/usr/lib64/libnss*)和用户认证框架pam(pluggable authentication module)/etc/pam.conf和/etc/pam.d/(相关模块/lib64/security)。应用可以借助这两个框架加以相关配置文件进行解析和认证。

CentOS6中自带的是vsftpd,默认可能没有安装,默认vsftpd使用系统用户来进行认证。

日志滚动文件:/etc/logrotate.d/vsftpd 用户认证配置文件:/etc/pam.d/vsftpd

配置文件:/etc/vsftpd 主配置文件:/etc/vsftpd/vsftpd.conf

主程序:/usr/sbin/vsftpd

匿名用户(映射为ftp用户)共享资源位置:/var/ftp,ftp用户的家目录是/var/ftp

系统用户通过ftp访问的资源位置是用户自己的家目录,虚拟用户通过ftp访问资源的位置是给虚拟用户指定的映射成为系统用户的家目录

匿名用户的配置

anonymous_enable=YES允许匿名用户登录

anon_upload_enable=YES允许匿名用户上传文件,默认禁用,禁用功能将此行注释即可

anon_mkdir_write_enable=YES允许匿名用户创建目录,默认禁用

anon_other_write_enable=YES允许匿名用户的其他写权限,如删除等,默认禁用

系统用户的配置

local_enable=YES允许系统用户登录

write_enable=YES允许本地用户写权限

local_umask=022本地用户上传文件的默认权限644

chroot_local_user=YES锁定所有ftp本地用户于其家目录中

chroot_list_enable=YES锁定指定ftp本地用户于其家目录中,指定文件在chroot_list_file=/etc/vsftpd/chroot_list,在文件中的用户进行锁定

日志

xferlog_enable=YES是否启用日志

xferlog_file=/var/log/xferlog指定日志文件

xferlog_std_format=YES日志记录信息格式

改变上传文件的属主

chown_uploads=YES

chown_username=whoever

用户登录控制

pam_service_name=vsftpd指定pam用到的配置文件/etc/pam.d/vsftpd

userlist_enable=YES

userlist_deny=YES|NO yes为白名单,no为黑名单

tcp_wrappers=YES

默认文件为/etc/vsftpd/user_list

vsftpd连接限制

max_clients最大并发连接数

max_per_ip每个ip可同时发起的并发请求数

传输速率限制

anon_max_rate匿名用户的最大传输速率, 单位是“字节/秒”

local_max_rate本地用户的最大传输速率

虚拟用户

所有的虚拟用户会被统一映射为一个指定的系统账户,访问的共享位置即为此系统账号的家目录。

各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定:

虚拟用户账号的存储方式:

  • 文本文件

    文本文件中,奇数行为用户名,偶数行为密码。

    文件需要被编码为 hash格式

  • 关系型数据库的表中

    即时查询数据库来完成用户认证

    要使用mysql,pam要依赖于pam_mysql。在CentOS6可以在epel源中找到相应的rpm包,yum -y install pam_mysql,在7中需要编译安装。

###NFS

NFS也是linux中常见的文件共享服务,NFS的全称是Network File System,由Sun公司研发,传统意义上单机文件系统在内核中实现,NFS实现的效果是本地对本地文件系统的接口的调用映射到网络的另外一个主机。

系统调用除了有本地系统调用,还有远程过程调用。RPC(Remote Procedure Protocol)是远程过程调用,是远程过程调用使用的协议,远程过程调用是函数调用,一部分功能由本地程序完成,另一部分有远程主机上的函数完成。

RPC是系统中的公共的共享的功能,NFS监听在tcp和udp 2049端口。提供RPC服务的进程叫做portmapper(tcp和udp111端口),使用rpcinfo来查看rpc的相关信息,-p+主机名选项可以查看其它主机上在mapper中注册使用的服务。

在客户端和服务端要使用半结构化数据用以统一描述传输的数据,如xml(eXtended Mark Language)、JSON、基于http的RESTful

NIS(Network Information System)能够集中于某服务器完成身份认证,不在本地实现身份认证。NIS协议是明文的,不建议在互联网使用。使用NIS就解决了在本地和服务端用户、用户组以及ID号不相同所导致存储文件元数据的问题。实际上NIS容易产生单点故障,使用很少。目前集中用户身份认证使用的是LDAP。

NFS仅支持基于IP的认证,实际上既不安全也不灵活,但也没有办法。NFS不是一个请求响应的服务,只是一个远程过程调用服务,所以服务自身没有认证能力,需要辅助进程来完成认证mountd。mountd监听端口由本地公共服务rpc来随机分配端口。

NFS服务端监听的服务:nfsd、mountd、idmapd

NFS服务端启动使用service nfs start(CentOS 6)

对nfs配置编辑/etc/exports,每一行是一个目录或文件系统,接着配置主机和访问权限如/shared/nfs 192.168.4.71(rw) 192.168.4.72(ro),一般格式为文件系统 客户端(选项) 客户端(选项) 。客户端可以是ip、FQDN或DOMAIN、NETWORK

客户端可用的选项有:rw读写访问权限,默认为只读;async异步访问,默认开启;

查看NFS服务端共享的文件系统使用showmount -e nfs_server_ip

挂载NFS文件系统使用mount -t nfs SERVER:/path/to/sharedfs /path/to/mount_point

exportfs是维护exports文件导出的文件系统表的工具,使用-ar选项可是导出所有的文件系统,使用-au关闭导出的所有文件系统,使用-u FS可以关闭指定的导出的文件系统。

开机自动挂载nfs,编辑/etc/fstab:SERVER:/path/to/exportd_fs /mount_point nfs defaults,_netdev 0 0

练习:小型论坛的搭建,两台web服务器,共享关系型数据库,共享NFS服务器,利用DNS记录轮询提供负载均衡;

Samba

在windows中,使用smb(Service Message Block)协议进行共享文件系统,这种方式也被称为CIFS(Common Internet File System)协议,这类似于linux的NFS。在linux或unix中使用smaba后,可以基于CIFS用来和windows主机进行共享文件系统。

CIFS在windows监听udp/137、138和tcp/139、445。137和138用来实NETBIOS,是windows基于主机名互相通信的机制,一般长度是15个字符。

Samba在linux使用三种服务实现了windows的三种的功能:

  • nmbd:实现了NETBIOS协议,samba默认启动服务
  • smbd:实现cifs,samba默认启动服务
  • winbindd:使linux加入AD域,smaba默认不启用此服务

在windows中使用UNC路径访问共享文件系统,格式为:\\SERVER\SHARED_NAME

使用smbclient来获取主机共享的文件夹:smbclient -L HOST -U User_name

交互式访问共享文件夹:smbclient //host/folder -U username

基于文件系统访问,使用mount -t cifs //SERVER/SHARED_NAME /mount_point -o username=USERNAME

samba的服务端

samaba有两个服务脚本(CentOS6),是nmb和smb。主配置文件/etc/samaba/smb.conf。

samba的用户认证,samba的用户账号都是系统用户,密码是samba服务自行管理密码,自由密码文件。

将系统用户转换为samba用户的命令:smbpasswd

-a Sys_user_name:将系统用户添加为samba用户
-d:禁用指定用户
-e:启用指定用户
-x:删除指定用户

定义samba的共享:

samba的配置文件有两个部分,一部分是全局设定,一部分是某特定共享的设定。特定共享的设定中有私有家目录、打印机、自定义共享的设定。

自定义共享配置:

[shared_name]
path = /path/to/shared_folder
comment = commnet#注释信息
guest ok = {yes|no}#是否允许来宾帐号访问
writable = {yes|no}
read only = {yes|no}

使用testparm测试配置文件是否有语法错误,以及显示最终生效的配置。

samba有图形化配置工具,在CentOS 6中rpm包叫做samba-swat,在/etc/xinetd.d编辑swat文件,disable=no使swat服务随xinetd的启动而启动。swat基于自带的httpd的方式进行设定,端口是901。