0%

5.Managing Local Linux Users and Groups

1. Red Hat Enterprise Linux 7

用户如何存在于系统当中

1.1. /etc/passwd用户信息文件

1
2
[root@localhost ~]# ll /etc/passwd
-rw-r--r--. 1 root root 2009 Feb 8 20:40 /etc/passwd

用户名字:用户密码:用户uid:用户gid:用户说明:用户家目录:用户使用的shell

1
2
3
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

1.2. /etc/shadow用户认证信息

1
2
[root@localhost ~]# ll /etc/shadow
----------. 1 root root 1187 Feb 8 20:40 /etc/shadow

用户名称:密码:密码使用天数:最短有效期:密码最长有效期:密码警告期:密码非活跃期:密码到期日:

1
2
3
4
root:$6$sqkcVKBkf0yGT9ld$ekFGc44dFI5HLsxfdfMbYXyIEG2X.5SccLqa2LGWRQcuOAQYIbEGosB6bq.9aEC5UIksfrcSQORRbGeybDEKY1:16812:0:99999:7:::
bin:*:16141:0:99999:7:::
ntp:!!:16812::::::
test::16839:0:99999:7:::
1
密码部分,如果是空就表示无密码;如果是两个感叹号(!!)就表示用户被锁定了,不能登陆;如果是星号(*)就表示此用户为不能登陆的系统用户。

注意,以前/etc/shadow是包含在/etc/passwd中的,但是由于一些程序是需要通过读取/etc/passwd文件来了解不同账号的权限的,所以既然有了读取/etc/passwd的权限,那么就可以通过暴力破解去破解密码,因此后来把用户的密码放在/etc/shadow进行管理。

1.3. /etc/group用户组信息

1
2
[root@localhost ~]# ll /etc/group
-rw-r--r--. 1 root root 858 Feb 8 20:29 /etc/group

用户组名称:用户组密码:用户组id:附加用户成员

1
2
3
root:x:0:
mail:x:12:postfix
student:x:1000:student

1.4. 纯手工创建用户

1
2
3
/home/username	##用户家目录
/etc/skel/.* ##用户的基本信息配置,模板
cp /etc/skel/.* /home/用户名 ##可以让用文件新建出来的用户显示正常
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@localhost ~]# su - test
su: user test does not exist
[root@localhost ~]# vim /etc/passwd
test:x:1001:1001:test:/home/test:/bin/bash
[root@localhost ~]# su - test
Last login: Mon Feb 8 20:29:52 CST 2016 on :0
su: warning: cannot change directory to /home/test: No such file or directory
id: cannot find name for group ID 1001
mkdir: cannot create directory '/home/test': Permission denied
-bash-4.2$ echo $USER
test
-bash-4.2$ logout
[root@localhost ~]# mkdir /home/test
[root@localhost ~]# cd /home
[root@localhost home]# ll
total 4
drwx------. 14 student student 4096 Feb 2 12:23 student
drwxr-xr-x. 2 root root 6 Feb 9 00:46 test
[root@localhost home]# chown test.test test/
chown: invalid user: ‘test.test’
[root@localhost home]# groupadd -g 1001 test
[root@localhost home]# chown test.test test/
[root@localhost home]# chmod go-rx test/
[root@localhost home]# ll
total 4
drwx------. 14 student student 4096 Feb 2 12:23 student
drwx------. 2 test test 6 Feb 9 00:46 test
[root@localhost home]# su - test
Last login: Tue Feb 9 00:45:43 CST 2016 on pts/0
-bash-4.2$ cp /etc/skel/.* .
cp: omitting directory ‘/etc/skel/.’
cp: omitting directory ‘/etc/skel/..’
cp: omitting directory ‘/etc/skel/.mozilla’
-bash-4.2$ logout
[root@localhost home]# su - test
Last login: Tue Feb 9 00:52:36 CST 2016 on pts/0
[test@localhost ~]$

1.5. 用户操作命令

基本命令

1
2
3
4
5
6
ifconfig       ##查看本机ip
hostname ##查看主机名称
echo $USER ##查看当前用户名
echo $PATH ##查看当前用户环境
su - username ##切换用户与用户所使用的环境
grep bash$ /etc/passwd ##显示可以登录系统的用户(用户有密码或密码为空)

id

1
2
3
4
5
6
7
8
id     用户名    ##查看用户信息
id -u 用户名 ##用户uid
id -g 用户名 ##用户gid
id -a 用户名 ##用户所有信息
id -G 用户名 ##用户所在所有的id
id -un 用户名 ##用户名字
id -gn 用户名 ##用户初始组名称
id -Gn 用户名 ##用户所在所有组名称

useradd

1
2
3
4
5
6
7
useradd	 用户名	 ##新建用户
useradd -u uid号 用户名称 ##指定用户的uid
useradd -g 已存在组名称 用户名称 ##指定用户初始组,这个组一定要存在
useradd -G 已存在组名称 用户名称 ##指定附加组,组同样要存在
useradd -c 描述 用户名称 ##用户说明
useradd -d 路径 用户名称 ##指定用户加目录
useradd -s 类型 用户名称 ##指定用户使用的shell,shell种类参看/etc/shells

userdel

1
2
userdel 用户名称     ##删除用户名称未删除配置
userdel -r 用户名称 ##完全删除用户信息

groupadd/groupdel

1
2
3
groupadd   组名称        ##新建组
groupadd -g id号 组名称 ##新建组,-g表示指定组的id
groupdel 组名称 ##删除组

passwd

1
2
passwd	 ##更改用户密码
echo 密码 | passwd --stdin 用户 ##更改用户密码

查看用户建立或管理过程使用的命令

1
watch -n 1 'tail -3 /etc/passwd;echo @@@@@@@@@@@@@@@@@@@@@@@@@@;tail -3 /etc/group'

1.6. 用户的更改

usermod

1
2
3
4
5
6
7
8
9
10
usermod	   -u	##改变用户uid
usermod -g ##改变用户初始组
usermod -G ##改变用户附加组
usermod -aG ##增加用户附加组
usermod -d ##改变用户家目录信息
usermod -md ##改变用户家目录信息和家目录名称
usermod -s ##改变用户的shell
usermod -c ##改变用户的说明
usermod -L ##冻结用户(passwd -l)
usermod -U ##解锁用户(passwd -u)

用户权限下放(sudo)

1
2
3
4
5
6
7
8
权限下放动作的配置文件:
/etc/sudoers ##这个文件用visudo命令编辑

文件内容:
授权目标用户 主机名称=(授权用户得到的新用户身份) 授权用户执行命令
test localhost=(root) /usr/sbin/useradd

sudo 命令 ##使用下放的权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost ~]# su - test
Last login: Tue Feb 9 01:44:23 CST 2016 on pts/0
[test@localhost ~]$ useradd hello
-bash: /usr/sbin/useradd: Permission denied
[test@localhost ~]$ logout
[root@localhost ~]# visudo
97 ## Allow root to run any commands anywhere
98 root ALL=(ALL) ALL
99
100 test localhost=(root) NOPASSWD :/usr/sbin/useradd, /usr/sbin/userdel
[root@localhost ~]# su - test
Last login: Tue Feb 9 01:44:56 CST 2016 on pts/0
[test@localhost ~]$ sudo useradd hello
[test@localhost ~]$ ll /home/
total 8
drwx------. 3 hello hello 74 Feb 9 01:50 hello
drwx------. 14 student student 4096 Feb 2 12:23 student
drwx------. 4 test test 4096 Feb 9 00:53 test
[test@localhost ~]$ sudo userdel -r hello
[test@localhost ~]$ ls /home/
student test

1.7. 密码期限更改

chage

1
2
3
4
5
6
chage 	-d 数字 用户名	##密码使用了多久,如何设定为0表示用户登陆系统前必须更改密码
chage -m 数字 用户名 ##最短有效期
chage -M 数字 用户名 ##最长有效期
chage -W 数字 用户名 ##警告期
chage -I 数字 用户名 ##非活跃期
chage -E yyyy-mm-dd 用户名 ##到期日