用户及权限管理


说起用户,你脑海里能浮现出什么,也许你也说不清,我就把我自己理解用户的含义,说一下,希望能帮助你。

提起用户,我情不自禁的那它跟古代比,你可以想象下在linux中root是超级用户,代表无所不能,是不是很像古代皇帝一样在他的国家中一样,用户就好像是一个国家的子民,你在你家里是最大的,可以说是家目录,说起组来,它可大可小,大到像现在的市,省。小到像县,村,随你咋样理解,linux系统中还有个附加组,可以把它理解为两个县的边界里有个村,它又同时属于这两个县,系统我把它理解为国家的技术人才,是系统不可缺数的人才。


权限


我上面写的你只要理解,这权限就不难理解,上面写的皇帝,它的权限不可谓不大,linux系统上的权限分为 : 属主,属组,其他人。


对linux来说用户只有两类:

    管理

    普通用户

    系统用户

    登录用户

每个用户都有他的用户标示:userID,UID,现在一般而言使用的是16bits二进制数字:0-65535

管理员的ID:0

  普通用户ID:1-65535

  登录用户:500-60000(centos6).1000-60000(centos7)

  系统用户:1-499(centos),1-999(centos7)

  用户登录过程中,要输入密码进行,密码验证,这个地步就是把加密的密码和数据库作比较,就等于名称转换过程。

  

  组类别:

  管理员组

  系统组

  登录组


  组标示:GroupID,GID

  管理员组:0

普通用户组:1-65635

系统用户组:1-499(CentOS6), 1-999(CentOS7)

登录用户组:500-60000(CentOS6), 1000-60000(CentOS7)


组类别1:

用户的基本组:用户创建

用户的附加组:


认证信息:

通过比对事先存储的,与登录时提供的信息是否一致;

password:

/etc/shadow

/etc/gshadow

使用有效的密码策略,能加大对方的破解难度:

1、使用随机密码

2、最短长度不要低于8位

3、应该使用大写、小写、数字和标点符号四类字符中至少三类

4、定期更换


/etc/passwd:用户的信息库

name:password:UID:GID:GECOS:directory:shell


name: 用户名

password:可以是加密的密码,也可是占位符x;

UID:1000-60000

GID:用户所属的主组的ID号;

GECOS:注释信息

directory:用户的家目录;

shell:用户的默认shell,登录时默认shell程序;


/etc/shadow:用户密码

用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段

/etc/group:组的信息库

group_name:password:GID:user_list

user_list:该组的用户成员;以此组为附加组的用户的用户列表;


安装上下文

进程以其发起者的身份运行;

进程对文件的访问权限,取决于发起此进程的用户的权限;


groupadd命令:添加组

groupadd [选项] group_name

-g GID:指定GID;默认是上一个组的GID+1;

-r: 创建系统组;

例子:groupadd name :添加name组

 groupadd -g 1010 name :添加name组并把GID改成1010

 groupadd -r name   :添加系统组,系统组默认没有家目录


groupmod命令:修改组属性

groupmod [选项] GROUP

-g GID:修改GID;

-n new_name:修改组名;

例子:groupmod -g 1234 name :把现有组name的GID改成1234

 groupmod -n tt name   :把现有组name的组名改成tt


groupdel命令:删除组

groupdel [选项] GROUP


例子:groupdel name:把name组删除


useradd命令:创建用户


useradd [选项] 登录名

-u, --uid UID:指定UID;

-g, --gid GROUP:指定基本组ID,此组得事先存在;

-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加                                    组,        多个组之间用逗号分隔;

-c, --comment COMMENT:指明注释信息;

-d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/et                                 c/skel此目录并重命名实现;指定的家目录路径如果事先存在,                                 则 不会为用户复制环境配置文件;

-s, --shell SHELL:指定用户的默认shell,可用的所有shell列表                 存储在/etc/shells文件中;

-r, --system:创建系统用户;


注意:创建用户时的诸多默认设定配置文件为/etc/login.defs


useradd -D:显示创建用户的默认配置;

useradd -D 选项: 修改默认选项的值;

修改的结果保存于/etc/default/useradd文件中;


例子:useradd -u 1001 mysql :添加用户名mysql并把UID改成1001

 useradd -g 1001 mysql :添加用户名mysql并把GID改成1001

 useradd -G ee,ww name:添加用户name分别加入ee,ww成为附加组

 useradd -c ”name is“ name:添加用户名name 并把注释写上

 useradd -d /tmp/name name:添加用户名name并把用户的家目录指定为/tmp/name                        

 useradd -s /bin/tcsh name:添加用户名name并把name的shell改成/bin/tcsh

 useradd -r name:添加系统用户name

usermod命令:修改用户属性


usermod [选项] 用户名

-u, --uid UID:修改用户的ID为此处指定的新UID;

-g, --gid GROUP:修改用户所属的基本组;

-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:修改用户所属的附加组;原来的附加组会被覆盖;

-a, --append:与-G一同使用,用于为用户追加新的附加组;

-c, --comment COMMENT:修改注释信息;

-d, --home HOME_DIR:修改用户的家目录;用户原有的文件不会被转移至新位置;

-m, --move-home:只能与-d选项一同使用,用于将原来的家目录移动为新的家目录;

-l, --login NEW_LOGIN:修改用户名;

-s, --shell SHELL:修改用户的默认shell;


-L, --lock:锁定用户密码;即在用户原来的密码字符串之前添加一个"!";

-U, --unlock:解锁用户的密码;


userdel命令:删除用户


userdel [选项] 用户名

-r:删除用户时一并删除其家目录;


passwd命令:


passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w  warndays] [-i inactivedays] [-S] [--stdin] [username]


(1) passwd:修改用户自己的密码;

(2) passwd USERNAME:修改指定用户的密码,但仅root有此权限;


-l, -u:锁定和解锁用户;

-d:清除用户密码串;

-e DATE: 过期期限,日期;

-i DAYS:非活动期限;

-n DAYS:密码的最短使用期限;

-x DAYS:密码的最长使用期限;

-w DAYS:警告期限;


--stdin:

echo "PASSWORD" | passwd --stdin USERNAME

例子:echo "ww" | passwd --stdin tt :把用户tt密码改成ww


gpasswd命令:


组密码文件:/etc/gshadow


gpasswd [选项] group

-a USERNAME:向组中添加用户

-d USERNAME:从组中移除用户


newgrp命令:临时切换指定的组为基本组;


newgrp [-] [group]


-: 会模拟用户重新登录以实现重新初始化其工作环境;


chage命令:更改用户密码过期信息


chage [选项] 登录名



id命令:显示用户的真和有效ID; 


id [OPTION]... [USER]

-u: 仅显示有效的UID;

-g: 仅显示用户的基本组ID; 

-G:仅显示用户所属的所有组的ID;

-n: 显示名字而非ID;


例子:id -u name:显示name的UID

.

.

.

su命令:switch user


登录式切换:会通过读取目标用户的配置文件来重新初始化

su - USERNAME

su -l USERNAME

非登录式切换:不会读取目标用户的配置文件进行初始化

su USERNAME


注意:管理员可无密码切换至其它任何用户;

例子:su - name:切换到用户name,注意-两边要有空格


权限管理:


ls -l 

rwxrwxrwx:

左三位:定义user(owner)的权限

中三位:定义group的权限;

右三位:定义other的权限


进程安全上下文

进程对文件的访问权限应用模型:

进程的属主与文件的属主是否相同;如果相同,则应用属主权限;

否则,则检查进程的属主是否属于文件的属组;如果是,则应用属组权限;

否则,就只能应用other的权限;


权限

r:readable, 读

w:writable, 写

x:excutable,执行


文件

r:可获取文件的数据;

w: 可修改文件的数据;

x:可将此文件运行为进程;


目录

r:可使用ls命令获取其下的所有文件列表;

w: 可修改此目录下的文件列表;即创建或删除文件;

x: 可cd至此目录中,且可使用ls -l来获取所有文件的详细属性信息;


mode:rwxrwxrwx

ownership:user, group


权限组合机制:

--- 000 0

--x 001 1

-w- 010 2

-wx 011 3

r-- 100 4

r-x 101 5

rw- 110 6

rwx 111 7


练习:rw-rw-r--, rwxrwxr-x, rwxr-x---, rw------, rwxr-xr-x

 664, 640, 600, 775, 750, 755


权限管理命令:

chmod命令:

      chmod [OPTION]... MODE[,MODE]... FILE...

      chmod [OPTION]... OCTAL-MODE FILE...

      chmod [OPTION]... --reference=RFILE FILE...


      三类用户:

      u:属主

      g:属组

      o:其它

      a: 所有


      (1) chmod [OPTION]... MODE[,MODE]... FILE...


      MODE表示法:

      赋权表示法:直接操作一类用户的所有权限位rwx;

      u=

      g=

      o=

      a=


      授权表示法:直接操作一类用户的一个权限位r,w,x;

      u+, u-

      g+, g-

      o+, o-

      a+, a-


      (2) chmod [OPTION]... OCTAL-MODE FILE...


      (3) chmod [OPTION]... --reference=RFILE FILE...


      选项:

      -R, --recursive:递归修改


      注意:用户仅能修改属主为自己的那些文件的权限;


从属关系管理命令:chown, chgrp


chown命令:

chown [OPTION]... [OWNER][:[GROUP]] FILE...

        chown [OPTION]... --reference=RFILE FILE...


        选项:

        -R:递归修改

        例子:chown root:name /tmp/name  :把/tmp/name文件的属主和属组修改成root, name


        chgrp命令:


       chgrp [OPTION]... GROUP FILE...

       chgrp [OPTION]... --reference=RFILE FILE...


       例子:chgrp name /tmp/aa :把/tmp/aa的属组改成name


       注意:仅管理员可修改文件的属主和属组;



        练习:完成以下任务

       1、新建系统组mariadb, 新建系统用户mariadb, 属于mariadb组,要求其没有家目 录,且shell为/sbin/nologin

       例子:groupadd -r -s /sbin/nologin mariadb

       2、新建GID为5000的组mageedu,新建用户gentoo,要求其家目录为/users/gentoo密码同用户名;

       例子:groupadd -g 5000 mageedu

         useradd -d /users/gentoo gentoo

         echo "gentoo" | passwd --stdin gentoo

       3、新建用户fedora,其家目录为/users/fedora,密码同用户名;

       例子:useradd -d /users/fedora

         echo "fedora" | passwd --stdin fedora

       4、新建用户www, 其家目录为/users/www;删除www用户,但保留其家目录;

       例子:useradd -d /users/www www

         userdel  www

       5、为用户gentoo和fedora新增附加组mageedu; 

       例子:groupadd mageedu  :有的话就不用添加了

         usermod -G mageedu gentoo

         usermod -G mageedu fedora

       6、复制目录/var/log至/tmp/目录,修改/tmp/log及其内部的所有文件的属组为mageedu,并让属组对目录本身拥有写权限;

       例子:cp -r /var/log /tmp/

         chown -R g+w /tmp/log