在Linux中,用户的管理分为组和用户两种。这个Windows下也是这个样子,组是一类用户的统称。组和用户的关系是:一对一、一对多、多对一、多对多的关系。即用户可以存在于多个组中,组中也可以有多个用户。组的权限会被赋予组中的用户,用户可以从多个组中继承权限。

 用户管理相关的配置文件:

/etc/passwd存放用户名和用户信息
/etc/shadow存放用户密码
/etc/group存放用户组名称和组信息
/etc/gshadow存放用户组密码
/etc/skel默认创建用户时,把该目录下的环境变量文件拷贝到新创建的用户家目录下
/etc/default/useradduseradd的默认配置文件,useradd在创建信用股时会优先读取该文件,会根据这个文件的设置进行处理,
/etc/login.defs文件主要定义了用户初始化的邮件地址、umask值、用户使用期限。用户UID值等等,这个文件一般不需要改,主要用于普通用户
/etc/sudoers

sudo授权配置文件,root可在该配置文件给普通用户授权;

vim /etc/sudoers=visudo

/var/db/sudo/..下面是以sudo授权用户命名的时间戳文件

 用户管理相关的命令:

命令解释说明 
useradd添加用户
userdel删除用户
usermod修改用户属性,修改用户的基本信息
groupadd添加用户组
groupdel删除用户组
groupmod修改用户组属性
passwd修改密码
chage用来修改账号和密码的有效时间,更改密码属性
su切换工具
sudo

root授权普通用户命令

 说明:这些命令有很多功能都是一样的,所以挑几个偏重要的命令坐下范例


useradd参数

参数解释说明
-u指定创建用户的uid     *****
-g指定用户所属的组   *****
-G指定用户所属的附加群组(一对多组)
-c指定用户说明(就是passwd文件每行以冒号分割第5列)
-s指定登录shell /etc/passwd文件每行后面的‘/bin/bash’  ****
-e指定账号的有效期限    *****   useradd –e“2016/04/05” 日期格式0000/00/00
-M不要自动建立用户的登录目录      *****
-d设定用户的家目录(指定)
-D
修改useradd创建用户时的配置文件/etc/default/useradd 

范例1

说明: -c –G –u –s –d 组合参数使用

[root@beita home]# useradd oldboy5 -u 789 -c shuoming -s /bin/sh -d /home/66 -G root,oldboy 

[root@beita home]# id oldboy5

uid=789(oldboy5) gid=789(oldboy5)  uid指定成功

groups=789(oldboy5),0(root),509(oldboy-G指定的附加组

[root@beita home]# tail -1 /etc/passwd

oldboy5:x:789:789:shuoming:/home/66:/bin/sh   -c -d  -s  分别指定

范例2

说明: -M –g –e 组合参数使用

添加一个用户属于sa不创建接目录。2016/06/05过期

[root@beita /]# useradd oldboy7 -M -g sa -e "2016/06/05"

[root@beita /]# id oldboy7 

uid=890(oldboy7) gid=501(sa) groups=501(sa)   -g 指定组为sa

[root@beita /]# ls /home

1  66  hehe oldboy  oldboy2  test xiaolin   没有创建接目录

[root@beita /]# chage -l oldboy7    查看账户信息

Last password change                          : Jun 04, 2016

Password expires                             : never

Password inactive                            : never

Accountexpires                              : Jun 05, 2016

Minimum number of days between password change         : 0

Maximum number of days between password change         : 99999

Number of days of warning before passwordexpires        : 7


usermod参数

-u
更改账户UID            *****
-g更改用户所属的组(组必须事先存在)   *****
-G更改用户属于的附加组(一对多组)  *****
-c增加用户说明(就是passwd文件每行以冒号分割第5列,也可以手工修改)
-s修改shell /etc/passwd文件每行后面的‘/bin/bash’   *****
-e修改过期时间。加上用户账号、停止日期   日期格格式:0000/00/00     *****
-d指定用户新的家目录,如果给定-m参数,用户旧的家目录会搬到新的家目录去,如果旧的家目录不存在则会建个新的
-f账号过期几日后永久停权,当值为0时账号则会呗立刻停权,而值为-1时则会关闭此功能,预设值为-1
-l变更用户名,其余信息不变  (实例2
[root@beita /]#usermod -l oldboy10 oldboy(改名字差不多,将oldboy改为oldboy10
-L冻结用户密码,让其无法登录,实际上就是间接修改/etc/shadow,在密码栏的开头加上即表示冻结
-U取消冻结用户的密码,使之恢复登录;其实就是间接修改/etc/shadow,在密码栏的开头去掉即表示恢复

范例

修改用户oldboy12的用户组为oldboy –d指定/tmp为家目录-e修改到期时间为2016/06/08

 [root@beita/]# usermod-g oldboy -d /tmp -e "2016/06/08" oldboy12

[root@beita /]# id oldboy12

uid=892(oldboy12) gid=509(oldboy)groups=509(oldboy)

[root@beita /]# grep oldboy12 /etc/passwd

oldboy12:x:892:509::/tmp:/bin/bash       

[root@beita /]# chage -l oldboy12

Last password change                      : Jun 04, 2016

Password expires                         : never

Password inactive                        : never

Accountexpires   到期时间更改               : Jun 08, 2016

Minimum number of days between password change     : 0

Maximum number of days between password change     : 99999

Number of days of warning before password expires   : 7


passwd参数

参数解释说明
--stdin 从标准输入读取密码(只能root使用) echo  “密码” | passwd - -stdin 用户名
-S列出密码的相关信息,仅有系统管理员才能使用
-nn天内不能改密码(最小)
-xn天内必须改密码(最大)
-w密码过期n天后警告
-i是设定密码过期几日后后停权
-d  删除密码,只有系统管理者才能使用
-i锁住密码
-u解开已上锁的账号


chage参数------和passwd的参数大同小异

参数解释说明
-E
给账户设过期日期,日期写法:0000/00/00
-l查看账户的信息(小写L
-M密码保持有效的最大天数
-m密码保持有效期的最小天数(在n天之内不能改密码)
-W账户密码到期前。提前收到警告信息的天数
-I(大写i停滞时刻:如果一个密码已过期这些天,那么此账号将不可用(设置过期N天后停权

范例1

说明:查看oldboy12用户设置信息

[root@beita /]# chage -l oldboy12

Last password change   最后密码变更时间      : Jun 04, 2016

Password expires      密码到期时间         : never从不

Password inactive     密码停权            : never从不

Account expires       当前用户使用到期时间   : Jun 08, 2016

Minimum number of days between password change    : 0     两次密码间隔最小时间

Maximum number of days between password change    : 99999   两次密码间隔最大时间

Number of days of warning before passwordexpires   : 7      过期密码警告天数

范例2

说明:oldboy7用户7天内不能改密码,60天以后必须改密码,过期前提前10天通知oldboy7用户,过期后30天后禁止用户登录

[root@beita /]# chage -m7 -M60 -W10 -I30 oldboy7   参数和数字之间不需要空格

[root@beita /]# chage oldboy7 -l               

Last password change                      : Jun 04, 2016

Password expires                         : Aug 03, 2016

Password inactive                         : Sep 02, 2016

Account expires                          : Nov 12, 2016

Minimum number of days between password change     : 7

Maximum number of days between password change     : 60

Numberof days of warning before password expires   : 10


sudo授权用户

 

   sudo授权命令

sudo 参数解释说明
-l检查被赋予的权限
-K清除时间戳
-u(用户)

以指定的用户作为新的身份,若不加上此参数,则预设以root作为新的用

例:sudo -u oldboy cat/home/oldboy/a1 (指定以新用户oldboy身份查看oldboy家目录文件)

-s执行指定的shell

 sudo相关配置文件

/etc/sudoerssudo授权配置文件    visudo == vi /etc/sudoers   visudo自带语法检查功能
/var/db/sudo/..下面是以sudo授权以用户命名的时间戳文件


   说明root可以通过sudo给普通用户授权,就是在/etc/sudoers里面配置的 ,在该配置文件98行,如下:

[root@beita /]# vim /etc/sudoers

## Allow root to run any commands anywhere  

root   ALL=(ALL)       ALL             该配置文件 98

rootALL=ALLALL
用户或组主机可以切换的用户角色授权的命令


 root给普通用户授权的方法


1、在/etc/sudoers里面授权普通用户

oldboy   ALL=(ALL)    /usr/sbin/userdel,/usr/sbin/useradd


2、多个用户需要授权时可以让用户加入一个组,给组授权即可

echo “%组   ALL=(ALL)       ALL” >>/etc/sudoers   <==将用户组授权追加到配置文 件/etc/sudoers里面

visudo -c         <==检查语法 


/etc/sudoers中的3种别名

  在sudo授权中,有时将会使用到大量命令,重复而频繁地输入某个很长命令或用法是不可取的。这时可以使用命令别名功能将这个过程简单化

Host_Alias

User_Alias

Cmnd_Alias

FILESERVERS

ADMINS

SERVICES

fs1, fs2 (主机)

jsmith, mikem,%sa(用户或组)

/sbin/service, /sbin/chkconfig(命令)

想要设置的别名类型别名(也可以是其他名字,但是必须是大写)想要设置别名的主机/用户/命令



1、主机别名

说明:在生产场景中,一般情况下不需要设置主机别名,在定义授权规则是可以通过ALL来匹配所有的。

## Host Aliases

## Groups of machines. You may prefer to use hostnames (perhaps using 

## wildcards for entire domains) or IP addresses instead.

Host_Alias     FILESERVERS = fs1, fs2     <==配置文件范例,一个别名FILESERVERS就代表                                    了后面所定义的主机,

# Host_Alias     MAILSERVERS = smtp, smtp2


2、用户别名

说明:别名成员可以是用户、用户组(用户组前面要加%号)/etc/sudoers文件中16-20行内容

## User Aliases

## These aren't often necessary, as you can use regular groups

## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname 

## rather than USERALIAS

# User_Alias ADMINS = jsmith, mikem,%sa     <==配置文件范例 ADMINS代表了定义的所有用户及用户组,用户组必须加%


3、命令别名


说明:命令别名就是定义一个别名,包含一堆命令。即一组相关命令的集合

## Command Aliases

## These are groups of related commands...

## Services

# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig  <== SERVICES 别名代表了后面定义的所有命令



别名注意事项

1. 授权规则中的所有的ALL字符串必须为大写字母。

2.允许执行的命令是有顺序的,命令的顺序是从后向前,即把禁止执行的命令放在允许执行的命令的后面,如:/user/sbin/sbin/*,!/usr/sbin/visudo,!/sbin/fdisk. ,前面的为允许,后面的为禁止。,强调:禁止的命令尽量放在后面。

3. 一行内容超长可以用“ \”斜线换行。

4.  ‘ 表示非,就是命令取反的意思,即禁止执行的命令

5. 请注意上面定义的规范,有些规范不是必须的,但我们还是要求能够按照系统的标准来配置,可以避免意外的问题发生