Linux 课堂笔记

2018-05-18 课堂笔记

2018-05-21  本文已影响0人  chocolee911

目录

一、认识 /etc/passwd/etc/shadow
二、用户与用户组的管理
三、用户密码管理
四、用户身份切换

一、认识 /etc/passwd/etc/shadow

1. /etc/passwd解释

[root@localhost ~]# cat /etc/passwd
root:   x:  0:  0: root:/root:/bin/bash
用户名:密码:UID:GID: 描述:家目录: Shell
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
chocolee:x:1000:1000::/home/chocolee:/bin/bash

2. /etc/shadow解释

[root@localhost ~]# cat /etc/shadow          

root:$6$ng8WooyA$ghFCJVR...........adgV0xw6Ay6ya0ViFKIWI    
/x9evitI5GoSTdFvg.:17660:0:99999:7:::
bin:*:16231:0:99999:7:::
daemon:*:16231:0:99999:7:::
sshd:!!:17658::::::
ntp:!!:17664::::::
chocolee:!!:       17665:            0:     99999:                7:::
用户名:  密码:上次改密的时间:下次可改密的时间:多少天后到期:密码到期前的警告期限:账号失效期限:账号作废期限:保留字段

第一列:用户名,与/etc/passwd中对应
第二列:密码的密文(摘要算法为SHA-512)
第三列:上次更改密码的日期,时间是从 UNIX 元年(1970-01-01)开始的天数
第四列:过多少天可以修改密码,默认为0,表示不限制
第五列:密码多少天后到期,默认99999,表示永不过期
第六列:到期前几天开始警告,比如设置为 7,则到期前的第七天开始告警
第七列:容忍期,比如设置为 5,则到期后的5天内仍可登录,超过5天则正式无法使用
第八列:保留字段


二、用户与用户组的管理

1. 新建组

[root@localhost ~]# groupadd school && grep school /etc/group
school:x:1004:
[root@localhost ~]# groupadd -g 1111 hospital && grep hospital /etc/group
hospital:x:1111:

2. 删除组

3. 新建用户

指定较全的选项

[root@localhost ~]# useradd -u 1212 -g school -d /etc -s /bin/bash James && grep James /etc/passwd
James:x:1212:1004::/etc:/bin/bash

不建立家目录

[root@localhost ~]# useradd -M  Kevin.Love && grep Kevin /etc/passwd
Kevin.Love:x:1214:1214::/home/Kevin.Love:/bin/bash

注意:仅仅是不在文件系统中建立家目录,但 /etc/passwd 中仍然根据默认规则设定了家目录

手动建立家目录

  1. 无家的用户进入系统会发现很怪
[root@localhost skel]# su - Kevin.Love
-bash-4.2$                 # 提示符都不对
  1. 为其手动建立家目录
[root@localhost skel]# mkdir /home/Kevin.Love
[root@localhost skel]# ls /home/
alice  Bond  choco  chocolee  darlen  Kevin.Love
  1. 拷贝家目录模板
[root@localhost Kevin.Love]# cp /etc/skel/.bash* . && ls -a
.  ..  .bash_logout  .bash_profile  .bashrc
[root@localhost Kevin.Love]# su - Kevin.Love
上一次登录:一 5月 21 23:07:42 CST 2018pts/0 上
[Kevin.Love@localhost ~]$                            # 这下就正常了

4. 删除用户

仅进行用户删除

[root@localhost ~]# ll /home/alice -d
drwx------. 2 alice alice 94 5月  16 00:21 /home/alice
[root@localhost ~]# userdel alice && !!
userdel alice && ll /home/alice -d
drwx------. 2 1001 1002 94 5月  16 00:21 /home/alice         #家目录仍然存在

删除用户的同时,删除其数据

[root@localhost ~]# ll /home/bob/ -d
drwx------. 2 bob bob 94 5月  15 23:47 /home/bob/
[root@localhost ~]# userdel -r bob && ll -d /home/bob/
ls: 无法访问/home/bob/: 没有那个文件或目录

三、用户密码管理

1. 修改密码

修改自己的密码

[chocolee@localhost ~]$ passwd
更改用户 chocolee 的密码 。
为 chocolee 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

修改其他用户的密码(仅 root 有该权限)

[root@localhost ~]# passwd chocolee
更改用户 chocolee 的密码 。
新的 密码:
重新输入新的 密码:p
passwd:所有的身份验证令牌已经成功更新。

2. 免交互修改密码

[root@localhost ~]# passwd root
更改用户 root 的密码 。
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# clear
[root@localhost ~]# passwd --stdin root
更改用户 root 的密码 。
12345678
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# echo -e "choco12345\nchoco12345" | passwd root
更改用户 root 的密码 。
新的 密码:重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# echo "choco12345" | passwd --stdin root
更改用户 root 的密码 。
passwd:所有的身份验证令牌已经成功更新。

3. 锁定、解锁用户

例子:
锁定用户

[root@localhost ~]# passwd -l chocolee && !!
passwd -l chocolee && tail /etc/passwd
锁定用户 chocolee 的密码 。
passwd: 操作成功
[root@localhost ~]# grep chocolee /etc/shadow
chocolee:!!$6$axUVEyOg$W.xHFI0aTcN4bg1RRFfwoNKGuMVRnvQImljFw.tuLJA7E./BNTk7DNkXI3aFFyShNu
nwAnmSTUu6.zJCqULaz.:17671:0:99999:7:::    # 用户密码的前面出现了两个叹号

解锁用户

[root@localhost ~]# passwd -u chocolee
解锁用户 chocolee 的密码。
passwd: 操作成功

4. 产生随机密码

生成一个长12位,包含:4个特殊字符、2个大写、4个数字的密码

[root@localhost ~]# mkpasswd -l 12 -s 4 -C 2 -d 4
<$7=[O10blU3

四、用户身份切换

1. su

[root@localhost ~]# su - chocolee
上一次登录:一 5月 21 06:21:28 CST 2018pts/0 上
[chocolee@localhost ~]$ pwd
/home/chocolee
[root@localhost ~]# su chocolee
[chocolee@localhost root]$ pwd
/root
[chocolee@localhost root]$ su -c "cat /etc/passwd" root
密码:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

2. sudo

Ubuntu中常见,一种比较安全的做法,仅需用户输入自己的密码就能临时以 root 的身份执行某些命令

[chocolee@localhost ~]$ cat /etc/shadow     # chocolee 无权查看 /etc/shadow
cat: /etc/shadow: 权限不够
[chocolee@localhost ~]$ sudo cat /etc/shadow   # 用 sudo 就可以
[sudo] password for chocolee:
root:$6$SuR.........spmAn4TrsRXFjnb3JL674lc   
ReBdb2CHhxL9siMAS0:17672:0:99999:7:::
bin:*:16231:0:99999:7:::
daemon:*:16231:0:99999:7:::
adm:*:16231:0:99999:7:::

3. /etc/sudoervisudo

谁能使用 sudo,在哪使用,允许用 sudo 哪些命令,都是 root 在 /etc/sudoers 中配置的。
但该文档遵循一定格式,所以不要手动修改该文件,应该用 visudo 进行修改,visudo 具有语法校验功能

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
chocolee   ALL=(ALL)       ALL

第一列:组、用户、用户别名——指定能使用sudo命令的用户或组
第二列:本机 IP 或主机名——指定在哪台机子能够使用sudo(常用于多台策略不同的主机,使用同一的 /etc/sudoers进行限定时,仅需要一个相同的 /etc/sudoers 文件,即可对应不同的主机)
第三列:以哪个用户的身份执行命令
第四列:命令——指定能使用 sudo 执行哪些命令。该字段请用绝对路径。

/etc/sudoers

## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
chocolee   ALL=(ALL)       /usr/bin/ls,/usr/bin/cat

效果:同样的文件,能 cat,但不能 vim

[chocolee@localhost ~]$ sudo vim /etc/shadow
对不起,用户 chocolee 无权以 root 的身份在 localhost.localdomain 上执行 /bin/vim /etc/shadow。
[chocolee@localhost ~]$ sudo cat /etc/shadow
root:$6$SuR6vKTm$PFqHZ848a5uQUvq......ReBdb2CHhxL9siMAS0:17672:0:99999:7:::
bin:*:16231:0:99999:7:::

/etc/sudoers

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
chocolee   ALL=(ALL)       NOPASSWD:/usr/bin/ls,/usr/bin/cat

效果:不需要输入密码即可使用

[chocolee@localhost ~]$ sudo cat /etc/shadow
root:$6$SuR6vK..........rsRXFjnb3JL674lcReBdb2CHhxL9siMAS0:17672:0:99999:7:::
bin:*:16231:0:99999:7:::

4. 关于 su 的常用安全做法

首先,禁止 root 远程登录(修改 /etc/ssh/sshd-config

#LoginGraceTime 2m
PermitRootLogin no             # 禁止 root 远程登录

其次,设置详细的 sudo 规则

(The End)

上一篇下一篇

猜你喜欢

热点阅读