用户和组管理
用户文件
用户文件: 存放着用户的基本信息的一个文件、该文件由若干行组成、每行代表一个用户、每一行用冒号(:)分割,每一段代表着不同的信息。
路径: /etc/passwd
passwd文件信息:
[root@test1 ~]# tail /etc/passwd
systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:998:996:User for polkitd:/:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
xxh:x:1000:1000::/home/xxh:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
用户密码文件
用户密码文件: 用来存放用户的密码信息的文件、该文件由若干行组成、每行代表一个用户、每一行用冒号(:)分割,每一段代表着不同的信息。
路径: /etc/shadow
shadow文件信息:
[root@test1 ~]# tail /etc/shadow
systemd-bus-proxy:!!:17452::::::
systemd-network:!!:17452::::::
dbus:!!:17452::::::
polkitd:!!:17452::::::
tss:!!:17452::::::
postfix:!!:17452::::::
sshd:!!:17452::::::
xxh:!!:17456:0:99999:7:::
user1:$6$UO4VvBt8$4P7ulIfuASCvre1g1E17BN.bTiDQKQgji36pAopCpWRfP6ttocb.0whIc5rYB7EUDh7m8mKNIAK/J41gjnHAG0:17465:0:99999:7:::
user2:$6$kXUKpmbE$KFyxtZIHcXNnHT0Bm6eMZb29H9NjMJmCdnYN.oV1h4H3Wb5DH/0omc3Qo9SUQVX7q3PZOYbK8/JOJYblw5gmF1:17465:0:99999:7:::
passwd、shadow文件每一段所代表的信息:
用户组管理
用户组文件
用户组文件: 存放着用户组的基本信息的一个文件、该文件由若干行组成、每行代表一个用户、每一行用冒号(:)分割,每一段代表着不同的信息。
路径: /etc/group
group文件信息:
[root@test1 ~]# tail /etc/group
polkitd:x:996:
tss:x:59:
dip:x:40:
postdrop:x:90:
postfix:x:89:
sshd:x:74:
xxh:x:1000:
user1:x:1001:
user2:x:1002:
slocate:x:21:
| | |
| | |_GID
| |_密码占位符
|_组名
用户组密码文件
用户组密码文件: 存放着用户组的基本信息的一个文件、该文件由若干行组成、每行代表一个用户、每一行用冒号(:)分割,每一段代表着不同的信息。
路径: /etc/gshadow
gshadow文件信息:
[root@test1 ~]# tail -3 /etc/gshadow
user1:!::
user2:!::
slocate:!::
groupadd命令
groupadd命令: 用于创建一个新的组
用法: groupadd...[选项]...组名
常用参数:
-g:创建新组时指定GID{centos7以上系统系统预留id为1-1000}
例子: 1、创建一个新的组并指定其GID
[root@test1 ~]# groupadd -g 1003 newgroup
[root@test1 ~]# tail /etc/group
tss:x:59:
dip:x:40:
postdrop:x:90:
postfix:x:89:
sshd:x:74:
xxh:x:1000:
user1:x:1001:
user2:x:1002:
slocate:x:21:
newgroup:x:1003:
groupdel命令
groupdel命令: 删除一个组
用法: groupdel...[选项]...组名
例子: 1、删除一个组
[root@test1 ~]# groupdel newgroup
[root@test1 ~]# tail /etc/group
polkitd:x:996:
tss:x:59:
dip:x:40:
postdrop:x:90:
postfix:x:89:
sshd:x:74:
xxh:x:1000:
user1:x:1001:
user2:x:1002:
slocate:x:21:
用户管理
useradd命令
useradd命令: 增加一个用户
用法: useradd...[选项]...[用户名]
常用参数:
-u:指定新建用户的uid
-g:指定新建用户的所属组
-d:指定新建用户的家目录
-s:指定新建用户的shell
-M:创建新用户时不创建家目录{不创建家目录不代表该用户没有家目录、只是所该用户的家目录不存在}
例子: 1、新建一个用户user3并指定其uid为1010
[root@test1 ~]# useradd -u 1010 user3
[root@test1 ~]# tail -3 /etc/passwd
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1010:1010::/home/user3:/bin/bash
2、新建一个用户user4指定其uid为1020、所属组为user3、家目录为/home/jia、shell为/sbin/nologin
[root@test1 ~]# useradd -u 1020 -g user3 -d /home/jia/ -s /sbin/nologin user4
[root@test1 ~]# tail -3 /etc/passwd
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1010:1010::/home/user3:/bin/bash
user4:x:1020:1010::/home/jia/:/sbin/nologin
[root@test1 ~]# tail -3 /etc/group
user2:x:1002:
slocate:x:21:
user3:x:1010:
3、新建一个用户user5不创建其家目录
[root@test1 ~]# useradd -M user5
[root@test1 ~]# ls /home
jia user1 user2 user3 xxh
[root@test1 ~]# tail -1 /etc/passwd
user5:x:1021:1021::/home/user5:/bin/bash /*ls home目录虽然没有user5目录、但是不能代表user5用户没有家目录
userdel命令
userdel命令: 删除一个用户
用法: userdel...[选项]...[用户]
常用参数:
-f:删除用户时就算用户处于登录状态也强制删除
-r:删除用户时连同其家目录一起删掉
例子: 1、删除用户user3、但是保留其家目录
[root@test1 ~]# userdel user3
[root@test1 ~]# tail -5 /etc/passwd
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
xxh:x:1000:1000::/home/xxh:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user5:x:1021:1021::/home/user5:/bin/bash
[root@test1 ~]# ls /home/
jia user1 user2 user3 xxh
2、删除用户user2、并删除其家目录
[root@test1 ~]# userdel -r user2
[root@test1 ~]# ls /home/
jia user1 user3 xxh
[root@test1 ~]# tail -5 /etc/passwd
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
xxh:x:1000:1000::/home/xxh:/bin/bash
user1:x:1001:1001::/home/user1:/bin/bash
user5:x:1021:1021::/home/user5:/bin/bash
usermod命令
usermod命令: 修改用户属性
用法: usermod...[选项]...[用户]
常用参数:
-d:修改用户的家目录
-s:修改用户登录的shell
-g:修改用户的所属组
-G:修改用户的附属组{一个用户可以同时存在于多个组、使用id可以查询、gid为用户的主组、剩下的为附属组}
-L:锁定一个用户的密码
-U:解锁一个用户的密码
例子: 1、修改用户user1的家目录为/home/jia
[root@test1 ~]# cat /etc/passwd|grep "user1"
user1:x:1001:1001::/home/user1:/bin/bash /*这个是修改前的user1家目录信息
[root@test1 ~]# usermod -d /home/jia user1
[root@test1 ~]# cat /etc/passwd|grep "user1"
user1:x:1001:1001::/home/jia:/bin/bash /*这个是修改后的user1家目录信息
2、修改user1的所属组为xxh、附属组为user5
[root@test1 ~]# id user1
uid=1001(user1) gid=1001(user1) 组=1001(user1) /*修改前user1的所属组为user1
[root@test1 ~]# usermod -g xxh -G user5 user1
[root@test1 ~]# id user1
uid=1001(user1) gid=1000(xxh) 组=1000(xxh),1021(user5) /*修改后user1的所属组有2个
3、修改user1的shell为/sbin/nologin
[root@test1 ~]# usermod -s /sbin/nologin user1
[root@test1 ~]# cat /etc/passwd | grep "user1"
user1:x:1001:1000::/home/jia:/sbin/nologin
4、锁定用户user5
passwd命令
passwd命令: 用于设置用户的认证信息,包括用户密码、密码过期时间等。
用法: passwd...[用户名]{不加用户名默认更改当前用户的密码}
常用参数:
-l:锁定一个用户的密码
-u:解锁一个用户的密码
--stdin:使用交互形式修改用户密码
例子: 1、使用root用户修改user1用户的密码。
[root@test1 ~]# whoami /*该命令可以查看当前登录的用户
root
[root@test1 ~]# passwd user1
更改用户 user1 的密码 。
新的 密码:
无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
2、一般用户使用passwd命令修改自己的密码。
[root@test1 ~]# su - user1
上一次登录:四 11月 2 08:22:19 CST 2017pts/0 上
[user1@test1 ~]$ passwd /*passwd命令不加任何参数默认是修改当前用户自己的密码
更改用户 user1 的密码 。
为 user1 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
3、使用echo命令与--stdin参数实现交互式修改user1密码为123456789。
[root@test1 ~]# echo "123456789" |passwd --stdin user1
更改用户 user1 的密码 。
passwd:所有的身份验证令牌已经成功更新。
4、使用echo -e命令实现交互式修改user1的密码为123456789。
[root@test1 ~]# echo -e "123456789\n123456789" /*使用echo -e命令可以使用换行符\n
123456789
123456789 /*这两行就是测试-e的效果并不是修改密码用到的
[root@test1 ~]# echo -e "123456789\n123456789" | passwd user1
更改用户 user1 的密码 。
新的 密码:无效的密码: 密码未通过字典检查 - 过于简单化/系统化
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
mkpasswd命令
mkpasswd命令: 用于随机创建一个密码。
用法: mkpasswd...[选项]
命令安装: yum -y install expect
常用参数:
-l:创建密码时指定其长度
-s:指定特殊符号的字符个数
例子: 1、创建一个长度为8位的密码
[root@test1 ~]# mkpasswd -l 8
WIptf-06
2、创建一个长度为15位、特殊字符有2个的密码
[root@test1 ~]# mkpasswd -l 15 -s 2
f(nq#ulVzdW4op6
su命令
su命令: 切换用户或者使用指定用户执行某条命令。
用法: su -...[选项]...[用户]
常用参数:
-:完全切换一个用户{不仅切换用户、连同环境变量一同切换}
-c:以指定用户的身份执行一条命令
例子: 1、使用su命令从root用户切换到user5用户,并修复user5用户环境变量。
[root@test1 ~]# su - user5 /*使用su - 命令切换到用户user5
上一次登录:四 11月 2 08:22:12 CST 2017pts/0 上
su: 警告:无法更改到 /home/user5 目录: 没有那个文件或目录
-bash-4.2$ su - /*由于user5用户没有家目录且家目录没有配置文件、所以无法正常读取环境变量
密码:
上一次登录:五 11月 3 06:17:06 CST 2017从 192.168.1.160pts/0 上
[root@test1 ~]# mkdir /home/user5 /*创建user5用户的家目录
[root@test1 ~]# id user5
uid=1021(user5) gid=1021(user5) 组=1021(user5) /*查看user5用户的所属组
[root@test1 ~]# chown user5:user5 /home/user5/ /*修改user5目录的所属组
[root@test1 ~]# cp /etc/skel/.ba* /home/user5/ /*复制环境变量文件模板到user5的家目录下
[root@test1 ~]# chown -R user5:user5 /home/user5/ /*修改环境变量文件的所属组与所属主
[root@test1 ~]# ls -la !$
ls -la /home/user5/
总用量 12
drwxr-xr-x 2 user5 user5 62 11月 3 06:58 .
drwxr-xr-x. 7 root root 67 11月 3 06:57 ..
-rw-r--r-- 1 user5 user5 18 11月 3 06:58 .bash_logout
-rw-r--r-- 1 user5 user5 193 11月 3 06:58 .bash_profile
-rw-r--r-- 1 user5 user5 231 11月 3 06:58 .bashrc
[root@test1 ~]# su - user5
上一次登录:五 11月 3 06:57:05 CST 2017pts/0 上
[user5@test1 ~]$ /*由于环境变量修复好了、正常显示
sudo命令与visudo
visudo: 配置sudo命令授予普通用户权限的命令。
配置详解:
[root@test1 ~]# visudo
## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2 /*使用Host_Alias可以设置host别名
# Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem /*使用User_Alias可以设置用户别名
## Command Aliases
## These are groups of related commands...
## Networking
## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb
## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount /*使用Cmnd_Alias可以是指命令别名
## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe
# Defaults specification
#
# Refuse to run if unable to disable echo on the tty.
#
Defaults !visiblepw
#
# Preserving HOME has security implications since many programs
# use it when searching for configuration files. Note that HOME
# is already set when the the env_reset option is enabled, so
# this option is only effective for configurations where either
# env_reset is disabled or HOME is present in the env_keep list.
#
Defaults always_set_home
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
#
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults env_keep += "HOME"
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
## user MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere /*允许root用户在任何地方运行任何命令
root ALL=(ALL) ALL
| | | |
| | | |_ root用户能够执行的命令,ALL代表所有
| | |_ root用户能从哪个ip登录,ALL代表所有ip
| |_ 用户root能切换到哪个用户的身份,ALL代表所有用户
|_ 设定哪一个用户拥有sudo权限
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## Allows people in group wheel to run all commands /*设置用户组权限设置
%wheel ALL=(ALL) ALL
## Same thing without a password /*如果最后一个参数带有NOPASSWD则用户使用sudo命令时不需要输入密码
# %wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now
## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d
sudo命令: 允许系统管理员让普通用户执行一些或者全部的root命令。
例子: 1、使用普通用户查看root用户的家目录文件信息。
1、使用visudo将配置文件修改为如下内容
root ALL=(ALL) ALL
user5 ALL=(ALL) /bin/ls,/bin/cat
2、切换到用户user5并执行相关命令
[root@test1 ~]# su - user5
上一次登录:五 11月 3 06:59:08 CST 2017pts/0 上
[user5@test1 ~]$ sudo ls -l /root
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for user5:
总用量 4
-rwxrwxrwx. 3 root root 1428 10月 28 08:24 anaconda-ks.cfg
drwxr-xr-x 2 root root 69 10月 21 07:16 teamlink_linux_3.3.1
2、创建命令别名、使用user5 ls、cat root用户家目录不需要输入密码。
1、使用visudo将配置文件修改为如下内容
Cmnd_Alias TEST = /bin/ls,/bin/cat
root ALL=(ALL) ALL
user5 ALL=(ALL) TEST
2、不需要输入密码即可查看root用户的家目录文件
[root@test1 ~]# su - user5
上一次登录:五 11月 3 07:50:08 CST 2017pts/0 上
[user5@test1 ~]$ sudo ls /root/
anaconda-ks.cfg teamlink_linux_3.3.1
限制root用户远程连接
作用: 当我们需要把root用户限制远程登录、但是又要使用普通用户能使用sudo命令切换到root用户下来操作时就可以实现限制root用户远程登录、又能使用root用户管理系统。 1、使用root用户visudo修改其配置内容如下
root ALL=(ALL) ALL
user5 ALL=(ALL) NOPASSWD:/usr/bin/su
2、限制root用户远程登录
[root@test1 ~]# vim /etc/ssh/sshd_config /* 编辑sshd_config文件
PermitRootLogin no /* 将#PermitRootLogin yes改为#PermitRootLogin no
[root@test1 ~]# systemctl restart sshd.service /* 重新启动sshd服务
3、登录普通用户通过sudo命令切换到root用户
[root@test1 ~]# su - user5
上一次登录:五 11月 3 08:07:01 CST 2017pts/0 上
[user5@test1 ~]$ sudo su -
上一次登录:五 11月 3 08:07:07 CST 2017pts/0 上
[root@test1 ~]# whoami
root