10、用户权限管理(基本权限及特殊权限SUID)

10.1 基本权限

10.1.1 权限分类

    权限分为r, w, x

    1、对于文件来说:

        r:可读,可以使用类似cat等命令查看文件内容;

        w:可写,可以编辑或删除此文件;

        x: 可执行,eXacutable,可以命令提示符下当作命令提交给内核运行;

    2、对于目录来说:

        r: 可以对此目录执行ls以列出内部的所有文件;

        w: 可以在此目录创建文件;

        x: 可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息;

    3、rwx和数值对照关系

        rwx:

            r--:只读

            r-x:读和执行

            ---:无权限

        0 000 ---:无权限

        1 001 --x: 执行

        2 010 -w-: 写

        3 011 -wx: 写和执行

        4 100 r--: 只读

        5 101 r-x: 读和执行

        6 110 rw-: 读写

        7 111 rwx: 读写执行

        755:rwxr-xr-x

    4、对应三类用户:

        u: 属主  g: 属组 o: 其它用户

10.2 特殊权限(passwd中显示s的权限)

    10.2.1 特殊权限分类

    1、SUID:

         运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者;

            chmod u+s FILE

            chmod u-s FILE

        如果FILE本身原来就有执行权限,则SUID显示为s;否则显示S;

    2、SGID:

        运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者所属的基本组;

            chmod g+s FILE

            chmod g-s FILE

        组develop team,用户 hadoop, hbase, hive

        在/tmp/project/文件夹中给其分配SGID权限,则develop team里的所有用户都可以更改删除任何文件

                develop

    3、Sticky:

     在一个公共目录,每个都可以创建文件,删除自己的文件,但不能删除别人的文件;

        chmod o+t DIR

        chmod o-t DIR

    4、组合及对应数字

        SUID SGID Sticky

        000: 

        001: 

        ...

        110: 

        111:

        chmod 5755 /backup/test(5表示特殊权限)

        umask 0022

        umask 

10.3 chown:

     改变文件属主(只有管理员可以使用此命令)

    # chown USERNAME file,...将后面文件的属主改为指定用户

        -R: 修改目录及其内部文件的属主

        --reference=/path/to/somefile file,...将文件的属主属组更改为和reference对应文件一样

    # chgrp GRPNAME file,...更改文件属组为指定的group

        -R

        --reference=/path/to/somefile file,…

        [root@Daniel-R480 tmp]# chown apache hi

        [root@Daniel-R480 tmp]# ll

        total 12

        -rw-r--r-- 1 apache root    0 Jun  4 18:30 hi

        -rwx------ 1 root   root 4733 Jan 29  2019 ks-script-5qnQJp

        -rwx------ 1 root   root  836 Jan 29  2019 ks-script-QveTmi

        -rw------- 1 root   root    0 Jan 29  2019 yum.log

        [root@Daniel-R480 tmp]# chown --reference=./yum.log ./hi

        [root@Daniel-R480 tmp]# ll

        total 12

        -rw-r--r-- 1 root root    0 Jun  4 18:30 hi

        -rwx------ 1 root root 4733 Jan 29  2019 ks-script-5qnQJp

        -rwx------ 1 root root  836 Jan 29  2019 ks-script-QveTmi

        -rw------- 1 root root    0 Jan 29  2019 yum.log

        [root@Daniel-R480 tmp]#

    chown USERNAME:GRPNAME file,…

    chown USERNAME.GRPNAME file,…

        [root@Daniel-R480 tmp]# ll

        total 12

        -rw-r--r-- 1 root root    0 Jun  4 18:30 hi

        -rwx------ 1 root root 4733 Jan 29  2019 ks-script-5qnQJp

        -rwx------ 1 root root  836 Jan 29  2019 ks-script-QveTmi

        -rw------- 1 root root    0 Jan 29  2019 yum.log

        [root@Daniel-R480 tmp]#

        [root@Daniel-R480 tmp]#

        [root@Daniel-R480 tmp]# chown apache:apache ./hi

        [root@Daniel-R480 tmp]# ll

        total 12

        -rw-r--r-- 1 apache apache    0 Jun  4 18:30 hi

        -rwx------ 1 root   root   4733 Jan 29  2019 ks-script-5qnQJp

        -rwx------ 1 root   root    836 Jan 29  2019 ks-script-QveTmi

        -rw------- 1 root   root      0 Jan 29  2019 yum.log

        [root@Daniel-R480 tmp]# chown :root /tmp/hi

        [root@Daniel-R480 tmp]# ll

        total 12

        -rw-r--r-- 1 apache root    0 Jun  4 18:30 hi

        -rwx------ 1 root   root 4733 Jan 29  2019 ks-script-5qnQJp

        -rwx------ 1 root   root  836 Jan 29  2019 ks-script-QveTmi

        -rw------- 1 root   root    0 Jan 29  2019 yum.log

        [root@Daniel-R480 tmp]# chown --reference=/tmp/yum.log ./hi

        [root@Daniel-R480 tmp]# ll

        total 12

        -rw-r--r-- 1 root root    0 Jun  4 18:30 hi

        -rwx------ 1 root root 4733 Jan 29  2019 ks-script-5qnQJp

        -rwx------ 1 root root  836 Jan 29  2019 ks-script-QveTmi

        -rw------- 1 root root    0 Jan 29  2019 yum.log

        [root@Daniel-R480 tmp]#

10.4 chmod: 

    修改文件的权限

    1、修改三类用户的权限:

        chmod MODE file,...

            -R修改目录及其内部文件的权限

            --reference=/path/to/somefile file,…

        [root@Daniel-R480 tmp]# ll

        total 12

        -rw-r--r-- 1 root root    0 Jun  4 18:30 hi

        -rwx------ 1 root root 4733 Jan 29  2019 ks-script-5qnQJp

        -rwx------ 1 root root  836 Jan 29  2019 ks-script-QveTmi

        -rw------- 1 root root    0 Jan 29  2019 yum.log

        [root@Daniel-R480 tmp]# chmod 777 ./hi

        [root@Daniel-R480 tmp]# ll

        total 12

        -rwxrwxrwx 1 root root    0 Jun  4 18:30 hi

        -rwx------ 1 root root 4733 Jan 29  2019 ks-script-5qnQJp

        -rwx------ 1 root root  836 Jan 29  2019 ks-script-QveTmi

        -rw------- 1 root root    0 Jan 29  2019 yum.log

        [root@Daniel-R480 tmp]#

    2、修改某类用户或某些类用户权限:

        u,g,o,a

        u: 属主  g: 属组 o: 其它用户

        chmod 用户类别=MODE file,...

    3、修改某类用户的某位或某些位权限:

        u,g,o,a

        chmod 用户类别+|-MODE file,…

        [root@Daniel-R480 ~]# chmod g-r inittab

        [root@Daniel-R480 ~]# chmod 777 inittab

        [root@Daniel-R480 ~]#

练习:

    1、新建一个没有家目录的用户openstack;

    # useradd -M openstack

    2、复制/etc/skel为/home/openstack;

    # cp -r /etc/skel /home/openstack

    3、改变/home/openstack及其内部文件的属主属组均为openstack;

    # chown -R openstack:openstack /home/openstack

    4、/home/openstack及其内部的文件,属组和其它用户没有任何访问权限

    # chmod -R go= /home/openstack

    chmod -R 700 /home/openstack

    [root@Daniel-R480 ~]# useradd -M openstack

    [root@Daniel-R480 ~]# cp -r /etc/skel /home/openstack

    [root@Daniel-R480 ~]# chown -R openstack:openstack /home/openstack

    [root@Daniel-R480 ~]# chmod -R go= /home/openstack

    [root@Daniel-R480 ~]# ll /home/openstack/

    total 0

    su - openstack(测试创建是否正常)

    实验:手动添加用户hive, 基本组为hive (5000),附加组为mygroup

    无密码无法登陆,但是可以用管理员账户su过去

    opensll:创建密码的密文的命令

    [root@Daniel-R480 ~]# groupadd -g 5000 hive

    [root@Daniel-R480 ~]# groupadd mygroup

    [root@Daniel-R480 ~]# useradd -g hive -G mygroup -M hive

    [root@Daniel-R480 ~]# su - hive

    su: warning: cannot change directory to /home/hive: No such file or directory

    -bash-4.2$

10.5 umask

    umask:遮罩码

        666-umask:创建文件的默认权限

        777-umask:创建文件夹的默认权限

    [hive@Daniel-R480 ~]$ umask

    0002

    [hive@Daniel-R480 ~]$ umask 0022

    [hive@Daniel-R480 ~]$ touch hellosa

    [hive@Daniel-R480 ~]$ ll

    total 0

    -rw-rw-r-- 1 hive hive 0 Jun  7 09:50 hellosa

    [hive@Daniel-R480 ~]$

    文件默认不能具有执行权限,如果算得的结果中有执行权限,则将其权限加1;

    例:umask: 023

        文件权限:666-023=643 X 

        目录权限:777-023=754

    [hive@Daniel-R480 ~]$

    [hive@Daniel-R480 ~]$ umask 023

    [hive@Daniel-R480 ~]$ touch hellosa

    [hiv1e@Daniel-R480 ~]$ mkdir test

    [hive@Daniel-R480 ~]$ ll

    total 0

    -rw-r--r-- 1 hive hive    0 Jun  7 09:52 hellosa

    drwxr-xr-- 1 hive hive 4096 Jun  7 09:52 test

    [hive@Daniel-R480 ~]$

    用户重新登陆以后umask会重新配置,恢复默认

10.6 SHELL

    站在用户登录的角度来说,SHELL的类型:

    1、登录式shell:(完全切换)

        正常通过某终端登录

        su - USERNAME 

        su -l USERNAME

    2、非登录式shell:(半切换)

        su USERNAME

        图形终端下打开命令窗口

        自动执行的shell脚本

10.7 bash的配置文件:

    1、全局配置文件

        /etc/profile, /etc/profile.d/*.sh, /etc/bashrc

    2、个人配置文件

        ~/.bash_profile, ~/.bashrc

        用户登录时优先使用个人配置文件

    3、profile类的文件:

        设定环境变量

        运行命令或脚本

    4、bashrc类的文件:

        设定本地变量

        定义命令别名

    5、shell如何读取配置文件?

        登录式

        /etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc

        非登录式

        ~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh

    设置用户登录时显示hello

</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;[root@Daniel-R480&nbsp;~]#&nbsp;vim&nbsp;./.bash_profile</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;[root@Daniel-R480&nbsp;~]#&nbsp;su&nbsp;-&nbsp;root</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;Last&nbsp;login:&nbsp;Mon&nbsp;Jun&nbsp;&nbsp;7&nbsp;10:03:01&nbsp;CST&nbsp;2021&nbsp;on&nbsp;tty1</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;hello</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;[root@Daniel-R480&nbsp;~]#</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>#&nbsp;.bash_profile</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>#&nbsp;Get&nbsp;the&nbsp;aliases&nbsp;and&nbsp;functions</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>if&nbsp;[&nbsp;-f&nbsp;~/.bashrc&nbsp;];&nbsp;then</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.&nbsp;~/.bashrc</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>fi</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>#&nbsp;User&nbsp;specific&nbsp;environment&nbsp;and&nbsp;startup&nbsp;programs</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>PATH=$PATH:$HOME/bin</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>export&nbsp;PATH</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>echo hello</p>
<!-- /wp:paragraph -->

<!-- wp:paragraph -->
<p>

bash: 脚本解释器

Comments Closed.