精华内容
下载资源
问答
  • windows文件权限管理dos命令

    千次阅读 2019-07-15 13:07:31
    文章目录前言windows dos 文件权限操作命令:Icacls or Cacls。Cacls示例Icacls详细示例1.ICACLS /save & /restore2. ICACLS /setownerwindows sid 简介及相关的whoami dos命令3. ICACLS /findsid4. ICACLS /...

    前言

    你是否不想让别人在你的电脑上打开某个文件夹或者文件?是否有时想允许让别人看某个文件和文件夹下的文件,但是不想让别人更改?或者不想让自己电脑上的某个账户不能访问某个文件夹?如果有过那么可以用以下命令实现,而不需要借助其他加密软件。

    注意要限制别人访问的文件或者文件夹所在盘必须要是NTFS文件系统的,而不能是FAT32格式。这或许是ntfs文件系统安全性能好于fat32的原因之一吧。[比如查看D盘文件系统,只需要打开D盘,在里面空白处点击右键-属性,里面就可以看到了]

    如果是fat32而不是ntfs文件系统可以通过这条命令来转换所在盘为ntfs文件系统[不影响里面的文件的]:

    命令行下操作:

    开始-运行-cmd-回车 打开命令行界面

    输入:convert d: /fs:ntfs

    再回车,按照提示操作就可以了

    [上面命令的意思是:convert表示命令转换文件系统的意思;d: 表示要转换D盘,其他盘你可以相应写,比如f: ; /fs:ntfs 表示文件系统转换为ntfs格式。注意这个命令只能把fat32转换成ntfs格式。将ntfs转换为fat32不能通过简单命令完成,需要借助特别软件。]

    windows dos 文件权限操作命令:Icacls or Cacls。

    请使用Icacls,不推荐使用 Cacls

    权限操作命令需要在管理员模式下运行runas /noprofile /user:administrator cmd输入密码,切换到管理员模式下。

    由于网上和微软官网对cacls 和 icacls命令的实例介绍的不详细,这里对每个命令都有对应的示例进行说明,便于理解学习。

    Cacls

    显示或者修改文件的访问控制列表(ACL)

     CACLS filename [/T] [/M] [/L] [/S[:SDDL]] [/E] [/C] [/G user:perm]
            [/R user [...]] [/P user:perm [...]] [/D user [...]]
        filename      显示 ACL。
        /T            更改当前目录及其所有子目录中指定文件的 ACL。
        /L            对照目标处理符号链接本身
        /M            更改装载到目录的卷的 ACL
        /S            显示 DACL 的 SDDL 字符串。
        /S:SDDL       使用在 SDDL 字符串中指定的 ACL 替换 ACL。
                      (/E、/G、/R、/P 或 /D 无效)。
        /E            编辑 ACL 而不替换。
        /C            在出现拒绝访问错误时继续。
        /G user:perm  赋予指定用户访问权限。
                      Perm 可以是: R  读取
                                   W  写入
                                   C  更改(写入)
                                   F  完全控制
        /R user       撤销指定用户的访问权限(仅在与 /E 一起使用时合法)。
        /P user:perm  替换指定用户的访问权限。
                      Perm 可以是: N  无
                                   R  读取
                                   W  写入
                                   C  更改(写入)
                                   F  完全控制
        /D user       拒绝指定用户的访问。
     在命令中可以使用通配符指定多个文件。
     也可以在命令中指定多个用户。
    
    缩写:
        CI - 容器继承。
             ACE 会由目录继承。
        OI - 对象继承。
             ACE 会由文件继承。
        IO - 只继承。
             ACE 不适用于当前文件/目录。
        ID - 已继承。
             ACE 从父目录的 ACL 继承。
    
    eg:
    
    % 将所有d:\documents目录下的文件、子文件夹的NTFS权限修改为仅管理员组(administrators)完全控制(删除原有所有NTFS权限设置):%
    
    $ cacls d:\documents\*.* /T /G administrators:F
    
    % 在原有d:\documents目录下的文件、子文件夹的NTFS权限上添加管理员组(administrators)完全控制权限(并不删除原有所有NTFS权限设置):%
    
    $ cacls d:\documents\*.* /T /E /G administrators:F
    
    % 取消管理员组(administrators)完全控制权限(并不删除原有所有NTFS权限设置):%
    
    $ cacls \\Server\Documents\%username%\我的文档 /t /e /r "mddq\domain admins"
    $ cacls \\Server\Documents\%username%\桌面 /t /e /r "mddq\domain admins"
    
    

    Note:

    1. SDDL(securable Descriptors Define Language安全描述符定义语言.

    示例

    eg1.让所有用户禁止访问D盘test文件夹

    cacls d:\test /t /p everyone:n

    cacls test显示访问控制列表。

    $ cacls test
    D:\test Everyone:(OI)(CI)N
    

    打开D盘test就提示禁止访问。因为上面写的是everyone所有用户。所有你自己也不能访问。自己要访问时只需要运行命令:

    cacls d:\test /t /p everyone:f

    就可以了.

    如果你的电脑有几个账户,你是想不让其他账户访问这个文件夹,那么你可以在写命令的时候把everyone改成相应的账户名字,比如edwin等等〔看你实际的账户名啦〕。

    直接用everyone所有用户设置权限。要打开时再运行命令取消限制,也不是太麻烦。

    eg2.让用户edwin不能打开e:\test\apian.rmvb 这部电影。当然也可以限制图片,程序,word文档的打开哦。

    命令:

    cacls e:\test\apian.rmvb /p edwin:n

    取消限制:

    cacls e:\test\apian.rmvb /p edwin:f

    eg3:把D盘绿色软件文件夹里面的exe文件设置成只读[包括子文件夹里面的]。这样可以防止病毒感染exe文件。

    命令:

    d:
    cd d:\绿色软件
    cacls *.exe /t /p everyone:r
    

    **eg4:把E盘根目录下设置成只读,防止病毒感染E盘根目录。因为很多U盘病毒会感染根目录,在根目录下新生成一个文件夹及文件比如 autorun.inf、setup.exe、a2de3d3.exe、autorun.exe。有些恶性病毒很厉害。弄得你重装系统都无法解决病毒问题。因为这些在非系统目录根目录的病毒存在当你单纯格式化C盘重装系统之后,第一次启动时打开D盘等非系统盘的时候病毒在次感染C盘。如果把非系统盘根目录设置成只读的话就可以防止病毒生成这些文件。当然不影响根目录下文件的删除哦。但是会影响你自己建立文件夹或在根目录下复制进文件。所有建议开始把根目录下的文件夹建立好。文件放到子文件夹里面。或者在你想在比如D盘根目录下建立一个文件夹时,先用命令行取消根目录只读。虽然有点麻烦,但是好处多余坏处 哦。

    命令:
    cacls e:\ /p everyone:r

    解除根目录只读:
    cacls e:\ /p everyone:f

    问题:既然我可以用命令来加密,是不是别人也可以用命令来解密?

    回答:是的。只要有管理员权限的账户都可以运行命令来设置权限。因此需要保护好你管理员账户的密码,否则别人可以获取你电脑管理员账户权限。

    问题:用这些命令的注意点

    回答:
    1、尽量不要对系统文件及文件夹设置权限。因为那样可能会到时系统出现严重错误的。
    2、如果要重装系统,那么之前尽量把加密的解密。如果是用ghost恢复就不需要了。
    3、再次强调,所在盘符必须是ntfs的才行哦。

    Icacls

    Note: Icacls (第一个是大写的i,倒数第二个是小写的L).

    Icacls 是一种命令行工具,它显示或修改指定文件上的随机访问控制列表 (DACL),并将存储的 DACL 应用于指定目录中的文件。Icacls.exe 替换了 Cacls.exe 工具用于查看和编辑 DACL。ICACLS 是 Windows Server 2003 SP2 中 CACLS 工具的升级版本,可用于从恢复控制台重设文件中的帐户控制列表 (ACL) 以及备份 ACL。与 CACLS 不同的是,ICACLS 可以正确地传送对继承的 ACL 的更改和创建。有关 ICACLS 的使用及命令的更多信息,可以通过在命令提示符下运行icacls /?进行访问。这里的I应该是Improved upgrade of cacls.

    
    icacls <FileName> [/grant[:r] <Sid>:<Perm>[...]] [/deny <Sid>:<Perm>[...]] [/remove[:g|:d]] <Sid>[...]] [/t] [/c] [/l] [/q] [/setintegritylevel <Level>:<Policy>[...]]
    
    icacls <Directory> [/substitute <SidOld> <SidNew> [...]] [/restore <ACLfile> [/c] [/l] [/q]]
    
    /t          执行当前目录及其子目录中的所有指定文件上的操作。
    /c          继续操作而不考虑文件的任何错误。 仍将显示错误消息。
    /l          执行上一个符号链接,而不是其目标的操作。
    /q          禁止显示成功消息。
    
    
    
    ICACLS name /save aclfile [/T] [/C] [/L] [/Q]
        将匹配名称的文件和文件夹的 DACL 存储到 aclfile 中以便将来与
        /restore 一起使用。请注意,未保存 SACL、所有者或完整性标签。
    
    ICACLS directory [/substitute SidOld SidNew [...]] /restore aclfile
                     [/C] [/L] [/Q]
        将存储的 DACL 应用于目录中的文件。
    
    ICACLS name /setowner user [/T] [/C] [/L] [/Q]
        更改所有匹配名称的所有者。该选项不会强制更改所有身份;
        使用 takeown.exe 实用程序可实现该目的。
    
    ICACLS name /findsid Sid [/T] [/C] [/L] [/Q]
        查找包含显式提及 SID 的 ACL 的所有匹配名称。
    
    ICACLS name /verify [/T] [/C] [/L] [/Q]
        查找其 ACL 不规范或长度与 ACE 计数不一致的所有文件。
    
    ICACLS name /reset [/T] [/C] [/L] [/Q]
        为所有匹配文件使用默认继承的 ACL 替换 ACL。
    
    ICACLS name [/grant[:r] Sid:perm[...]]
           [/deny Sid:perm [...]]
           [/remove[:g|:d]] Sid[...]] [/T] [/C] [/L]
           [/setintegritylevel Level:policy[...]]
    
        /grant[:r] Sid:perm 授予指定的用户访问权限。如果使用 :r,
            这些权限将替换以前授予的所有显式权限。
            如果不使用 :r,这些权限将添加到以前授予的所有显式权限。
    
        /deny Sid:perm 显式拒绝指定的用户访问权限。
            将为列出的权限添加显式拒绝 ACE,
            并删除所有显式授予的权限中的相同权限。
    
        /remove[:[g|d]] Sid 删除 ACL 中所有出现的 SID。使用
            :g,将删除授予该 SID 的所有权限。使用
            :d,将删除拒绝该 SID 的所有权限。
    
        /setintegritylevel [(CI)(OI)] 级别将完整性 ACE 显式添加到所有
            匹配文件。要指定的级别为以下级别之一:
                L[ow]
                M[edium]
                H[igh]
            完整性 ACE 的继承选项可以优先于级别,但只应用于目录。
    
        /inheritance:e|d|r
            e - 启用继承
            d - 禁用继承并复制 ACE
            r - 删除所有继承的 ACE
    
    
    注意:
        Sid 可以采用数字格式或友好的名称格式。如果给定数字格式,那么请在 SID 的开头添加一个 *。
    
        /T 指示在以该名称指定的目录下的所有匹配文件/目录上
            执行此操作。
    
        /C 指示此操作将在所有文件错误上继续进行。仍将显示错误消息。
    
        /L 指示此操作在符号链接本身而不是其目标上执行。
    
        /Q 指示 icacls 应该禁止显示成功消息。
    
        ICACLS 保留 ACE 项的规范顺序:
                显式拒绝
                显式授予
                继承的拒绝
                继承的授予
    
        perm 是权限掩码,可以两种格式之一指定:
            简单权限序列:
                    N - 无访问权限
                    F - 完全访问权限
                    M - 修改权限
                    RX - 读取和执行权限
                    R - 只读权限
                    W - 只写权限
                    D - 删除权限
            在括号中以逗号分隔的特定权限列表:
                    DE - 删除
                    RC - 读取控制
                    WDAC - 写入 DAC
                    WO - 写入所有者
                    S - 同步
                    AS - 访问系统安全性
                    MA - 允许的最大值
                    GR - 一般性读取
                    GW - 一般性写入
                    GE - 一般性执行
                    GA - 全为一般性
                    RD - 读取数据/列出目录
                    WD - 写入数据/添加文件
                    AD - 附加数据/添加子目录
                    REA - 读取扩展属性
                    WEA - 写入扩展属性
                    X - 执行/遍历
                    DC - 删除子项
                    RA - 读取属性
                    WA - 写入属性
            继承权限可以优先于每种格式,但只应用于
            目录:
                    (OI) - 对象继承
                    (CI) - 容器继承
                    (IO) - 仅继承
                    (NP) - 不传播继承
                    (I) - 从父容器继承的权限
    
    
            icacls file /grant Administrator:(D,WDAC)
            - 将授予用户对文件删除和写入 DAC 的管理员权限。
    
            icacls file /grant *S-1-1-0:(D,WDAC)
            - 将授予由 sid S-1-1-0 定义的用户对文件删除和写入 DAC 的权限。
    

    详细示例

    操作的文件夹结构:

    在这里插入图片描述

    1.ICACLS /save & /restore

    d:
    cd d:\macds
    
    ICACLS 1.txt /save aclf /T    % 将macds目录下所有的1.txt文件的ACL信息存储到文件aclf %
    ICACLS 1.txt /restore aclf % 利用文件aclf中的数据还原macds目录下所有的1.txt文件的ACL信息%
    
    cd \
    ICACLS d:\macds\* /save aclf2 /T
    ICACLS d:\macds /restore aclf2
    

    aclf文件内容

    1.txt
    D:(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1301bf;;;AU)(A;ID;0x1200a9;;;BU)
    macds\1.txt
    D:(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1301bf;;;AU)(A;ID;0x1200a9;;;BU)
    

    aclf2文件内容

    1.txt
    D:(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1301bf;;;AU)(A;ID;0x1200a9;;;BU)
    aclf
    D:(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1301bf;;;AU)(A;ID;0x1200a9;;;BU)
    godr.php
    D:(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1301bf;;;AU)(A;ID;0x1200a9;;;BU)
    hy.doc
    D:(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1301bf;;;AU)(A;ID;0x1200a9;;;BU)
    macds
    D:(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;FA;;;SY)(A;OICIIOID;GA;;;SY)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)(A;ID;0x1200a9;;;BU)(A;OICIIOID;GXGR;;;BU)
    test
    D:(A;ID;FA;;;BA)(A;OICIIOID;GA;;;BA)(A;ID;FA;;;SY)(A;OICIIOID;GA;;;SY)(A;ID;0x1301bf;;;AU)(A;OICIIOID;SDGXGWGR;;;AU)(A;ID;0x1200a9;;;BU)(A;OICIIOID;GXGR;;;BU)
    macds\1.txt
    D:(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1301bf;;;AU)(A;ID;0x1200a9;;;BU)
    macds\2.so
    D:(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1301bf;;;AU)(A;ID;0x1200a9;;;BU)
    test\ght.xls
    D:(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1301bf;;;AU)(A;ID;0x1200a9;;;BU)
    test\hy.doc
    D:(A;ID;FA;;;BA)(A;ID;FA;;;SY)(A;ID;0x1301bf;;;AU)(A;ID;0x1200a9;;;BU)
    

    2. ICACLS /setowner

    $ cd d:\macds
    $ dir /q test % 查看test目录下所有文件的所有者信息%
    
    2019/07/14  23:10    <DIR>          BUILTIN\Administrators .
    2019/07/14  23:10    <DIR>          BUILTIN\Administrators ..
    2019/07/14  23:10                 0 BUILTIN\Administrators ght.xls
    2019/07/14  23:10                 0 BUILTIN\Administrators hy.doc
    
    % 设置test目录下所有文件的所有者为jsword用户(jsword用户必须存在)%
    % 否则,会提示: 帐户名与安全标识间无任何映射完成。%
    $ ICACLS test /setowner jsword /T
    
    $ dir /q test
    
    2019/07/14  23:10    <DIR>          jscompu\jsword         .
    2019/07/14  23:10    <DIR>          BUILTIN\Administrators ..
    2019/07/14  23:10                 0 jscompu\jsword         ght.xls
    2019/07/14  23:10                 0 jscompu\jsword         hy.doc
    
    

    windows sid 简介及相关的whoami dos命令

    refer: Windows中的SID详解

    
    WhoAmI 有三种使用方法:
    
    语法 1: WHOAMI [/UPN | /FQDN | /LOGONID]
    语法 2: WHOAMI { [/USER] [/GROUPS] [/PRIV] } [/FO format] [/NH]
    语法 3: WHOAMI /ALL [/FO format] [/NH]
    
    描述:
        这个工具可以用来获取本地系统上当前用户(访问令牌)的用户名和组信息,
        以及相应的安全标识符(SID)、特权和登录标识符(logon ID)。例如,谁是
        当前登录的用户? 如果没有指定开关,工具用 NTLM 格式(域\用户名)显示
        用户名。
    
    参数列表:
        /UPN         用用户主体 (User Principal) 格式显示用户名名称 (UPN)格式。
        /FQDN        用完全合格的 (Fully Qualified) 格式显示用户名可分辨名称(FQDN) 格式。
        /USER        显示当前用户的信息以及安全标识符 (SID)。
        /GROUPS      显示当前用户的组成员信息、帐户类型和安全标识符 (SID) 和属性。
        /PRIV        显示当前用户的安全特权。
        /LOGONID     显示当前用户的登录 ID。
        /ALL         显示当前用户名、属于的组以及安全标识符(SID) 和当前用户访问令牌的特权。
        /FO  format  指定要显示的输出格式。有效值为 TABLE、LIST、CSV。CSV 格式不显示列标题。默认格式是 TABLE。
        /NH          指定在输出中不显示列标题。只对 TABLE 和 CSV 格式有效。
        /?                      显示此帮助消息。
    
    示例:
        WHOAMI
        WHOAMI /UPN
        WHOAMI /FQDN
        WHOAMI /LOGONID
        WHOAMI /USER
        WHOAMI /USER /FO LIST
        WHOAMI /USER /FO CSV
        WHOAMI /GROUPS
        WHOAMI /GROUPS /FO CSV /NH
        WHOAMI /PRIV
        WHOAMI /PRIV /FO TABLE
        WHOAMI /USER /GROUPS
        WHOAMI /USER /GROUPS /PRIV
        WHOAMI /ALL
        WHOAMI /ALL /FO LIST
        WHOAMI /ALL /FO CSV /NH
        WHOAMI /?
    

    3. ICACLS /findsid

    $ WHOAMI /USER /FO LIST % 显示当前用户的信息以及安全标识符 %
    
    用户信息
    ----------------
    
    用户名: jscompu\jsword
    SID:    S-1-5-21-3817771755-3330119566-3374898986-1000
    
    %  查找包含显式提及 SID(S-1-1-0) 的 ACL 的所有匹配名称。%
    $  ICACLS c:\* /findsid *S-1-1-0
    
    发现 SID: c:\$360Section。
    发现 SID: c:\Documents and Settings。
    发现 SID: c:\ProgramData。
    发现 SID: c:\Users。
    
    

    4. ICACLS /verify

    
    % 在C盘的所有目录及子目录下查找其 ACL 不规范或长度与 ACE 计数不一致的所有文件 %
    $ ICACLS C:\*.txt /verify /T
    
    已处理的文件: C:\$Recycle.Bin\S-1-5-21-3817771755-3330119566-3374898986-1000\$I1DNCWV.txt
    已处理的文件: C:\$Recycle.Bin\S-1-5-21-3817771755-3330119566-3374898986-1000\$IBKXJNZ.txt
    已处理的文件: C:\$Recycle.Bin\S-1-5-21-3817771755-3330119566-3374898986-1000\$R1DNCWV.txt
    已处理的文件: C:\$Recycle.Bin\S-1-5-21-3817771755-3330119566-3374898986-1000\$RBKXJNZ.txt
    已处理的文件: C:\$Recycle.Bin\S-1-5-21-3817771755-3330119566-3374898986-501\$I341E2Y.txt
    已处理的文件: C:\$Recycle.Bin\S-1-5-21-3817771755-3330119566-3374898986-501\$R341E2Y.txt
    C:\Documents and Settings\*.txt: 拒绝访问。
    已成功处理 6 个文件; 处理 1 个文件时失败
    
    

    5. ICACLS /reset

    $ ICACLS d:\macds\1.txt    % 查看d:\macds\1.txt的ACL信息 %
    
    d:\macds\1.txt BUILTIN\Administrators:(I)(F)
                   NT AUTHORITY\SYSTEM:(I)(F)
                   NT AUTHORITY\Authenticated Users:(I)(M)
                   BUILTIN\Users:(I)(RX)
    已成功处理 1 个文件; 处理 0 个文件时失败
    
    % 为所有匹配文件使用默认继承的 ACL 替换 ACL。 %
    $ ICACLS d:\macds\1.txt /reset /T
    
    已处理的文件: d:\macds\1.txt
    已处理的文件: d:\macds\macds\1.txt
    已成功处理 2 个文件; 处理 0 个文件时失败
    
    $ ICACLS d:\macds\1.txt
    
    

    6. ICACLS /grant /deny /remove /setintegritylevel

    
    % 将授予用户对文件删除和写入DAC的管理员权限 %
    icacls d:\macds\1.txt /grant Administrator:(D,WDAC)
    
    % 将授予由 sid S-1-1-0 定义的用户对文件删除和写入 DAC 的权限 %
    icacls d:\macds\1.doc /grant *S-1-1-0:(D,WDAC)
    
    % 拒绝用户jsword对文件d:\macds\test执行删除,读取控制,写入DAC的权限 %
    % 即用户jsword对test不能执行rd...%
    icacls d:\macds\test /deny  jsword:(DE,RC,WDAC)
    
    % 取消jsword对test的所有拒绝访问权限%
    icacls d:\macds\test /remove:d jsword /T
    
    icacls d:\macds\test\* reset /T
    
    % 添加对Authenticated Users 的授权。 %
    $ icacls test\ /grant "Authenticated Users":(M)
    
    % 删除对Authenticated Users 的授权. %
    $ icacls test\ /remove "Authenticated Users"
    
    % 对test目录设置完整性级别. %
    % 注意级别不能放到()中 %
    $ icacls test /setintegritylevel (OI)(NP)(IO)H
    
    
    

    注意事项:

    1、对于继承的声明要放到具体权限之前。例如:(OI)(CI)(IO)(M)是对的,但(M)(OI)(CI)(IO)会提示无效的参数。

    2、简单权限序列中的权限可以放到()里边,也可以不加()。例如授予用户yifan修改权限可以写为icacls <目录|文件> /grant yifan:Micacls <目录|文件> /grant yifan:(M)

    3、若只授予指定用户特定权限,则必须将权限放到()中。例如授予用户yifan读取目录权限icacls <目录> /grant yifan:(AD)是对的,如果是icacls <目录> /grant yifan:AD将提示无效的参数。

    TAKEOWN

    
    TAKEOWN [/S system [/U username [/P [password]]]]
            /F filename [/A] [/R [/D prompt]]
    
    描述:
        该工具以重新分配文件所有权的方式允许管理员重新获取先前被拒绝访问的文件访问权。
    
    参数列表:
        /S           system          指定要连接到的远程系统。
        /U           [domain\]user   指定用户上下文,命令在此上下文中执行。
        /P           [password]      指定给定用户上下文的密码。如果省略,提示输入。
        /F           filename        指定文件名或目录名模式。可以用通配符 "*"
                                     指定模式。允许共享名\文件名。
        /A                           将所有权给于管理员组,而不是当前用户。
        /R                           递归: 指示工具运行于指定的目录和子目录里的文件上。
        /D           prompt          当前用户在一个目录里没有“列出文件夹”
                                     权限时,使用默认答案。当在子目录里进行
                                     递归 (/R) 操作时会发生这种情况。用有效
                                     值 "Y" 获取所有权或用 "N" 跳过。
    
        /?                           显示此帮助消息。
    
        注意: 1) 如果指定了 /A,文件所有权会给与当前登录的用户。
              2) 不支持用 "?""*" 混合的模式。
              3) /D 用于抑制确认提示。
    
    示例:
        TAKEOWN /?
        TAKEOWN /F lostfile
        TAKEOWN /F \\system\share\lostfile /A
        TAKEOWN /F directory /R /D N
        TAKEOWN /F directory /R /A
        TAKEOWN /F *
        TAKEOWN /F C:\Windows\System32\acme.exe
        TAKEOWN /F %windir%\*.txt
        TAKEOWN /S system /F MyShare\Acme*.doc
        TAKEOWN /S system /U user /F MyShare\foo.dll
        TAKEOWN /S system /U domain\user /P password /F share\filename
        TAKEOWN /S system /U user /P password /F Doc\Report.doc /A
        TAKEOWN /S system /U user /P password /F Myshare\*
        TAKEOWN /S system /U user /P password /F Home\Logon /R
        TAKEOWN /S system /U user /P password /F Myshare\directory /R /A
    
    % 强制将当前目录下的所有文件及文件夹、子文件夹下的所有者更改为管理员组(administrators)命令 %
    $ takeown /f * /a /r /d y
    
    

    参考文章

    1. cacls命令设置文件及其文件夹权限的方法
    2. windows中使用icacls命令还原文件夹的权限设置
    3. 微软官网icacls:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and-2008/cc753525(v=ws.10)
    4. Windows中的SID详解
    5. Cacls和ICacls
    展开全文
  • 6.文件类型和文件权限管理

    千次阅读 2016-07-12 15:28:18
    6.1.普通文件 6.2.目录文件和设备文件 6.3.stat和fstat及lstat函数 6.4.文件权限管理 6.5.读取目录文件

    6.1.普通文件
    (1)普通文件(- regular file)包括文本文件+二进制文件。
    (2)文本文件即文件中的内容是由文本构成的,文本即经过某种编码的字符(譬如ASCII码字符);所有文件的内容本质上都是数字,而文本文件中的数字本身应理解为该数字所对应的编码字符(譬如ASCII码对应的字符);常见的.c文件和.h文件和.txt文件等都是文本文件;文本文件的好处是可以被人轻松读懂和编辑,则文本文件天生就是为人类发明的。
    (3)二进制文件即文件中存储的内容本质上也是数字,但这些数字并非字符对应的数字编码,而是真正的数字;常见的可执行程序文件(gcc编译生成的a.out;arm-linux-gcc编译生成的.bin)都是二进制文件。
    (4)从本质上来看(刨除文件属性和内容的理解)文本文件和二进制文件并没有任何区别,都是1个文件里面存放了数字;区别是理解方式不同,若把这些数字就当作数字处理则就是二进制文件,若把这些数字按照某种编码格式去解码成文本字符,则就是文本文件。
    (5)在linux系统层面是不区分文本文件和二进制文件的,我们无法从文件本身准确知道该文件属于哪种;我们只能事先就知道该文件的类型然后使用该种文件类型的用法去使用它;有时候也会用一些后缀名来人为的标记文件的类型。
    (6)使用文本文件时,常规做法是使用文本文件编辑器(vim、gedit、notepad++、SourceInsight)去打开并编辑它,编辑器会read读出文件二进制数字内容,然后按照编码格式去解码将其还原成字符展现给我们;如果使用文本文件编辑器去打开某个二进制文件,则编辑器会以为该二进制文件还是文本文件然后试图去将其解码成文字,但解码过程很多数字并不对应有意义的字符所以成了乱码;使用二进制阅读工具去读取文本文件,则呈现的是文本文件中字符所对应的二进制的数字编码。


    6.2.目录文件和设备文件
    (1)目录文件(d directory)就是文件夹,文件夹在linux中是1种特殊文件;用vi打开某个文件夹,则里面存的内容包括该目录文件的路径+目录文件夹里面的文件列表;目录文件比较特殊,本身并不适合用普通的方式来读写,linux中使用特殊的一些API来专门读写目录文件。
    (2)设备文件包括字符设备文件(c character)+ 块设备文件(b block);设备文件对应的是硬件设备,即该文件虽然在文件系统中存在,但并不是真正存在于硬盘上的某个文件,而是文件系统虚拟制造出来的(虚拟文件系统譬如如/dev /sys /proc等);虚拟文件系统中的文件大多数不能或者说不用直接读写的,而是用特殊的API产生或者使用的。
    (3)管道文件(p pipe)+套接字文件(s socket)+符号链接文件(l link)后续用到的时候会详细分析。


    6.3.stat和fstat及lstat函数
    (1)每个文件中都附带了该文件的一些属性信息(属性信息是存在于文件本身中的,其只能被专用的API打开看到);文件属性信息查看API有stat、fstat、lstat,其作用一样,参数不同,细节略有不同;linux命令行下可以使用stat命令去查看文件属性信息,实际上stat命令内部就是使用了stat系统调用来实现的(见图1);struct stat是内核定义的1个结构体,在sys/stat.h中声明,该结构体中的所有元素加起来就是文件属性信息。
    (2)stat该API的作用就是让内核将我们要查找的目的文件的属性信息结构体的值放入我们传递给stat函数的buf中,当stat该API调用从内核返回时buf中被填充了该文件的正确的属性信息,然后我们通过查看buf这种结构体变量的元素即可得知该文件的各种属性了。
    (3)stat是从文件名出发得到文件属性信息结构体,而fstat是从1个已打开的文件fd出发得到文件的属性信息;则若文件没有打开需要读取文件信息即使用stat,若文件已经被打开需要读取文件信息即使用fstat效率会更高;stat是从磁盘去读取静态文件,而fstat是从内存读取动态文件;对于符号链接文件,stat和fstat查阅的是符号链接文件指向的文件的属性,而lstat查阅的是符号链接文件本身的属性。
    (4)通过stat判断文件具体类型(譬如-、d、l),文件属性中的文件类型标志在struct stat结构体的mode_t st_mode元素中,该元素中的每个bit位代表不同的含义,但这些位定义不容易记住,则linux系统事先定义多个宏来进行相应操作(譬如S_ISREG宏返回值是1表示该文件是普通文件,若该文件不是普通文件则返回0)。
    (5)独立判断文件权限设置,st_mode记录了文件权限信息,linux并没有给文件权限测试提供宏操作,而只是提供了位掩码,则我们只能用位掩码来判断文件是否具有相应权限。


    6.4.文件的权限管理
    (1)st_mode本质上是1个32位的数(类型unsinged int),该数中的每个位表示1个含义;文件类型和文件权限都记录在st_mode中,我们使用专门的掩码去取出相应的位即可得知相应的信息。
    (2)ls-l打印出的权限列表中共9位分为3组;第1组表示文件的属主(owner、user)对该文件的可读、可写、可执行权限;第2组表示文件的属主所在的组(group)对该文件的权限;第3组3个位表示其它用户(others)对该文件的权限;属主即该文件属于谁,一般来说是创建该文件的用户;但某个文件创建之后可用chown命令去修改该文件的属主,也可用chgrp命令去修改该文件所在的组(见图2)。
    (3)文件操作时的权限检查规则即当某个程序a.out被执行,a.out试图去操作文件test.txt,判定a.out是否具有对test.txt的某种操作权限;首先test.txt具有9个权限位,规定了3种人(user、group、others)对该文件的操作权限;我们判定test.txt是否能被a.out来操作,关键先搞清楚a.out被谁执行,即当前程序(进程)是哪个用户的进程。
    (4)文本权限管控其实蛮复杂,我们很难轻易的确定当前用户对某个文件是否具有某种权限;软件应在操作某个文件之前先判断当前用户是否有权限做相应操作,若有相应权限即可进行操作,若没有相应权限则提供错误信息给用户;access函数可以测试得到当前执行程序的那个用户在当前环境下对目标文件是否具有某种操作权限。
    (5)chmod/fchmod与权限修改,chmod是1个linux命令,用来修改文件的各种权限属性,chmod命令只有root用户才有权利去执行修改,chmod命令其实内部是用linux的1个叫chmod的API实现的。
    (6)chown/fchown/lchown与属主修改,linux中有个chown命令来修改文件属主,需以root身份运行(譬如chown root test.txt),chown命令是用chown API实现的;linux中有个chgrp命令来修改文件属主所在的组(譬如chgrp root test.txt)。
    (7)umask与文件权限掩码,文件权限掩码是linux系统中维护的1个全局设置,umask的作用是用来设定我们系统中新创建的文件的默认权限的(譬如umask 0000即修改umask值;umask即查询umask值),umask命令就是用umask API实现的。


    6.5.读取目录文件
    (1)opendir打开某个目录后得到1个DIR类型的指针给readdir函数使用;readdir函数调用1次就会返回1个struct dirent类型的指针,该指针指向的结构体变量里面记录了1个目录项(即目录中的1个子文件);readdir函数调用1次只能读出1个目录项,要想读出目录中所有的目录项必须多次调用readdir函数;readdir函数内部会记住哪个目录项已经被读过了哪个还没读,则多次调用后不会重复返回已经返回过的目录项;当readdir函数返回NULL时就表示目录中所有的目录项已经读完了。
    (2)readdir函数和我们前面接触的某些函数是不同的,首先readdir函数直接返回了1个结构体变量指针,因为readdir内部申请了内存并且给我们返回了地址,多次调用readdir其实readir内部并不会重复申请内存而是使用第1次调用readdir时分配的那个内存,该设计方法是readdir不可重入的关键;readdir在多次调用时是有关联的,该关联也标明readdir函数是不可重入的。
    (3)库函数中有一些函数当年刚开始提供时都是不可重入的,后来意识到这种方式不安全,所以重新封装了C库,提供了对应的可重入版本;可重入函数的命名格式一般为“不可重入版本函数名_r”(譬如readdir_r);关于可重入函数和不可重入函数的介绍请参考链接http://www.cnblogs.com/parrynee/archive/2010/01/29/1659071.html


    这里写图片描述


    这里写图片描述


    这里写图片描述


    6.filepropertyget
    /*
     * 公司:XXXX
     * 作者:Rston
     * 博客:http://blog.csdn.net/rston
     * GitHub:https://github.com/rston
     * 项目:文件类型和文件权限管理
     * 功能:通过stat简单读取某个文件属性信息并打印输出;
     *       通过stat判断某个文件类型;独立判断某个文件的权限。
     */
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    #define PATHNAME "test.txt"
    
    int main(int argc, char **argv)
    {
        int ret = -1;
        struct stat buf;
    
        memset(&buf, 0, sizeof(buf));                       // 清零buf缓冲区
        ret = stat(PATHNAME, &buf);
        if (ret < 0)
        {
            perror("stat error");
            exit(-1);
        }
    
    #if 0
        // 成功获取了stat结构体,从中可以得到各种属性信息了
        printf("inode = %d.\n", buf.st_ino);                // 静态文件Inode编号st_ino
        printf("size = %d bytes.\n", buf.st_size);          // 文件大小st_size  
        printf("st_blksize = %d.\n", buf.st_blksize);       // 操作系统文件读写IO缓冲区大小st_blksize
        printf("st_blocks = %d.\n", buf.st_blocks);         // 占用的块数st_blocks
    #endif  
    
    #if 0
        // 通过stat判断某个文件的类型
        ret = S_ISREG(buf.st_mode);                         
        printf("ret = %d.\n", ret);                         // ret = 1.
        ret = S_ISDIR(buf.st_mode);
        printf("ret = %d.\n", ret);                         // ret = 0.
    #endif
    
    #if 1
        // 独立判断某个文件的权限
        // 需在非共享目录下更改文件权限
        // 增加文件属主的可执行权限(chmod u+x test.txt)
        ret =  ((S_IRUSR & buf.st_mode) ? 1 : 0);           // 判断文件的属主是否有可读权限,若有则返回1,若无则返回0
        printf("file owner = %d.\n", ret);
    #endif
    
        return 0;
    }

    6.filepermission
    /*
     * 公司:XXXX
     * 作者:Rston
     * 博客:http://blog.csdn.net/rston
     * GitHub:https://github.com/rston
     * 项目:文件类型和文件权限管理
     * 功能:验证文件操作时的权限检查规则。
     */
    
    #include <stdio.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdlib.h>
    
    int main(int argc, char **argv)
    {
        int ret = -1;
    
        if (argc != 2)
        {
            printf("usage: %s filename.\n", argv[0]);
            exit(-1);
        }
    
        // 需在linux原生目录(譬如“/home/gec/.”)下运行该程序
        // 需在普通用户下手动新建某个文件,然后手动创建新用户并来回切换用户进行测试
        // 以“./a.out filename”格式运行程序
        ret = open(argv[1], O_RDONLY);
        if (ret > 0)
        {
            printf("can read.\n");
            close(ret);
        }
        else
        {
            perror("open O_RDONLY error");
        }
    
        ret = open(argv[1], O_WRONLY);
        if (ret > 0)
        {
            printf("can write.\n");
            close(ret);
        }
        else
        {
            perror("open O_WRONLY error");
        }
    
        return 0;
    }

    6.access
    /*
     * 公司:XXXX
     * 作者:Rston
     * 博客:http://blog.csdn.net/rston
     * GitHub:https://github.com/rston
     * 项目:文件类型和文件权限管理
     * 功能:使用access函数判断当前用户是否对该文件有相应的操作权限。
     */
    
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #define PATHNAME "test.txt"
    
    int main(int argc, char **argv)
    {
        int ret = -1;
    
        ret = access(PATHNAME, F_OK);
        if (ret < 0)
        {
            printf("The file is not exit.\n");
            exit(-1);
        }
        else
        {
            printf("The file is exit.\n");
        }
    
        ret = access(PATHNAME, R_OK);
        if (ret < 0)
        {
            printf("The file can not read.\n");
        }
        else
        {
            printf("The file can read.\n");
        }
    
        return 0;
    }

    6.chmod
    /*
     * 公司:XXXX
     * 作者:Rston
     * 博客:http://blog.csdn.net/rston
     * GitHub:https://github.com/rston
     * 项目:文件类型和文件权限管理
     * 功能:使用chmod函数修改文件权限。
     */
    
    #include <sys/stat.h>
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #define PATHNAME "test.txt"
    
    int main(int argc, char **argv)
    {
        int ret = -1;
    
        if (argc != 2)
        {
            printf("usage: %s filename.\n", argv[0]);
            exit(-1);
        }
    
        // -rwx------若没特意指明的权限则默认被取消掉
        ret = chmod(PATHNAME,  S_IRUSR | S_IWUSR |S_IXUSR);
        if (ret < 0)
        {
            perror("chmod error");
            exit(-1);
        }
    
        return 0;
    }

    6.chown
    /*
     * 公司:XXXX
     * 作者:Rston
     * 博客:http://blog.csdn.net/rston
     * GitHub:https://github.com/rston
     * 项目:文件类型和文件权限管理
     * 功能:chown函数修改文件属主和属主所在的组。
     */
    
    #include <unistd.h>
    #include <stdio.h>
    #include <stdlib.h>
    
    #define PATHNAME "test.txt"
    
    int main(int argc, char **argv)
    {
        int ret = -1;
    
        if (argc != 2)
        {
            printf("usage: %s filename.\n", argv[0]);
            exit(-1);
        }
    
        // 将test.txt的文件属主和属主所在的组均改为root
        ret = chown(PATHNAME, 0, 0);
        if (ret < 0)
        {
            perror("chown error");
            exit(-1);
        }
    
        return 0;
    }

    6.umask
    /*
     * 公司:XXXX
     * 作者:Rston
     * 博客:http://blog.csdn.net/rston
     * GitHub:https://github.com/rston
     * 项目:文件类型和文件权限管理
     * 功能:使用umask函数设置新建文件的默认权限。
     * Linux下设置新建文件时的默认权限掩码由umask函数设置 
     * mode_t umask(mode_t umask) 传入四位八进制数,返回系统原先的权限掩码 
     * 0666对应文件权限中的0000 0444对应文件权限中的0222 
     *  
     * 系统原来的权限掩码是:22.
     * 系统新的权限掩码是:666.
     * 创建了文件test1.txt.
     * -r-xr-xr-x 1 root root 0 Jul 11  2016 test1.txt
     * 系统原来的权限掩码是:666.
     * 系统新的权限掩码是:444.
     * 创建了文件test2.txt.
     * -rwxrwxrwx 1 root root 0 Jul 11  2016 test2.txt
     */ 
    
    #include <stdio.h>  
    #include <stdlib.h>  
    #include <sys/stat.h>  
    #include <sys/types.h> 
    
    int main(int argc, char **argv)
    {
        mode_t new_umask, old_umask;  
    
        new_umask = 0666;  
        old_umask = umask(new_umask);  
        printf("系统原来的权限掩码是:%o.\n",old_umask);  
        printf("系统新的权限掩码是:%o.\n",new_umask);  
        system("touch test1.txt");  
        printf("创建了文件test1.txt.\n"); 
        system("ls test1.txt -l");
    
        new_umask = 0444;  
        old_umask = umask(new_umask);  
        printf("系统原来的权限掩码是:%o.\n",old_umask);  
        printf("系统新的权限掩码是:%o.\n",new_umask);  
        system("touch test2.txt");  
        printf("创建了文件test2.txt.\n");  
        system("ls test2.txt -l");  
    
        return 0;  
    }

    6.opendir_readdir
    /*
     * 公司:XXXX
     * 作者:Rston
     * 博客:http://blog.csdn.net/rston
     * GitHub:https://github.com/rston
     * 项目:文件类型和文件权限管理
     * 功能:读取目录文件并打印输出并判断文件类型和统计目录下的文件项数目。   
     */
    
    #include <stdio.h>
    #include <sys/types.h>
    #include <dirent.h>
    #include <stdlib.h>
    
    int main(int argc, char **argv)
    {
        DIR *pDir = NULL;
        struct dirent *pEnt = NULL;
        unsigned int cnt = 0;               // 统计目录文件下的文件项数目
    
        if (argc != 2)
        {
            printf("usage: %s dirname.\n", argv[0]);
            exit(-1);
        }
    
        pDir = opendir(argv[1]);
        if (NULL == pDir)
        {
            perror("opendir error");
            exit(-1);
        }
    
        while (1)
        {
            pEnt = readdir(pDir);
            if (pEnt != NULL)
            {
                // 打印输出该目录下的所有的文件项名字
                printf("name: [%s].\n", pEnt-> d_name);
                // 判断某个文件项是否为普通文件
                if (DT_REG == pEnt->d_type)
                {
                    printf("%s is a regular file.\n", pEnt-> d_name);
                }
                else
                {
                    printf("%s is not a regular file.\n", pEnt-> d_name);
                }
                // 统计该目录下所有文件项个数
                cnt++;
            }
            else
            {
                break;
            }
        }
        printf("The cnts of fileobject is %d.\n", cnt);
    
        return 0;
    }

    展开全文
  • 关于文件权限设置,说一下我的总结 1. 针对所有人共享,且提供读写权限(以共享/public为例)       2. 针对组用户设置访问权限,提供读写权限           下面是一篇极好的文章

    关于文件权限设置,说一下我的总结

    1. 针对所有人共享,且提供读写权限(以共享/public为例)

                 <1. 在smb.conf中设置 security = share

                 <2. 在共享目录个别设置中设置   writable = yes

                 <3. 因为针对所有人共享,所以是匿名访问,将/public设置为nobody    chown -R nobody:nobody  /public

    2. 针对组用户设置访问权限,提供读写权限

                <1. security = user

                <2. writable = yes

                <3. valid user = @groupname

                <4. 共享文件夹修改组: chgrp -R groupname  /path

                <5. 给组设置权限: chmod -R 755 /path

    下面是一篇极好的文章,以上的总结经验也是参考这篇文章,一定要看它的3个案例,强烈建议阅读:地址:http://www.cnblogs.com/mchina/archive/2012/12/18/2816717.html

      

    CentOS 6.3下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系统共享出来的文件。
    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端口。

      例如,某台Samba服务器的IP地址为10.0.0.163,对应的工作组名称为davidsamba,那么在Windows的IE浏览器输入下面两条指令都可以访问共享文件。其实这就是Windows下查看Linux Samba服务器共享文件的方法。
      \\10.0.0.163\共享目录名称
      \\davidsamba\共享目录名称

      Samba服务器可实现如下功能:WINS和DNS服务; 网络浏览服务; Linux和Windows域之间的认证和授权; UNICODE字符集和域名映射;满足CIFS协议的UNIX共享等。

    二、系统环境

    系统平台:CentOS release 6.3 (Final)

    Samba版本:samba-3.5.10-125.el6.x86_64

    Samba Server IP:10.0.0.163

    防火墙已关闭/iptables: Firewall is not running.

    SELINUX=disabled

    三、安装Samba服务

    1、在可以联网的机器上使用yum工具安装,如果未联网,则挂载系统光盘进行安装。

    # yum install samba samba-client samba-swat

    有依赖关系的包samba-common、samba-winbind-clients、libsmbclient将自动安装上去。

    2、查看安装状况

    3、安装包说明

    samba-common-3.5.10-125.el6.x86_64               //主要提供samba服务器的设置文件与设置文件语法检验程序testparm
    samba-client-3.5.10-125.el6.x86_64                    //客户端软件,主要提供linux主机作为客户端时,所需要的工具指令集
    samba-swat-3.5.10-125.el6.x86_64                    //基于https协议的samba服务器web配置界面
    samba-3.5.10-125.el6.x86_64                            //服务器端软件,主要提供samba服务器的守护程序,共享文档,日志的轮替,开机默认选项

    Samba服务器安装完毕,会生成配置文件目录/etc/samba和其它一些samba可执行命令工具,/etc/samba/smb.conf是samba的核心配置文件,/etc/init.d/smb是samba的启动/关闭文件。

    4、启动Samba服务器

    可以通过/etc/init.d/smb start/stop/restart来启动、关闭、重启Samba服务,启动SMB服务如下所示:

    5、查看samba的服务启动情况

    # service smb status

    6、设置开机自启动

    # chkconfig --level 35 smb on             //在3、5级别上自动运行samba服务

    四、配置Samba服务

    Samba的主配置文件为/etc/samba/smb.conf

    主配置文件由两部分构成

    • Global Settings (55-245行)

      该设置都是与Samba服务整体运行环境有关的选项,它的设置项目是针对所有共享资源的。

    • Share Definitions (246-尾行)

      该设置针对的是共享目录个别的设置,只对当前的共享资源起作用。

    全局参数:

    #==================Global Settings ===================
    [global]

    config file = /usr/local/samba/lib/smb.conf.%m
    说明:config file可以让你使用另一个配置文件来覆盖缺省的配置文件。如果文件不存在,则该项无效。这个参数很有用,可以使得samba配置更灵活,可以让一台 samba服务器模拟多台不同配置的服务器。比如,你想让PC1(主机名)这台电脑在访问Samba Server时使用它自己的配置文件,那么先在/etc/samba/host/下为PC1配置一个名为smb.conf.pc1的文件,然后在 smb.conf中加入:config file = /etc/samba/host/smb.conf.%m。这样当PC1请求连接Samba Server时,smb.conf.%m就被替换成smb.conf.pc1。这样,对于PC1来说,它所使用的Samba服务就是由 smb.conf.pc1定义的,而其他机器访问Samba Server则还是应用smb.conf。

    workgroup = WORKGROUP
    说明:设定 Samba Server 所要加入的工作组或者域。

    server string = Samba Server Version %v
    说明:设定 Samba Server 的注释,可以是任何字符串,也可以不填。宏%v表示显示Samba的版本号。

    netbios name = smbserver
    说明:设置Samba Server的NetBIOS名称。如果不填,则默认会使用该服务器的DNS名称的第一部分。netbios name和workgroup名字不要设置成一样了。

    interfaces = lo eth0 192.168.12.2/24 192.168.13.2/24
    说明:设置Samba Server监听哪些网卡,可以写网卡名,也可以写该网卡的IP地址。

    hosts allow = 127. 192.168.1. 192.168.10.1
    说明:表示允许连接到Samba Server的客户端,多个参数以空格隔开。可以用一个IP表示,也可以用一个网段表示。hosts deny 与hosts allow 刚好相反。
    例如:hosts allow=172.17.2.EXCEPT172.17.2.50
    表示容许来自172.17.2.*的主机连接,但排除172.17.2.50
    hosts allow=172.17.2.0/255.255.0.0
    表示容许来自172.17.2.0/255.255.0.0子网中的所有主机连接
    hosts allow=M1,M2
    表示容许来自M1和M2两台计算机连接
    hosts allow=@pega
    表示容许来自pega网域的所有计算机连接

    max connections = 0
    说明:max connections用来指定连接Samba Server的最大连接数目。如果超出连接数目,则新的连接请求将被拒绝。0表示不限制。

    deadtime = 0
    说明:deadtime用来设置断掉一个没有打开任何文件的连接的时间。单位是分钟,0代表Samba Server不自动切断任何连接。

    time server = yes/no
    说明:time server用来设置让nmdb成为windows客户端的时间服务器。

    log file = /var/log/samba/log.%m
    说明:设置Samba Server日志文件的存储位置以及日志文件名称。在文件名后加个宏%m(主机名),表示对每台访问Samba Server的机器都单独记录一个日志文件。如果pc1、pc2访问过Samba Server,就会在/var/log/samba目录下留下log.pc1和log.pc2两个日志文件。

    max log size = 50
    说明:设置Samba Server日志文件的最大容量,单位为kB,0代表不限制。

    security = user
    说明:设置用户访问Samba Server的验证方式,一共有四种验证方式。
    1. share:用户访问Samba Server不需要提供用户名和口令, 安全性能较低。
    2. user:Samba Server共享目录只能被授权的用户访问,由Samba Server负责检查账号和密码的正确性。账号和密码要在本Samba Server中建立。
    3. server:依靠其他Windows NT/2000或Samba Server来验证用户的账号和密码,是一种代理验证。此种安全模式下,系统管理员可以把所有的Windows用户和口令集中到一个NT系统上,使用 Windows NT进行Samba认证, 远程服务器可以自动认证全部用户和口令,如果认证失败,Samba将使用用户级安全模式作为替代的方式。
    4. domain:域安全级别,使用主域控制器(PDC)来完成认证。

    passdb backend = tdbsam
    说明:passdb backend就是用户后台的意思。目前有三种后台:smbpasswd、tdbsam和ldapsam。sam应该是security account manager(安全账户管理)的简写。
    1.smbpasswd:该方式是使用smb自己的工具smbpasswd来给系统用户(真实用户或者虚拟用户)设置一个Samba密码,客户端就用这个密码来访问Samba的资源。smbpasswd文件默认在/etc/samba目录下,不过有时候要手工建立该文件。
    2.tdbsam:该方式则是使用一个数据库文件来建立用户数据库。数据库文件叫passdb.tdb,默认在/etc/samba目录下。passdb.tdb用户数据库可以使用smbpasswd –a来建立Samba用户,不过要建立的Samba用户必须先是系统用户。我们也可以使用pdbedit命令来建立Samba账户。pdbedit命令的参数很多,我们列出几个主要的。
      pdbedit –a username:新建Samba账户。
      pdbedit –x username:删除Samba账户。
      pdbedit –L:列出Samba用户列表,读取passdb.tdb数据库文件。
      pdbedit –Lv:列出Samba用户列表的详细信息。
      pdbedit –c “[D]” –u username:暂停该Samba用户的账号。
      pdbedit –c “[]” –u username:恢复该Samba用户的账号。
    3.ldapsam:该方式则是基于LDAP的账户管理方式来验证用户。首先要建立LDAP服务,然后设置“passdb backend = ldapsam:ldap://LDAP Server”

    encrypt passwords = yes/no
    说明:是否将认证密码加密。因为现在windows操作系统都是使用加密密码,所以一般要开启此项。不过配置文件默认已开启。

    smb passwd file = /etc/samba/smbpasswd
    说明:用来定义samba用户的密码文件。smbpasswd文件如果没有那就要手工新建。

    username map = /etc/samba/smbusers
    说明:用来定义用户名映射,比如可以将root换成administrator、admin等。不过要事先在smbusers文件中定义好。比如:root = administrator admin,这样就可以用administrator或admin这两个用户来代替root登陆Samba Server,更贴近windows用户的习惯。

    guest account = nobody
    说明:用来设置guest用户名。

    socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
    说明:用来设置服务器和客户端之间会话的Socket选项,可以优化传输速度。

    domain master = yes/no
    说明:设置Samba服务器是否要成为网域主浏览器,网域主浏览器可以管理跨子网域的浏览服务。

    local master = yes/no
    说明:local master用来指定Samba Server是否试图成为本地网域主浏览器。如果设为no,则永远不会成为本地网域主浏览器。但是即使设置为yes,也不等于该Samba Server就能成为主浏览器,还需要参加选举。

    preferred master = yes/no
    说明:设置Samba Server一开机就强迫进行主浏览器选举,可以提高Samba Server成为本地网域主浏览器的机会。如果该参数指定为yes时,最好把domain master也指定为yes。使用该参数时要注意:如果在本Samba Server所在的子网有其他的机器(不论是windows NT还是其他Samba Server)也指定为首要主浏览器时,那么这些机器将会因为争夺主浏览器而在网络上大发广播,影响网络性能。
    如果同一个区域内有多台Samba Server,将上面三个参数设定在一台即可。

    os level = 200
    说明:设置samba服务器的os level。该参数决定Samba Server是否有机会成为本地网域的主浏览器。os level从0到255,winNT的os level是32,win95/98的os level是1。Windows 2000的os level是64。如果设置为0,则意味着Samba Server将失去浏览选择。如果想让Samba Server成为PDC,那么将它的os level值设大些。

    domain logons = yes/no
    说明:设置Samba Server是否要做为本地域控制器。主域控制器和备份域控制器都需要开启此项。

    logon script = %u.bat
    说明:当使用者用windows客户端登陆,那么Samba将提供一个登陆档。如果设置成%u.bat,那么就要为每个用户提供一个登陆档。如果人比较多,那就比较麻烦。可以设置成一个具体的文件名,比如start.bat,那么用户登陆后都会去执行start.bat,而不用为每个用户设定一个登陆档了。这个文件要放置在[netlogon]的path设置的目录路径下。

    wins support = yes/no
    说明:设置samba服务器是否提供wins服务。

    wins server = wins服务器IP地址
    说明:设置Samba Server是否使用别的wins服务器提供wins服务。

    wins proxy = yes/no
    说明:设置Samba Server是否开启wins代理服务。

    dns proxy = yes/no
    说明:设置Samba Server是否开启dns代理服务。

    load printers = yes/no
    说明:设置是否在启动Samba时就共享打印机。

    printcap name = cups
    说明:设置共享打印机的配置文件。

    printing = cups
    说明:设置Samba共享打印机的类型。现在支持的打印系统有:bsd, sysv, plp, lprng, aix, hpux, qnx
     
    共享参数:
    #================== Share Definitions ==================
    [共享名]

    comment = 任意字符串
    说明:comment是对该共享的描述,可以是任意字符串。

    path = 共享目录路径
    说明:path用来指定共享目录的路径。可以用%u、%m这样的宏来代替路径里的unix用户和客户机的Netbios名,用宏表示主要用于[homes] 共享域。例如:如果我们不打算用home段做为客户的共享,而是在/home/share/下为每个Linux用户以他的用户名建个目录,作为他的共享目录,这样path就可以写成:path = /home/share/%u; 。用户在连接到这共享时具体的路径会被他的用户名代替,要注意这个用户名路径一定要存在,否则,客户机在访问时会找不到网络路径。同样,如果我们不是以用户来划分目录,而是以客户机来划分目录,为网络上每台可以访问samba的机器都各自建个以它的netbios名的路径,作为不同机器的共享资源,就可以这样写:path = /home/share/%m 。

    browseable = yes/no
    说明:browseable用来指定该共享是否可以浏览。

    writable = yes/no
    说明:writable用来指定该共享路径是否可写。

    available = yes/no
    说明:available用来指定该共享资源是否可用。

    admin users = 该共享的管理者
    说明:admin users用来指定该共享的管理员(对该共享具有完全控制权限)。在samba 3.0中,如果用户验证方式设置成“security=share”时,此项无效。
    例如:admin users =david,sandy(多个用户中间用逗号隔开)。

    valid users = 允许访问该共享的用户
    说明:valid users用来指定允许访问该共享资源的用户。
    例如:valid users = david,@dave,@tech(多个用户或者组中间用逗号隔开,如果要加入一个组就用“@组名”表示。)

    invalid users = 禁止访问该共享的用户
    说明:invalid users用来指定不允许访问该共享资源的用户。
    例如:invalid users = root,@bob(多个用户或者组中间用逗号隔开。)

    write list = 允许写入该共享的用户
    说明:write list用来指定可以在该共享下写入文件的用户。
    例如:write list = david,@dave

    public = yes/no
    说明:public用来指定该共享是否允许guest账户访问。

    guest ok = yes/no
    说明:意义同“public”。
     
    几个特殊共享:
    [homes]
    comment = Home Directories
    browseable = no
    writable = yes
    valid users = %S
    ; valid users = MYDOMAIN\%S
     
    [printers]
    comment = All Printers
    path = /var/spool/samba
    browseable = no
    guest ok = no
    writable = no
    printable = yes
     
    [netlogon]
    comment = Network Logon Service
    path = /var/lib/samba/netlogon
    guest ok = yes
    writable = no
    share modes = no
     
    [Profiles]
    path = /var/lib/samba/profiles
    browseable = no
    guest ok = yes

    Samba安装好后,使用testparm命令可以测试smb.conf配置是否正确。使用testparm –v命令可以详细的列出smb.conf支持的配置参数。

    默认的smb.conf有很多个选项和内容,比较繁琐,这里我们按照案例来讲解配置选项,先备份一下自己的smb.conf文件,然后重新建立一个smb.conf。

    # cp -p /etc/samba/smb.conf    /etc/samba/smb.conf.orig

    案例一、公司现有一个工作组workgroup,需要添加samba服务器作为文件服务器,并发布共享目录/share,共享名为public,此共享目录允许所有员工访问。

    a. 修改samba的主配置文件如下:

    复制代码
    #======================= Global Settings =====================================
    
    [global]                                                  //该设置与Samba服务整体运行环境有关,它的设置项目针对所有共享资源       
    
    # ----------------------- Network Related Options -------------------------
    #
    # workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
    #
    # server string is the equivalent of the NT Description field
    #
    # netbios name can be used to specify a server name not tied to the hostname
    
            workgroup = WORKGROUP                             //定义工作组,也就是windows中的工作组概念
            server string = David Samba Server Version %v     //定义Samba服务器的简要说明
            netbios name = DavidSamba                         //定义windows中显示出来的计算机名称
    
    # --------------------------- Logging Options -----------------------------
    #
    # Log File let you specify where to put logs and how to split them up.
    
            log file = /var/log/samba/log.%m                  //定义Samba用户的日志文件,%m代表客户端主机名
                                                              //Samba服务器会在指定的目录中为每个登陆主机建立不同的日志文件
    # ----------------------- Standalone Server Options ------------------------
    #
    # Scurity can be set to user, share(deprecated) or server(deprecated)
    
            security = share                                  //共享级别,用户不需要账号和密码即可访问
    
    #============================ Share Definitions ==============================
    
    [public]                                                  //设置针对的是共享目录个别的设置,只对当前的共享资源起作用
            comment = Public Stuff                            //对共享目录的说明文件,自己可以定义说明信息
            path = /share                                     //用来指定共享的目录,必选项
            public = yes                                      //所有人可查看,等效于guest ok = yes
    复制代码

    b. 建立共享目录

    上面设置了共享目录为/share,下面就需要建立/share目录:

    由于要设置匿名用户可以下载或上传共享文件,所以要给/share目录授权为nobody权限。

    c. 重启smb服务

    d. 测试smb.conf配置是否正确

    e. 访问Samba服务器的共享文件

    • 在Linux下访问Samba服务器的共享文件

    • 在windows下访问Samba服务器的共享文件

    案例二、公司现有多个部门,因工作需要,将TS部的资料存放在samba服务器的/ts 目录中集中管理,以便TS人员浏览,并且该目录只允许TS部员工访问。

    a. 添加TS部组和用户

    建立用户的同时加入到相应的组中的方式:useradd -g 组名 用户名

    b. 在根目录下建立/ts 文件夹

    c. 将刚才建立的两个帐户添加到samba的账户中

    d. 修改主配置文件如下:

    复制代码
    #======================= Global Settings =====================================
    
    [global]
    
    # ----------------------- Network Related Options -------------------------
    #
    # workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
    #
    # server string is the equivalent of the NT Description field
    #
    # netbios name can be used to specify a server name not tied to the hostname
    
            workgroup = WORKGROUP
            server string = David Samba Server Version %v
            netbios name = DavidSamba
    
    # --------------------------- Logging Options -----------------------------
    #
    # Log File let you specify where to put logs and how to split them up.
    
            log file = /var/log/samba/log.%m
    
    # ----------------------- Standalone Server Options ------------------------
    #
    # Scurity can be set to user, share(deprecated) or server(deprecated)
    
            security = user                                   //用户级别,由提供服务的Samba服务器负责检查账户和密码
    
    #============================ Share Definitions ==============================
    
    [homes]                                                   //设置用户宿主目录
            comment = Home Directories
            browseable = no
            writable = yes
    ;       valid users = %S
    ;       valid users = MYDOMAIN\%S
    
    [public]
            comment = Public Stuff
            path = /share
            public = yes
    
    [ts]                                                      //ts 组目录,只允许ts组成员访问
            comment = TS
            path = /ts
            valid users = @ts
    复制代码

    e. 重新加载配置

    f. 到windows客户端验证,访问\\10.0.0.163,提示输入用户名和密码,在此输入sandy验证,如下图:

    g. 访问成功,可以看到公共的public目录,用户sandy的宿主目录,和其有权限访问的ts目录

    h. 进入ts目录,有刚才创建的newyork.city文件

    案例三、实现不同的用户访问同一个共享目录具有不同的权限,便于管理和维护。基本上能满足一些企业用户的需求。(整理自网络)

    a. 需求

    1. 某公司有5个大部门,分别为:人事行政部(HR & Admin Dept)、财务部(Financial Management Dept)、技术支持部(Technical Support Dept)、项目部(Project Dept)、客服部(Customer Service Dept)。
    2. 各部门的文件夹只允许本部门员工有权访问;各部门之间交流性质的文件放到公用文件夹中。
    3. 每个部门都有一个管理本部门文件夹的管理员账号和一个只能新建和查看文件的普通用户权限的账号。
    4. 公用文件夹中分为存放工具的文件夹和存放各部门共享文件的文件夹。
    5. 对于各部门自己的文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下新建文件及文件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访问,不能更改和删除。不是本部门用户不能访问本部门文件夹。
    6. 对于公用文件夹中的各部门共享文件夹,各部门管理员具有完全控制权限,而各部门普通用户可以在该部门文件夹下新建文件及文件夹,并且对于自己新建的文件及文件夹有完全控制权限,对于管理员新建及上传的文件和文件夹只能访问,不能更改和删除。本部门用户(包括管理员和普通用户)在访问其他部门共享文件夹时,只能查看不能修改删除新建。对于存放工具的文件夹,只有管理员有权限,其他用户只能访问。

    b. 规划

    根据公司需求情况,现做出如下规划:
    1. 在系统分区时单独分一个Company的区,在该区下有以下几个文件夹:HR、 FM、TS、PRO、CS和Share。在Share下又有以下几个文件夹:HR、FM、TS、PRO、CS和Tools。
    2. 各部门对应的文件夹由各部门自己管理,Tools文件夹由管理员维护。
    3. HR管理员账号:hradmin;普通用户账号:hruser。
       FM管理员账号:fmadmin;普通用户账号:fmuser。
       TS管理员账号:tsadmin;普通用户账号:tsuser。
       PRO管理员账号:proadmin;普通用户账号:prouser。
       CS管理员账号:csadmin;普通用户账号:csuser。
       Tools管理员账号:admin。

    文件夹之间的关系见下图:

    c. 新建用户

    使用useradd命令新建系统账户,然后再使用smbpasswd –a建立SMB账户。

    复制代码
    [root@TS-DEV ~]# useradd -s /sbin/nologin hradmin          
    [root@TS-DEV ~]# useradd -g hradmin -s /sbin/nologin hruser
    [root@TS-DEV ~]# useradd -s /sbin/nologin fmadmin            
    [root@TS-DEV ~]# useradd -g fmadmin -s /sbin/nologin fmuser     
    [root@TS-DEV ~]# useradd -s /sbin/nologin tsadmin
    [root@TS-DEV ~]# useradd -g tsadmin -s /sbin/nologin tsuser
    [root@TS-DEV ~]# useradd -s /sbin/nologin proadmin         
    [root@TS-DEV ~]# useradd -g proadmin -s /sbin/nologin prouser 
    [root@TS-DEV ~]# useradd -s /sbin/nologin csadmin
    [root@TS-DEV ~]# useradd -g csadmin -s /sbin/nologin csuser
    [root@TS-DEV ~]# useradd -s /sbin/nologin admin            
    [root@TS-DEV ~]# 
    
    [root@TS-DEV ~]# smbpasswd -a hradmin
    New SMB password:
    Retype new SMB password:
    Added user fmuser.
    [root@TS-DEV ~]# smbpasswd -a hruser
    [root@TS-DEV ~]# smbpasswd -a fmadmin
    [root@TS-DEV ~]# smbpasswd -a fmuser
    [root@TS-DEV ~]# smbpasswd -a tsadmin
    [root@TS-DEV ~]# smbpasswd -a tsuser
    [root@TS-DEV ~]# smbpasswd -a proadmin
    [root@TS-DEV ~]# smbpasswd -a prouser
    [root@TS-DEV ~]# smbpasswd -a csadmin 
    [root@TS-DEV ~]# smbpasswd -a csuser
    [root@TS-DEV ~]# smbpasswd -a admin    
    [root@TS-DEV ~]# 
    复制代码

    d. 新建目录

    e. 更改目录属性

    [root@TS-DEV Company]# chown hradmin.hradmin HR
    [root@TS-DEV Company]# chown fmadmin.fmadmin FM
    [root@TS-DEV Company]# chown tsadmin.tsadmin TS    
    [root@TS-DEV Company]# chown proadmin.proadmin PRO    
    [root@TS-DEV Company]# chown csadmin.csadmin CS      
    [root@TS-DEV Company]# chown admin.admin Share  

    [root@TS-DEV Company]# cd Share/
    [root@TS-DEV Share]# chown hradmin.hradmin HR && chown fmadmin.fmadmin FM && chown tsadmin.tsadmin TS && chown proadmin.proadmin PRO && chown csadmin.csadmin CS && chown admin.admin Tools
    [root@TS-DEV Share]# chmod 1775 HR FM TS PRO CS

    f. 配置samba如下:

    复制代码
    #======================= Global Settings =====================================
    
    [global]
    
    # ----------------------- Network Related Options -------------------------
    #
    # workgroup = NT-Domain-Name or Workgroup-Name, eg: MIDEARTH
    #
    # server string is the equivalent of the NT Description field
    #
    # netbios name can be used to specify a server name not tied to the hostname
    
            workgroup = WORKGROUP
            server string = David Samba Server Version %v
            netbios name = DavidSamba
    
    # --------------------------- Logging Options -----------------------------
    #
    # Log File let you specify where to put logs and how to split them up.
    
            log file = /var/log/samba/log.%m
            max log size = 50
    
    # ----------------------- Standalone Server Options ------------------------
    #
    # Scurity can be set to user, share(deprecated) or server(deprecated)
    
            security = user
            passdb backend = tdbsam
    
    #============================ Share Definitions ==============================
    
    [HR]
         comment = This is a directory of HR.
         path = /Company/HR/
         public = no
         admin users = hradmin
         valid users = @hradmin
         writable = yes
         create mask = 0750
         directory mask = 0750
     
    [FM]
         comment = This is a directory of FM.
         path = /Company/FM/
         public = no
         admin users = fmadmin
         valid users = @fmadmin
         writable = yes
         create mask = 0750
         directory mask = 0750
     
    [TS]
         comment = This is a directory of TS.
         path = /Company/TS/
         public = no
         admin users = tsadmin
         valid users = @tsadmin
         writable = yes
         create mask = 0750
         directory mask = 0750
     
    [PRO]
         comment = This is a PRO directory.
         path = /Company/PRO/
         public = no
         admin users = proadmin
         valid users = @proadmin
         writable = yes
         create mask = 0750
         directory mask = 0750
     
    [CS]
         comment = This is a directory of CS.
         path = /Company/CS/
         public = no
         admin users = csadmin
         valid users = @csadmin
         writable = yes
         create mask = 0750
         directory mask = 0750
     
    [Share]
         comment = This is a share directory.
         path = /Company/Share/
         public = no
         valid users = admin,@hradmin,@fmadmin,@tsadmin,@proadmin,@csadmin
         writable = yes
         create mask = 0755
         directory mask = 0755
    复制代码

    g. 测试

    以 hradmin登录系统

    试图访问ts部门文件夹,要求输入用户名及密码

    试图在\\10.0.0.163\Share\TS下新建文件

    在自己部门所属文件夹下新建成功

    其他测试自行完成。

    配置完毕。

    五、将共享目录映射成Windows的驱动器

    将Samba共享的public目录,映射成 Windows 的一个驱动器盘符:

    a. 右击“计算机”-->“映射网络驱动器”

    b. 在文件夹栏输入共享地址及路径,点击“完成”输入用户名和密码

    c. 映射完毕后,打开资源管理器可以看到映射的共享目录

    Tips:

    在windows下通过“\\ip地址”的方式访问其它文件资源时,一般第一次需要输入密码,以后就无需输入密码直接登陆了,那么如果我们要切换到其它Samba用户怎么办呢?可以在windows下执行如下指令实现:
    首先通过开始-->运行-->cmd 输入:“net use”命令查看现有的连接,然后执行“net use \\Samba服务器IP地址或者netbios名称\ipc$  /del”,删除Samba服务器已经建立的连接。或者执行“net use * /del”将现在所有的连接全部删除。最后,再次执行“\\ip地址”时,就可以切换用户了。

    六、Linux客户端访问操作

    上面介绍了windows客户端访问Samba服务器的操作,那么在Linux作为客户端时,查看其它Linux Samba服务器共享的文件时,应该如何操作呢?

    这就要用到smbclient这个工具,系统默认自带了这个命令,Smbclient常见用法介绍如下:

    1、查看Samba服务器的共享资料

    # smbclient  –L  //Samba服务器的ip地址  -U  Samba用户名

     “-L”即为list的含义,“-U”是user的意思,如果Samba服务器是无密码访问的话,可以省略“-U  Samba用户名”。

    例如:samba需要密码登陆时,查看共享方法如下:

    # smbclient  -L //10.0.0.163/public –U david

    Samba无密码访问时,执行如下命令:

    # smbclient  -L //10.0.0.163/public

    password: 直接回车即可。

    2、登陆Samba服务器

    如果需要在Linux客户端登陆Samba服务器,用法如下:

    # smbclient  //Samba服务器的ip地址  -U  Samba用户名

    请看下面执行的操作:

    # smbclient //10.0.0.163/public -U david

    smb: \> ?                     //在这里输入?即可查看在smb命令行可用的所有命令。

    操作过程与登陆FTP服务器很类似,登陆Samba服务器后,就可以进行文件的上传与下载,如果有足够的权限,还可以进行修改文件操作。

    此外,Samba服务器共享出来的文件还可以在Linux客户端进行挂载,这就要用到mount命令,如下所示:

    # mount -t cifs -l //10.0.0.163/public /mnt/samba/

    七、Samba Web管理工具 SWAT

    SWAT(Samba WEB Administration Tool) 是通过浏览器对 Samba 进行管理的工具之一。通过 SWAT,可以在 Samba 允许访问范围内的客户端,用浏览器对服务端的 Samba 进行控制。在线文档的阅览、smb.conf 的确认和编辑,以及密码的变更、服务的重启等等都可以通过 SWAT 来完成,它的直观让 Samba 变得温和化,对那些不喜欢文本界面管理服务器的朋友来说,是一个强大的工具。

    swat工具嵌套在xinetd超级守护进程中,要通过启用xinetd进程来启用swat。因此要先安装xinetd工具包,然后安装swat工具包。上面已经安装过samba-swat-3.5.10-125.el6.x86_64,这里不再赘述。

    1、配置swat

    因为swat是xinetd超级守护进程的一个子进程,所以swat工具配置文件在xinetd目录中。我们要设置swat配置文件,开启此子进程,以便在启用xinetd进程是来启用swat。swat配置文件在/etc/xinetd.d目录中。

    打开并编辑 /etc/xinetd.d/swat

    复制代码
    # default: off
    # description: SWAT is the Samba Web Admin Tool. Use swat \
    #              to configure your Samba server. To use SWAT, \
    #              connect to port 901 with your favorite web browser.
    service swat
    {
            port            = 901                    //swat默认使用tcp的901端口, 可以修改
            socket_type     = stream                 //通过web来配置samba, 默认使用root账号进入, 可以修改成其他的系统用户
            wait            = no
            only_from       = 127.0.0.1              
            only_from       = 10.0.0.0               //添加此行, 将“only_from=127.0.0.1”改成“only_from=10.0.0.0”, 只允许内网范围对SWAT进行访问
            user            = root
            server          = /usr/sbin/swat         //swat的执行程序默认在/usr/sbin目录下
            log_on_failure  += USERID
            disable         = yes                    //将“disable=yes”改成“disable=no”, 这样swat子进程就可以随xinetd超级守护进程一起启动了
    }
    复制代码

    2、启动 swat

    因为swat是xinetd的子进程,所以只要启用了xinetd,那么swat也就会伴随xinetd启动。

    3、打开 swat

    在服务端启动 swat后,我们就可以通过 swat允许范围内的客户机的浏览器中,通过 http://服务器的内网IP:901 来访问服务端的 swat了,输入 root用户的用户名及密码进入 swat的管理首页,如下所示:

    swat管理中心的首页

    通过 swat管理 Samba 与直接修改 smb.conf 的方式,在本质上并无差异,但通过浏览器访问的方式,可以使 Samba 的管理更加温和化,更加适用于不擅长使用文本界面、直接修改配置文件的朋友。

    4、通过swat配置samba

    在swat页面我们可以看到有8个选项,每个选项可以配置samba的不同功能。

    HOME:Samba相关程序及文件说明。

    GLOBALS:设置Samba的全局参数。即smb.conf文件的[global]。

    SHARES:设置Samba的共享参数。

    PRINTERS:设置Samba的打印参数。

    WIZARD:Samba配置向导。

    STATUS:查看和设置Samba的服务状况。

    VIEW:查看Samba的文本配置文件,即smb.conf。

    PASSWORD:设置Samba用户,可以修改密码,新建删除用户。

    详细设置请自行查阅资料,以下仅供参考:

    http://yuanbin.blog.51cto.com/363003/117105

    至此,Samba服务器的所有配置完成。

    展开全文
  • 用户与组管理、NTFS权限用户与组管理用户SID本地用户默认有内置账户:查看用户管理:计算机右键管理Windows用户与组管理的操作练习NTFS权限:用户组与NTFS权限实验实验一:实验二:实验三 用户与组管理 用户 账户=...

    一、用户与组管理

    用户

    账户=账号/用户名+密码
      每个账户有自己唯一的SID
      账户密码存储位置: c:\windows\system32\config\SAM 暴力破解/撞库
      windows系统上,默认密码最长有效期42天
    每个用户账号都有自己配置文件

    • win7/win2008 c:\用户
    • xp/win2003 c:\Documents and Settings

    SID

    不同的账户拥有不同的权限!
    为不同的账户赋权限,也就是为不用账户的SID赋权限!
    查看sid值:whoami /user
    administraotr的SID:S字符串+500(UID)

    本地用户默认有内置账户:

    1)给人使用的账户:管理员账户administrator、来宾账户guest
    2)计算机服务组件相关的系统账号
    system 系统账户 == 权限至高无上 (等于Linux的root)
    local services 本地服务账户 = 权限等于普通用户
    network services 网络服务账户 = 权限等于普通用户

    查看用户管理:计算机右键管理

    用户管理 备注
    net user 查看用户列表
    net user 用户名 密码 更改密码
    net user 用户名 密码 /add 添加用户
    net user 用户名 /active:no no禁用用户/yes激活用户
    net user 用户名 /del 删除用户
    组管理 备注
    net localgroup 查看组列表
    net localgroup 组名 查看组成员
    net localgroup 组名 /add 添加组
    net localgroup 组名 用户名 /add 添加成员到组
    net localgroup 组名 用户名 /del 从组中踢出成员
    net localgroup 组名 /del 删除组

    组的意义:简化权限的的赋予
    内置组:内置组的权限默认已经被系统赋予。

    1. administrators :管理员组
    2. guests: 来宾组
    3. users: 普通用户组,默认新建用户都属于该组
    4. network 网络配置组
    5. print 打印机组
    6. Remote Desktop 远程桌面组

    Windows用户与组管理的操作练习

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    二、NTFS权限:

    (文件或文件夹右键属性–安全–ACL)ACL用来做过滤

    • 1.文件系统类型:
      NTFS:支持单个文件大于4个G,支持文件权限设置
      FAT32:不支持单个文件大于4G,不支持文件权限设置

    • 2.取消权限继承:
      作用:取消后,可以任意修改权限列表了。
      方法:文件夹右键属性—安全—高级—去掉第一个对号–选择复制即可

    • 3.权限累加:
      当用户同时属于多个组时,权限是累加的!

    • 4.拒绝最大:
      当用户权限累加时,如遇到拒绝权限,拒绝最大!

    • 5.取得所有权:
      默认只有administrator有这个权限!
      作用:可以将任何文件夹的所有者改为administrator

    • 6.强制继承:
      作用:对下强制继承父子关系!
      方法:文件夹右键属性–安全–高级–勾上第二个对号,即可!

    注意:文件复制后,文件的权限会被目标文件夹的权限覆盖,即获得上一级目录的权限

    三、文件共享服务器

    文件共享服务器:(类似于FTP服务器)

    注:

    • ①本地登录时,只受NTFS权限的影响
    • ②在远程登录时,将受共享及NTFS权限共同影响,且取交集!

    创建共享:
    文件夹右键属性-共享-开启共享-设置共享名-设置共享权限
    (先允许everyone完全控制,再根据权限需求在“安全”菜单设置NTFS权限)

    局域网共享协议 cifs

    设置共享 备注
    net share 列出本地所有的共享
    net share 共享名 /del 删除共享

    shutdown -r 重启 shutdown -s 关机
    shutdown -s -t 强制关机
    shutdown -s -t 0 强制立即关机

    共享名
    在这里插入图片描述
    访问共享时,客户机远程访问共享看不到文件本名,只能看到共享名。
    在这里插入图片描述

    隐藏共享

    服务器创建隐藏共享:共享名$
    在这里插入图片描述
    访问隐藏共享: \192.168.1.1\共享名$
    commond+R输入\192.168.1.1远程访问服务器回车后进入共享文件夹
    进入共享文件夹后不会显示隐藏共享文件,需要手动写出来:
    \192.168.1.1\gjjm$ 在这里插入图片描述

    UNC地址

    反斜杠\ 命令行访问法 访问网上邻居,实际上应该称作UNC路径访问法。
    UNC(Universal Naming Convention)通用命名规则,也叫通用命名规范、通用命名约定。 网络(主要指局域网)上资源的完整名称。

    UNC共享,就是网络硬盘的共享。

    符合\\servername\sharename 格式, servername 是服务器名,sharename 是共享资源的名称

    目录或文件的 UNC 名称可以包括共享名称下的目录路径,格式为:\\servername\sharename\directory\filename
    \\文件共享服务器IP在这里插入图片描述
    \\文件共享服务器IP\共享名在这里插入图片描述
    或者conmmond+R打开命令行输入
    在这里插入图片描述

    彻底删除系统隐藏共享的产生——修改注册表

    打开注册表编辑器:regedit
    定位到:
    HKEY_Local_MACHINE\System\CurrentControlSet\Services\LanmanServer\Parameters\
    右键新建REG_DWORD类型的AutoShareServer 键,值为 0

    关闭445服务 共享服务依赖445端口

    commond+R进入 services.msc ,并停止及使用server服务
    在这里插入图片描述


    四、用户组与NTFS权限实验

    实验一:

    实验要求:创建一个文件夹,实现本地登录时,tom用户只能创建新的文件,cat用户只能读取及下载文件。

    实验步骤
    分别创建tom、cat用户。
    在这里插入图片描述
    进入D盘创建文件夹“权限”,右键“属性”选择“安全”菜单,点击添加按钮,输入tom和cat,用分号;隔开,并确定。
    在这里插入图片描述
    删除其他用户和组,仅保留如下3个用户
    在这里插入图片描述
    分别设置tom和cat权限如下:
    在这里插入图片描述
    取消继承
    在这里插入图片描述
    验证:
    Tom能打开文件夹但无法打开访问其中的内容,可以创建文件。
    在这里插入图片描述
    cat能打开并访问内容,但是无法创建也写入无法删除。
    在这里插入图片描述
    在这里插入图片描述

    实验二:

    实验要求:新建用户jack,并将用户jack加入到hr组及IT组,为文件夹jimi设置权限,只允许hr组读取不能创建文件,it组只能创建文件不能读取,使用jack用户登录并访问jimi文件夹,验证jack的权限。

    实验步骤
    分别创建用户jack、组HR、组IT并将jack添加到组HR及IT,并创建文件夹jimi
    在这里插入图片描述在这里插入图片描述
    添加组HR、IT准备设置权限
    在这里插入图片描述
    给HR组设置权限只能读取,给IT组设置权限只能写入
    在这里插入图片描述
    此时组中的jack应同时具备读取与创建文件的权限
    验证:
    可以读取文件,可以创建文件。
    在这里插入图片描述

    实验三

    实验要求:新建用户wxf,并将用户wxf加入到ceo组,且不能从该组中剔除,为文件夹jimi赋权限,要求ceo组可以完全控制jimi文件夹,但wxf不能访问该文件夹。

    实验步骤
    创建用户wxf、组ceo,并将wxf添加到组ceo
    在这里插入图片描述
    在jimi文件的属性下添加wxf、ceo,设置ceo组的权限和wxf用户的权限
    在这里插入图片描述
    验证:
    在这里插入图片描述

    实验四

    删除所有组和用户
    在这里插入图片描述
    在这里插入图片描述
    然后用管理员添加用户,此时可以访问
    在这里插入图片描述

    展开全文
  • SMB文件共享 CIFS全称(Common Internet File System),CIFS文件存储主要作用是实现存储分离。 Samba服务可用于将Linux文件系统作为CIFS/SMB网络文件共享进行共享,将linux中的资源共享出去。 Samba服务的组成...
  • 文件服务器权限管理

    千次阅读 2017-11-27 22:44:00
    我们通常情况下会设置MAP映射盘,把一定的磁盘空间划分出来用于大家放置部门的文件和临时文件,大约是400-500GB的空间,但是由于涉及到部门的协同工作以及数据的安全性,我们就要进行权限管理。在默认情况下,文件...
  • 可以对单个文件或者文件夹设置权限 支持更大的磁盘容量 支持加密与压缩功能 活动目录需要使用NTFS 磁盘配额 获得NTFS文件系统的方式 格式化磁盘 将FAT文件系统转换为NTFS文件系统 convert f: /fs:ntfs ...
  • 总结了一下win7下设置共享文件权限的方法: 一、设置共享文件准备工作: 在控制面板中打开网络和共享中心--》更改高级和共享设置: 在家庭网络和工作网络中选择好:启用网络发现,启用文件和打印机共享 二、共享...
  • 比较同同一分区和不同 NTFS 分区上进行文件复制、移动时文件权限的变化 设置文件加密、压缩 在 NTFS 分区创建文件夹 temp,进入属性页面中的“安全”,删除 Everyone 的权限, 分配某一用户对文件夹 Read 权限以及...
  • 通用权限管理组件

    千次阅读 2010-12-18 08:59:00
    一起学习 ASP.NET C#.NET 通用权限管理组件 使用说明书     <br />             开发单位:技术研发部  编制日期:2010 年10 月...
  • Linux安全体系的文件权限管理

    千次阅读 2010-10-09 10:13:00
    Linux的UGO(User、Group、Other)和ACL(Access Control List,访问控制列表)权限管理方式就是典型的自主访问机制。 Linux支持UGO和ACL权限管理方式,UGO将权限位信息存储在节点的权限中,ACL将权限位信息...
  • Windows中的共享文件和文件服务器

    万次阅读 2018-10-17 11:59:02
    共享文件的设置 默认共享 关闭默认共享 关闭共享服务 共享文件夹权限 文件服务器资源管理器的搭建 文件共享是指主动地在网络上共享自己的计算机文件。一般文件共享使用P2P模式,文件本身存在用户本人的个人...
  • 当前,在企业局域网中,经常在内部服务器上共享文件...但是,由于缺乏对局域网用户访问共享文件管理和控制,使得员工访问共享文件的各种操作行为,如读取、修改、删除、剪切和重命名等无法有效管理和记录,从而一...
  • 服务器文件共享权限设置方法说明

    万次阅读 2009-12-10 21:35:00
    然而普通的共享方式对于很多信息是不安全的,因此我们需要对共享权限进行控制,让不同身份的用户对文件夹、文件具有不同的访问权限。下面就是设置权限访问的具体实施方法:一、需求分析1、为每个部门建立一个...
  • Linux创建和挂载NFS网络共享文件

    千次阅读 2018-03-02 10:56:03
    一、软件安装: 平台:Redhat/CentOS rpcbind ——负责NFS的...nfs ——控制共享哪些文件权限管理 # yum install nfs-utils 平台:Deepin Linux nfs-kernel-server ——NFS共享服务管理 $ sudo...
  • 防止局域网用户随意复制共享文件、随意将共享文件另存为本地、随意修改共享文件等,已经成为企业共享文件管理的一个重要方面,也是保护单位无形资产和商业机密的一个重要课题,大势至共享文件夹管理软件正是基...
  • 监控共享文件

    千次阅读 2007-08-19 14:26:00
    监控共享文件 由于经费等多种原因的限制,不少办公室的电脑是多人合用的,本地用户经常需要相互共享文件。出于保密等多方面的原因,不少文件往往要求只能查看不能修改,或者只允许特定用户修改或查看,此时使用一般...
  • Linux目录,文件,权限管理

    千次阅读 2013-04-08 11:58:31
    Linux文件和目录管理 目录和路径 相对路径:相对于当前工作目录的路径 绝对路径:从根目录写起的,全路径   目录的相关操作 . 代表当前目录 .. 代表上层目录 - 代表前一个工作目录 ~ 代表当前使用者家目录 ~...
  • Windows下局域网文件服务器、局域网下文件共享文件管理、简单方便小巧 FtpServer.exe。 1.FtpServer文件服务器主界面 启动时候指定身份验证方式,可以设置密码也可以开放直接访问; 指定文件服务器的访问...
  • mac linux 共享文件

    千次阅读 2018-09-28 15:33:19
    痛点 最近需要在Mac上远程连接一台Linux服务器,管理一些文件。不仅需要进行常规的本地文件操作,还需要上传、下载、编辑...它重新实现了SMB/CIFS协议,可以在各个平台共享文件和打印机。 1991年,还是大学生的And...
  • 权限管理

    千次阅读 2017-12-29 20:24:07
    关于权限菜单的设计 ... 1.... 权限管理往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断“Who对What(Which)进行How的操作”的逻辑表达式是否为真。针对不同的应用,需要
  • 文章目录说明服务端检查共享文件基本配置检查所属组检查防火墙检查依赖服务检查检查guest用户名是否被禁用安全策略检查凭据添加开通GUEST用户,然后修改注册表上面方法全部试过依然不行看这客户端操作验证网络正常...
  • 对于部分文件夹(ProgramData),管理权限创建的文件是不能以非管理权限修改和删除的。 然而,一个进程运行之后启动的子进程,会继承当前进程的 UAC 权限;于是有时我们会有降权运行的需要。本文将介绍 Windows ...
  • 如果你不幸将软件安装在...提示:“你没有权限打开该文件,请向文件的所有者或管理员申请权限。”       此时你打开了文件的属性,修改了文件的所有应有权限,如下:   &...
  • Spring Boot Shiro 权限管理

    万次阅读 多人点赞 2016-01-14 23:44:08
    本来是打算接着写关于数据库方面,集成MyBatis的,刚好赶上朋友问到Shiro权限管理,就先总结下发出来了。使用Shiro之前用在Spring MVC中,是通过XML文件进行配置。 既然现在在写Spring Boot的帖子,就将Shiro应用到...
  • 在局域网中我们常常需要在服务器上共享一些文件供局域网用户使用,本文以图文并茂的方式汇总了Windows 2003 server共享文件设置的一些方法技巧。用户既可以设置需要用户名和密码并且访问权限不同的共享文件访问设置...
  • Linux文件权限与目录配置

    千次阅读 2016-06-21 21:19:39
    而为了让各个用户具有较保密的文件数据,因此文件权限管理变得很重要。Linux一般将文件可存取访问的身份分为3个类别,分别是owner,group,others,且3种身份各有read,write,execute等权限。 用户与用户组 文件...
  • Vue:细粒度动态权限管理解决方案

    千次阅读 2018-04-22 12:13:32
    权限管理是每个后台管理系统都需要面对的问题。细粒度动态权限管理更是一个不太好啃但是必须解决的硬需求。本文记录了一种基于角色的动态权限管理方法,实现方法不是很优雅,如果以后发现了更优雅的方法再来更新。该...
  • Windows 共享文件访问日志

    千次阅读 2017-11-16 17:12:00
    1、环境介绍 服务器server2012: AD01.test.cn (域管理员:administrator) 客户端win7:testpc1.test.cn (域账户: sz1) ...服务器创建共享目录sharetest,授权Domain Users完全访问权限 2、步骤 a.server...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 154,108
精华内容 61,643
关键字:

共享文件权限管理软件