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