账户与安全

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,不然会出现权限错误。

              

原文地址:https://www.cnblogs.com/regit/p/7810517.html