Linux用户及用户组管理

马哥网络教育22期第三周练习

Linux用户及用户组管理

Linux是个多用户多任务的分时操作系统,所有一个要使用系统资源的用户都必须先向系统管理员申请一个账号,然后以这个账号的身份进入系统。用户的账号一方面能帮助系统管理员对使用系统的用户进行跟踪,并控制他们对系统资源的访问;另一方面也能帮助用户组织文件,并为用户提供安全性保护。每个用户账号都拥有一个惟一的用户名和用户口令。用户在登录时键入正确的用户名和口令后,才能进入系统和自己的主目录。

 实现用户账号的管理,要完成的工作主要有如下几个方面:

        a.用户账号的添加、删除和修改。

        b.用户口令的管理。

        c.用户组的管理。

Linux用户组管理

用户组(group)就是具有相同特征的用户(user)的集合体;每个用户都有一个用户组,系统能对一个用户组中的所有用户进行集中管理。

用户组的管理涉及用户组的添加、删除和修改。组的增加、删除和修改实际上就对/etc/group文件的更新。

系统文件

完成用户管理的工作有许多种方法,不过每一种方法实际上都是对有关的系统文件进行修改。与用户和用户组相关的信息都存放在一些系统文件中,这些文件包括/etc/passwd,/etc/shadow,/etc/group等。

    • /etc/passwd :是用户管理工作涉及的最重要的一个文件;记录了每个用户的一些基本属性;这个文件对所有用户都是可读的;

用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
    • /etc/shadow :记录行和/etc/passwd中的一一对应;由pwconv命令根据/etc/passwd中的数据自动产生;

登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
    • /etc/group :用户组的所有信息都存放在此文件中;

组名:口令:组标识号:组内用户列表
mail:x:12:postfix
man:x:15:

用户组管理命令
    • groupadd命令:添加用户组

      • 使用格式:

        • groupadd [选项] GROUP

        • 选项:

          • -g GID :指定用户的用户号,如果同时有-o选项,则能重复使用其他用户的标识号;

          • -G :用户能够支持的用户组;

          • -o :一般和-g选项同时使用,表示新用户组的GID能和系统已有用户组的GID相同;

示例:创建组distro,其GID为2016;

~]# groupadd -g 2016 distro
    • groupdel命令:删除用户组

      • 使用格式:

        • groupdel [选项] GROUP

示例:删除用户组test1

~]# cat /etc/group | grep test
test1:x:2017:
test2:x:2018:
test3:x:2019:
~]# groupdel test1
~]# cat /etc/group | grep test
test2:x:2018:
test3:x:2019:
    • groupmod命令:修改用户组属性

      • 使用格式:

        • groupmod [选项] GROUP

        • 选项:

          • -g GID :为用户组指定新的组标识号;

          • -o :和-g选项同时使用,用户组的新GID能和系统已有用户组的GID相同;

          • -n :新用户组,将用户组的名字改为新名字;

示例:将test2的组标识号改为3329

~]# groupmod -g 3329 test2
~]# cat /etc/group | grep test
test2:x:3329:
test3:x:2019:
用户管理命令
    • useradd命令:添加用户

      • 使用格式:

        • useradd [选项] 用户

        • 选项:

          • -c :指定一段注释性描述;

          • -d :目录,指定用户主目录,如果此目录不存在,则同时使用-m选项,能创建主目录;

          • -g :用户组,指定用户所属的用户组;

          • -G :用户组,用户组,指定用户所属的附加组;

          • -s :Shell文件,指定用户的登录Shell;

          • -u :用户号,指定用户的用户号,如果同时有-o选项,则能重复使用其他用户的标识号;

          • -p :这个命令是需求提供md5码的加密口令,普通数字是不行的;

          • -r :创建一个系统账户;

示例:创建用户mandriva,其ID号为1005,基本组为distro

~]# useradd -g distro -u 1005 mandriva
~]# less /etc/passwd | grep mandriva
mandriva:x:1005:2016::/home/mandriva:/bin/bash
    • userdel命令:删除用户

      • 使用格式:

        • userdel [选项] 用户

        • 选项:

          • -r :用户主目录中的文件将随用户主目录一起删除;

          • -f :强制删除用户账户,甚至用户仍然在登录状态;

          •   注意:此选项危险,可能会破坏系统的稳定性;

示例:删除用户mageia及其父目录

~]# userdel -r mageia
    • usermod命令:修改用户账户

      • 使用格式:

        • usermod [选项] 用户

        • 选项:

          • -a :将用户添加到附加组;只能和 -G 选项一起使用;

          • -d :用户新的登录目录;

          • -e :用户将被禁用的日期;

          • -f :密码过期之后,账户被彻底禁用之前的天数;

          • -g :用户的新初始登录组的组名或数字代号;

          • -G :用户还属于的附加组列表;组之间使用逗号分隔,没有空格;

          • -L :锁定用户的密码;

          • -m :将用户的主目录移动到新位置;

          • -o :可以将用户 ID 改为非唯一的值;

          • -s :用户的新登录 shell 的名称;

          • -u :用户 ID 的新数值;

示例:修改用户UID号

~]# id -u yuanfei
2000
~]# usermod -u 3000 yuanfei
~]# id -u yuanfei
3000
用户口令管理

用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,是被系统锁定的,无法使用,必须为其指定口令后才能使用,即使是空口令。超级管理员用户能为自己和其他用户指定口令,普通用户只能修改自己的口令;

    • passwd命令:添加及修改用户口令

      • 使用格式:

        • passwd [选项] [用户]

        • 选项:

          • -f :强制执行;

          • -g :修改群组密码;

          • -i :过期后停止用户账号;

          • -k :用于更改用户的有效口令,无效口令则保留原来的状态

          • -l :锁定用户的口令

          • -u :解锁,linux不允许创建密码为空的用户,-f可以解除这种保护;

          • -d :删除使用者的密码, 只有具备超级用户权限的使用者方可使用;

          • -n :修改密码的最小天数;

          • -x :修改密码的最大天数;

          • -i :密码有效期;

          • -w :密码过期警告时间;

          • -S :显示简短密码的信息;

          • –stdin:从标准输入中读入新密码(此时可以看见设置的密码);

示例:为用户yuanfei添加口令optios@123

~]# passwd yuanfei
更改用户 yuanfei 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
用户、用户组及口令组合使用示例

示例1:创建组distro,其GID为2016;

~]# groupadd -g 2016 distro
~]# less /etc/group | grep distro
distro:x:2016:

示例2:创建用户mandriva, 其ID号为1005;基本组为distro;

~]# useradd -u 1005 -g distro mandriva
~]# less /etc/passwd | grep mandriva
mandriva:x:1005:2016::/home/mandriva:/bin/bash

示例3:创建用户mageia,其ID号为1100,家目录为/home/linux;

~]# useradd -u 1100 -d /home/linux mageia
~]# less /etc/passwd | grep mageia
mageia:x:1100:1100::/home/linux:/bin/bash

示例4:给用户mageia添加密码,密码为mageedu;

~]# passwd mageia
更改用户 mageia 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

示例5:删除mandriva,但保留其家目录;

~]# userdel mandriva
~]# ls /home
linux  mandriva

示例6:创建用户slackware,其ID号为2002,基本组为distro,附加组peguin;

~]# useradd -u 2002 -g distro -G peguin slackware
~]# groups slackware
slackware : distro peguin

示例7:修改slackware的默认shell为/bin/tcsh;

~]# usermod -s /bin/tcsh slackware
~]# less /etc/passwd |grep slackware
slackware:x:2002:2016::/home/slackware:/bin/tcsh

示例8:为用户slackware新增附加组admins;

~]# usermod -a -G admins slackware
~]# groups slackware
slackware : distro peguin admins

示例9:为slackware添加密码,且要求密码最短使用期限为3天,最长为180天,警告为3天;

~]# passwd slackware
更改用户 slackware 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
~]# passwd -n 3 -x 180 -w 3 slackware
调整用户密码老化数据slackware。
passwd: 操作成功
~]# cat /etc/shadow | grep slackware
slackware:$6$qCKs38NU$5zBGHNAKeD75hhI55kcZ82uciLI/fJEwPM6PZCymVnZpFqd5jwYdU3CrWk2d3SmN4XPUMYKa46DnjLV/m2ItO0:17060:3:180:3:::

示例10:添加用户openstack,其ID号为3003, 基本组为clouds,附加组为peguin和nova;

~]# useradd -u 3003 -g clouds -G peguin,nova openstack

示例11:添加系统用户mysql,要求其shell为/sbin/nologin;

~]# useradd -r mysql -s /sbin/nologin
~]# id mysql
uid=996(mysql) gid=994(mysql) 组=994(mysql)

示例12:使用echo命令,非交互式为openstack添加密码;

~]# echo "test1@123" | passwd --stdin openstack
更改用户 openstack 的密码 。
passwd:所有的身份验证令牌已经成功更新。

linux常用命令使用示例

常用命令介绍

cut命令:文本截取工具

      • 使用格式:

        • cut OPTION… [FILE]…

        • 选项:

          • -d: 表示以什么作为分隔符,进行切割,默认是空格;

          • -f: 选择哪几项进行输出,如:f1表示切割出来的第一项;

uniq命令:用于报告或忽略文件中的重复行;

      • 使用格式:

        • uniq [OPTION]… [INPUT [OUTPUT]]

        • 选项:

          • -c或——count:在每列旁边显示该行重复出现的次数;

          • -d或–repeated:仅显示重复出现的行列;

          • -f<栏位>或–skip-fields=<栏位>:忽略比较指定的栏位;

          • -s<字符位置>或–skip-chars=<字符位置>:忽略比较指定的字符;

          • -u或——unique:仅显示出一次的行列;

          • -w<字符位置>或–check-chars=<字符位置>:指定要比较的字符;

sort命令:将文件进行排序,并将排序结果标准输出

      • 使用格式:

        • sort [OPTION]… [FILE]…

        • sort [OPTION]… –files0-from=F

        • 选项:

          • -b :忽略每行前面开始出的空格字符;

          • -c :检查文件是否已经按照顺序排序;

          • -d :排序时,处理英文字母、数字及空格字符外,忽略其他的字符;

          • -f :排序时,将小写字母视为大写字母;

          • -i :排序时,除了040至176之间的ASCII字符外,忽略其他的字符;

          • -m :将几个排序号的文件进行合并;

          • -M :将前面3个字母依照月份的缩写进行排序;

          • -n :依照数值的大小排序;

          • -u :在输出行中去除重复行;

          • -o<输出文件> :将排序后的结果存入制定的文件;

          • -r :以降序排序;

          • -t<分隔字符> :指定排序时所用的栏位分隔字符;

          • -k<number> :指定按第几列排序,一般和 -t 一起使用;

          • +<起始栏位>-<结束栏位> :以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位;

tail命令:输入文件中的尾部内容

      • 使用格式:

        • tail [OPTION]… [FILE]…

        • 选项:

          • –retry:即是在tail命令启动时,文件不可访问或者文件稍后变得不可访问,都始终尝试打开文件。使用此选项时需要与选项“——follow=name”连用;

          • -c<N> :输出文件尾部的N(N为整数)个字节内容;

          • -f<name/descriptor> :显示文件最新追加的内容。“name”表示以文件名的方式监视文件的变化。“-f”与“-fdescriptor”等效;

          • -F:与选项“-follow=name”和“–retry"连用时功能相同;

          • -n<N> :输出文件的尾部N(N位数字)行内容。

          • –pid=<进程号>:与“-f”选项连用,当指定的进程号的进程终止后,自动退出tail命令;

          • -q :当有多个文件参数时,不输出各个文件名;

          • -s<秒数> :与“-f”选项连用,指定监视文件变化时间隔的秒数;

          • -v :当有多个文件参数时,总是输出各个文件名;

head命令:显示文件的开头的内容

      • 使用格式:

        • head [OPTION]… [FILE]…

        • 选项:

          • -n<数字>:指定显示头部内容的行数;

          • -c<字符数>:指定显示头部内容的字符数;

          • -v:总是显示文件名的头信息;

          • -q:不显示文件名的头信息;

last命令:显示用户最近登录信息

      • 使用格式:

        • last [选项] [name…]  [tty…]

        • 选项:

          • -a:把从何处登入系统的主机名称或ip地址,显示在最后一行;

          • -d:将IP地址转换成主机名称;

          • -f <记录文件>:指定记录文件。

          • -n <显示列数>或-<显示列数>:设置列出名单的显示列数;

          • -R:不显示登入系统的主机名称或IP地址;

          • -x:显示系统关机,重新开机,以及执行等级的改变等信息;

find命令:用来在指定目录下查找文件

      • 使用格式:

        • find [options] [expression]

        • 选项:

          • -amin<分钟>:查找在指定时间曾被存取过的文件或目录,单位以分钟计算;

          • -anewer<参考文件或目录>:查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录;

          • -atime<24小时数>:查找在指定时间曾被存取过的文件或目录,单位以24小时计算;

          • -cmin<分钟>:查找在指定时间之时被更改过的文件或目录;

          • -cnewer<参考文件或目录>查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;

          • -ctime<24小时数>:查找在指定时间之时被更改的文件或目录,单位以24小时计算;

          • -daystart:从本日开始计算时间; -depth:从指定目录下最深层的子目录开始查找;

          • -expty:寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录;

          • -exec<执行指令>:假设find指令的回传值为True,就执行该指令;

          • -false:将find指令的回传值皆设为False;

          • -fls<列表文件>:此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件;

          • -follow:排除符号连接;

          • -fprint<列表文件>:此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件;

          • -fprint0<列表文件>:此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件;

          • -fprintf<列表文件><输出格式>:此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件;

          • -fstype<文件系统类型>:只寻找该文件系统类型下的文件或目录;

          • -gid<群组识别码>:查找符合指定之群组识别码的文件或目录;

          • -group<群组名称>:查找符合指定之群组名称的文件或目录;

          • -ilname<范本样式>:此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别;

          • -iname<范本样式>:此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别;

          • -inum<inode编号>:查找符合指定的inode编号的文件或目录;

          • -ipath<范本样式>:此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别;

          • -iregex<范本样式>:此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别;

          • -links<连接数目>:查找符合指定的硬连接数目的文件或目录;

          • -iname<范本样式>:指定字符串作为寻找符号连接的范本样式;

          • -ls:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出;

          • -maxdepth<目录层级>:设置最大目录层级;

          • -mindepth<目录层级>:设置最小目录层级;

          • -mmin<分钟>:查找在指定时间曾被更改过的文件或目录,单位以分钟计算;

          • -mount:此参数的效果和指定“-xdev”相同;

          • -mtime<24小时数>:查找在指定时间曾被更改过的文件或目录,单位以24小时计算;

          • -name<范本样式>:指定字符串作为寻找文件或目录的范本样式;

          • -newer<参考文件或目录>:查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录;

          • -nogroup:找出不属于本地主机群组识别码的文件或目录;

          • -noleaf:不去考虑目录至少需拥有两个硬连接存在;

          • -nouser:找出不属于本地主机用户识别码的文件或目录;

          • -ok<执行指令>:此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令;

          • -path<范本样式>:指定字符串作为寻找目录的范本样式;

          • -perm<权限数值>:查找符合指定的权限数值的文件或目录;

          • -print:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串;

          • -print0:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行;

          • -printf<输出格式>:假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定;

          • -prune:不寻找字符串作为寻找文件或目录的范本样式;

          • -regex<范本样式>:指定字符串作为寻找文件或目录的范本样式;

          • -size<文件大小>:查找符合指定的文件大小的文件;

          • -true:将find指令的回传值皆设为True;

          • -typ<文件类型>:只寻找符合指定的文件类型的文件;

          • -uid<用户识别码>:查找符合指定的用户识别码的文件或目录;

          • -used<日数>:查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算;

          • -user<拥有者名称>:查找符和指定的拥有者名称的文件或目录;

          • -xdev:将范围局限在先行的文件系统中;

          • -xtype<文件类型>:此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查。

wc命令:用来计算数字。利用wc指令我们可以计算文件的Byte数、字数或是列数,若不指定文件名称,或是所给予的文件名为“-”,则wc指令会从标准输入设备读取数据。

      • 使用格式:

        • wc [OPTION]… [FILE]…

        • wc [OPTION]… –files0-from=F

        • 选项:

          • -c或–bytes或——chars:只显示Bytes数;

          • -l或——lines:只显示列数;

          • -w或——words:只显示字数;

命令使用示例

1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。

~]# who | cut -d " " -f1 | uniq
root

2、取出最后登录到当前系统的用户的相关信息。

~]# last | head -n 1
root     pts/0        192.168.1.105    Fri Sep 16 18:10   still logged in

3、取出当前系统上被用户当作其默认shell的最多的那个shell。

~]# cut -d ":" -f7 /etc/passwd | uniq -c | sort -n | tail -1
     13 /sbin/nologin

4、将/etc/passwd中的第三个字段数值最大的后10个用户的信息全部改为大写后保存至/tmp/maxusers.txt文件中。

~]# sort -t ":" -k 3 -n /etc/passwd | tail -10 | tr [a-z] [A-Z] > /tmp/maxusers.txt
~]# cat /tmp/maxusers.txt
NOBODY:X:99:99:NOBODY:/:/SBIN/NOLOGIN
AVAHI-AUTOIPD:X:170:170:AVAHI IPV4LL STACK:/VAR/LIB/AVAHI-AUTOIPD:/SBIN/NOLOGIN
MYSQL:X:996:994::/HOME/MYSQL:/SBIN/NOLOGIN
POLKITD:X:997:995:USER FOR POLKITD:/:/SBIN/NOLOGIN
SYSTEMD-NETWORK:X:998:996:SYSTEMD NETWORK MANAGEMENT:/:/SBIN/NOLOGIN
SYSTEMD-BUS-PROXY:X:999:997:SYSTEMD BUS PROXY:/:/SBIN/NOLOGIN
MAGEIA:X:1100:1100::/HOME/LINUX:/BIN/BASH
SLACKWARE:X:2002:2016::/HOME/SLACKWARE:/BIN/TCSH
OPENSTACK:X:3003:3332::/HOME/OPENSTACK:/BIN/BASH
INUX:X:3004:3004::/HOME/INUX:/BIN/BASH

5、取出当前主机的IP地址,提示:对ifconfig命令的结果进行切分。

~]# ifconfig eth0 |grep "inet addr" | cut -d ":" -f2 |cut -d " " -f1
192.168.1.108

6、列出/etc目录下所有以.conf结尾的文件的文件名,并将其名字转换为大写后保存至/tmp/etc.conf文件中。

~]# find /etc -name *.conf |tr [a-z] [A-Z] > /tmp/etc.conf
~]# cat /tmp/etc.conf
/ETC/RESOLV.CONF
/ETC/PKI/CA-TRUST/CA-LEGACY.CONF
/ETC/YUM/PLUGINCONF.D/FASTESTMIRROR.CONF

7、显示/var目录下一级子目录或文件的总个数。

~]# ls /var |wc -l
20

8、取出/etc/group文件中第三个字段数值最小的10个组的名字。

~]# sort -t ":" -k 3 -n /etc/group | head -10 | cut -d ":" -f1
root
bin
daemon
sys
adm
tty
disk
lp
mem
kmem

9、将/etc/fstab和/etc/issue文件的内容合并为同一个内容后保存至/tmp/etc.test文件中。

~]# cat /etc/{fstab,issue} > /tmp/etc.test

原创文章,作者:N22-无锡-沉默,如若转载,请注明出处:http://www.178linux.com/41208

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-19 17:55

    很好,把一些常用的命令都列出来了,不过排版还可以在稍微的改一些,加油