linux用户和组相关的命令
0.介绍
linux是多用户,多任务系统。文件系统是一种数据抽象
文件权限针对下面三种对象:属主,属组,其他人
- 属主:拥有者
- 属组:所属的组
- 其他人:不属于上述两类
用户:分为管理员和普通用户
- 管理员:root用户,id=0
- 普通用户分为系统用户(用来执行系统程序,不能登录用来管理系统,id在1-499),可登录用户(id >500)
组:容器,映射用户群和访问权限
1.用户管理
可以创建用户,修改用户属性,删除用户,创建组,修改组属性,删除组等操作
useradd创建用户
useradd或adduser都可以用户创建用户
useradd tom
创建用户时,系统自动创建同名的组,用户的私有组,只为用户一个人使用
用户数据保存在/etc/passwd文件夹,格式如下
fedora:x:2003:2003:Fedora Community:/home/fedora:/bin/tcsh
用户名:密码占位符:UID:GID:注释信息:家目录:默认shell
useradd USERNAME:
-u UID 指定uid,有效范围 0-65535,不能重复;如果没有给用户指定基本组,且与UID相同的GID没有被占用,这GID同UID
-g GID 有效范围已有的GID的基本组
-G GID 有效范围已有的GID,可以有多个额外组
-c COMMENT 指定注释信息
-d /path/to/somewhere 指定家目录的路径
-s /path/to/shell_command 指定shell路径
-r 创建系统用户,ID号为1-499之间的用户
系统用户的家目录有路径,但是不会被创建
-M 不为用户创建家目录
-m 必须为用户创建家目录
su切换用户
su (switch user) 命令,管理员su到普通用户,不需要用户密码;反之,不行
su USERNAME
su -l USERNAME
su - USERNAME
whoami查看当前用户
显示当前登录的用户名
$SHELL显示shell类型
echo $SHELL
id查看用户属性
id USERNAME
:显示的用户uid gid等
id suse
-u 显示uid
-g 显示gid
-gn 显示组名
finger 查看用户信息
finger suse
passwd修改密码
linux没有密码的用户不允许登录
passwd # 修改当前用户的密码
passwd USERNAME # 修改指定用户的密码,只有管理员有这个权限
passwd -l USERNAME # 锁定用户账号
passwd -u USERNAME # 锁定用户账号
修改密码示例:
点击跳转示例4
用户密码在/etc/shadow文件夹中,通常改文件没有任何权限,每一行格式如下
fedora:$6$CEJ63Rfa$UEsHnz/cx/tDRTFAfEawjEI7yGiOzedpMEXcjWvkRvDx14FmXceqquhmAtMWuv764zgtufgdUaNVEokrFkTfu1:19112:2:50:7:::
登录名 : 加密的密码串 : 最近一次修改密码的时间 : 密码最短使用期限 : 密码最长使用期限 : 密码到期警告天数 : 账号非活动天数 : 账号过期期限 : 预留段
- 加密密码串
$ 加密方法 $ 8位随机数salt $ 密码
$分隔符,加密方法:1代表MD5加密,6代表sha-512 - 最近一次修改密码的时间:1970/1/1开始到上次修改密码时间
- 账号非活动天数:密码到期后,账号没有立即锁定账户,但是用户登录必须修改密码
- 加密算法:
- 对称加密:加密解密使用同一个秘钥,例如:3DES,AES;
缺点:秘钥管理和分发不利 - 非对称加密:公钥加密,秘钥是成对的,私钥(s)/公钥(p),公钥可以从私钥中提取得到,公钥加密,私钥解密。例如:RSA,DSA;
特点:加密速度慢,安全性高;能完成秘钥分发 - 单项加密:只能加密,不能解密,类似于hash,用于实现提取数据特征码;例如:md5(128位),sha,SHA1(160位),SHA256(256位),SHA512
特点:无论输入多大数据,输出是定长的;输入一样,结果一定一样,反正输入数据微小改变,结果巨大改变(雪崩效应)
通常密码加密,还需要加salt,salt不同,密码加密后hash值也不一样。防止hash值相同时,密码被破解。所以即使看到salt和加密后hash值,也不能推出原密码
加密命令
openssl passwd -1 -salt 12345678 redhat
- 对称加密:加密解密使用同一个秘钥,例如:3DES,AES;
密码安全策略
足够复杂:
1.密码长度至少5位以上;
2.要包含大小写,数字,特殊字符至少三类;
3.要定期更换,不要重复使用此前用过的密码
查看passwd和shadow文件的帮助文件
[root@node1 ~]# whatis shadow
shadow (3) - 加密密码文件工具函数
shadow (5) - 影子化了的密码文件
[root@node1 ~]# man 5 shadow 可以查看相关用法
[root@node1 ~]# whatis passwd
sslpasswd (1ssl) - compute password hashes
passwd (1) - update user's authentication tokens
passwd (5) - password file
[root@node1 ~]# man 5 passwd
passwd
修改秘钥属性有passwd,chage,usermod方法,但是只有管理员可以操作
passwd USERNAME
-e YYYY-MM-DD
-i 非活动天数
-n 密码最短使用天数
-x 最长使用天数
-w 警告天数
修改密码示例:
点击跳转示例4
chage
chage USERNAME
-d 修改最近一次密码修改时间
-m 最短使用天数
-M 修改最长使用天数
-W 警告天数
-I 非活动天数
-E 过期时间
usermod
usermod USERNAME
-e YYYY-MM-DD 过期时间
-i day 非活动天数
usermod 修改用户属性
可以修改用户属性
usermod:
-u UID
-g GID
-G GID 修改额外组,覆盖原来的额外组
-a -G 保留原来的额外组,并追加新GID
-c COMMENT
-s /PATH/TO/SHELL
-l NEW_NAME 修改用户的登录名称
-d /path/to/somewhere 修改家目录
-m -d /path/to/somewhere 修改家目录,并将原家目录中的文件移动过去
-r 创建系统组
每个家目录是由系统从/etc/skel
目录中的隐藏文件生成的默认家目录。
修改用户属性示例:
点击跳转示例3
点击跳转示例5
userdel 删除用户
不会删除用户家目录
userdel USERNAME
2.组管理
groupadd 创建组
创建用户时,会给用户创建一个私有组(用户基本的组),除此之外的组成为额外组,系统用户的组称为系统组。
groupadd GRPNAME
-g 创建组的时候指定GID
/etc/group文件存放组的信息
组名:密码占位符:GID:以此组为额外组的用户列表
新建组示例:
点击跳转示例1
groupmod 修改组
相当于操作/etc/group文件夹
groupmod 修改组属性
-g GID
-n NEW_NAME
groupdel 删除组
groupdel GRPNAME
gpasswd 修改组的密码
当其他用户不属于这个组时,但需要临时使用这个组,就需要组密码,才能使用这个组
gpasswd GROUPNAME
组密码存放在/etc/gshadow目录下,格式如下
hellogrp:$6$Lt7iB/9mtcO/$AJ1NGZFNOSO7dN96ZUrGThD6vN.1r0IpIUDfgfRA9WUBAScaBz3RrFXns.q.wMp4DOxfkv2KzfJMVb3o5u6Fe0::
组名:组密码:管理员:成员
newgrp 切换用户的基本组
newgrp GROUPNAME
临时切换当前用户的基本组,退出使用exit
修改组密码示例:
点击跳转示例6
3.示例
示例1
创建一个用户mandriva,其ID号为2002,基本组为distro(组ID为3003),附加组为linux
groupadd -g 3003 distro
groupadd linux
useradd -u 2002 -g distro -G linux mandriva
创建结果如下
[root@node1 ~]# tail -2 /etc/group
linux:x:1001:mandriva
distro:x:3003:
[root@node1 ~]# tail -1 /etc/passwd
mandriva:x:2002:3003::/home/mandriva:/bin/bash
示例2
创建一个用户fedora,其全名为Fedora Community,默认shell为tcsh;
useradd -c "Fedora Community" -s /bin/tcsh fedora
创建结果如下
[root@node1 ~]# tail -1 /etc/passwd
fedora:x:2003:2003:Fedora Community:/home/fedora:/bin/tcsh
示例3
修改mandriva的ID号为4004,基本组为linux,附加组为distro和fedora
usermod -u 4004 -g linux -G distro,fedora mandriva
创建结果如下
[root@node1 ~]# id mandriva
uid=4004(mandriva) gid=1001(linux) 组=1001(linux),3003(distro),2003(fedora)
示例4
给fedora加密码,并设置其密码最短使用期限为2天,最长为50天
passwd fedora
passwd -n 2 -x 50 fedora
或者
chage -m 2 -M 50 fedora
结果如下
[root@node1 ~]# id fedora
uid=2003(fedora) gid=2003(fedora) 组=2003(fedora)
[root@node1 ~]# passwd fedora
更改用户 fedora 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@node1 ~]# passwd -n 2 -x 50 fedora
调整用户密码老化数据fedora。
passwd: 操作成功
示例5
将mandriva的默认shell改为/bin/bash
usermod -s /bin/bash mandriva
示例6
创建一个hellogrp组,设置密码;并且使用fedora用户基本组切换为hellogrp,创建一个1.txt文件
[root@node1 ~]# groupadd hellogrp
[root@node1 ~]# gpasswd hellogrp
正在修改 hellogrp 组的密码
新密码:
请重新输入新密码:
[root@node1 ~]# su - fedora
[fedora@node1 ~]$ cd /tmp
[fedora@node1 /tmp]$ id
uid=2003(fedora) gid=2003(fedora) 组=2003(fedora)
[fedora@node1 /tmp]$ touch 1.txt
[fedora@node1 /tmp]$ ls -l
总用量 0
-rw-rw-r-- 1 fedora fedora 0 5月 1 15:45 1.txt
[fedora@node1 /tmp]$ newgrp hellogrp
密码:
[fedora@node1 /tmp]$ touch 2.txt
[fedora@node1 /tmp]$ ls -l
总用量 0
-rw-rw-r-- 1 fedora fedora 0 5月 1 15:45 1.txt
-rw-r--r-- 1 fedora hellogrp 0 5月 1 15:46 2.txt
[fedora@node1 /tmp]$ id
uid=2003(fedora) gid=4006(hellogrp) 组=4006(hellogrp),2003(fedora)
[fedora@node1 /tmp]$ exit
exit
如果切换到该用户已有的额外组,则不需要输入组密码