第四课预习笔记

任务内容:

3.1 用户配置文件和密码配置文件
3.2 用户组管理
3.3 用户管理
3.4 usermod命令
3.5 用户密码管理
3.6 mkpasswd命令
3.7 su命令
3.8 sudo命令
3.9 限制root远程登录
扩展
sudo与su比较 http://www.apelearn.com/bbs/thread-7467-1-1.html 
sudo配置文件样例 www.opensource.apple.com/source/sudo/sudo-16/sudo/sample.sudoers
sudo不错的教程 http://www.jianshu.com/p/51338e41abb7
sudo -i 也可以登录到root吗? http://www.apelearn.com/bbs/thread-6899-1-1.html


用户配置文件和密码配置文件

/etc/passwd是用户配置文件,也可以说是核心的配置文件。没创建一个用户,该文件底部会多一行。

[root@localhost ~]# ls /etc/passwd
/etc/passwd
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...........................................................
zsy:x:1000:1000::/home/zsy:/bin/bash

每个用户一行,由:分割为7段。

第一段:用户名

第二段:x,早期用于保存用户密码

第三段:UID

第四段:GID

第五段:用户的注释信息,无实际作用

第六段:用户的家目录

第七段:用户的shell。(shell相当于和机器交互的一个窗口,xhsell能连上,就相当于获得了一个窗口)

/etc/shadow是密码配置文件,专门用于存放用户密码的文件,每一行的用户名都和passwd文件一一对应。

[root@localhost ~]# cat /etc/shadow
root:$6$0fPUR0uyAy8kxgyd$cIGQDzajXWcVr9gqqG/ndxurnWAHxJk11qklLisyQtMGHCgDtj/8ReFzccNIe/eqwp0.45VVwWWIN648REBDS/::0:99999:7:::
bin:*:17632:0:99999:7:::

............................................

zsy:!!:17742:0:99999:7:::

第一段:用户名

第二段:加密后的密码

第三段:距离1970年1月1日更改密码隔了多少天数

第四段:过多少天才可以更改密码

第五段:密码多少天后到期,即多少天后必须更改密码

第六段:提示密码在几天后到期

第七段:密码到期后多少天内不修改密码,账户将被禁用。

第八段:距离1970年1月1日多少天,账户将被禁用。

第九段:保留字段,留作将来用。

 

密码都是经过加密的,只能通过明文获得加密后的字符串,不可以通过字符串反向解密。

我们可以将用户zsy和用户root设置相同的密码。

[root@localhost ~]# passwd zsy
更改用户 zsy 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。

然后在一行里执行两个命令,分别查看root和zsy的密码,可以使用分号 ; 进行分割。

[root@localhost ~]# head -n1 /etc/shadow ; tail -n1 /etc/shadow
root:$6$0fPUR0uyAy8kxgyd$cIGQDzajXWcVr9gqqG/ndxurnWAHxJk11qklLisyQtMGHCgDtj/8ReFzccNIe/eqwp0.45VVwWWIN648REBDS/::0:99999:7:::
zsy:$6$iexh5WoZ$HtXuK48/z.Ldqg9rgaJt9xADjmX/ClhaFd9yHx8/bLqQcAP8lsntaDTsbSAL9G/GxEUj5g2pEgRNR5DHT40m41:17742:0:99999:7:::

由此可见虽然root和zsy的明文密码一致,但是加密后的密码并不相同。

不过可以将所有可能的明文密码都进行加密,获得一个一一对应的数据库。


用户组管理

/etc/group是用户组的配置文件,我们在创建用户的时候,系统会自动创建一个和用户名一样的组。

[root@localhost ~]# cat /etc/group
root:x:0:
bin:x:1:
...................
zsy:x:1000:

/etc/gshadow是组密码配置文件

[root@localhost ~]# cat /etc/gshadow
root:::
bin:::
.........
zsy:!::

 

增加组,-g 可以指定组id ,默认从1000开始

[root@localhost ~]# groupadd grp1
[root@localhost ~]# tail -n1 /etc/group
grp1:x:1001:
[root@localhost ~]# groupadd -g 1005 grp2
[root@localhost ~]# tail -n3 /etc/group
zsy:x:1000:
grp1:x:1001:
grp2:x:1005:

删除组,如果组中有成员,则不可以删除。

[root@localhost ~]# groupdel grp1
[root@localhost ~]# tail -n3 /etc/group
chrony:x:996:
zsy:x:1000:
grp2:x:1005:


用户管理

useradd 创建用户 与adduser作用一样

创建一个用户,uid从1000开始。

[root@localhost ~]# useradd user2
[root@localhost ~]# tail -n2 /etc/passwd
zsy:x:1000:1000::/home/zsy:/bin/bash
user2:x:1001:1001::/home/user2:/bin/bash

可以指定uid(u),gid(g),家目录(d)和shell(s)

[root@localhost ~]# useradd -u 1006 -g grp2 -d /home/zsy111 -s /sbin/nologin  user4
[root@localhost ~]# tail -n3 /etc/passwd
user2:x:1001:1001::/home/user2:/bin/bash
user3:x:1004:1005::/home/user3:/bin/bash
user4:x:1006:1005::/home/zsy111:/sbin/nologin

还可以创建用户的时候,不创建家目录。可以在/home下看到没有user5的家目录。其实是有家目录的,只是没创建。

[root@localhost ~]# useradd -M user5
[root@localhost ~]# tail -n3 /etc/passwd
user3:x:1004:1005::/home/user3:/bin/bash
user4:x:1006:1005::/home/zsy111:/sbin/nologin
user5:x:1007:1007::/home/user5:/bin/bash
[root@localhost ~]# ls /home
user2  user3  zsy  zsy111

userdel删除用户

 使用此命令删除user8,默认是不删除user8的家目录的。

[root@localhost ~]# userdel user8
[root@localhost ~]# tail -n3 /etc/passwd
user3:x:1004:1005::/home/user3:/bin/bash
user4:x:1006:1005::/home/zsy111:/sbin/nologin
user5:x:1007:1007::/home/user5:/bin/bash
[root@localhost ~]# ls /home/
user2  user3  user8  zsy  zsy111

那么能不能在删除用户的时候 ,一起删掉它的家目录呢?答案是可以的。使用-r参数可以做到。

[root@localhost ~]# userdel -r user4
[root@localhost ~]# tail -n3 /etc/passwd
zsy:x:1000:1000::/home/zsy:/bin/bash
user2:x:1001:1001::/home/user2:/bin/bash
user3:x:1004:1005::/home/user3:/bin/bash
[root@localhost ~]# ls /home
user2  user3  user8  zsy


usermod

usermod可以更改用户属性,usermod -参数 username

-u:更改用户的uid;

-g: 更改用户的gid或组名;该gid必须存在,才能使用

-d: 更改用户的家目录;

-s: 更改用户的shell;

-G:添加扩展组;把用户追加到某些组里,可以追加到多个组中,每个组之间用“,”隔开

比如把user3的uid从1004改为1006

[root@localhost ~]# tail -n3 /etc/passwd
zsy:x:1000:1000::/home/zsy:/bin/bash
user2:x:1001:1001::/home/user2:/bin/bash
user3:x:1004:1005::/home/user3:/bin/bash

[root@localhost ~]# usermod -u 1006 user3
[root@localhost ~]# tail -n3 /etc/passwd
zsy:x:1000:1000::/home/zsy:/bin/bash
user2:x:1001:1001::/home/user2:/bin/bash
user3:x:1006:1005::/home/user3:/bin/bash

将user4追加到grp3,grp4组中,用id user4查看user4的id属性

[root@localhost ~]# usermod -G grp3,grp4 user4
[root@localhost ~]# id user4
uid=1007(user4) gid=1008(user4) 组=1008(user4),1006(grp3),1007(grp4)


passwd 更改用户密码,这个命令具有set_uid权限。格式 passwd -参数 -username

比如更改root用户的密码

[root@localhost ~]# passwd root
更改用户 root 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。 

 

第二位两个叹号!!,代表用户的密码为空

第二位*,代表用户的密码被锁定的

 -l参数 锁定用户密码(lock)

新建一个user6用户,并更改其密码,查看shadow文件。然后使用passwd -l命令,再查看shadow文件。发现第二项密码的前面多了两个叹号!!  说明此用户的密码被锁定了

[root@localhost ~]# useradd user6
[root@localhost ~]# passwd user6
更改用户 user6 的密码 。
新的 密码:
无效的密码: 密码是一个回文
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@localhost ~]# tail -n1 /etc/shadow
user6:$6$3Z6EnthK$YVqfilOLIa65A6tyFltLi1R.yNfjdSspPrH3o.3JJgTXc8VG6Y2eJdY.FrJFpKP5qFu7o/FtQVMzTetcHA0rq.:17742:0:99999:7:::
[root@localhost ~]# passwd -l user6
锁定用户 user6 的密码 。
passwd: 操作成功
[root@localhost ~]# tail -n1 /etc/shadow
user6:!!$6$3Z6EnthK$YVqfilOLIa65A6tyFltLi1R.yNfjdSspPrH3o.3JJgTXc8VG6Y2eJdY.FrJFpKP5qFu7o/FtQVMzTetcHA0rq.:17742:0:99999:7:::

 -u 解锁用户密码(ulock)

现在解锁user6用户,再查看他的shadow文件,发现第二项密码前面的两个叹号已经没有了。

[root@localhost ~]# passwd -u user6
解锁用户 user6 的密码。
passwd: 操作成功
[root@localhost ~]# tail -n1 /etc/shadow
user6:$6$3Z6EnthK$YVqfilOLIa65A6tyFltLi1R.yNfjdSspPrH3o.3JJgTXc8VG6Y2eJdY.FrJFpKP5qFu7o/FtQVMzTetcHA0rq.:17742:0:99999:7:::

其实使用usermod命令也能锁定用户密码,和解锁用户密码。

usermod -L username 锁定用户密码(第二项密码前面有一个感叹号!,一个感叹号和两个感叹号效果一样)

usermod -U username 解锁用户密码

 使用passwd --stdin username 可以只输入一次密码,并明文显示

[root@localhost ~]# passwd --stdin user6
更改用户 user6 的密码 。
123
passwd:所有的身份验证令牌已经成功更新。

 

echo ''123456" |passwd --stdin user6可以直接将user6的密码改为123456,无需输入。(|是管道符,将前方的结果传递给后方)

[root@localhost ~]# echo "123456"|passwd --stdin user6
更改用户 user6 的密码 。
passwd:所有的身份验证令牌已经成功更新。

 

echo -e "123\nsss"  允许内容换行\n 或者tab隔开\t

[root@localhost ~]# echo -e "123\nsss"
123
sss
[root@localhost ~]# echo -e "123\tsss"
123    sss

 

如果passwd后不加 --stdin参数,那么密码就得输入两次的问题,不过可以使用echo命令实现只输一次密码。

[root@localhost ~]# echo -e "123\n123" | passwd user6
更改用户 user6 的密码 。
新的 密码:无效的密码: 密码少于 8 个字符
重新输入新的 密码:passwd:所有的身份验证令牌已经成功更新。

 

 密码设置规则:长度最好超过10位,包含大小写字母、数字,甚至特殊字符。最好不要有规律性。


 mkpasswd

即 make passwd ,用于生成密码。在使用此命令之前,需要安装工具。

yum install -y expect

安装完成后,我们查看一下使用效果

[root@localhost ~]# mkpasswd
2lB1zl\De

-l 12 指定长度为12位

-s 3  指定包含3个特殊符号


su命令

主要作用是切换用户

su - 的作用是彻底切换用户

su   的作用也是切换用户,但是切换的不彻底

例如目前root用户在/root目录下,使用su - user1命令后,用户在/home/user1下;如果使用su usre1命令,用户还是在/root目录下。

[root@localhost ~]# su - user1
[user1@localhost ~]$ pwd
/home/user1

[root@localhost ~]# su user1
[user1@localhost root]$ pwd
/root

以user9用户的身份执行一条命令,但是不切换到user1用户下

[root@localhost ~]# su - -c "touch /tmp/1.txt" user9
[root@localhost ~]# ll -h /tmp/1.txt
-rw-rw-r--. 1 user9 user9 0 7月  30 22:24 /tmp/1.txt

在user9用户下,切换到user10。

[user9@localhost ~]$ su - user10
密码:
最后一次失败的登录:一 7月 30 22:26:01 CST 2018pts/1 上
最有一次成功登录后有 1 次失败的登录尝试。

系统存在模板目录 在/etc/skel下

[user10@localhost ~]$ ls -la /etc/skel
总用量 24
drwxr-xr-x.  2 root root   62 4月  11 12:59 .
drwxr-xr-x. 74 root root 8192 7月  30 22:26 ..
-rw-r--r--.  1 root root   18 4月  11 08:53 .bash_logout
-rw-r--r--.  1 root root  193 4月  11 08:53 .bash_profile
-rw-r--r--.  1 root root  231 4月  11 08:53 .bashrc

如果一个家目录下没有配置文件,可以把以上配置文件拷贝到家目录下,并更改权限

cp /etc/skel/.bash* /home/user5/

chown -R user5:user5 /home/user5/  (-R级联处理,处理指定目录以及其子目录下的所有文件)

普通用户显示$  ,root用户显示#

[user10@localhost ~]$ 
[root@localhost ~]# 


sudo

让普通用户以root的身份临时执行一条命令

可以用visudo命令,查看sudo的配置文件,这个命令可以检测语法错误。:wq保存退出,这里和vi一样。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
user9   ALL=(ALL)      ls,mv,cat  
## Allows members of the 'sys' group to run networking, software,

第一个ALL表示在哪里 ,(ALL)表示所有用户,后面一个ALL表示所有命令。

保存退出后系统提示93行有错误

 

[root@localhost ~]# visudo
>>> /etc/sudoers: 语法错误 near line 93 <<<
现在做什么?
选项有:
  重新编辑 sudoers 文件(e)
  退出,不保存对 sudoers 文件的更改(x)
  退出并将更改保存到 sudoers 文件(危险!)(Q)

现在做什么?

我们按e重新编辑。

使用:set nu显示行号,找到93行。命令应该使用绝对路径,并且逗号后有一个空格

93 user9   ALL=(ALL)       /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

在user9用户下,使用sodu命令查看 /root/目录下有哪些文件

[user9@localhost ~]$ sudo /usr/bin/ls /root/

我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:

    #1) 尊重别人的隐私。
    #2) 输入前要先考虑(后果和风险)。
    #3) 权力越大,责任越大。

[sudo] user9 的密码:
anaconda-ks.cfg

比如使用user9查看/root/anaconda-ks.cfg,会提示没权限。用sudo命令就可以了。

[user9@localhost ~]$ cat /root/anaconda-ks.cfg
cat: /root/anaconda-ks.cfg: 权限不够
[user9@localhost ~]$ sudo cat /root/anaconda-ks.cfg
#version=DEVEL
# System authorization information
auth --enableshadow --passalgo=sha512
# Use CDROM installation media
cdrom

................................................

pwpolicy luks --minlen=6 --minquality=1 --notstrict --nochanges --notempty
%end

 

接下来我们在visudo中,再添加一行

user10  ALL=(ALL)      NOPASSWD: /usr/bin/ls, /usr/bin/cat

NOPASSWD表示切换的时候不需要密码。

[user10@localhost ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[user10@localhost ~]$ sudo ls /root
anaconda-ks.cfg

 

Host User Cmnd都可以做Alias

 # Host_Alias     FILESERVERS = fs1, fs2
 # Host_Alias     MAILSERVERS = smtp, smtp2

 # User_Alias ADMINS = jsmith, mikem

Cmnd_Alias ZSY_CMD= /usr/bin/ls, /usr/bin/mv, /usr/bin/cat

可以将原来93行的/usr/bin/ls, /usr/bin/mv, /usr/bin/cat 直接用ZSY_CMD代替,即

/usr/bin/ls, /usr/bin/mv, /usr/bin/cat

现在切换到user9下,使用sudo命令查看/root下的文件,成功!

[root@localhost ~]# su - user9
上一次登录:一 7月 30 22:51:12 CST 2018pts/1 上
[user9@localhost ~]$ sudo ls /root/
[sudo] user9 的密码:
anaconda-ks.cfg

93行前面的用户,也可以使用用户组代替。


限制root远程登录

修改visudo,做一个User_Alias

User_Alias ZSYS = zsy, user9, user10

然后让ZSYS这个用户组切换到root的时候不需要密码执行su命令

ZSYS    ALL=(ALL)      NOPASSWD: /usr/bin/su

在user9下执行sudo命令,发现无需密码。

[user9@localhost ~]$ sudo su
[root@localhost user9]# 

那么如何限制root登录呢?

[root@localhost ~]# vi /etc/ssh/sshd_config

首先去除#,将PermitRootLogin no 后面的yes改成no。:wq保存退出,重启sshd服务

[root@localhost ~]# systemctl restart sshd.service

然后使用xshell重新使用root登录系统,发现无法登录。即使提示输入密码,也无法登录。

第四课预习笔记_第1张图片

 

 

你可能感兴趣的:(Linux学习笔记)