• 账户与安全


    linux操作系统中的组分为基本组和附加组,一个用户同意时刻仅能加入一个基本组,但可以同时加入多个附加组。默认在创建用户时,系统默认会自动创建同名的组,并设置用户加入该基本组中 

    1. useradd

    例子:

    1)创建普通账户Frank,以及对应的组

           useradd Frank

    2)创建普通账户admin,全名为administrator,账户家目录为/home/admin,账户失效日期为2017/12/24,账户基本组为root,附加组为bin,adm,mail

           useradd -c administrator -d /home/admin -e 2017-12-24 -g root -G bin,adm,mail admin

    3)创建无法登陆系统且没家目录的用户user2

          useradd -s /sbin/nologin -M user2

    2. groupadd--创建组账户

        groupadd tom  #创建tom组

        groupadd -g 1000 jerry  #创建GID为1000的组jerry

    3. id--显示账户及组信息

        id root  #查看root账户及相关组信息

    4. passwd

        -l:锁定账户,例如passwd -l tom,仅root可用此项

        --stdin:从文件或管到读取密码,例如echo "1234" | passwd --stdin tom(ubuntu不能用)

        -u:解锁账户

        -d:快速清空账户密码,例如passwd -d tom,这样无密码也可登陆系统,仅root可用此项

    5. usermod

        

        例子:

         usermod -d /home/tomcat tom  #修改tom的家目录为/home/tomcat,此目录必须存在

         usermod -e 2018-1-1 tom

         usermod -g mail tom  #修改账户tom的基本组为mail, 追加用户到组中,usermod -aG mail tom, 把tom用户加入mail组中

         usermod -s /bin/bash user2  #修改user2登陆的shell为bash

         usermod -u 1001 tom  #修改tom的UID为1001

    6. userdel,groupdel

        userdel tom  #删除账户tom,但该账户的文件不删除

        userdel -r tom  #删除账户tom,并删除相应的家目录

        groupdel jerry  #删除组jerry

    7. chmod--修改文档属性

        --reference=FILE  #根据参考文档设置权限

        -R  #递归将权限应用到所有子目录与子文件

        chmod命令参数中,u代表所有者,g代表所属组,o代表其他用户,a代表所有人

        例如:

        1)chmod u=rwx,g=rwx,o=rwx test.log

        2)chmod a=rw test.log

        3)chmod g-x,o-wx test.log

        4)chmod 755 /home

        5)chmod --reference=test.log test1.log  #以test.log的标准修改test1.log的权限。

    8. gpasswd

            -a:添加用户到组; -d:从组删除用户; -A:指定管理员; -M:指定组成员和-A的用途差不多; -r:删除密码; -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组。

        例子:

       1) gpasswd admin  #给admin组设置组密码

        设置个组密码啥用啊?首先要说下newgrp命令,使某个用户暂时切换到其他组。

        例如,newgrp hong admin,此时需要输入密码,这个密码就是gpasswd设置的。之后用户hong建立的文件属组就是admin,而非自身所属组hong

       2)gpasswd -A hong admin  #将账户hong设置为admin组的管理员,这样用户hong就可以执行gpasswd -a mary admin #添加mary到admin组中

        注意:

        1. 添加用户到某一个组,有两种方式

            1). usermod -aG group_name user_name, 如果不加参数a,usermod -G group_name user_name可以添加一个用户到指定的组,但是以前添加的组就会清空掉。

            2). gpasswd -a user_name group_name

        2. 从一个组中删除用户,命令为:gpasswd group_name -d user_name

    9. ACL访问控制权限

        问题:系统的基本权限是针对文档的所有者,所属组或其他账户进行控制的,无法针对某个单独的账户进行控制。

        而使用ACL,可针对单一账户设置文档的访问权限,linux系统使用getfacl查看文档的ACL权限,使用setfacl来设置文档的ACL权限

        setfacl用法:setfacl [选项] [{-m|-x} acl条目] 文件或目录

        选项:-b  删除所有ACL条目

                   -m  添加ACL条目

                   -x  删除指定的ACL条目

                   -R  递归处理所有的子文件和子目录

        例子:

        setfacl -m u:user1:rw test.txt  #添加ACL条目,使用户user1对test.txt文件可读写

        setfacl -m g:user1:r test.txt  #添加ACL条目,使user1组对test.txt文件可读

        setfacl -x g:user1 test.txt  #删除user1组的ACL条目

        setfacl -x u:user1 test.txt  #删除账户user1的ACL条目

        setfacl -b test.txt  #删除所有附加的ACL条目   

    10.  suid,sgid,sbit

          1)suid:它会出现在文件拥有者权限的执行位上,具有这种权限的文件会在其执行时,使调用者暂时获得该文件拥有者的权限

               例如:ls -l /usr/bin/passwd,显示结果为 -rwsr-xr-x 1 root root 42824 Sep 13  2012 /usr/bin/passwd  

               在文件拥有者的执行位上出现的是s而不是x,所以说passwd这个程序是具有SUID权限的。我们在修改用户密码的时候,用的就是passwd命令,而用户密码存储在/etc/shadow。

               那么查看一下/etc/shadow这个文件的权限:ls -l /etc/shadow  ,结果为:-rw-r----- 1 root shadow 1138 Dec 13 20:00 /etc/shadow  

               由上面的结果,我们知道只有root可以往shadow文件中写入数据,其他用户连查看的权限都没有。那我们平时是怎么修改密码呢?没错,就是和SUID有关。当我们使用passwd命令时,就获得了passwd的所有者即root的权限,进而可以对shadow文件进行写入操作。

              使用SUID肯定满足一下几点:         

               1.SUID只对二进制文件有效  

               2.调用者对该文件有执行权  

               3.在执行过程中,调用者会暂时获得该文件的所有者权限  

               4.该权限只在程序执行的过程中有效  

            2)sgid

                 它出现在文件所属组权限的执行位上面,它对普通二进制文件和目录都有效。

                 当它作用于普通文件时,和SUID类似,在执行该文件时,用户将获得该文件所属组的权限。

                 当SGID作用于目录时,若某用户对此目录有写和执行权限,则该用户在这个目录下建立的文件都是属于这个目录所属的组。

            3)sbit

                  它出现在其他用户权限的执行位上,它只能用来修饰一个目录。

                  当某一个目录拥有SBIT权限时,任何用户在这个目录下所建立的文件,只有该用户自己和root可以删除,其他用户均不可以。

                  例如:ls -ld /tmp ,结果为drwxrwxrwt 12 root root 12288 Dec 17 16:33 /tmp  ;可以看到最后一位为t,这说明/tmp文件就是这种文件。

            4) 那么,如何设置上面所说的三种权限呢? 

                   很简单,在普通文件权限前面再加上这些特殊权限值就可以了,其中4表示SUID,2表示SGID,1表示SBIT,

                   例如:使test文件具有SUID权限,chmod 4777 test即可;要想有SUID,SGID,SBIT权限,chmod 7777 test就行了

     

     

     

    实例1:更改用户家目录

     
    一台服务器的分区情况如下
    [axinfu@aninfu ~]$ lsblk
    NAME                      MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sr0                        11:0    1  1024M  0 rom 
    vda                       252:0    0   300G  0 disk
    ├─vda1                    252:1    0   200M  0 part /boot
    └─vda2                    252:2    0 299.8G  0 part
      ├─vg_aninfu-root (dm-0) 253:0    0  19.5G  0 lvm  /
      ├─vg_aninfu-swap (dm-1) 253:1    0   7.8G  0 lvm  [SWAP]
      └─vg_aninfu-var (dm-2)  253:2    0 272.5G  0 lvm  /var
     
    现在根目录空间太小,axinfu用户所在的目录为/root/home,也是在根目录所在分区下,很容易被占满,要求把axinfu的家目录放在/var所在分区,并且把现在axinfu目录下的所有文件拷贝过来。
    方法如下
    1. 最好先在/var目录下新建一个文件夹为axinfu, 然后usermod -d /var/axinfu axinfu来更改用户的家目录
    2. 这样切换用户过来之后,发现 提示符是这样的:-bash-4.1$,原因是没有拷贝/etc/skel/目录下的环境变量文件,执行 cp /etc/skel/.* /var/axinfu/ 就可以了,其实就是拷贝 .bash_logout  .bash_profile  .bashrc
    3. 拷贝原先axinfu目录下的文件 cp /home/axinfu/* /var/axinfu/
    4. 把/var/axinfu的属主和组都改为axinfu,不然会出现权限错误。

                  

  • 相关阅读:
    数学基础之梯度
    背包九问心得
    如何判断机器是大端机还是小端机
    Matlab学习 2021年2月10日
    数字信号处理(超浓缩版)第一天
    matlab里的数据类型
    如何学习Matlab的帮助文档?& 如何去编写帮助文档
    fprintf 和 dlmwrite 在写数据时的区别
    lateinit 延迟初始化
    data class 在 Kotlin中的定义
  • 原文地址:https://www.cnblogs.com/regit/p/7810517.html
Copyright © 2020-2023  润新知