在Linux中,用户的管理分为组和用户两种。这个Windows下也是这个样子,组是一类用户的统称。组和用户的关系是:一对一、一对多、多对一、多对多的关系。即用户可以存在于多个组中,组中也可以有多个用户。组的权限会被赋予组中的用户,用户可以从多个组中继承权限。
用户管理相关的配置文件:
/etc/passwd | 存放用户名和用户信息 |
/etc/shadow | 存放用户密码 |
/etc/group | 存放用户组名称和组信息 |
/etc/gshadow | 存放用户组密码 |
/etc/skel | 默认创建用户时,把该目录下的环境变量文件拷贝到新创建的用户家目录下 |
/etc/default/useradd | useradd的默认配置文件,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 | 列出密码的相关信息,仅有系统管理员才能使用 |
-n | 在n天内不能改密码(最小) |
-x | 在n天内必须改密码(最大) |
-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/sudoers | sudo授权配置文件 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行
root | ALL= | (ALL) | ALL |
用户或组 | 主机 | 可以切换的用户角色 | 授权的命令 |
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. 请注意上面定义的规范,有些规范不是必须的,但我们还是要求能够按照系统的标准来配置,可以避免意外的问题发生