用户身份与文件的权限(普通权限、特殊权限、隐藏权限和文件控制列表ACL)

用户身份

        root用户是存在于所有类UNIX操作系统中的超级用户,它拥有最高的系统所有权。root用户的用户身份号码UID为0,UID相当于用户的身份证号码一样,具有唯一性。管理员用户(超级用户)UID为0;系统用户UID为1~999(不同的系统不一样),Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整个服务器,默认服务会有独立的系统用户负责运行,进而有效控制被破坏的范围(windows是单用户操作系统,一旦该用户被入侵,则有权限对整个环境进行操作),系统用户只是用来管理某一项具体的服务,因此不需要登陆该系统服务器中,其终端解释器为/sbin/nologin,因此该用户被入侵时,并不能提权至整台服务器;普通用户的UID从1000开始(即使前面有闲置的号码),是由管理员创建的日常工作的用户。

        用户组分为基本用户组(-g)和扩展用户组(-G)。用户组身份号码GID可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户被纳入其它用户组,则这个其它用户组称之为扩展用户组。一个用户只能拥有一个基本用户组,可以拥有多个扩展用户组。 用id命令可以查看:用户的用户身份号码(用户名);基本用户组身份号码(基本用户组名);扩展用户组身份号码(扩展用户组名)。在默认情况下,基本用户组名与用户名一样,除非自己指定。

         useradd命令  用于创建新的普通用户,该命令创建的用户目录默认会存放在/home目录中,默认的shell解释器为/bin/bash,而且会默认创建一个与其同名的基本用户组。  -d 指定家目录  -u指定用户的UID  -g指定一个基本用户组(必须是存在的组,没有就要创建)  -G指定扩展用户组   -N不创建与用户同名的基本用户组  -s指定用户的shell解释器   useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe  创建了一个名为linuxprobe的用户   # id linuxprobe  输出为:uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)  此时用户只有基本用户组(名字为linuxprobe),没有扩展用户组    

         groupadd命令  用于创建组(基本或者扩展)    groupadd zsx     创建一个名为zsx的组

         usermod命令  修改用户的属性  用户的信息保存在/etc/passwd文件中,可以直接用文本编辑器来修改其中的用户参数项目,也可以用usermod命令来修改已经创建的用户信息,如用户的UID、基本/扩展用户组、默认终端等。-g 变更基本用户组   -G 变更扩展用户组   -s变更默认终端   -u修改用户的UID     usermod -G root linuxprobe 增加扩展用户组root, 则id查看信息为: uid = 8888 (linuxprobe)  gid=8888  (linuxprobe)  groups=8888(linuxprobe),0(root)   可见其扩展用户组名为root,扩展用户组身份号码为0。这里在次变更: usermod -G zsx linuxprobe  变为:  uid=8888(linuxprobe)  gid= 8888 (linuxprobe)    groups = 8888(linuxprobe) ,1001(zsx)

        passwd命令    passwd命令用于修改用户的密码,格式:passwd  用户名  仅仅只有passwd,则为修改自己的密码。   -l 锁定用户,禁止其登陆   -u解除锁定,允许其登陆   passwd -l luciusvorenus    --stdin 允许通过管道符方式来设定用户密码     echo "zsx" | passwd --stdin luciusvorenus 

        userdel命令 删除用户   userdel linuxprobe 删除该用户,但是家目录/home/linuxprobe会保留下来,可添加-r参数,连同家目录一起删除    -f 强制删除用户

文件权限与归属
        -为普通文件(一般文件、文本文件);d为目录文件;l为软链接文件;b为块设备文件;c为字符设备文件(设备文件为硬件映射形成的文件,如硬盘等);p为管道文件;s为socket文件。

        文件的所有者(所属主)、所属组和其它用户对该文件所拥有的可读(r,4)、可写(w,2)和可执行(x,1)等权限。对目录文件来说,可读表示能够读取目录内的文件列表;可写表示能够在目录内新增、删除和重命名 文件;可执行表示能够进入该目录。 文件的权限表示:rwxrw-r--  用数字表示则为: 764     -rwxr--r--. 1 root root 206 Sep 29 21:24 ex.sh    该文件为普通文件,所属主(所有者)为root用户,拥有7权限;所属组为root,拥有4权限;其他用户拥有权限4。所属主前面的数字1代表该文件的硬链接数(即实际指针的文件个数,软链接不算)为1个。该文件的磁盘占用大小为206个字节,最后一次修改的时间为9月29日的21:24分,文件的名称为ex.sh。

SUID特殊权限位(u+s)
        SUID、SGID和SBIT的特殊权限位,是一种对文件进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。SUID拥有权限4,SGID拥有权限2,SBIT拥有权限1。rwsrwSrw-用数字表示为:其一般权限为rwxrw-rw-,即为766,载加上特殊权限,则为6766。第一个6为4+2。SUDI特殊权限位仅对拥有执行权限的二进制程序有效,即当用户执行该二进制程序时,可以临时拥有该二进制程序所属主(所有者)的身份。对于/etc/passwd  -rw-r--r--. 1 root root 1926 Sep 29 21:50 /etc/passwd     除了root管理员之外,其余所有用户都只能读取该文件信息,不能修改;对于/etc/shadow(保存了用户的密码)
----------. 1 root root 1990 Sep 29 18:48 /etc/shadow  除了root用户外,其余任何用户都不能读取、修改该文件; 对于passwd命令文件:-rwsr-xr-x. 1 root root 27832 Jan 29  2014 /bin/passwd  该文件是二进制程序文件,所有用户都可以执行该文件,因此任何一个用户执行该文件时,都会临时获得该文件所属主的身份,即root身份,进一步利用该身份可以取修改/etc/shadow和/etc/passwd文件的信息了(把变更的密码信息写到/etc/shadow文件中)。 rwx变为rws  rw-变为rwS  后面一样 rwt  rwT

SGID特殊权限位(g+s)

        SGID特殊权限位实现两种功能:1.让执行者临时拥有属组的权限(身份)(仅对拥有执行权限的二进制程序有效);2.对目录文件进行设置时,在该目录文件中创建的文件自动继承该目录的用户组(只可以对目录设置)。对于/dev/kmem文件(早期的linux系统才会有):cr--r----- 1 root system 2, 1 Feb 11 2017 kmem  该文件为字符设备文件,只有root用户和system组内的用户才可以读取该文件,其余用户不能访问。ps命令文件:    -rwxr-sr-x. 1 bin system 100120 Feb 27  2014 /usr/bin/ps  该文件为二进制程序,当任何一个用户执行该文件时,可以临时获得所属组的身份(system),从而可以读取kmem文件中的信息,获得系统中所有进程的状态信息。利用SGID特殊权限位,可以为一个部门内部所有用户设置一个共享目录,即首先将所有用户划分为一个组,然后设置这个目录的用户组就为该部门成员所在的那个组:# mkdir /tmp/haha       drwxrwxr-x. 2 root root 6  Mar  5 15:46 haha  可以看出该目录文件的用户组为root,则root组内的用户都可以该目录读、写和执行。赋予该目录SGID特殊权限位: chmod g+s /tmp/haha   则:drwxrwsr-x. 2 root root 6 Mar  5 15:46 haha  则root组内任何一个用户在该目录内部创建文件时,创建的文件的所属组都为root,从而该文件能够被组内所有用户访问,即实现了组内用户的共享目录。   注意:在对目录设置SGID权限之前目录内的所有文件的所属组在设置SGID权限后不会发生变化。比如:chown root:bin /tmp/haha   此后,创建的文件的所属组为bin  之前的文件依然为root    在默认情况下,一个用户创建的文件的所属主为该用户,所属组为该用户的基本用户组。一个用户的基本用户组只有该用户一个成员,且默认情况下组名与用户名相同。  当创建或传送一个文件,这个文件的所属主就为执行这个操作的用户。

chmod和chown命令

        chmod命令用于设置一个文件的权限位,包括一般权限和特殊权限。对于文件zs,所有者可读可写可执行,对于所属组可读可写,对于其它用户没有任何权限,即rwxrw----,其对应的数字为760,则:chmod 760 zs  要设置为:rwsrw----,则: chmod 4760 zs chown命令用于设置文件的所有者和所属组。其格式为:chown  所有者:所属组 文件或目录名称   chown bin:root zs  设置zs文件的所有者为bin,所属组为root  
        SUID特殊权限位的设置: chmod  u+s 文件名称(仅对可执行的二进制程序文件有效)
        SGID特殊权限位的设置: chmod  g+s 文件名称(仅对可执行的二进制程序文件有效)
                       chmod  g+s 目录名称(仅对目录文件有效)
        SBIT特殊权限位的设置: chmod  o+t 目录名称
共性:chmod与chown命令在对目录文件进行操作时,加上-R参数表示递归操作,即对目录内所有的文件进行整体操作。不加-R参数,只是对目录进行设置。
u 代表所属主  g代表所属组  o代表其它用户 a代表全部用户, 如 chmod u+x ex.sh 表示对ex.sh文件的所属主增加执行权限(x)。  r w x s t 也可以用字母指明,可以不用数字   chmod +x file 和 chmod a+x file等价。

SBIT特殊权限位(o+t)  仅对目录设置
        对于一个共享目录,在设置了SGID特殊权限位后,该目录及目录内部创建的所有文件的用户组都为该部门成员。为了防止一个人的文件被其他用户删除,则可以设置SBIT特殊权限位。SBIT特殊权限位可以确保用户只能删除自己的文件,不能删除他人的文件(root用户除外),即只能被文件的所有者执行删除操作。 如RHEL7系统中的/tmp为一个共享目录,默认已经设置好了SBIT特殊权限位: drwxrwxrwt. 61 root root 4096 Oct  6 22:35 /tmp     则,在该目录中创建的文件只能够被该文件的所有者和root用户删除,其余人都没有权限删除。 即使该文件的权限最大(777),且目录允许进行读、写和执行,但还是无法删除该文件。
        另外需要注意,一个文件能否被删除不取决于自身的权限,而取决于其所在目录是否有写入权限。如 /tmp/haha目录: drwxr-sr-x. 2 root root 16 Mar  5 16:18 haha  可见对与该文件,只有root用户有写入权限,即新增、重命名和删除目录内的文件,其它任何用户都不能在该目录内部创建、删除或者重命名文件,只能进入该目录和读取该目录内部的文件列表。  chmod 775 haha   则:drwxrwsr-x. 2 root root 6 Mar  5 16:43 haha   则此时root组内成员增加了写权限,而账户zsx为root组内成员,此时zsx用户可以在目录内部新增、重命名和删除文件。   综上,对文件的删除、新增和重命名并不取决于文件本身,而是取决于文件所在的目录。     chmod o+t /tmp/zsx

文件的隐藏权限
        文件被隐藏起来的权限,默认情况下不能被用户察觉。
        chattr命令用于设置(增加或删除)文件的隐藏权限: chattr +参数 filename 增加隐藏权限  chattr -参数  filename 删除隐藏权限    i 无法对文件进行修改(本身无法删除,内容无法修改),对于目录文件,仅能修改其中的子文件内容,不能新建或删除文件。  a 仅允许补充(追加)内容,不能覆盖/删除内容,也不能删除该文件或对文件重命名。     chattr +a zs 此时zs文件所在的目录即使开放了用户可以删除文件的权限,但是该文件依然不能删除,因为设置了隐藏权限。 移出: chattr -a zs      lsattr filename 用于查看文件的隐藏权限  ls命令是无法查看文件的隐藏权限的。

文件访问控制列表ACL
        用于对某个指定的用户(u)或用户组(g)进行单独的权限设置,基于普通文件或者目录文件设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。如果针对目录设置了ACL且采用了-R参数,则目录中的文件会继承其ACL;若针对文件设置了ACL,则文件不再继承其所在目录的ACL。
        setfacl命令 用于设置文件的ACL(文件访问控制列表),对于普通文件采用-m参数即可;对于目录文件若采用-m参数,则仅仅只是对目录文件进行ACL的设置,对目录内的其余文件没有影响(注意,必须清晰目录权限与目录内部文件的权限之间的区别与联系,严格遵守),若采用-Rm参数,则对目录和目录内部所有文件都设置ACL,即对于某个特定的用户或用户组有哪些权限,如果目录内部已经有文件设置了ACL,则该文件不再继承目录的ACL。setfacl -b filename 用于删除对文件已经设置好了的ACL。下面示例:
setfacl -m u:zsx:rx /root 
setfacl -Rm u:zsx:rwx /root/work/      对/root/work目录设置ACL u指定用户 g指定用户组 
getfacl guess.sh         guess.h文件是该目录内部的文件,可见该文件继承了目录的ACL
# file: guess.sh   文件名
# owner: root     所属主
# group: root    所属组
user::rw-    
user:zsx:rwx
group::r--
mask::rwx   有效权限
other::r--
注意:zsx用户要能进入到/root/work目录,还必须对/root目录也要设置ACL(上面第一条),若只是
对/root/work目录进行设置,仍然进入不了该目录。
getfacl /root/
# file: root/
# owner: root
# group: root
user::r-x
user:zsx:r-x
group::r-x
mask::r-x   
other::---
getfacl /root/Desktop/
# file: root/Desktop/
# owner: root
# group: root
user::rwx
group::r-x
other::r-x   可见目录Desktop/并没有继承目录/root的ACL,因为上面没有使用-R参数
setfacl -b /root/
getfacl /root/
# file: root/
# owner: root
# group: root
user::r-x
group::r-x
other::---   可见已经删除了ACL
setfacl -m g:wheel:rwx work/   针对wheel用户组设置权限
getfacl work/
# file: work/
# owner: root
# group: root
user::rwx
group::r-x
group:wheel:rwx
mask::rwx
other::r-x
    getfacl命令 可以查看文件的所属主、所属组、各种权限和ACL权限。如查看/root目录:
getfacl /root/
# file: root/
# owner: root
# group: root
user::r-x  所属主权限
group::r-x  所属组权限
other::---   其它用户权限
如查看/root/work/:
getfacl work/
# file: work/
# owner: root
# group: root
user::rwx
group::r-x
group:wheel:rwx 
mask::rwx    有效权限  
other::r-x

dr-xr-x---+ 17 root root 4096 Mar  5 15:12 /root 采用ls命令可以查看文件是否设置了ACL,.号会变为+号。但是这也不是绝对的,如果文件的ACL是继承了目录的,那么用ls命令查看其属性依然为.号,因此查看一个文件是否设置ACL,最准确的方法是使用getfacl命令。注意:某个用户或用户组的权限并不是只根据ACL配置来决定的,它是由该用户或用户组基本权限与配置的ACL权
限的“与”运算决定的,即other:r-x 与 wheel:rwx = wheel:r-x  即实质上wheel组内的用户对该目录(上面的/root/work/目录)只有读和执行权限。对于有效权限mask:用户或组所设置的权限必须要存在于mask的权限设置范围内才会生效,否则无效。设置mask
的方法: setfacl -m m:w  filenanme  即设置文件filename的有效权限mask为w(写)。

su命令与sudo服务(visudo)
        su命令可以解决切换用户身份的要求。 su与su -是有区别的,前者只是切换了身份,但Shell环境仍然是原来用户的Shell(环境不变);而后者连用户和Shell环境一起切换成新用户身份了。只有切换了Shell环境才不会出现PATH环境变量错误。
        sudo命令可以把特定命令的执行权限赋予给指定用户,这样既可以保证普通用户完成特定的工作,又可以避免密码的泄漏。sudo服务的配置原则:在保证普通用户完成工作的前提下,应当尽量少赋予额外的权限。格式:sudo  命令名称  
        sudo命令具有如下功能:限制用户执行指定的命令;记录用户执行的每一条命令;配置文件/etc/sudoers提供集中的用户管理、权限与主机等参数;验证密码的后5分钟内(默认值)无需再让用户再次验证密码。
        对于/etc/sudoers文件:-r--r-----. 1 root root 4000 Jan 15  2014 /etc/sudoers  可以看出,只有只有管理员用户才可以对该配置文件进行修改,管理员和root组用户可以对该文件查看。        sudo命令文件:---s--x--x. 1 root root 130712 Feb 26  2014 /usr/bin/sudo 该文件具有SUID特殊权限位,即任何用户利用sudo命令都可以临时获得root管理员的身份,从而可以读取和修改配置文件/etc/sudoers。如果担心直接修改配置文件/etc/sudoers会出现问题,也可以使用sudo命令提供的visudo命令来配置用户权
限,该命令在配置用户权限时将禁止多个用户同时修改sudoers配置文件,还可以对配置文件内参数进行语法检查,并在发现参数错误时进行报错。只有root管理员才可以使用visudo命令编辑sudo服务的配置文件。visudo命令配置sudo命令的配置文件/etc/sudoers时,其操作方法与Vim编辑器中用到的方法相同。综上,sudo命令文件的服务配置文件为/etc/sudoers,可以直接进行编辑,也可以使用visudo命令进入编辑。
    sudo -h 列出帮助信息    sudo -l列出当前用户可以执行的命令                                                                                                                         # visudo
    (大约第99行:)
    root               ALL=(ALL)         ALL       //可以再下面接着添加(配置)某个用户的限制命令
谁可以使用  允许使用的主机=(以谁的身份) 可以执行的命令(必须用绝对路径)
   luciusvorenus      ALL=(ALL)       /usr/bin/ls                                                                                                                                                      允许使用的主机: 外部网络或者内部网络登陆进入系统,当采用ALL时,无论是本地还是远程登陆的主机都可以允许使用规定的服务。
以谁的身份:ALL代表可以以任何用户的身份,相当于root。 (ALL)=(root)
如果有多个命令,则命令之间用逗号进行间隔。在进行了以上配置以后,luciusvorenus用户使用:sudo ls命令就相当于root用户使用ls命令了,可以查看/root目录内的内容等(初次使用sudo需要luciusvorenus用户的密码,默认时间为5分钟,5分钟内无需再让用户再次验证密码),如下:
# ls /root
ls: cannot open directory /root: Permission denied
# sudo ls /root
[sudo] password for luciusvorenus: 
anaconda-ks.cfg  Desktop  Documents  Downloads    gongxiang  initial-setup-ks.cfg  Music    Pictures  
Public  Templates  Videos  work                                                                                                                                                                          为了避免用户在输入 sudo 命令 时频繁的验证用户的密码,可以将上面那一行内容改为如下内容:
luciusvorenus      ALL=(ALL)    NOPASSWD:    /usr/bin/ls

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,每个文件都具有权限属性,包括文件的所有者、所属用户组和其他用户权限。除了这些明确的权限之外,还有一些隐含的权限控制文件的访问。 第一个隐含权限是"隐藏权限",也称为特殊权限。它用于给文件或目录添加一些特殊的功能。其中最常见的特殊权限是设置"SUID"和"SGID"位。当一个文件具有SUID设定时,它在执行过程中将暂时获取文件所有者的权限。这对于一些需要用户特权才能执行的程序非常有用。当一个文件具有SGID设定时,它在执行过程中将暂时获取文件所属组的权限。这对于一些需要共享访问权限的目录非常有用。 第二个隐含权限是"粘贴位",也称为"sticky bit"。它主要用于保护目录中的文件免受删除的风险。当一个目录设置了粘贴位时,只有文件的所有者才能删除该文件,其他用户无法删除。这对于一些共享目录非常有用,可以防止其他用户不小心删除其他人的文件。 另外一个隐含权限是"ACL",也称为访问控制列表。它允许用户更细粒度地控制文件的访问权限。通常情况下,文件权限是通过文件所有者、所属用户组和其他用户权限控制的。但是通过ACL,可以为特定的用户用户组提供特定的权限,覆盖了默认的权限设置。 总之,Linux文件的隐含权限包括隐藏权限(如SUID、SGID)、粘贴位和ACL。这些隐含权限可以提供更灵活和安全的文件访问控制,允许用户根据需要设置特殊权限

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值