1、用户管理
Linux是一个多用户、多任务的操作系统。
Linux系统的管理员之所以是root,是因为该用户的身份号码即UID的数值为0,UID-就相当于我们的身份证号码一样具有唯一性,因此可通过用户的UID值来判断用户身份。
- 管理员UID为0:系统的管理员用户。
- 系统用户UID为1~999: Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
- 普通用户UID 从1000开始:是由管理员创建的用于日常工作的用户。需要注意的是,UID是不能冲突的,而且管理员创建的普通用户的UID默认是从1000开始的(即使前面有闲置的号码)。
1.1 创建新用户
在root用户权限下新建用户:
语法:
useradd (选项) (参数)
示例:
useradd -m xxx
选项 | 说明 |
---|---|
-d | 指定用户的家目录 (默认:/home/username) |
-m | 自动创建用户主目录,主目录的名字就是用户名 |
-g | 指定用户所属的用户组,默认不指定会自动创建一个同名的用户组 如果指定一个初始的用户基本组,该组必须存在 |
-G | 指定一个或多个扩展组 |
-N | 不创建与用户同名的基本用户组 |
-e | 账户的到期时间,格式为:YYYY-MM-DD |
-u | 指定该用户的默认UID |
-s | 指定该用户的默认Shell解释器 |
示例一:
查看所有用户信息的文件:
cat /etc/passwd
查看用户组:
cat /etc/group
说明:
- useradd 命令的使用需要使用管理员权限,前面需要加上 sudo
- 创建用户如果不指定用户组,默认会自动创建一个同名的用户组
- 查看用户是否创建成功,可以查看/etc/passwd这个文件
- 查看用户组是否创建成功,可以查看/etc/group这个文件
passwd文件中的每项信息说明,以dgw:x:0:0:root:/root:/bin/bash为例:
- 第一个:用户名
- 第二个:密码占位符
- 第三个:uid, 用户id
- 第四个:gid, 用户所在组id
- 第五个:用户描述, 可选,
- 第六个:用户的主目录所在位置
- 第七个:用户所用 shell 的类型,一般由bash或者sh,默认不设置是sh类型
group文件中的每项信息说明, 以laowang:x:1001:为例:
- 第一个:用户组名
- 第二个:用户组密码占位符,一般Linux系统的用户组都没有密码的
- 第三个:组id
id命令查看用户信息:
命令 | 说明 |
---|---|
id | 查看用户信息 |
每项信息说明:
uid=1001(dgw) gid=1001(dgw) 组=1001(dgw)
- 第一个: uid 表示用户id
- 第二个: gid 表示用户组id
- 第三个: 组 表示用户所在的用户组(附加组)
示例二:
1.2 修改用户信息
有些时候不小心在useradd的时候加入了错误的设定数据,此时我们当然可以直接到/etc/passwd或/etc/shadow中去修改相对应字段的数据。
命令 | 说明 |
---|---|
usermod | 修改用户信息 |
语法:
usermod (选项) (参数)
usermod选项:
命令 | 说明 |
---|---|
-G | 设置一个附加组 【可以理解为干爸】 |
-g | 修改用户组 |
-c | 修改用户账号的备注文字 |
-d | 修改用户登入时的目录 |
-e | 修改账号的有效期限 |
-f | 修改在密码过期多少天即关闭该账号 |
-l | 修改用户账户名称 |
-L | 锁定用户密码,使密码无效 |
-s | 修改用户登入后所使用的shell |
-u | 修改用户ID |
-U | 解除密码锁定 |
示例一:
usermod -G root dgw
usermod -g keepmoving xxx
注意:增加附加组要在已有sudo权限的用户中添加。
示例二:
1.3 设置密码
passwd命令用于修改用户密码、过期时间、认证信息等。
语法:
passwd (选项) (参数)
选项:
- -d:删除密码,仅有系统管理者才能使用;
- -f:强制执行;
- -k:设置只有在密码过期失效后,方能更新;
- -I:锁住密码;
- -S:列出密码的相关信息,仅有系统管理者才能使用;
- -u:解开已上锁的帐号。
示例一:
在root用户下,对某个用户设置密码:
passwd xxx
注意:这儿是直接修改,不需要输入以前的密码进行验证。
示例二:
注意:新建的用户,为设置密码时,查看密码状态时为Locked状态。
示例三:
假设您有位同事正在度假,而且假期很长,那么可以使用passwd 命令禁止该用户登录系统,等假期结束回归工作岗位时,再使用该命令允许用户登录系统,而不是将其删除。这样既保证了这段时间内系统的安全;也避免承频繁添加、删除用户带来的麻烦。
1.4 查看密码
cat /etc/shadow
1.5 删除用户
命令 | 说明 |
---|---|
userdel | 删除用户 |
选项:
userdel [选项] 用户名
userdel命令选项:
选项 | 说明 |
---|---|
-r 用户名 | 删除用户主目录,必须要设置,否则用户主目录不会删除,即同时删除用户及用户家目录 |
-f | 强制删除用户 |
-r命令同时删除用户相关的文件:
- /etc/passwd
- /etc/shadow
- /home/username
示例一:
userdel -r dgw
注意:不能在当前用户删除本身的
注意:删除用户时,此时使用id已经查询不到当前删除的用户信息,同时默认同名的用户组也会被删除。
1.6 附加组
命令 | 说明 |
---|---|
gpasswd | 添加和删除附加组信息 |
gpasswd命令选项: 【-a -d 的使用方法是一样的】
选项 | 说明 |
---|---|
-a 用户名 | 给用户添加附加组 |
-d 用户名 | 给用户删除附加组 |
gpasswd -a dgw keepmoving
gpasswd -d dgw keepmoving
2、用户组管理
2.1 用户组
用户组(group)就是具有相同特征的用户(user)的集合体;比如有时我们要让多个用户具有相同的权限,比如查看、修改某一文件或执行某个命令,这时我们需要用户组,我们把用户都定义到同一用户组,我们通过修改文件或目录的权限,让用户组具有一定的操作权限,这样用户组下的用户对该文件或目录都具有相同的权限,这是我们通过定义组和修改文件的权限来实现的.
2.2 Linux用户和用户组的关系
用户和用户组的对应关系有以下4种:
- 一对一:一个用户可以存在一个组中,是组中的唯一成员;
- 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
- 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
- 多对多:多个用户可以存在多个组中,也就是以上3种关系的扩展。
2.3 添加用户组groupadd
语法:
groupadd (选项) (参数)
参数:
注意:
-r:创建系统工作组,系统工作组的组ID小于500;
示例一:
建立一个新组,并设置组ID加入系统:
groupadd -g 345 bigdata
2.4 修改用户组 groupmod
语法:
groupmod (选项) (参数)
选项:
示例一:
把建立bigdata组改为bigdata2并设置GID改为506:
groupmod -g 506 -n bigdata2 bigdata
2.5 删除用户组groupdel
语法:
groupdel (选项) (参数)
选项:
示例一:
groupdel dgw
示例二:
groupdel -f dgw
3、超级用户和伪用户
Linux下用户分为三类:超级用户、普通用户、伪用户:
- 超级用户:用户名为root,具有一切管理权限,UID为0,可以创建多个管理员。
- 普通用户:在默认情况下,普通用户UID是介于500~6000;
- 伪用户:这些用户的存在是为了方便系统管理,满足相应的系统进程对文件属主的要求。伪用户不能够登录,他的ID值介于1~499。
3.1 用户身份切换
由于超级权限在系统管理中的不可缺少的重要作用,为了完成系统管理任务,必须用到超级权限。
3.1.1 su
su命令就是切换用户的工具。
命令 | 说明 |
---|---|
su | 切换用户 |
语法格式:
su xxx
或者
su - xxx
示例一:
注意:
su命令与用户名之间有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强烈建议在切换用户身份时添加这个减号(-)。
3.1.2 sudo
sudo的全称为: super user dq。顾名思义:干超级用户才能干的事!所以Sudo最常用的功能就是提升一个命名的执行权限。
语法:
sudo [参数] 命令名称
参数:
[root@192 ~]# sudo --help
sudo - 以其他用户身份执行一条命令
usage: sudo -h | -K | -k | -V
usage: sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]
usage: sudo -l [-AknS] [-g group] [-h host] [-p prompt] [-U user] [-u user] [command]
usage: sudo [-AbEHknPS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] [VAR=value] [-i|-s] [<command>]
usage: sudo -e [-AknS] [-r role] [-t type] [-C num] [-g group] [-h host] [-p prompt] [-T timeout] [-u user] file ...
选项:
-A, --askpass 使用助手程序进行密码提示
-b, --background 在后台运行命令
-C, --close-from=num 关闭所有 >= num 的文件描述符
-E, --preserve-env 在执行命令时保留用户环境
--preserve-env=list 保留特定的环境变量
-e, --edit 编辑文件而非执行命令
-g, --group=group 以指定的用户组或 ID 执行命令
-H, --set-home 将 HOME 变量设为目标用户的主目录。
-h, --help 显示帮助消息并退出
-h, --host=host 在主机上运行命令(如果插件支持)
-i, --login 以目标用户身份运行一个登录 shell;可同时指定一条命令
-K, --remove-timestamp 完全移除时间戳文件
-k, --reset-timestamp 无效的时间戳文件
-l, --list 列出用户权限或检查某个特定命令;对于长格式,使用两次
-n, --non-interactive 非交互模式,不提示
-P, --preserve-groups 保留组向量,而非设置为目标的组向量
-p, --prompt=prompt 使用指定的密码提示
-r, --role=role 以指定的角色创建 SELinux 安全环境
-S, --stdin 从标准输入读取密码
-s, --shell 以目标用户运行 shell;可同时指定一条命令
-t, --type=type 以指定的类型创建 SELinux 安全环境
-T, --command-timeout=timeout 在达到指定时间限制后终止命令
-U, --other-user=user 在列表模式中显示用户的权限
-u, --user=user 以指定用户或 ID 运行命令(或编辑文件)
-V, --version 显示版本信息并退出
-v, --validate 更新用户的时间戳而不执行命令
-- 停止处理命令行参数
示例一:sudo -V
[root@192 ~]# sudo -V
Sudo 版本 1.8.23
当前选项:--build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --prefix=/usr --sbindir=/usr/sbin --libdir=/usr/lib64 --docdir=/usr/share/doc/sudo-1.8.23 --with-logging=syslog --with-logfac=authpriv --with-pam --with-pam-login --with-editor=/usr/bin/vi --with-env-editor --enable-gcrypt --with-ignore-dot --with-tty-tickets --with-ldap --with-ldap-conf-file=/etc/sudo-ldap.conf --with-selinux --with-passprompt=[sudo] password for %p: --with-linux-audit --with-sssd
Sudoers 策略插件版本 1.8.23
Sudoers 文件语法版本 46
Sudoers 路径:/etc/sudoers
nsswitch 路径:/etc/nsswitch.conf
ldap.conf 路径:/etc/sudo-ldap.conf
ldap.secret 路径:/etc/ldap.secret
认证方法: 'pam'
若使用了 syslog,用于记录日志的 syslog 设施:authpriv
用户认证成功时使用的 syslog 优先级:notice
用户认证不成功时使用的 syslog 优先级:alert
忽略 $PATH 中的“.”
在用户不在 sudoers 列表中时发送邮件
在用户第一次运行 sudo 时向他致辞
默认要求用户认证
root 可以运行 sudo
总是将 $HOME 设为目标用户的主目录
允许收集一些信息,以提供有用的错误消息
Visudo 将优先考虑 EDITOR 环境变量
设置 LOGNAME 和 USER 环境变量
日志文件折行的长度(0 则不折行):80
认证时间戳延时:18000.0 分钟
密码提示延时:18000.0 分钟
输入密码的尝试次数:3
要使用的 umask,或 0777 使用用户的:022
邮件程序路径:/usr/sbin/sendmail
邮件程序标志:-t
发送邮件的地址:root
邮件消息的主题行:*** SECURITY information for %h ***
密码错误消息:对不起,请重试。
致辞(lecture)状态文件夹的路径:/var/db/sudo/lectured
认证时间戳文件夹的路径:/run/sudo/ts
默认密码提示:[sudo] %p 的密码:
运行命令的默认用户:root
覆盖用户的 $PATH 变量的值:/sbin:/bin:/usr/sbin:/usr/bin
visudo 所使用的编辑器的路径:/usr/bin/vi
何时为“list”伪命令请求密码:any
何时为“verify”伪命令请求密码:all
>= 3 的文件描述符将会在执行命令前关闭
将环境重设为默认的变量集
要检查完整性的环境变量:
TZ
TERM
LINGUAS
LC_*
LANGUAGE
LANG
COLORTERM
要移除的环境变量:
*=()*
RUBYOPT
RUBYLIB
PYTHONUSERBASE
PYTHONINSPECT
PYTHONPATH
PYTHONHOME
TMPPREFIX
ZDOTDIR
READNULLCMD
NULLCMD
FPATH
PERL5DB
PERL5OPT
PERL5LIB
PERLLIB
PERLIO_DEBUG
JAVA_TOOL_OPTIONS
SHELLOPTS
BASHOPTS
GLOBIGNORE
PS4
BASH_ENV
ENV
TERMCAP
TERMPATH
TERMINFO_DIRS
TERMINFO
_RLD*
LD_*
PATH_LOCALE
NLSPATH
HOSTALIASES
RES_OPTIONS
LOCALDOMAIN
CDPATH
IFS
要保留的环境变量:
XAUTHORITY
_XKB_CHARSET
LINGUAS
LANGUAGE
LC_ALL
LC_TIME
LC_TELEPHONE
LC_PAPER
LC_NUMERIC
LC_NAME
LC_MONETARY
LC_MESSAGES
LC_MEASUREMENT
LC_IDENTIFICATION
LC_COLLATE
LC_CTYPE
LC_ADDRESS
LANG
USERNAME
QTDIR
PS2
PS1
MAIL
LS_COLORS
KDEDIR
HISTSIZE
HOSTNAME
DISPLAY
COLORS
解析 sudoers 时使用的区域设置:C
使用 zlib 压缩 I/O 日志
用于保存输入/输出日志的目录:/var/log/sudo-io
用于保存输入/输出日志的文件:%{seq}
在分配伪终端时向 utmp/utmpx 文件中添加一条记录
要使用的 PAM 服务名称:sudo
用于登录 shell 的 PAM 服务名称:sudo-i
尝试为目标用户建立 PAM 凭据
创建一个新的 PAM 会话来运行该命令
最大 I/O 日志序列号:0
启用 support netgroup 支持
在使用 sudoedit 编辑文件时检查上级目录是否可写
通过 组 插件查询未知的系统组
即使 sudo 无法写入审核日志也允许命令运行
即使 sudo 无法写入日志文件也允许命令允许
解析 sudoers 中的组并与 组 ID (而不是名字) 匹配
大于此数值的日志条目会分为多条 syslog 消息:960
I/O 日志文件要使用的文件模式:0600
根据文件描述符执行命令,而非根据路径:digest_only
认证时间戳记录的类型:tty
在匹配 用户 名时忽略大小写
在匹配 组 名时忽略大小写
Don't pre-resolve all group names
Perform PAM account validation management
本地 IP 地址和网络掩码对:
192.168.1.13/255.255.255.0
2409:8a00:254d:90a0:41bc:de4:af6e:9479/ffff:ffff:ffff:ffff::
fe80::c890:8da3:b20c:a830/ffff:ffff:ffff:ffff::
Sudoers I/O plugin version 1.8.23
3.1.3 visudo
visudo来配置用户权限。
注意:
编辑sudo的配置文件/etc/sudoers是一般不要直接使用vi (vi /etc/sudoers)去编辑,因为sudoers配置有一定的语法,直接用vi编辑保存系统不会检查语法,如有错也保存了可能导致无法使用sudo工具,最好使用visudo命令去配置。虽然visudo也是调用vi去编辑,但是保存时会进行语法检查,有错会有提示。
示例二:
4、操作系统用户分类