zoukankan      html  css  js  c++  java
  • Linux用户权限管理

    Linux系统中将文件或目录分为三种权限:可读、可写、可执行

    三种权限对应这个三个身份,三个身份分别为owner(所有者)、group(和所有者同组的用户)others(其他用户)

    - rw- --- ---. 1 root root    1257 Mar 13 03:32 anaconda-ks.cfg

    1代表硬链接的数量

    这里的root为owner(即登陆的用户),只不过root是超级管理员身份,拥有所有的执行权限,但如果换用户的话,该用户对anac这个文件的权限只有rw,没有x。

    rw-对应着root

    这里的root为group(即为与登陆的用户在同一组),他的权限是不能读取,不能写入,不能执行。

    ---对应着root

    这里的空白为others(除去已经登录的用户、超级管理员root、附加组里的用户),这个others既不能读取,也不能写入,更不能执行。

    ---对应着    

    一、权限的设置(通过对文件或目录从而对对应的身份进行权限的设置,此设置只是说相应的权限虽然改变了,但只是对这个文件或目录的权限改变了,而不是对所有的文件或目录的权限改变)

    chmod命令中需要用到的选项

    u:代表owner(当前登录用户)

    g:代表group(当前登录用户的同组用户)

    o:代表others(其他用户)

    a:代表all(所有人)

    如果在设置权限的时候不指定给谁设置,则默认给所有用户设置

    权限字符

    r:读

    w:写

    x:执行

    -:没有权限

    权限的分配方式

    +:增加当前权限

    -:删除当前权限

    =:将权限设置成具体的值(只能结合字母的形式使用)

    整体命令

    -R 用法

    chmod -R  #当文档的形式是目录的形式

    比如说,我现在的登录用户是root(超管),有一个“1”文件,他的详细信息如下:

    - rw- r-- r-- 1 root root    0  3月  15  14:40  1

    文件1对应登录用户root的权限为rw-

    文件1对应登录用户root的同组用户的权限为r--

    文件1对应其他用户的权限为r--

    现在我要给登录用户root的同组用户增加可写的权限,让其他用户不能查看文件1,该如何设置,格式如下

    chmod g+w,o-r 1

    chmod是对从单个文件对不用身份的用户进行改变权限

     其实还有其他的表示方式,数字形式

    读 = r = 4

    写 = w = 2

    执行 = x = 1

    没有任何权限 = - = 0

    比如777 的意思是,当前登录用户具有可读、可写、可执行权限,跟当前登录用户同组的用户也具有可读、可写、可执行权限,其他用户也具有这三种权限。

    Linux出于安全考虑,设置了一个umask管控,他的数值为022,创建普通文件时,他会自动减去这个022,就是说666-022=644,所以一般的普通文件的权限为644,而创建普通目录时,则是777-022=755,一般普通目录的权限为755。

    属主和属组的设置

    命令为chown:更改文档的所属用户(此用法只对执行的文件或目录生效)

    对目录操作时需要加-R,对文件操作时不需要加-R(也是递归设置,对目录里的全部文件生效)

    -R 

    改变此文件的属主和属组

    chown 新的属主:新的属组 文件名   

    改变此文件的属主

    chown 新的属主 文件名             

    改变此文件的属组

    chown 新的属主: 文件名  

    改变此文件的属主,自动继承这个用户的所有的组

    chown 新的属主: 文件名  

    文件的特殊权限

    特殊权限有两种:suid、sgid、sbit

    suid:只能设置在二进制可执行程序上面,什么是二进制可执行程序,比如ls、cat、more、less,命令就是二进制可执行程序,给他设置成suid权限后,其他用户在执行所设置的命令后,他就会以属主的身份执行这个命令,虽然他的权限当中没有执行这个命令的权限。

    如何设置:先查看命令的绝对路径,其次 ls -l `which 命令`:意思是获取这个命令路径的详细信息,为的是查看此命令对应用户的权限。

    chmod u+s `which 命令`

    如果命令没有x权限(可执行的权限)时,他会变成大S。意识就是说,在我设置好suid权限时,对应的用户使用设置的命令后,就会变成程序所有者的权限。前提是其他用户要跟root用户在同一组即附加组里。

    撤销suid权限

    chmod u-s `which 命令` 

    sgit:对组设置

    在创建文件的时候,会继承上级目录的所属组。

    chmod g+s 用户名 

    去掉权限。

    chmod g-s 用户名

    sbit:对一个目录设置sbit权限后,只有属主能删掉你这个目录,其他人都删不掉你这个目录,切记,创建公共目录要在根目录下创建。

    首先要知道/tmp是一个公共目录,其他用户可以上传文件到这个目录里,但是只有上传者可以删除这个文件,其他人不行。

    用法:(给此目录设置了sbit权限)

    chmod o+t /要设置的目录名字

    (给此目录减去了sbit权限)

     chmod o-t /要设置的目录名字

    acl的使用(必须在公共文件夹内)

    假如我设置了一个用户,但此用户是其他用户,但我想不想通过改写此文件的其他用户权限来进行设置,怎么办?

    setfacl -m u:用户名:权限 要设置的文件名

    即可查看每个不同用户对此文件拥有的权限

    getfacl 文件名 :

    即可移除刚设置的用户权限

    setfacl -b 文件名

    即可移除此用户对此文件的权限

    setfacl -x 用户名 文件名

    sudo切换用户来执行我特定的命令

    配置文件

    /etc/sudos

    比如说我创建了一个普通用户,但我想他可以执行reboot、shutdown、init、halt、user管理这些命令,怎么办?

      visudo进入文件,修改第92行处,内容为Allow root to run any commands anywhere,意思为允许root用户在任何地点执行任何命令,修改的话,在此下一行处添加,原格式为:root ALL=(ALL) ALL,

      第一个ALL代表anywhere(代表换一个ip地址,不在我这太电脑上登录),第二个ALL代表root,第三个ALL 代表所有命令。那么我们要添加的格式为,用户名 ALL=(ALL)要设置的命令的绝对路径,而后在设置的用户登录状态下,使用此命令时,格式为sudo 命令,即可实现上述要求。

  • 相关阅读:
    线段树模板
    树状数组练习
    树状数组模板
    codeforce——思维dp
    fib博弈
    寒假总结
    相邻的数互质
    大数取模运算
    阶乘因式分解(一)
    1和0既非素数也非合数
  • 原文地址:https://www.cnblogs.com/shuaiyin/p/10869184.html
Copyright © 2011-2022 走看看