Linux用户和组管理
今天我们来介绍Linux的用户和组管理,在Linux系统上,用户管理是基于用户名和密码的方式进行资源分配的。
- ** Linux上的用户即Username/UID分为**: <1.>管理员:root , 0
<2.>普通用户:1-65535 普通用户又分为: 系统用户:1-499(Centos6系统) 1-999(Centos7系统)对守护进程获取资源进行权限分配; 为了能够让那后台进程或服务类进程以非管理员的身份运行,通常需要为此创建多个普通用户;这类用户从不用登录系统; 登录用户:500-60000(Centos6系统)1000-60000(Centos7系统)通过交互式方式登录。
- ** Linux组即Groupname/GID分为**:
<1.>管理员组:root , 0
<2.>普通组:1-65535 普通组又分为:系统组和非系统组,我们通常就把非系统组叫做普通组 系统组:1-499(Centos6系统) 1-999(Centos7系统) 非系统组:500+(Centos6系统)1000+(Centos7系统)
对于一个用户而言可以有多个不同的组,分别称为用户的基本组(主组)和附加组:基本组名与用户名相同,且仅包含一个用户,也叫私有组。基本组以外的组属于用户的附加组(或者额外组); Linux用户和组相关的配置文件 /etc/passwd,该文件记录了用户及其属性信息(名称、UID、基本组ID等等);
name:password:UID:GID:GECOS:directory:shell
name: 用户名
password:可以是加密的密码,也可是占位符x;
UID:
GID:用户所属的主组的ID号;
GECOS:注释信息
directory:用户的家目录;
shell:用户的默认shell,登录时默认shell程序;
/etc/group ,该文件记录了组及其属性信息;
group_name:password:GID:user_list
user_list:该组的用户成员;以此组为附加组的用户的用户列表;
/etc/shadow ,该文件记录了用户密码及其相关属性;
用户名:加密的密码:最近一次修改密码的时间:最短使用期限:最长使用期限:警告期段:过期期限:保留字段
/etc/gshadow ,该文件记录了组密码及其相关属性;
密码的使用策略:
为了保证密码的安全性可靠性; 1、使用随机密码; 2、最短长度不要低于8位; 3、应该使用大写字母、小写字母、数字和标点符号四类字符中至少三类; 4、定期更换; 在Linux登录认证过程中是通过比对事先存储的,与登录时提供的信息是否一致; password:位于**/etc/shadow** 和** /etc/gshadow** 两个文件中
- ** 加密算法**: 对称加密:加密和解密使用同一个密码; 非对称加密:加密和解密使用的一对儿密钥; 密钥对儿: 公钥:public key 私钥: private key 单向加密:只能加密,不能解密;提取数据特征码;
Linux用户和组管理常用命令
groupadd命令:添加组
groupadd [选项] group_name
-g GID:指定GID;默认是上一个组的GID+1;
-r: 创建系统组;
groupmod命令:修改组属性
groupmod [选项] GROUP
-g GID:修改GID;
-n new_name:修改组名;
groupdel命令:删除组
groupdel [选项] GROUP
useradd命令:创建用户
useradd [选项] 登录名
-u, --uid UID:指定UID;
-g, --gid GROUP:指定基本组ID,此组得事先存在;
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:指明用户所属的附加组,多个组之间用逗号分隔;
-c, --comment COMMENT:指明注释信息;
-d, --home HOME_DIR:以指定的路径为用户的家目录;通过复制/etc/skel此目录并重命名实现;指定的家目录路径如果事先存在,则不会为用户复制环境配置文件;
-s, --shell SHELL:指定用户的默认shell,可用的所有shell列表存储在/etc/shells文件中;
-r, --system:创建系统用户;
注意:创建用户时的诸多默认设定配置文件为/etc/login.defs
useradd -D:显示创建用户的默认配置;
useradd -D 选项: 修改默认选项的值;
修改的结果保存于/etc/default/useradd文件中;
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:删除用户时一并删除其家目录;
练习
1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。
who | cut -d ' ' -f1 | sort -u
who:查看当前已经登陆的所有用户的详细信息 cut -d ‘ ‘ -f1:以空格为界显示每行第一列 sort -u :在输出行中去除重复行。
2、取出最后登录到当前系统的用户的相关信息。
who | cut -d' ' -f1 | tail -1 | xargs id
tail -1:查看最后一行 xargs :构造参数列表并运行命令。(将前面命令输出的值作为参数) who查看的登陆用户默认是按时间排列的,所以只用显示最后一行。 结果:
[root@pikachu3154 ~]# who | cut -d ' ' -f1 | sort -u
Pikachu
root
3、取出当前系统上被用户当作其默认shell的最多的那个shell。
cut -d: -f7 /etc/passwd | uniq -c | sort -n | tail -1
结果:
[root@pikachu3154 ~]# cut -d: -f7 /etc/passwd | uniq -c | sort -n | tail -1
38 /sbin/nologin
4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。
sort -t: -k3 -n /etc/passwd | tail | tr 'a-z' 'A-Z' > /tmp/maxuser.txt
结果:
[root@pikachu3154 ~]# sort -t: -k3 -n /etc/passwd | tail | tr 'a-z' 'A-Z' > /tmp/maxuser.txt
[root@pikachu3154 ~]# cat /tmp/maxuser.txt
CHRONY:X:992:987::/VAR/LIB/CHRONY:/SBIN/NOLOGIN
SETROUBLESHOOT:X:993:990::/VAR/LIB/SETROUBLESHOOT:/SBIN/NOLOGIN
SASLAUTH:X:994:76:SASLAUTHD USER:/RUN/SASLAUTHD:/SBIN/NOLOGIN
GLUSTER:X:995:992:GLUSTERFS DAEMONS:/VAR/RUN/GLUSTER:/SBIN/NOLOGIN
COLORD:X:996:993:USER FOR COLORD:/VAR/LIB/COLORD:/SBIN/NOLOGIN
LIBSTORAGEMGMT:X:997:994:DAEMON ACCOUNT FOR
LIBSTORAGEMGMT:/VAR/RUN/LSM:/SBIN/NOLOGIN
UNBOUND:X:998:995:UNBOUND DNS RESOLVER:/ETC/UNBOUND:/SBIN/NOLOGIN
POLKITD:X:999:998:USER FOR POLKITD:/:/SBIN/NOLOGIN
PIKACHU:X:1000:1000:PIKACHU:/HOME/PIKACHU:/BIN/BASH
NFSNOBODY:X:65534:65534:ANONYMOUS NFS USER:/VAR/LIB/NFS:/SBIN/NOLOGIN
5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。
ifconfig ens33 | grep 'inet' | awk '{print$2}' | head -1
结果:
[root@pikachu3154 ~]# ifconfig ens33 | grep 'inet' | awk '{print$2}' | head -1
192.168.160.128
6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。
find /etc/ -name "*.conf" | tr 'a-z' 'A-Z' > /tmp/etc.conf
7、显示/var目录下一级子目录或文件的总个数。
ls -d /var/* | wc -l
结果:
[root@pikachu3154 ~]# ls -d /var/* | wc -l
24
8、取出/etc/group文件中第三个字段数值最小的10个组的名字。
sort -t: -k3 -n /etc/group | cut -d: -f1 | head
结果:
[root@pikachu3154 ~]# sort -t: -k3 -n /etc/group | cut -d: -f1 | head
root
bin
daemon
sys
adm
tty
disk
lp
mem
kmem
9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。
cat /etc/fstab /etc/issue > /tmp/etc.test
结果:
[root@pikachu3154 ~]# cat /etc/fstab /etc/issue > /tmp/etc.test
[root@pikachu3154 ~]# cat /tmp/etc.test
#
# /etc/fstab
# Created by anaconda on Fri Aug 10 15:19:41 2018
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root / xfs defaults 0 0
UUID=6e84d278-3f59-4ba0-8bd6-2ff0e6a22c12 /boot xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
\S
Kernel \r on an \m
10、请总结描述用户和组管理类命令的使用方法并完成以下练习:
(1)、创建组distro,其GID为2016;
groupadd distro -g 2016
(2)、创建用户mandriva, 其ID号为1005;基本组为distro;
useradd mandriva -u 1005 -g distro
(3)、创建用户mageia,其ID号为1100,家目录为/home/linux;
useradd mageia -u 1100 -s /home/linux
(4)、给用户mageia添加密码,密码为mageedu;
echo"mageedu"|passwd–stdin mageia
(5)、删除mandriva,但保留其家目录;
userdel mandriva
(6)、创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;
useradd slackware -u 2002 -g distro -G peguin
(7)、修改slackware的默认shell为/bin/tcsh;
usermod slackware -s /bin/tcsh
(8)、为用户slackware新增附加组admins;
usermod slackware -a -G admins