介绍用户管理的概念,并结合实例进行讲解!
目录
用户的概念
1. whoami命令
whoami
打印当前用户名
2. who命令
who
列出log进当前系统的所有用户
3. who am i
who am i
仅显示一行,打印当前进行的任务
4. w
w
是who
的升级版,另外显示这些用户在干嘛
5. id
id
当前用户id、主要用户组id和你属于的用户组列表
6. su
su
命令用来切换用户
root用户和super用户
切换到root用户,就等于开启了“上帝模式”
通常我们认为root user和super user,两者是同一个东西
1. root用户可以随意切换到别的用户而不需要密码
*
2. sudo
sudo即super user do,暂时以super用户执行某个命令——super用户基本上意味着root用户的执行权限
语法格式sudo 需要权限的命令
2. /etc/sudoers文件
Unix/Linux系统的/etc/sduoers
文件留给super用户编辑,用来分配用户的系统权限(即,什么人,做什么事)
在命令行敲sudo vi /etc/sudoers
找到这样两行
好!现在把下面一行注释掉看看会发生什么
不好意思,你已经被踢出了VIP俱乐部的名单 :-)
3. visudo命令
visudo
命令是为了安全、无后患的编辑/etc/sudoers
文件
它使用『锁』的技术,在编辑时/etc/sudoers
是被锁住的,这样就不存在别的用户同时编辑的事故了
4. sudo logging
如果未经许可而执行sudo命令,会收到一条warning,并且该操作会被记录到var/log/auth.log
这个文件中(Debian)
用户管理
1. /etc/passwd
/etc/passwd
是用户的本地数据库(Linux,和大多数Unix)
2. 家目录
/home/$whoami
是该用户的家目录
创建一个家目录有两种方法:1. useradd -m 家目录
,2. mkdir 家目录
3. useradd
useradd
用来添加本机用户,相当于Windows下的net user
命令
因为我现在用的是Mac(Unix OS),没有这个命令我,我就不演示了(以后用ubuntu、kali的时候再讲
4. /etc/default/useradd
/etc/default/useradd
存储用户的一些默认设置
因为没有,我同样不演示
5. userdel
userdel
用来删除用户
-r
开关同时删除该用户的/home/$whoami
目录
6. usermod
usermod
用来编辑该用户的属性
7. /etc/skel
/etc/skel
目录存储一些用户的配置文件,如.bashrc
、.bash_profile
、.bash_logout
(它们通常都是隐藏的文件)
这个文件的作用是,当使用useradd
命令创建新的用户后,该文件下的所有文件会被自动拷贝到该新用户的~
(家目录)下
/etc/skel
目录在Unix下是没有的(我的Mac是没有的)
8. chsh
chsh(“吃屎”)命令用来改变默认登陆shell
使用chsh -l
或cat /etc/shells
查看所有可选的shell
使用chsh -s 新shell
来改变当前shell环境
密码管理
本段文字讨论密码的创建、删除、设置,包括账户的锁定和禁用
1. passwd
passwd
命令用来更改当前用户的登录——我不想改密码,就不演示完整了
同样我们可以写出完整命令路径来调用改命令
2. /etc/shadow
用户的密码默认都存储在/etc/shadow
文件中,它是read only的,且默认只能被root用户读取
在Mac本中是没有这个文件的
3. openssl
openssl是一款用来生成私人秘钥(private key)的开源工具,在Unix、Linux平台上均可以直接使用
使用openssl passwd
命令对同一个密码可以生成不同的秘钥(哈希字符串),因为在生成时openssl有一个加盐(salt)的过程
还可以显式指定hash的前两位
下面这条命令创建一个新用户,并用openssl生成新的密码
我不想创建新用户,就不演示了
另外我们还可以创建自己的编码函数:调用C语言的crypt函数并将源代码编译成命令加入环境路径即可
paul@rhel65:~$ cat MyCrypt.c #include <stdio.h> #define __USE_XOPEN #include <unistd.h>
int main(int argc, char** argv) {
if(argc==3) { printf("%s\n", crypt(argv[1],argv[2])); } else { printf("Usage: MyCrypt $password $salt\n" ); } return 0;
}
排版有点乱……
4. /etc/login.defs
/etc/login.defs
文件存储一些和登录密码有关的配置信息(比如,密码长度)
好吧,下次我一定用Ubuntu/Kali进行讲解!
5. change命令
change
用来设置和登录信息有关的东西:比如某个用户的有效的截止日期、密码长度限制、密码有效截止日期等
Mac没有这个命令,不演示了
6. vipw命令
vipw
命令专门用来编辑/etc/passwd
文件(类似于sudovi
的感觉,专门用来编辑/etc/sudoers
账户管理
这个小标题拟的挺纠结的,想要将的是user profile部分,但是profile翻译成“个人资料”感觉没有体现它的实际作用——准确说是一些个人信息的配置
总之就是profile文件管理
1. /etc/profile
/etc/profile
文件和具体shell无关,它的配置信息是全局的,即对所有的shell都成立——bash、ksh在登录后会检查/etc/profile
的存在,如果存在就source
之
这是我的/etc/profile
文件
2. ~/.bash_profile
如果存在,bash则source之
Debian Linux 5/6/7默认没有该文件(需要手动创建
3. ~/.bash_login
如果~/.bash_profile
不存在,就source该文件(备胎
Debian、Red Hat默认不存在该文件
4. ~/.profile
如果~/.bash_profile
或~/.bash_login
都不存在,则source该文件(最后的救命稻草
默认下RHEL/CentOS没有该文件
5. ~/.bashrc
~/.bashrc
文件常被别的脚本source(被动的,而不是主动)
上面是我的~/.bashrc文件,在~/.zshrc文件中被显式调用
6. ~/.bash_logout
该文件在exit出bahs-shell时自动执行
用户分组
为什么取这个小标题呢?因为前面都是四个字,这里为了美观也要用四个字XD
本段文字讲解『用户组(group)』的概念
1. groupadd
类比useradd
,groupadd
命令用来创建一个新的用户组
参数就是用户组的名字
2. /etc/group
用户的分组情况被保存在/etc/group
中,要知道一个用户可以用时存在于多个组群中
3. groups命令
groups
用来查看分组情况,所幸在Mac上可以运行
4. groupmod
类比usermod
,groupmod
命令用来编辑用户组群
5. groupdel
该命令用来永久删除一个用户组
6. gpasswd
该命令用来“委托”权限
相关信息存储在/etc/gshadow中
7. newgrp
可以用该命令创建一个包含所有主要用户组群的子shell环境
8. vigr
和vipw
类似,vigr
命令用来编辑/etc/gshadow
文件(保障安全