标签:linux用户和组
Linux安全上下文:进程所能够访问资源的权限取决于进程运行者的身份
Tips:想要阻止一个用户登录的方法有很多种
a)passwd -l user / usermod -L user 这种方法是在/etc/shadow的密码字段的最前面加!!或!,使用户不能登录
b)只有在7上才可以,可以创建/run/nologin文件(原理参见Centos7中shutdown man手册)或/etc/nologin(误打误撞出来的,记错了前面nologin的路径)
If the time argument is used, 5 minutes before the system goes down the /run/nologin file is created to
ensure that further logins shall not be allowed.
如果使用了时间参数,那么在系统关闭前的5min,系统会创建/run/nologin文件来确保禁止更多的登录活动
1.Linux用户
Linux用户有两个名字,一个是Username,便于人类记忆的,另一个是UID,是系统辨识用户的唯一编号。
Linux用户分为:管理员和普通用户,普通用户又分为系统用户和登录用户
管理员:username是root,uid=0
普通用户:1-65535
系统用户:1-499(Centos6),1-999(Centos7) 用于标识守护进程可以获取的资源
登录用户:500+(Centos6),1000+(Centos7) 用于交互式登录
Attention:多个用户可以使用同一个UID,但系统识别用户只是看uid,遇到uid相同的,系统就认为是同一用户
登录后,现在提示符前显示用户的username,对于同一个uid系统该采用哪个username呢?系统会去查询/etc/passwd中username和uid的映射关系,找到第一个和当前用户uid相同的条目就退出,此时这个条目中对应的username就是要显示的username。因此,排在文件前面的映射会生效。
2.Linux组
Linux组跟用于一样也有两个名字,groupname和gid 系统辨识组是用gid
Linux组分为:管理员组和普通组,普通组又分为系统组和普通组
管理员组:groupname=root gid=0
普通组:
系统组:1-499(CentOS6),1-999(CentOS7)
普通组:500+(Centos6),1000+(Centos7)
3.Linux用户和组之间的关系
1)按照用户的角度将Linux组进行划分:
a)主要组 primary group:
用户必须有且只属于一个主要组
b)私有组
组名和用户名相同,且仅包含一个用户:称为私有组
c)辅助组 secondary group
一个用户可以属于0个或多个辅助组
2)一个组可以有多个成员,也可以有多个组管理员,组管理员可以改变组密码,添加或删除组成员
4.跟用户相关的两个文件/etc/passwd和/etc/shadow
Attention:1)这两个文件一个是存储用户信息,一个是存储密码的,早期是放在一起的,不过现在也可以将这两个文件进行合并
#pwunconv 将密码填入/etc/passwd的x位置,并重命名/etc/shadow文件为/etc/shadow-,相关的密码策略不会显示在/etc/passwd中
#pwconv 恢复成两个文件
2)查看/etc/passwd和/etc/shadow中某个特定用户的信息,有专门的工具
getent passwd 用户名
getent shadow 用户名
也可以用来查询组和组的密码,后面说
/etc/passwd 用于存储用户的相关信息,格式如下:
这个文件以:分隔的多个字段
(1)login name:登录用户名
(2)passwd:密码(有的是X,是占位符)
(3)UID:用户ID
(4)GID:基本组ID
(5)Comment:用户全名或注释
(6)home directory:用户家目录
(7)shell:用户默认shell
/etc/shadow 用于存储用户的密码信息,格式如下:
以冒号分隔的多个字段
(1)用户名
(2)用户密码:现在一般用sha512加密
以!或!!或*,表示系统用户
以!或!!后面跟$开头的字符串:表示被锁定的用户,$开头的字符串表示加密过的字符串
Attention:passwd -l user 在密码前加!!
usermod -L user 在密码前加一个!
usermod -U user 执行一次在密码前减去一个!
$开头的字符串表示加密过的字符串,表示用户密码,如:
$6$7thv7bZB$znnXghWTKnpbszyrqjrAPRIIL.2ArikhEj4hRed4SjyCgydD8mrZMAckRvuEFbhyG8OAUz96WLCfDY7h8d9a81
以上字符串可以看作是$分隔的三个字符串,其中
$6代表加密算法 sha512 $1代表md5(128位的)
Attention:#authconfig --passalgo=md5 --update,此后使用passwd加密过的密码,此处都显示$1
同时会修改/etc/login.defs文件
# Use SHA512 to encrypt password.
ENCRYPT_METHOD MD5
MD5_CRYPT_ENAB yes
$7thv7bZB 代表salt,是系统自动加的随机数,会影响加密结果。在没有salt的情况下,通过比对加密结果,如果一样,那么密码就是相同的,这样可以破解密码。为了避免这种情况,系统会自己加一个salt
如果是$1,可以通过这样的方式生成带salt的密码加密之后的结果,
openssl passwd -1 -salt 12345678 code
$znnXghWTKnpbszyrqjrAPRIIL.2ArikhEj4hRed4SjyCgydD8mrZMAckRvuEFbhyG8OAUz96WLCfDY7h8d9a81
是对salt和密码执行加密算法后的结果
sha1,md5,sha512都是单向加密算法,称为哈希算法,有这样的特点:
sha1: secure has algorithm 160bits
md5:message digest, 128bits
1)明文不同,密文必然不同,反之亦然
2)相同算法定长输出,理论上,密文不可逆推出原始数据,但有例外 Md5、SHA1算法,据说被山东大学教授王小云(女)破解
3)雪崩效应:
初始条件的微小改变,必然引起结果的巨大变化
(3)上次修改时间:从1970年1月1日起到密码最近一次被更改的时间
(4)最小使用时间:密码再过几天才可以变更(0表示随时可以变更)
(5)最大使用时间:密码再过几天必须变更(99999表示永不过期)
(6)密码警告时间:密码过期前几天系统提醒用户(默认为一周)
(7)密码失效时间:密码过期几天后账号会被锁定
(8)账号过期时间:从1970年1月1日起,多少天后账号失效
(9)保留(reserved field)
5.跟组相关的两个文件/etc/group和/etc/gshadow
Attention:1)groups user1 user2 .. usern 列出指定一个或多个用户的组关系,格式:primary group:secondary group1 secondary group
groups 如果没有指定用户,那么打印当前进程的组关系,通常是没有基本组和附加组的概念
2)getent group groupname 在/etc/group中查看groupname的相关信息
getent gshadow groupname 在/etc/gshadow中查看groupname的相关信息
/etc/group存储的是组相关信息
也是以:分隔的多个字段
(1)组名
(2)组密码 通常不需要设定,密码是被记录在/etc/gshadow
(3)GID:组ID
(4)以当前组为附加组(辅助组)的用户列表(以逗号分隔)
/etc/gshadow存储的是与组密码的相关信息
(1)组名
(2)组密码:跟/etc/shadow的密码构造一样
当一个不隶属于这个组的成员想获取这个组的权限时,就需要输入这个密码
如果组密码为空,那么只有组成员才能获取组的权限
Attention:newgrp可将当前用户的基本组切换成设定的组group,成功后,再创建出的文件的的属组都是group
1)如果group是当前用户的附加组,即当前用户隶属于group,这样,依据上面的说明,有没有设置密码都可以进行切换
#/$ newgrp group //不会提示输入密码的
2)如果group不是当前用户的附加组,即当前用户不隶属于group,那么在键入
newgrp group
之后,会提示要求输入密码,这个密码是组密码,当前没有密码就一定不能切换成功喽,所以要这样切换,就必须设置密码
另外,设置之后,立即有效,登出时就失效,并且只在设置的那个终端有效,而非对其他终端的同一用户有效
redhat:newgrp gentoo
groups redhat
redhat : redhat 发现用户的属组没变
但 id redhat
uid=1000(redhat) gid=1009(gentoo) groups=1000(redhat),1009(gentoo) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
在其他终端上同样也是redhat用户执行 id redhat
uid=1000(redhat) gid=1000(redhat) groups=1000(redhat)
在原有终端上退出再登入,发现加入的组改回原来了。
(3)组管理员:逗号分隔的用户列表,这些用户都是组管理员
组管理员可以修改密码,增删组成员
组管理员可以不隶属于这个组,但他依然拥有和组成员一样的权限
Attention:#gpasswd -A redhat gentoo 将redhat用户设为gentoo的组的管理员
redhat可以不是gentoo组的成员
(4)组成员:逗号分隔的用户列表,这些用户都是组成员
Attention:#gpasswd -a redhat gentoo 将redhat用户加入gentoo组
Attention:有时这些命令虽然设置成功了,但是需要登入登出在能生效
6.专业用来修改/etc/passwd和/etc/group的工具
修改且带有语法检查:vipw和vigr
只有语法检查功能:pwck和grpck
7.用户管理命令
1)创建用户
useradd [options] username
-u UID UID的范围在/etc/login.defs中定义
-u -o 不检查UID的唯一性
-g GID 指明要加入的基本组,如果不指定,则创建一个与用户名相同的组,并将其作为用户的基本组
-c "Comment" 用户的注释信息
-d HOME_DIR 以指定的路径为家目录 此处指定的路径必须不能是个已存在的目录
-s SHELL 指明用户的默认shell
-G GP1[,GP2,...] 为用户指明附加组,组必须事先存在
-N 不创建私有组作为基本组,使用users组(Gid=100)作为基本组
Attention:在/etc/default/useadd中规定了这一项
GROUP=100 //如果不创建私有组,就将GID为100的组(即users组)作为基本组
-r 创建系统用户
-M 不创建家目录
-D 显示默认配置
-D -s /path/to/shell 修改默认配置中的shell类型
Attention:使用useradd命令创建用户,一般遵循的默认配置在/etc/default/useradd
GROUP=100 //如果不创建私有组,就将GID为100的组(即users组)作为基本组
HOME=/home //普通用户家目录的父目录,系统用户一般不创建家目录
INACTIVE=-1 //用户永不失效
EXPIRE= //用户永不过期
SHELL=/bin/bash //默认shell
SKEL=/etc/skel //用户家目录的基本框架(skeleton),通常是隐藏文件
CREATE_MAIL_SPOOL=yes //是否创建邮箱,其实就是在/var/spool/mail下创建一个以用户名的名字的目录
在/etc/default/下还有一个跟useradd相关的文件是useradd-,这个文件是存储上一次的默认配置(修改之前的)
看到-就可以想到上一次的含义,比如 cd - 就是回到上一次的工作目录
/etc/skel下存放的文件:.bash_logout .bash_profile .bashrc .gnome2(跟安装的图形模块有关,不安装则没有) .mozilla
2)创建用户口令
passwd可以用于创建用于口令但不至于创建用户口令
passwd:权限-rwsr-xr-x. 其中s代表,任何运行此程序用户都是以属主也就是root身份来运行
passwd [options] username
-l 锁定用户
Attention:passwd -l user 在密码前加!!
usermod -L user 在密码前加一个!
usermod -U user 执行一次在密码前减去一个!
-U 解锁用户
-e 使用户的密码立即过期,强制用户下次登录时修改密码
此命令的应用场景:root创建了一些账号,并赋予了一些简单密码,使用这个命令可以让密码立即失效,这样在用户第一次登录时,就必须修改密码,我在实验时,登录时,确实提示需要设置密码,但密码总也设置不成功,这是因为Linux对于普通用户设置的密码要求比较严苛,并非不能实现这个需求。
-n mindays 指定最短使用期限 对应/etc/shadow 第4个字段
-x maxdays 指定最大使用期限 对应/etc/shadow 第5个字段
-w warndays 密码失效前多少天开始警告 对应/etc/shadow 第6个字段
-i inactivedays 密码过期几天后会锁定账户 对应/etc/shadow 第7个字段
--stdin 从标准输入接收用户密码
e.g. echo "passwd" | passwd --stdin username
Attention:在为账号设置密码时,不会指定密码的各种期限,但系统会帮助我们来设置,这些期限称之为密码策略
在windows中查看密码策略的命令是 net account
在Linux中查看密码策略的命令是 chage(change age) -l
其中,默认的密码策略存储在/etc/login.defs,当然不只是有密码策略
以下是省去了注释信息的/etc/login.defs
MAIL_DIR /var/spool/mail //邮箱目录
PASS_MAX_DAYS 99999 //密码的各种期限
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 500 //用户和组 ID的限制
UID_MAX 60000
GID_MIN 500
GID_MAX 60000
CREATE_HOME yes //是否创建家目录
UMASK 077 //UMASK ,具体参加有注释信息的此文件
USERGROUPS_ENAB yes //如果用户组中没有成员了,userdel可以删除用户组
ENCRYPT_METHOD SHA512 //密码使用的加密算法 使用authconfig --passalgo=Md5 --update可以修改这里
MD5_CRYPT_ENAB no
3)批量创建用户和修改用户口令
(1)newusers file 批量创建用户
file是满足/etc/passwd格式的文件
(2)chpasswd 从标准输出读入user:passwd的格式的多行文本,以此来批量修改用户口令
vim batchpasswd
user1:明文口令
user2:明文口令
...
cat batchpasswd | chpasswd
4)用户属性修改
usermod [option] username
-u UID: 指定用户新的UID
-g GID:指明用户新的基本组
-G GP1[,gp2,..gpm] 指明新的附加组,原来的附加组会被覆盖
Attenton:若要保留原有附加组,则要使用-aG(-Ga 不可) GP1[,gp2,..gpm]
若要清空附加组,-G "" 即可
-s SHELL 新的默认SHELL
-c ‘COMMENT‘ 新的注释信息
-d HOME 新家目录不会自动创建,原家目录中的文件不会同时移动至新的家目录;若要创建新家目录并移动原家数据,必须使用-md /path/to/newhome或-m -d /path/to/newhome,总之m选项要在前面
-l login_name 新用户名
-L 锁定用户 在/etc/shadow密码前加一个!
-U 解锁用户 执行一次在密码前减去一个! 直到没有为止
-e yyyy-MM-DD 指明用户账号的过期日期
-f INACTIVE:设定非活动期限
-r 删除用户家目录
5)查看用户相关信息
(1) id [options] [user] 查看用户相关的信息 不指明用户查看的是当前用户
-u:UID
-g:GID
-G:groups 附加组
-n:显示id对应的名字,通常和-u和-g连用
id -un 或 id -gn
(2) finger 打印登录到Linux系统的所有用户的信息
finger user 查看跟user相关的一些信息,比如家目录 shell类型、邮件等
6)在/etc/passwd中家目录字段必须不能为空
如果为空,则登录这个用户时,键入用户和密码之后,会不出现提示符,不能输入任何命令,等待超时之后(提示:/usr/bin/xauth: timeout in locking authority file /.Xauthority),进入/
若su - user完全切换或不完全切换 su user, 则会显示su: user user does not exist
如果不空,但目录不存在,则登录这个用户时,会直接进入/,
若su - user完全切换 会直接进入/
若不完全切换 su user 会进入执行 su user的目录
7) 切换用户或以其它用户身份执行命令
su [options] [-] [user [args...]]
切换用户的方式:
su user:非登录式切换,不会读取目标用户的配置文件,不改变当前工作目录,也称之为不完全切换
su - user 登录式切换,会读取目标用户的配置文件,切换至其家目录,也称之为完全切换
Attention:root执行su至其他用户无需密码,非root用户切换时需要密码
切换身份执行命令
su [-] user -c ‘cmd‘
选项 -l --login
su -l user 相当于 su - user
8)修改用户相关信息的其他命令
chfn 指定个人信息
chsh 指定shell
9)修改用户密码策略
chage [option] user
-d last_day 修改最后修改时间 对应于/etc/shadow的第3个字段
-m --mindays Min_days 修改最小使用时间 对应于/etc/shadow的第4个字段 过多少时间可以修改
-M --maxdays Max_days 修改最大使用时间 对应于/etc/shadow的第5个字段
-W --warndays Warn_days 修改警告时间 对应于/etc/shadow的第6个字段
-I --inactive Inactive 修改账户失效时间 对应于/etc/shadow的第7个字段
-E --expiredate Expire_Date 修改账户过期时间 对应于/etc/shadow的第8个字段
-l 显示密码策略
下次登录强制重设密码
chage -d 0 tom 等价于 passwd -e tom
e.g. chage -m 0 -M 42 -W 14 -I 7 tom
chage -E 2016-09-10 tom
10)删除用户
userdel user 不会删除用户家目录
-r user 才会删除用户的同时删除家目录
在/etc/login.defs中,有这样的描述
# This enables userdel to remove user groups if no members exist.
#
USERGROUPS_ENAB yes
8. 组管理命令
1)创建组
groupadd [option] groupname
-g gid 指明GID 范围在/etc/login.defs中指定
-r 创建系统组
2)修改组
groupmod [OPTION] group
-n groupname :组的新名字
-g GID :新的GID
3)组删除
groupdel group
4)更改组密码
gpasswd [option] group
-a user 将user加入到指定组中
-M user1,user2...指定组成员列表
-d user 从指定组中删除user
-A user1,user2,... 设置有管理权限的用户列表,即设置组管理员
newgrp命令:临时切换基本组
如果用户不属于此组,则需要组密码
Attention:具体参见本文档/etc/gshadow部分
5)更改组成员
groupmems [options] [action]
options:
-g /--group groupname 更改为指定组(只有root可用)
action:
-a /--add username 指定加入组的用户
-d / --delete username 指定从组删除的用户
-p / --purge 从组中清除所有成员
-l / --list 显示组中成员
e.g. groupmems -g bin -a wang 将wang用户加入bin组
groupmems -g bin -l 查看bin组中的所有成员,似乎是查看以bin组为附加组的成员列表
groupmems -g bin -p 清除所有bin组中的成员
6)查看组成员
groups user1 user2 .. usern 列出指定一个或多个用户的组关系,格式:primary group:secondary group1 secondary group
groups 如果没有指定用户,那么打印当前进程的组关系,通常是没有基本组和附加组的概念
标签:linux用户和组
原文地址:http://bloodhero.blog.51cto.com/4496010/1795311