Tip:
1、centos7访问win10共享目录时,可能需要指定协议版本,默认版本过低
可能无法访问;
参考链接:
http://www.mamicode.com/info-detail-2542435.html
2、win10设置了密码访问的共享,winodows客户端可以访问,但centos7
使用smbclient -L $IP 或者smbclient -L $IP -U $USER时,提示:
session setup failed: NT_STATUS_ACCESS_DENIED
3、在centos7中启动samba服务后,在winn10上访问,提示无法访问
解:
@、已经在centos7上停用了firewalld服务,并且关闭了selinux:
#systemctl stop firewalld
#setenforce 0
@、在win10 cmd中运行命令探测samba服务端口是否可连接:
#telnet 192.168.181.10 445
显示端口不连通
@、手动清除centos7防火墙规则:
#iptables -F
#iptables -X
#iptables -Z
继续在win10中测试端口连接性:
#telnet 192.168.181.10 445
显示连接成功
@但是,不久后测试,端口又无法使用,查看centos7发现防火墙
规则被重载回来(自动的,本人未做任何操作)
@使用system-config-firewall命令配置防火墙,并放行samba服务
测试,端口连接成功
疑:
使用system-config-firewall配置并启用规则时发现firewalld服务并未
启动,使用iptables -S命令查看规则,发现规则已被应用;
那么:
iptables、firewalld、system-config-firewall这三者之间是什么关系
猜测:
iptables:是命令行操纵内核net-filter模块规则,每次主机的重新
启动都会导致规则回复到默认值,除非使用iptalbes-save命令
保存当前规则到文件,并用iptables-restore从文件中恢复规则
firewalld:是一个后台守护进程服务,在每次开机时或服务重启
时,会自动把保存在配置文件中的防火墙规则载入到内核中,
firewall-cmd是该服务的一个命令行配置命令
system-config-firewall:是一个图形化的规则配置工具,详情未知
在firewalld服务未启动时,在上面的步骤中使用iptables命令清空
了防火墙规则,但之后发现规则自动恢复了,这个恢复动作是
由哪个实现的
学:
对于防火墙的应用不太明了,需要加以详细的理解和学习;
4、在centos7中启动了smb、nmb服务,并添加了smb用户,但centos7
或win10用户访问不可用,提示密码错误,已经做了一下尝试:
@、工作组都改为WORKGROUP
@、添加用户命令为:
useradd smbuser1
smbpasswd -a smbuser1
smbpasswd -e smbuser1
@、重启服务:systemctl restart smb nmb
@、win10客户端修改本地组策略‘网络安全:LAN管理器身份验证级别’
项的值为“发送 LM 和 NTLM – 如果已协商,则使用 NTLMv2会话安
全”
@、同上、网络访问:本地账户的共享和安全模型”打开,选择“仅来宾”
解决办法:
win10客户端修改本地组策略‘网络安全:LAN管理器身份验证级别’项的
值为“发送 LM 和 NTLM – 如果已协商,则使用 NTLMv2会话安全”
centos 7 samba配置文件/etc/samba/smb.conf中globel配置段添加:
ntlm auth = yes
重启samba服务:
systemctl restart smb nmb
Tip:在域用户访问非域smb服务时,还要加上“realm = $DOMAIN”参数
$DOMAIN为域用户所在的域;
5、所有samba共享目录的权限设定,包括samba服务器配置文件对用户
权限的设定,又包括该用户在服务器文件系统中对目录的设定,同时
满足两者才会允许访问(windows中也一样)
6、在centos7上挂载使用win10共享时,提示‘host is down’
解:需要在win10上开启samba服务组件功能,步骤如下:
右击开始菜单——应用和功能——右侧下拉到底部——打开程序和
功能——点击‘启用或关闭windows功能’ ——勾选‘smb1.0/CIFS文
件共享支持’——点击确定——重启windows主机
7、在centos7上挂载samba共享时,一直提示无法挂载,文件系统为
read-only;
解:客户端上没有mount.cifs程序,安装cifs-utils包,参考:
https://superuser.com/questions/515777/error-mounting-samba-
share-cannot-mount-block-device-xxxx-read-only
8、使用smbclient命令可以进行匿名访问samba共享目录并进行删除操作,
但使用mount命令时,使用以下格式挂载,却一直提示输入密码,且
提示挂载错误:
-o guest 或 -o username=anonymous,guest
解:
估计是acl权限和共享目录本身的1777权限冲突,samba已经设置
了来宾用户可读写,public = yes 或 security = guest;read only
= no ;
清空共享目录的额外acl权限:setfacl -b /data
重新设置目录权限:chmod 1777 /data
客户端运行命令:
mount -t cifs //192.168.181.10/shared /mnt -o guest
匿名挂载成功,并且用户可创建和删除文件,但不可删除其他属主
文件
9、win10无法匿名访问centos7上的共享文件,centos7上的samba服务
已经配置了guest ok = yes、security = share 、public = yes等;而
另外的一台centos7可以使用smbclient命令匿名访问此共享
尝试的方法:
@wn10程序和应用中添加samb CIFS/1.0
@组策略‘lanman工作站’中启用‘启用不安全的来宾登录’项
@删除服务器中添加的samba用户并重启用户
@启用win10 guest账户
解:
@google有答案说是security = share 这一选项已经弃用,而
实际在smb.conf文件globel选项中添加此参数运行testparm
命令也提示参数错误,并建议用map to guest = Bad User;
但此项放在共享片段会提示此参数应放置于globel中,在
片段中并不生效;
放置该参数至globel中,重启samba服务,win10无账号
访问成功;
map to guest = Bad User :意思将所有不是samba账号的
登录识别为guest
10、在定义共享目录某些用户可写时,定义为:
read only = yes
write list = user1,user2
设定仅读,然后设置可写用户列表
参考资料:
1、较详细的samba使用说明(版本较老):
https://www.cnblogs.com/MeChecksV/articles/1222953.html
2、对samba的配置参数有较详细的说明:
https://www.jianshu.com/p/cc9da3a154a0
场景模拟:
需求:
1. 某公司有5个大部门,分别为:人事行政部(HR)、财务部
(Financial Management Dept)、技术支持部(Technical
Support Dept)、项目部(Project Dept)、客服部(Customer
Service Dept)。
2. 各部门的文件夹只允许本部门员工有权访问;各部门之间交流
性质的文件放到公用文件夹中。
3. 每个部门都有一个管理本部门文件夹的管理员账号和一个只能
新建和查看文件的普通用户权限的账号。
4. 公用文件夹中分为存放工具的文件夹和存放各部门共享文件的文件夹。
5. 对于各部门自己的文件夹,各部门管理员具有完全控制权限,
而各部门普通用户可以在该部门文件夹下新建文件及文件夹,并且对于
自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的
文件和文件夹只能访问,不能更改和删除。不是本部门用户不能访问
本部门文件夹。
6. 对于公用文件夹中的各部门共享文件夹,各部门管理员具有完全控制
权限,而各部门普通用户可以在该部门文件夹下新建文件及文件夹,
并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及
上传的文件和文件夹只能访问,不能更改和删除。本部门用户(包括管
理员和普通用户)在访问其他部门共享文件夹时,只能查看不能修改
删除新建。对于存放工具的文件夹,只有管理员有权限,其他用户
只能访问。
实现:
1、部门私有共享名设定:hr,fm,custom,techs,project;
2、各部门共有共享名设定:hr-shared,fm-shared,custom-shared,
techs-shared,project-shared
3、公用工具共享名设定:tools
4、部门私有共享目录设定:
/smb/hr、/smb/fm、/smb/custom、/smb/techs、/sbm/project
5、公用共享目录设定:/sbm/public
6、公用共享下各部门共享目录设定:
/smb/public/hr-shared
/smb/public/fm-shared
/smb/public/techs-shared
/smb/public/custom-shared
/smb/public/project-shared
7、公用共享下共享工具目录设定:
/smb/public/tools
8、各部门smb用户设定;
smb管理组:smb-amdin
hr:
部门独有组:hr
管理员hr-admin,加入hr,smb-amdin组
普通用户hr-user,加入hr组
fm:
部门独有组:fm
管理员fm-admin,加入fm,smb-admin组
普通用户fm-user,加入fm组
techs:
部门独有组:techs
管理员techs-admin,加入techs,smb-admin组
普通用户techs-user,加入techs组
custom:
部门独有组:custom
管理员custom-admin,加入custom,smb-admin组
普通用户custom-user,加入custom组
project:
部门独有组:project
管理员project-admin,加入project,smb-admin组
普通用户project-user,加入project组
9、由于存在大量重复性工作,创建脚本文件进行设定,内容如下:
#!/bin/bash
#
dirpath=/smb #共享所在目录
depart='hr fm techs custom project' #项目组
groupadd smb-admin #共享管理组
mkdir $dirpath/public/tools -pv #创建共享工具目录tools
#添加各部门专用组
addgroup () {
groupadd $1
}
#添加各部门共享管理员
adduser-admin () {
useradd -r -G $1,smb-admin -s /sbin/nologin $1-admin
}
#添加各部门共享普通用户
adduser-common () {
useradd -r -G $1 -s /sbin/nologin $1-user
}
#添加所有创建用户到smbuser中
add-smbuser () {
userpass=`openssl rand -base64 4`
echo "user:$1 password:$userpass" >> /$dirpath/smbuser-for-depart
echo -e "$userpass\n$userpass" | smbpasswd -s -a $1
smbpasswd -e $1
}
#创建共享所需的各级目录
makedir () {
mkdir $dirpath/$1 -pv
mkdir $dirpath/public/$1-shared -pv
}
#更改各部门私有共享目录权限,仅该部门用户可读,部门普通
#用户可管理自己的文件或目录,部门管理员可管理目录下所有
#文件或目录
chdirmodp () {
chmod 0770 $dirpath/$1
chmod o+t,g+s $dirpath/$1
chown $1-admin:$1-admin $dirpath/$1
setfacl -m g:$1:rwx $dirpath/$1
}
#更改各部门共有共享目录权限,所有部门用户均可读,部门
#普通用户可管理自己的文件或目录,部门管理员可管理目录
#下所有文件或目录
chdirmods () {
chmod 0775 $dirpath/public/$1-shared
chmod o+t,g+s $dirpath/public/$1-shared
chown $1-admin:$1-admin $dirpath/public/$1-shared
setfacl -m g:$1:rwx $dirpath/public/$1-shared
}
for i in $depart;do
addgroup $i;
adduser-admin $i;
adduser-common $i;
add-smbuser $i-admin;
add-smbuser $i-user;
makedir $i;
chdirmodp $i;
chdirmods $i;
#修改/etc/samba/smb.conf文件
cat << EOF >> /etc/samba/smb.conf
[$i]
comment = $i share
path = $dirpath/$i
read only = no
write list = @$i
directory mask = 0775
create mask = 0664
public = no
[$i-shared]
comment = $i share for all
path = $dirpath/public/$i-shared
read only = no
write list = @$i
directory mask = 0775
create mask = 0664
public = yes
EOF
done
cat << EOF >> /etc/samba/smb.conf
[tools]
comment = public tools
path = $dirpath/public/tools
read only = no
write list = @smb-admin
directory mask = 0775
create mask = 0664
public = yes
EOF
#修改/smb/public/tools目录权限
toolpath=/smb/public/tools
chown :smb-admin $toolpath
chmod 0775 $toolpath
chmod g+s $toolpath
#重启samba服务
systemctl restart smb nmb
Note:
1、在对hr部门的共享目录进行管理时,设置了hr目录sticky属性:
chmod o+t hr
改变了目录属主和属组为各部门管理员账户hr-admin:
chown hr-admin:hr-admin hr
添加部门的账户对部门公共的组中:
groupadd hr
usermod -a -G hr hr-admin
usermod -a -G hr hr-common
设置acl为hr部门账号所在的组对对应的目录hr有完全权限:
setfacl -m g:hr:rwx hr
设置smb.conf片段中仅各部门管理员对各自目录具有写权限:
read only = no
write list = hr-admin
(该选项不加时,hr-admin也能删除hr-common用户的文件,
hr-common用户只能删除自己的文件)
此时,实现了hr部门普通用户可以使用该部门的共享目录,并创建或删除
用户自己的文件,管理员可以删除目录下的文件;
但此时管理员无法删除用户创建的不为空的目录
解:
设置hr目录的sgid属性:
chmod g+s hr
设置smb.conf中hr片段参数:
directory mask = 0775
create mask = 0664
此时,用户在hr目录下创建的文件或目录的属组为hr-admin,并且该组
对目录或文件具有写权限,测试删除用户创建的不为空的目录成功