zoukankan      html  css  js  c++  java
  • CentOS 8中Smaba服务的匿名访问以及权限控制

    开心一刻

           高考前:保护动物
           高考时:国家重点保护动物
           高考后:四害!

    写在前面

           上一篇博文已经介绍了samba服务的安装与配置以及使用账户密码访问文件共享服务,这一篇博文主要介绍samba服务的匿名访问以及权限设置,这里我主要实现类似学生交实验作业的场景,即只能上传文件,不能下载删除、修改、查看已经上传的文件,所有的权限只能由samba真实账户操作。

    Samba服务配置(匿名访问)

    这里是我自己的配置文件内容,我在修改的时候先用cp命令做了一下备份。

    sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
    

    这里是我的配置文件信息:

    [global]
            workgroup = SAMBA
            security = user
            map to guest = bad user
    
            passdb backend = tdbsam
    
            printing = cups
            printcap name = cups
            load printers = yes
            cups options = raw
    
    [home]
            comment = Do not arbitrarily modify the file
            path = /home/share
            public = yes
            inherit owner = yes
            create mask = 0600
            directory mask = 0777
            writable = yes
    

    匿名访问必须要有的参数:map to guest = bad user、public = yes
    权限控制必须要有的参数:inherit owner = yes、create mask = 0600、directory mask = 0777、writable = yes
    几个重要的参数说明:

    参数 作用
    map to guest = bad user 匿名用户最主要就是添加这行,可以实现匿名访问,而且匿名访问时默认会被映射为nobody用户
    guest account = nobody 如果匿名用户不想映射为nobody,可以在这里修改,不过必须是系统已存在的用户
    security = user 安全验证的方式,就使用默认的user即可,较新的samba服务将share和server弃用了,具体可以查看/etc/samba/smb.conf.example的说明
    public = yes 是否公开(指明该共享资源是否能给游客帐号访问)
    guest ok = yes 与public意思相同
    inherit owner = yes 上传的文件继承父目录的所有者, 而不是使用登录的账号名。
    create mask = 0600 创建或上传文件时文件的权限
    directory mask = 0777 创建或上传目录时目录将被赋予的权限
    force directory mode = 1000 在共享文件中创建的目录自动加上t权限,使得用户不能删除文件
    writable = yes 是否可上传文件

    几个重要参数解释:
    inherit owner = yes,以我设置的为例,用户上传文件时会自动继承/home/share目录的所属主,而不是nobody,但是这个参数只能影响上传的文件,如果上传的是目录,则目录的所属主还是nobody,修改修改好后重启samba服务,可以使用testparm命令检查samba配置文件内容是否正确。
    create mask = 0600,远程访问时,创建的文件权限为0600,即只有文件所属主才能读取、更改文件内容,而文件所属主为share的所属主,所以nobody用户无法查看和修改文件内容
    directory mask = 0777,远程访问时,创建的目录权限为0777,因为目录要有rwx权限才能查看目录中的文件以及创建文件删除文件,所以这里设置的权限是777,其实保证最后一个是7就可以,这样nobody用户就是可以查看文件夹中的内容的。

    sudo systemctl restart smb
    sudo systemctl enable smb #第一次使用可以将其加入到开机启动项,让其开机自动启动。
    

    防火墙开放samba服务和修改Selinux域策略可参考上一篇博文

    修改Selinux安全上下文策略

    这一步我在实际测试的时候发现不是必须的,因为我的共享目录是在家目录下的,我已经将Selinux域策略开启,samba已经能够访问家目录下的文件了,如果共享目录不是家目录下的目录,那么还是需要设置Selinux安全上下文策略的。因此还是把修改Selinux安全上下文策略的方法写出来。

    在root用户下执行,否则在命令前面加上sudo
    mkdir /home/share
    chmod 777 /home/share
    chmod g+s /home/share
    chmod o+t /home/share
    semanage fcontext -at samba_share_t /home/share
    restorecon -Rv /home/share
    

    chmod 777 /home/share这条命令是为了让nobody用户可以读取share目录的内容以及在share目录中上传或创建文件。
    chmod g+s /home/share这条命令是为了在share目录中创建的文件都自动继承share的所属组,而不是nobody。这些内容涉及linux中文件的一般权限、特殊权限和隐藏权限,不过我这里没有用到隐藏权限。
    chmod o+t /home/share这条命令是使在share文件夹中创建的文件用户不能删除其他用户的文件,目的就是实现用户不能删除文件,因为匿名用户是nobody,而共享文件夹中的文件不会属于nobody。
    semanage fcontext -at samba_share_t /home/share修改share目录的安全上下文,让share目录能够被samba程序访问。但是我发现其实这一步不需要设置,因为share目录是在家目录下的,而我已经开启了samba访问家目录的域策略。如果是其他的目录记得使用设置命令设置一下。
    restorecon -Rv /home/share使semanage设置的安全上下文立即生效,与semanage要搭配使用。

    成功设置后,可以找一台同一个局域网中的电脑,然后使用win+R组合键,在运行框中输入\\samba服务器ip地址,然后回车,如果设置没有问题,就会弹出一个要求输入账号密码的对话框,但是对话框中需要随便输入一些字符,但是不能为空

    结语

           这篇博文介绍在CentOS8中配置samba服务程序,实现samba的匿名访问以及权限控制,实现远程访问samba服务程序是,只能上传文件,而不能下载、修改和删除。其他linux发行版大同小异,若是嫌麻烦,甚至可以直接关掉防火前和Selinux,只需要将samba配置文件设置好即可。_

    文中都是我个人的理解,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步

  • 相关阅读:
    PHP base64
    JS 获取url参数
    PHP 微信分享
    symfony安装笔记
    php 中文繁简体转换
    php webservice
    win10+PHP7
    JS弹出浮层
    CentOS7 Nginx负载均衡
    inotify+rsync目录实时同步
  • 原文地址:https://www.cnblogs.com/xingyu666/p/15573969.html
Copyright © 2011-2022 走看看