对于windows的网上邻居来讲,共享文件的方式用的是SMB和CIFS协议以及NETBIOS协议Linux/Unix之间用的是NFS协议。但是Linux和Windows之间是不能共享的,澳大利亚国立大学的Andrew Tridgell开发SMB,但SMB这个名字不能被注册成商标,因为已有SMB协议了,于是作者给名字上加了两个A,SAMBA。
Samba是一个能让Linux系统应用Microsoft网络通讯协议的软件,而SMB是Server Message Block的缩写,即为服务器消息块 ,SMB主要是作为Microsoft的网络通讯协议,后来Samba将SMB通信协议应用到了Linux系统上,就形成了现在的Samba软件。后来微软又把 SMB 改名为 CIFS(Common Internet File System),即公共 Internet 文件系统,并且加入了许多新的功能,这样一来,使得Samba具有了更强大的功能。
Samba最大的功能就是可以用于Linux与windows系统直接的文件共享和打印共享,Samba既可以用于windows与Linux之间的文件共享,也可以用于Linux与Linux之间的资源共享,由于NFS(网络文件系统)可以很好的完成Linux与Linux之间的数据共享,因而 Samba较多的用在了Linux与windows之间的数据共享上面。
SMB是基于客户机/服务器型的协议,因而一台Samba服务器既可以充当文件共享服务器,也可以充当一个Samba的客户端,例如,一台在Linux 下已经架设好的Samba服务器,windows客户端就可以通过SMB协议共享Samba服务器上的资源文件,同时,Samba服务器也可以访问网络中 其它windows系统或者Linux系统共享出来的文件。
事实上, 就像 NFS 是架构在 RPC Server 上面一样, SAMBA 这个文件系统是架构在 NetBIOS (Network Basic Input/Output System, NetBIOS) 这个通讯协议上面所开发出来的。
Samba在windows下使用的是NetBIOS协议,如果你要使用Linux下共享出来的文件,请确认你的windows系统下是否安装了NetBIOS协议。
组成Samba运行的有两个服务,一个是SMB,另一个是NMB;SMB是Samba 的核心启动服务,主要负责建立 Linux Samba服务器与Samba客户机之间的对话, 验证用户身份并提供对文件和打印系统的访问,只有SMB服务启动,才能实现文件的共享,监听139 TCP端口;而NMB服务是负责解析用的,类似与DNS实现的功能,NMB可以把Linux系统共享的工作组名称与其IP对应起来,如果NMB服务没有启动,就只能通过IP来访问共享文件,监听137和138 UDP端口。
NetBIOS 机器间的沟通,取得对方主机的NetBIOS name 定位该主机所在,利用对方给予权限存取可用资源。
SAMBA 使用下面两个服务来控制上面两步骤
nmbd
这个daemon是用来管理工作组,NetBIOS name等等的解析。主要利用 UDP 协议开启 port 137 138 来负责名称解析的任务。
smbd
这个daemon主要用来管理SAMBA主机分享的目录,档案与打印机等等。主要利用可靠的TCP协议来传输数据,开放端口为139。所以SAMBA每次启动至少都需要有这个daemon,而当我启动了SAMBA之后,主机系统就会启动137,138 这两个UDP 及139这个TCP端口。
两种最常见的局域网的联机模式peer/peer(对等模式)和domain model(主控模式)
使用 peer/peer 的架构的好处是每部计算机均可以独立运作,而不受他人的影响!不过, 缺点就是当整个网域内的所有人员都要进行数据分享时,光是知道所有计算机里面的账号与密码,就会很伤脑筋了! 所以, Peer/Peer 的架构是比较适合 :小型的网域,没有需要常常进行档案数据分享的网络环境,每个使用者都独自拥有该计算机的拥有权
将所有的账号与密码都放置在一部主控计算机 (Primary Domain Controller, PDC) 上面,在我的网域里面,任何人想要使用任何计算机时,都需要在屏幕前方输入账号与密码,然后通通藉由 PDC 服务器的辨识后,才给予适当的权限。也就是说,不同的身份还具有不一样的计算机资源权限。
yum -y install samba samba-common samba-client
samba的主配置文件
/etc/samba/smb.conf
samba的用户别名,比如可以将root用别名administrator、admin代替等(作用:可以只告知samba用户该别名,这样可以保护真实的samba服务器/etc/passwd的用户不泄漏)
/etc/samba/smbusers
samba的IP和域名对应,类似/etc/hosts文件功能
/etc/samba/lmhosts
存放samba用户及密码
/etc/samba/smbpasswd
samba服务需要4个软件包
[root@localhost Server]# rpm -qa |grep samba
samba-common-3.0.28-0.el5.8
samba-client-3.0.28-0.el5.8
samba-3.0.28-0.el5.8
system-config-samba-1.2.39-1.el5.noarch
samba-swat-3.0.28-0.el5.8
samba-common-3.0.28-0.el5.8:提供samba服务器和客户机中都必须使用的公共文件,因此此文件必须在samba服务器和客户端软件包之前安装。
samba-3.0.28-0.el5.8:包括了samba服务器程序的所有文件。
samba-client-3.0.28-0.el5.8:提供了samba客户机的所有文件
system-config-samba-1.2.39-1.el5.noarch:提供图形界面配置管理配置文件,是Xwindow下的图形化配置程式。
samba-swat-3.0.28-0.el5.8以web页面方式配置samba的前端,她们的作用都是设定/etc/samba/smb.
/etc/samba/smb.conf
[global]
#共享所在的工作组,可以是NT域名、工作组名
workgroup = WORKGROUP
#客户端看到的服务器的描述信息
server string = samba server on Centos
#NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了
netbios name = centos_smb
#监听的网卡,可以写网卡名,也可以写该网卡的IP地址
interfaces = lo eth0
#表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。我这里允许192.168.1.0网段里的所有客户端访问samba server。(注释掉表示允许所有IP)
hosts allow = 192.168.1. 0/255.255.255.0
#设置用户访问Samba Server的验证方式,一共有四种验证方式。 share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。 user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。 server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。 domain:域安全级别,使用主域控制器(PDC)来完成认证。
security=share在新版3.9中已经被废弃了
security = user
#用来定义用户名映射,比如可以将root换成administrator、admin等。要事先在smbusers文件中定义好。比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba Server,以保护Linux的系统账号root。
username map = /etc/samba/smbusers
#是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。
encrypt passwords = true
#passdb backend密码验证后端。目前支持的有三种:smbpasswd、tdbsam和ldapsam。其中smbpasswd方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
passdb backend = smbpasswd
#用来定义samba用户的密码文件。smbpasswd文件如果默认不存在,要手工新建。
smb passwd file =/etc/samba/smbpasswd
#日志文件的储存位置和文件名(%m代表客户端主机名)。
log file = /var/log/samba/log.%m
#同一客户最多能打开的文件数目
max open files = 1000
#用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。
socket options = TCP_NODELAY
#xxxxx表示共享名
[xxxxx]
#comment是对该共享的描述,可以是任意字符串。
comment = code string
#path用来指定共享目录的路径。
path = /home/songyd/code
#writable用来指定该共享路径是否可写。这里我们允许写入,以满足文件双向共享。
writable = yes
#只允许mysql和jack2个用户对此资源可以写,其他的为read only
writelist = mysql, jack
#browseable用来指定该共享是否可以浏览。
browseable = yes
#available用来指定该共享资源是否可用。
available = yes
#是否允许允许来宾访问
guest ok = no
#设置权限为只读权限
read only = yes
#共享目录允许所有用户访问及上传文件
public = no
#只允许jack sunny访问该共享资源
valid users = jack sunny
完整示例
[global]
workgroup = WORKGROUP
server string = samba server on Version %v
netbios name = centos_smb
interfaces = lo eth0
#hosts allow = 192.168.16.0/255.255.255.0
security = user
username map = /etc/samba/smbusers
encrypt passwords = true
passdb backend = smbpasswd
smb passwd file =/etc/samba/smbpasswd
log file = /var/log/samba/log.%m
max open files = 1000
socket options = TCP_NODELAY
[webfile]
comment = frontend web
path = /home/wwwroot/frontend/web
browseable = yes
writable = yes
create mask = 0664
directory mask = 0755
guest ok = no
public = no
available = yes
[root@master ~]# testparm --help
Usage: [OPTION...] <config-file> [host-name] [host-ip]
-s, --suppress-prompt Suppress prompt for enter
-v, --verbose Show default options too
-l, --skip-logic-checks Skip the global checks
--show-all-parameters Show the parameters, type, possible values
--parameter-name=STRING Limit testparm to a named parameter
--section-name=STRING Limit testparm to a named section
[root@master ~]# testparm
Registered MSG_REQ_POOL_USAGE
Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED
Load smb config files from /etc/samba/smb.conf
Processing section "[homes]"
Processing section "[printers]"
Processing section "[print$]"
Loaded services file OK.
Server role: ROLE_STANDALONE
Press enter to see a dump of your service definitions
# Global parameters
[global]
printcap name = cups
security = USER
workgroup = SAMBA
idmap config * : backend = tdb
cups options = raw
[homes]
browseable = No
comment = Home Directories
inherit acls = Yes
read only = No
valid users = %S %D%w%S
[printers]
browseable = No
comment = All Printers
create mask = 0600
path = /var/tmp
printable = Yes
[print$]
comment = Printer Drivers
create mask = 0664
directory mask = 0775
force group = @printadmin
path = /var/lib/samba/drivers
write list = @printadmin root
[root@master ~]# smbpasswd --help
smbpasswd: invalid option -- '-'
When run by root:
smbpasswd [options] [username]
otherwise:
smbpasswd [options]
options:
-L local mode (must be first option)
-h print this usage message
-s use stdin for password prompt
-c smb.conf file Use the given path to the smb.conf file
-D LEVEL debug level
-r MACHINE remote machine
-U USER remote username (e.g. SAM/user)
extra options when run by root or in local mode:
-a add user
-d disable user
-e enable user
-i interdomain trust account
-m machine trust account
-n set no password
-W use stdin ldap admin password
-w PASSWORD ldap admin password
-x delete user
-R ORDER name resolve order
创建用户
smbpasswd -a gege
如果要建立一个samba用户,必须是在/etc/shadow(当前linux系统中)存在的用户。
禁用samba用户
smbpasswd -d gege
启用samba用户
smbpasswd -e gege
用户的密码置空
smbpasswd -n gege
删除samba用户
smbpasswd -x geger
[root@master ~]# smbpasswd -a blueicex
New SMB password:
Retype new SMB password:
Failed to add entry for user blueicex
[root@master samba]# useradd blueicex
[root@master samba]# smbpasswd -a blueicex
New SMB password:
Retype new SMB password:
Added user blueicex.
linux有个和smbpasswd更可靠的用户验证模式,tdbsam用户验证文件存储,系统默认使用tdbsam的安全帐户管理模式,而且smb.conf文件里没有启用smbpasswd认证存储
修改passdb backend = tdbsam为 # passdb backend = tdbsam ,即将tdbsam存储关闭
加入smb passwd file = /etc/samba/smbpasswd 启用用户验证文件存储到smbpasswd文件
**输入完该samba用户密码后,会在/etc/samba/smbpasswd文件生成blueicex用户密码信息,**如果不想让samba用户使用blueicex作为samba用户名访问的话,则可以在/etc/samba/smbusers 设置改用户别名,如下写出了添加blueicex后的smbpasswd文件和smbusers文件信息
[root@master samba]# smbpasswd -a test1
New SMB password:
Retype new SMB password:
Added user test1.
[root@master samba]# smbpasswd -a test2
New SMB password:
Retype new SMB password:
Added user test2.
[root@master samba]# ls
lmhosts smb.conf smb.conf.example smbpasswd
[root@master samba]# cat smbpasswd
test1:1004:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:55C840E857FA61EF2634FB5EFFCB5918:[U ]:LCT-5E67A883:
test2:1005:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX:55C840E857FA61EF2634FB5EFFCB5918:[U ]:LCT-5E67A88D:
Notice:★★★★★
samba版本升级了,规则也变化了。现在无论是使用tdb数据库存储密钥还是smbpasswd文本存储密钥都要设定相对应的 passdb backend参数。要用传统的文本方式存储只需这样设定passdb backend = smbpasswd:/etc/samba/smbpasswd(后面跟的是绝对路径)>,不要再画蛇添足的写上smb passwd file = /etc/samba/smbpasswd,该参数已经不适用于新版本的samba了。
用户名必须是linux中存在的用户,可以使用useradd命令在系统中添加一个用户,然后再增加一个对应的samba用户,也 就是一个用户名使用的是两套密码。一个是系统用户密码,另一个密码存储在/etc/samba/smbpasswd文件中的samba密码,这样可以防止 系统用户密钥外泄带来的安全隐患。
除了上面的措施外,samba还提供了一个更安全的方法,用户名映射功能,这样做的好处是防止系统内的真实用户名暴露,在smb.conf中增 加username map = /etc/samba/smbuser设定,再手工建立该文件。username map参数详解,比如有一个系统用户名为zyhyt.org,同时我们也设定其为samba的登录名,虽然是两套独立的密码,但依然告诉了用户,我系统内 也存在zyhyt.org这个用户。严格的说这也是违背系统安全规则的,不法人士可能会利用该用户名暴力猜解获得系统内帐户权限。samba提供的用户名 映射功能,只需编辑smbuser文>件,格式为:真实的用户名 = 映射出的用户名(随便自定义);zyhyt.org = nas_guest nas_nobody(可以映射出多个用户名,注意中间的空格)。设定完成后,我们只需将nas_guest告诉用户即可,无须担心真实的 zyhyt.org用户名暴露。
[root@master ~]# cat smbusers
#Unix_name = SMB_name1 SMB_name2 ...
root = administrator admin
nobody = guest pcguest smbguest
mysql = sql (samba用户可以使用sql作为samba帐号来访问samba服务器)
[root@master ~]#vim /etc/samba/smb.conf
security = user
guest accout = peter
encrypt passwords = yes
smb passwd file =/etc/samba/smbpasswd
passdb backend = smbpasswd
[root@master ~]# mkdir /home/share
[share]
path = /home/share
writeable = yes
[root@master samba]# pdbedit --help
Usage: [OPTION...]
-L, --list list all users
-v, --verbose be verbose
-w, --smbpasswd-style give output in smbpasswd style
-u, --user=USER use username
-N, --account-desc=STRING set account description
-f, --fullname=STRING set full name
-h, --homedir=STRING set home directory
-D, --drive=STRING set home drive
-S, --script=STRING set logon script
-p, --profile=STRING set profile path
-I, --domain=STRING set a users' domain
-U, --user SID=STRING set user SID or RID
-M, --machine SID=STRING set machine SID or RID
-a, --create create user
-r, --modify modify user
-m, --machine account is a machine account
-x, --delete delete user
-b, --backend=STRING use different passdb backend as default backend
-i, --import=STRING import user accounts from this backend
-e, --export=STRING export user accounts to this backend
-g, --group use -i and -e for groups
-y, --policies use -i and -e to move account policies between backends
--policies-reset restore default policies
-P, --account-policy=STRING value of an account policy (like maximum password age)
-C, --value=LONG set the account policy to this value
-c, --account-control=STRING Values of account control
--force-initialized-passwords Force initialization of corrupt password strings in a passdb backend
-z, --bad-password-count-reset reset bad password count
-Z, --logon-hours-reset reset logon hours
--time-format=STRING The time format for time parameters
-t, --password-from-stdin get password from standard in
-K, --kickoff-time=STRING set the kickoff time
--set-nt-hash=STRING set password from nt-hash
Help options:
-?, --help Show this help message
--usage Display brief usage message
Common samba options:
-d, --debuglevel=DEBUGLEVEL Set debug level
-s, --configfile=CONFIGFILE Use alternate configuration file
-l, --log-basename=LOGFILEBASE Base name for log files
-V, --version Print version
--option=name=value Set smb.conf option from command line
新建用户
pdbedit -a username
删除用户
pdbedit -x username
列出用户列表,读取passdb.tdb数据库文件
pdbedit -L
列出用户列表详细信息
pdbedit -Lv
暂停该用户帐号
pdbedit -c “[D]” -u username
恢复该用户帐号
pdbedit -c “[]” -u username
[root@master ~]# smbclient --help
Usage: smbclient service <password>
-R, --name-resolve=NAME-RESOLVE-ORDER Use these name resolution services only
-M, --message=HOST Send message
-I, --ip-address=IP Use this IP to connect to
-E, --stderr Write messages to stderr instead of stdout
-L, --list=HOST Get a list of shares available on a host
-m, --max-protocol=LEVEL Set the max protocol level
-T, --tar=<c|x>IXFqgbNan Command line tar
-D, --directory=DIR Start from directory
-c, --command=STRING Execute semicolon separated commands
-b, --send-buffer=BYTES Changes the transmit/send buffer
-t, --timeout=SECONDS Changes the per-operation timeout
-p, --port=PORT Port to connect to
-g, --grepable Produce grepable output
-q, --quiet Suppress help message
-B, --browse Browse SMB servers using DNS
Help options:
-?, --help Show this help message
--usage Display brief usage message
Common samba options:
-d, --debuglevel=DEBUGLEVEL Set debug level
-s, --configfile=CONFIGFILE Use alternate configuration file
-l, --log-basename=LOGFILEBASE Base name for log files
-V, --version Print version
--option=name=value Set smb.conf option from command line
Connection options:
-O, --socket-options=SOCKETOPTIONS socket options to use
-n, --netbiosname=NETBIOSNAME Primary netbios name
-W, --workgroup=WORKGROUP Set the workgroup name
-i, --scope=SCOPE Use this Netbios scope
Authentication options:
-U, --user=USERNAME Set the network username
-N, --no-pass Don't ask for a password
-k, --kerberos Use kerberos (active directory) authentication
[root@master ~]# vim /etc/samba/smb.conf
[global]
workgroup = SAMBA
security = user
netbios name = blueicex smb
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[share]
comment = share Stuff
path = /data
public = yes
writable = yes
[root@master ~]# systemctl restart smb nmb
[root@master ~]# smbclient //127.0.0.1/share
Enter SAMBA\root's password:
Anonymous login successful
Try "help" to get a list of possible commands.
smb: \> ls
. D 0 Tue Mar 10 10:55:11 2020
.. D 0 Sun Mar 1 19:11:12 2020
yum D 0 Sun Mar 1 01:22:43 2020
wwwroot D 0 Sun Mar 1 11:42:47 2020
wwwlogs D 0 Sun Mar 1 11:42:47 2020
mariadb D 0 Tue Mar 3 11:09:32 2020
data D 0 Tue Mar 10 10:54:24 2020
zookeeper D 0 Tue Mar 10 17:18:13 2020
15718400 blocks of size 1024. 1145760 blocks available
smb: \> help
? allinfo altname archive backup
blocksize cancel case_sensitive cd chmod
chown close del deltree dir
du echo exit get getfacl
geteas hardlink help history iosize
lcd link lock lowercase ls
l mask md mget mkdir
more mput newer notify open
posix posix_encrypt posix_open posix_mkdir posix_rmdir
posix_unlink posix_whoami print prompt put
pwd q queue quit readlink
rd recurse reget rename reput
rm rmdir showacls setea setmode
scopy stat symlink tar tarmode
timeout translate unlock volume vuid
wdel logon listconnect showconnect tcon
tdis tid utimes logoff ..
!
smb: \>
列出某个IP地址所提供的共享文件夹
smbclient -L 198.168.0.1 -U username%password
像ftp客户端一样使用smbclient
smbclient //192.168.0.1/tmp -U username%password
执行smbclient命令成功后,进入smbclient环境,出现提示符:smb:/>
这里有许多命令和ftp命令相似,如cd 、lcd、get、megt、put、mput等。通过这些命令,我们可以访问远程主机的共享资源。
直接一次性使用smbclient命令
smbclient -c “ls” //192.168.0.1/tmp -U username%password
或
smbclient //192.168.0.1/tmp -U username%password
smb:/>ls
创建一个共享文件夹
smbclient -c “mkdir share1” //192.168.0.1/tmp -U username%password
如果用户共享//192.168.0.1/tmp的方式是只读的,会提示NT_STATUS_ACCESS_DENIED making remote directory /share1
selinux禁止问题
[root@client ~]# smbclient //172.25.254.126/student -U student
Enter student's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \* selinux禁止
smb: \> quit
客户端配置selinux:
[root@server ~]# getsebool -a | grep smb
smbd_anon_write --> off
[root@server ~]# getsebool -a | grep samba
samba_create_home_dirs --> off
samba_domain_controller --> off
samba_enable_home_dirs --> off
samba_export_all_ro --> off
samba_export_all_rw --> off
samba_portmapper --> off
samba_run_unconfined --> off
samba_share_fusefs --> off
samba_share_nfs --> off
sanlock_use_samba --> off
use_samba_home_dirs --> off
virt_sandbox_use_samba --> off
virt_use_samba --> off
[root@server ~]# setsebool -P samba_enable_home_dirs on
[root@server ~]#
客户端访问:
[root@client ~]# smbclient //172.25.254.226/student -U student
Enter student's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls
. D 0 Thu Jul 10 19:06:52 2014
.. D 0 Fri Jun 1 21:49:35 2018
.bash_logout H 18 Wed Jan 29 07:45:18 2014
.bash_profile H 193 Wed Jan 29 07:45:18 2014
.bashrc H 231 Wed Jan 29 07:45:18 2014
.ssh DH 0 Thu Jul 10 18:19:10 2014
.config DH 0 Thu Jul 10 19:06:53 2014
40913 blocks of size 262144. 28595 blocks available
smb: \> quit
#客户端
[root@client bin]# smbclient -L//172.25.254.226/student -U student
Enter student's password:
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Samba Server Version 4.1.1)
student Disk Home Directories #硬盘可挂载使用
Domain=[MYGROUP] OS=[Unix] Server=[Samba 4.1.1]
Server Comment
--------- -------
Workgroup Master
--------- -------
[root@client bin]# mount //172.25.254.126/student/ /mnt/ -o username=student,password=123
[root@client bin]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3182068 7291832 31% /
devtmpfs 469332 0 469332 0% /dev
tmpfs 484920 140 484780 1% /dev/shm
tmpfs 484920 12800 472120 3% /run
tmpfs 484920 0 484920 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2339 451840 1% /home
//172.25.254.126/student/ 10473900 3157292 7316608 31% /mnt
[root@client bin]# cd /mnt
[root@client mnt]# ls
ls passwd
[root@client mnt]# touch file
#服务端Student用户家目录:
[root@server student]# ls
file ls passwd
[root@client ~]# cat /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed May 7 01:22:57 2014
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=9bf6b9f7-92ad-441b-848e-0257cbb883d1 / xfs defaults 1 1
/dev/vg0/vo /home ext4 defaults 0 0
//172.25.254.126/student /mnt cifs defaults,username=student,password=123 0 0
[root@client ~]# mount -a
[root@client ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3182088 7291812 31% /
devtmpfs 469332 0 469332 0% /dev
tmpfs 484920 140 484780 1% /dev/shm
tmpfs 484920 12800 472120 3% /run
tmpfs 484920 0 484920 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2339 451840 1% /home
//172.25.254.126/student 10473900 3157288 7316612 31% /mnt
[root@client ~]# vim /etc/rc.d/rc.local
mount //172.25.254.126/student/ /mnt/ -o username=student,password=123
[root@client ~]# chmod +x /etc/rc.d/rc.local
[root@client ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3182068 7291832 31% /
devtmpfs 469332 0 469332 0% /dev
tmpfs 484920 140 484780 1% /dev/shm
tmpfs 484920 12800 472120 3% /run
tmpfs 484920 0 484920 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2339 451840 1% /home
[root@client ~]# reboot
[root@client ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3181136 7292764 31% /
devtmpfs 469332 0 469332 0% /dev
tmpfs 484920 80 484840 1% /dev/shm
tmpfs 484920 12752 472168 3% /run
tmpfs 484920 0 484920 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2339 451840 1% /home
//172.25.254.226/student/ 10473900 3157288 7316612 31% /mnt
[root@server ~]# vim /etc/samba/smb.conf
workgroup = yifan #将域名改为yifan
[root@server ~]# vim /etc/samba/smb.conf
hosts allow =172.25.254.226 #用户白名单
hosts deny =172.25.254.226 #用户黑名单
[root@sever ~]# chcon -t samba_share_t /westos #修改安全安全上下文
或者
[root@sever ~]# semanage fcontext -a -t samba_share_t '/westos(/.*)?'
[root@sever ~]# restorecon -RvvF /westos/ #刷新
restorecon reset /westos context unconfined_u:object_r:samba_share_t:s0->system_u:object_r:default_t:s0
[root@sever ~]# chmod 777 /westos/ #给满权限,以被所有用户都可读写
[DIR] | 共享目录名称,可自己设定 |
---|---|
comment=westos dir | 显示指定的共享目录 |
path=/westos | 所要共享的目录 |
browseable=no/yes | 是否显示目录 |
writable=no/yes | 所有用户对目录是否可写 |
write list = +/@staff | 对staff组可写 |
write list = staff | 对staff用户可写 |
admin users =staff | 此目录的超级用户 |
#是否显示目录,该修改不用重启服务,用smbclient -L 地址,不显示设置的目录。
browseable=no|yes
#允许所有用户写
writable = yes|no
#对student用户可写,注意此writable = yes一定要注释掉。
write list = student
#对student组用户可写
write list = @/+student
[root@server ~]# vim /etc/samba/smb.conf
# writable = yes
write list = @student
[root@server ~]# systemctl restart smb
[root@sever ~]# id student
uid=1000(student) gid=1000(student) groups=1000(student),10(wheel)
[root@sever ~]# id westos
uid=1001(westos) gid=1001(westos) groups=1001(westos)
[root@server ~]# systemctl restart smb
[root@client ~]# mount //172.25.254.126/DIR /mnt -o username=westos,password=123
[root@client ~]# cd /mnt/
[root@client mnt]# touch 789
touch: cannot touch ‘789’: Permission denied
[root@sever ~]# usermod -G student westos
[root@client ~]# mount //172.25.254.126/DIR /mnt -o username=westos,password=123
[root@client ~]# cd /mnt/
[root@client mnt]# touch word
[root@client ~]# smbclient //172.25.254.126/DIR
Enter root's password:
Anonymous login successful
Domain=[YIFAN] OS=[Unix] Server=[Samba 4.1.1]
tree connect failed: NT_STATUS_ACCESS_DENIED #访问被拒绝。
[root@server ~]# vim /etc/samba/smb.conf
[DIR]
comment=westos dir
path=/westos
browseable=no
; writable=yes
write list =+student
guest ok = yes #允许guest用户访问
security = user
passdb backend = tdbsam
map to guest = bad user #将匿名用户映射为guest用户
[root@sever ~]# systemctl restart smb.service
[root@client ~]# smbclient //172.25.254.126/DIR
Enter root's password:
Domain=[YIFAN] OS=[Unix] Server=[Samba 4.1.1]
smb: \> ls
. D 0 Wed Jun 6 18:07:35 2018
.. D 0 Wed Jun 6 17:33:36 2018
file N 0 Wed Jun 6 17:55:23 2018
hello N 0 Wed Jun 6 17:56:12 2018
123 N 0 Wed Jun 6 17:56:55 2018
456 N 0 Wed Jun 6 17:57:26 2018
256 N 0 Wed Jun 6 17:58:49 2018
word N 0 Wed Jun 6 18:07:35 2018
40913 blocks of size 262144. 26839 blocks available
smb: \> quit
————Blueicex 2020/3/10 23:42 blueice1980@126.com