2018-05-16 课后笔记

预习内容

3.1 用户配置文件和密码配置文件
3.2 用户组管理
3.3 用户管理
3.4 usermod命令
3.5 用户密码管理
3.6 mkpasswd命令
3.7 su命令
3.8 sudo命令
3.9 限制root远程登录

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

首先是认识二个文件,一个是/etc/passwd 和/etc/shadow 

这两个文件可以说是linux系统当中最重要的文件之一。如果没有这两个文件或者二个文件出了问题是不能正常登陆系统的。

3.1.1首先我们看一下/etc/passwd文件。
[root@localhost ~]# cat /etc/passwd | head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin


这里的 | 是管道符的意思,作用是把前面的命令的输出在输入到后面的命令。

/etc/passwd 分割成了7个字段,每个字段的具体含义如下所示:

root:x:0:0:root:/root:/bin/bash

  • 第一个字段为用户名 (第一行中root就是用户名),它代表用户账号的字符串。用户中的字符串可以是大小写字母、数字、减号(不能出现在首位)、点和下划线,其他字符是不合法的。虽然用户名中可以出现点,但不建议使用,尤其是首位。另外,减号也不建议用,容易造成混淆。
  • 第二个字段存放的是该账号的口令。这里可以看到是x,因为早期的Unix系统的口令确实存放在这里,但是因为安全因素,后来就将它放到/etc/shadow中了这里只是用一个x代替。
  • 第三个字段是一个数字,这个数字是代表用户标识号的,也称为uid。系统就是通过这个数字识别用户身份的,这里的0就是root,也就是说我们可以修改test用户的uid为0,那么系统会认为root和test为同一个账号。uid取值范围是0~65535(实际上已经可以支持到4294967294),0就是超级用户(root)的标识号,centos的普通用户标识号从1000开始。如果我们自定义建立一个普通用户,你将会看到该账户的标识号是大于或等于1000的。
  • 第四个字段也是数字,表示组标识号,也称为gid。这个字段对应着/etc/group中的一条记录,其实/etc/group和/etc/passwd基本类似。
  • 第五个字段为注释说明,没有实际的意义,通常记录该用户的一些属性,例如姓名,电话,地址等。我们可以使用chfn命令来更改这些信息。
  • 第六个字段为用户的家目录,当用户登录时,就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,用户家目录是可以自定义的。比如建立一个普通用户test1,要想让test的家目录在/data目录下,只要将/etc/passwd文件中对应该用户那行中的本字段修改为/data即可。
  • 最后一个字段为用户的shell。用户登录后,要启动一个进程,用来将用户下达的指令传给内核,这就是shell,linux的shell有sh、csh、ksh、tesh、bash等多种。而Redhat/centos的shell就是bash,查看/etcpasswd文件,该字段中除了/bin/bash,还有多/sbin/nologin它表示不允许该账号登录,如果想建立一个不允许登录的账号,可以把该字段改成/sbin/nologin,默认是/bin/bash.
3.1.2  /etc/shadow 解说

/etc/shadow 和/etc/passwd类似,分割成九个字段,命令如下:

[root@localhost ~]# cat /etc/shadow | head -n 3
root:$6$i4UjPm/gL1oupoxI$ZXQc4ned6VwlqkQJQeYqZqvWUdLuXVAex016pdoYvGYyK1GykBSfIjWx8dB2AYiiL6lDEBcuN66vwxSNrX8OR/::0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::

每个字段的含义如下:

  • 第一段为用户名,与/etc/passwd对应
  • 第二个字段为用户密码,是该账号的真正密码,这个密码已经加密,但是有些黑客还是能够解密,所以,将该文件属性设置为000,但root账户是可以访问或更改的,使用命令ls -l直接查看该文件的权限 
        [root@localhost ~]# ls -l /etc/shadow
         ----------. 1 root root 721 5月  16 17:10 /etc/shadow
  • 第三个字段为上次更改密码的日期,这个数字以1970年1月1日和上次更改密码的日期为基础计算而来。例如;上次更改密码的日期为2012年1月1日,则这个值就是365*(2012-1970)+(2012-1970)/4+1=15341.如果是闰年,则有366天。
  • 第四个字段为要过多少天才可以更改密码,默认是0,即不受限制。
  • 第五个字段为密码多少天后到期,即在多少天内必须更改密码,例如,这里设置成30,则30天内必须更改一次密码,否则,将不能登录系统,默认是99999,可以理解为永远不需要更改。
  • 第六个字段为密码到期前的警告期限。若这个值设置成7,则表示当7天后密码后期时,系统就发出警告,提醒用户他的密码将在7天后到期。
  • 第七个字段为账号失效期限,如果这个值设置为3,则表示密码已经到期,然而用户并没有在到期前修改密码,那么再过31天,这个账号便失效,即锁定。
  • 第八个字段为账号的生命周期,跟第三个字段一样,这个周期是按距离1970年1月1日多少天算
  • 最后一个字段作为保留用的,没有什么意义。

 3.2 用户组管理

我们可以看下/etc/group 它的文件内容是什么,示例:

[root@localhost ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4:
tty:x:5:
disk:x:6:
lp:x:7:
mem:x:8:
kmem:x:9:
wheel:x:10:
cdrom:x:11:
mail:x:12:postfix
man:x:15:
dialout:x:18:
floppy:x:19:
games:x:20:
tape:x:30:
video:x:39:
ftp:x:50:
lock:x:54:
audio:x:63:
nobody:x:99:
users:x:100:
avahi-autoipd:x:170:
utmp:x:22:
utempter:x:35:
ssh_keys:x:999:
input:x:998:
systemd-journal:x:190:
systemd-bus-proxy:x:997:
systemd-network:x:996:
dbus:x:81:
polkitd:x:995:
dip:x:40:
tss:x:59:
postdrop:x:90:
postfix:x:89:
sshd:x:74:
hongwei:x:1000:
ntp:x:38:
user1:x:1001:
grptest1:x:1002:
3.2.1 新增用户组的命令groupadd

命令的格式为 groupadd【-g GID】groupname,命令如下

[root@localhost ~]# groupadd grptest1
[root@localhost ~]# tail -n1 /etc/group
grptest1:x:1002:

如果不加-g 选项,则按照系统默认的gid创建组。跟uid一样,gid也是从1000开始的,我们也可以自定义gid。示例:

[root@localhost ~]# groupadd -g 1009 grptest2
[root@localhost ~]# tail -n1 /etc/group
grptest2:x:1009:
[root@localhost ~]# tail -n2 /etc/group
grptest1:x:1002:
grptest2:x:1009:
[root@localhost ~
3.2.2 删除组的命令groupdel

有的时候,我们需要删除组,可以这样操作:

[root@localhost ~]# groupdel grptest2
[root@localhost ~]# tail -n2 /etc/group
user1:x:1001:
grptest1:x:1002:

命令groupdel没有特殊的选项,但是有一种情况是不能删除组的,如下:

[root@localhost ~]# groupdel user1
groupdel:不能移除用户“user1”的主组
[root@localhost ~]# 

上面的例子中,user1组中包含user1账户,只有删除user1账户后才可以删除该组。

组是什么概念,组里面包含很多个成员也就是说想要删除一个组,组里面是没有任何的成员,没有任何账户的。,

 3.3 用户管理

3.3.1 增加用户的命令useradd

useradd就是增加用户,该命令的格式为useradd【-u UID】【-g GID】【-d HOME】【-M】  【-s】,其中各个含义如下。

  • -u 表示自定义UID
  • -g 表示使增加用户属于已经存在的某个组,后面可以跟组id,也可以跟组名
  • -d 表示自定义用户的家目录
  • -M 表示不建立家目录
  • -s 表示自定义shell
  • -G 拓展组 

 我们举例说明:

[root@localhost ~]# useradd hongwei1                    我们创建一个用户hongwei1
[root@localhost ~]# tail -n3 /etc/passwd 
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
hongwei1:x:1000:1000::/home/hongwei1:/bin/bash
[root@localhost ~]# groupadd liu1                            创建一个用户组liu1 
[root@localhost ~]# tail -n3 /etc/group
ntp:x:38:
hongwei1:x:1000:
liu1:x:1001:

[root@localhost ~]# useradd -u 1002 -g liu1 hongwei2
[root@localhost ~]# tail -n2 /etc/passwd
hongwei1:x:1000:1000::/home/hongwei1:/bin/bash
hongwei2:x:1002:1001::/home/hongwei2:/bin/bash

上面例子中我们创建用户hongwei2,自定义uid1002,属组是liu1,在tail -n2 /etc/passwd中,用户hongwei2 组gid是1001,是成功的。

[root@localhost ~]# useradd -u 1003 -g liu1 -d /home/liuhongweilinux -s /sbin/nologin hongwei3
[root@localhost ~]# tail -n3 /etc/passwd
hongwei1:x:1000:1000::/home/hongwei1:/bin/bash
hongwei2:x:1002:1001::/home/hongwei2:/bin/bash
hongwei3:x:1003:1001::/home/liuhongweilinux:/sbin/nologin

上面例子中,我创建一个用户hongwei3,自定义uid1003,属组liu1自定义家目录/home/liuhongweilinux, 定义shell /sbin/nologin

[root@localhost ~]# useradd -M hongwei4
[root@localhost ~]# tail -n4 /etc/passwd
hongwei1:x:1000:1000::/home/hongwei1:/bin/bash
hongwei2:x:1002:1001::/home/hongwei2:/bin/bash
hongwei3:x:1003:1001::/home/liuhongweilinux:/sbin/nologin
hongwei4:x:1004:1004::/home/hongwei4:/bin/bash

这个例子中我们不创建用户家目录。

小结:如果-g选项后面跟一个不存在的gid,则会报错,提示改组不存在。
3.3.2 删除用户的命令userdel

命令 userdel 的格式为userdel 【-r】username ,其中-r选项的作用是:当删除用户时,一并删除该用户的家目录。举例:

[root@localhost ~]# ls -ld /home/hongwei1
drwx------. 2 hongwei1 hongwei1 59 5月  18 05:25 /home/hongwei1
[root@localhost ~]# userdel hongwei1
[root@localhost ~]# ls -ld /home/hongwei1
drwx------. 2 1000 1000 59 5月  18 05:25 /home/hongwei1
[root@localhost ~]# userdel -r  hongwei1
userdel:用户“hongwei1”不存在
[root@localhost ~]# userdel -r  hongwei2
[root@localhost ~]# ls -ld /home/hongwei2
ls: 无法访问/home/hongwei2: 没有那个文件或目录

上面例子中,我们删除用户hongwei1之后,在 ls -ld /home/hongwei1下显示用户的家目录是存在的,但是加上-r选项后,在删除用户hongwei2 之后在 ls -ld /home/hongwei2下,发现没有那个目录了,表示彻底删除了,连同家目录也一起删除了。 

 3.4 usermod命令

usermod 命令是更改用户属性的命令。

格式为:usermod 【-u UID】【-g GID】【-d 用户的家目录】【-s 指定shell】【username】【-G 拓展组】

[root@localhost ~]# id hongwei3
uid=1003(hongwei3) gid=1001(liu1) 组=1001(liu1)
[root@localhost ~]# tail -n3 /etc/group
ntp:x:38:
liu1:x:1001:hongwei3
hongwei4:x:1004:
[root@localhost ~]# usermod -G hongwei4 hongwei3
[root@localhost ~]# id hongwei3
uid=1003(hongwei3) gid=1001(liu1) 组=1001(liu1),1004(hongwei4)


这个例子中,id username 查看uid是什么,gid是什么,组不仅包括前面的gid,还包括很多拓展组,但是gid只有一个。我们把hongwei4组 加到hongwei3组,也就是说不仅属于hongwei4组,也属于hongwei3组

3.5 用户密码管理 

3.5.1passwd 。为用户设置密码时可以使用命令passwd,格式为 passwd【usename】。该命令后面若不加用户名字,则是为自己设定密码。示例如下:

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

如果你登录的是root账户,后面可以跟普通账户的名字,意思是修改指定账户的密码,示例如下:

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

更新完密码之后我们输入tail -n3 /etc/shadow,可以看到hongwei3用户后面的字符串,这个字符串是个加密的字符串。用户hongwei4后面是没有字符串的是二个!号,代表用户没有密码的,是空密码,也就是意味着这个用户不能登录

[root@localhost ~]# tail -n3 /etc/shadow
ntp:!!:17664::::::
hongwei3:$6$NjoJgxWZ$d2TtArAP/hcTB2NMcVbPpBWUM0v5ArRrGfF42mYEkT9gnhM.Jmh2aJD6jFE7Pg0gzwtEO70ukoLrEmJUUrc4N1:17668:0:99999:7:::
hongwei4:!!:17668:0:99999:7:::

[root@localhost ~]# head /etc/shadow
root:$6$AOuiCeeo$P0Hd2EyY4FwCdkmKWIALyrEn5CkSVLaHHuyDTG1jD2smWD/oE98D9FTiXNMETLFKp3QwIW9FcKjqnKL5QKFqX1:17668:0:99999:7:::
bin:*:16659:0:99999:7:::
daemon:*:16659:0:99999:7:::
adm:*:16659:0:99999:7:::
lp:*:16659:0:99999:7:::
sync:*:16659:0:99999:7:::
shutdown:*:16659:0:99999:7:::
halt:*:16659:0:99999:7:::
mail:*:16659:0:99999:7:::
operator:*:16659:0:99999:7:::

有些用户后面是一些*号,*号代表这个用户的密码是被锁定的,是不能用的,不能登录的

3.5.2这里有一个新的知识点,锁定用户的命令是 passwd -l ,示例如下

[root@localhost ~]# passwd -l hongwei3
锁定用户 hongwei3 的密码 。
passwd: 操作成功
[root@localhost ~]# tail  /etc/shadow
systemd-bus-proxy:!!:17658::::::
systemd-network:!!:17658::::::
dbus:!!:17658::::::
polkitd:!!:17658::::::
tss:!!:17658::::::
postfix:!!:17658::::::
sshd:!!:17658::::::
ntp:!!:17664::::::
hongwei3:!!$6$NjoJgxWZ$d2TtArAP/hcTB2NMcVbPpBWUM0v5ArRrGfF42mYEkT9gnhM.Jmh2aJD6jFE7Pg0gzwtEO70ukoLrEmJUUrc4N1:17668:0:99999:7:::
hongwei4:!!:17668:0:99999:7:::


例子中我们给用户hongwei3锁定,然后再tail  /etc/shadow,发现密码位置多了二个!号,表示用户被锁定了。

3.5.3锁定用户用passwd -l ,那么解锁用户用passwd -u 这里的l是 lock,u是unlock。示例如下

[root@localhost ~]# passwd -u hongwei3
解锁用户 hongwei3 的密码。
passwd: 操作成功
[root@localhost ~]# tail  /etc/shadow
systemd-bus-proxy:!!:17658::::::
systemd-network:!!:17658::::::
dbus:!!:17658::::::
polkitd:!!:17658::::::
tss:!!:17658::::::
postfix:!!:17658::::::
sshd:!!:17658::::::
ntp:!!:17664::::::
hongwei3:$6$NjoJgxWZ$d2TtArAP/hcTB2NMcVbPpBWUM0v5ArRrGfF42mYEkT9gnhM.Jmh2aJD6jFE7Pg0gzwtEO70ukoLrEmJUUrc4N1:17668:0:99999:7:::
hongwei4:!!:17668:0:99999:7:::
我们解锁用户后,再查看 tail  /etc/shadow,发现用户的密码位置没有了!号。

3.5.4上面锁定用户命令除了passwd -l 还有usermod - L 也是锁定用户的命令:

[root@localhost ~]# usermod -L hongwei3
[root@localhost ~]# tail  /etc/shadow
systemd-bus-proxy:!!:17658::::::
systemd-network:!!:17658::::::
dbus:!!:17658::::::
polkitd:!!:17658::::::
tss:!!:17658::::::
postfix:!!:17658::::::
sshd:!!:17658::::::
ntp:!!:17664::::::
hongwei3:!$6$NjoJgxWZ$d2TtArAP/hcTB2NMcVbPpBWUM0v5ArRrGfF42mYEkT9gnhM.Jmh2aJD6jFE7Pg0gzwtEO70ukoLrEmJUUrc4N1:17668:0:99999:7:::
hongwei4:!!:17668:0:99999:7:::

我们可以看到跟用户hongwei3,密码位置变成了!号,只不过是一个!号,

3.5.5那么我们锁定用户的命令是usermod - L ,解锁用户的命令是usermod - U:

[root@localhost ~]# usermod -U hongwei3
[root@localhost ~]# tail  /etc/shadow
systemd-bus-proxy:!!:17658::::::
systemd-network:!!:17658::::::
dbus:!!:17658::::::
polkitd:!!:17658::::::
tss:!!:17658::::::
postfix:!!:17658::::::
sshd:!!:17658::::::
ntp:!!:17664::::::
hongwei3:$6$NjoJgxWZ$d2TtArAP/hcTB2NMcVbPpBWUM0v5ArRrGfF42mYEkT9gnhM.Jmh2aJD6jFE7Pg0gzwtEO70ukoLrEmJUUrc4N1:17668:0:99999:7:::
hongwei4:!!:17668:0:99999:7:::

我们今后还会用到一个知识点就是给一个用户创建密码,命令是:passwd --stdin uesrname

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

3.5.6以后我们用shell脚本的时候可能会用到给一个用户创建密码,这里有一个新的知识点就是

echo "123456" |passwd --stdin hongwei3 

[root@localhost ~]# echo "123456" |passwd --stdin hongwei3
更改用户 hongwei3 的密码 。
passwd:所有的身份验证令牌已经成功更新。
我们可以看到用echo和 管道符| 可以直接更改密码不用再输入密码不用交互。

3.5.7新的命令换行符 echo -e "1223\n111"  \n代表的是换行符

[root@localhost ~]# echo -e "111\n123"
111
123

echo -e “111\t123”这里的\t 是tab的意思 

[root@localhost ~]# echo -e "111\t123"
111    123

我们也可以用echo -e去建立用户密码,示例如下:

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

我们可以看到这种方法就不用再输入二次密码了。

 3.6 mkpasswd命令

命令mkpasswd用于生成密码,我们安装的linux默认是没有这个命令的,需要安装一个expect软件,安装命令如下:

yum install -y expect

我们看下mkpasswd的命令:

[root@localhost ~]# mkpasswd
FO6eos=5n

有的时候我们需要生成指定长度的密码,用mkpasswd命令也能满足。比如生成12位长度的密码。如下:

[root@localhost ~]# mkpasswd -l 12
6gxlWla7k{dB

我们也可以指定密码中有几个特殊的字符或数字,命令如下:

[root@localhost ~]# mkpasswd -l 13 -s 0 -d 3
d8Efsg9bjK3ab

这里的-s 表示有几个特殊的字符,-d表示有几个数字。

3.7 su命令 

命令su的格式为su 【-】username,后面可以跟- ,也可以不跟。普通用户的su命令不加username时,就是切换到root用户,当然,root用户同样可以使用su命令切换到普通用户。该命令加上-后,会初始化当前用户的各种环境变量。

[root@localhost ~]# su - hongwei11
上一次登录:六 5月 19 18:08:15 CST 2018pts/0 上
[hongwei11@localhost ~]$ 

这里看到普通用户和root用户的shell提示符有些区别,root账户是#,普通用户是$.

su有一个知识点,就是在su下,执行一条命令但不登录hongwei11用户。命令如下:

[root@localhost ~]# su - -c "touch /tmp/hongwei.123" hongwei11
[root@localhost ~]# ls -lt /tmp/ |head
总用量 0
-rw-rw-r--. 1 hongwei11 hongwei11  0 5月  19 18:08 hongwei.123
drwxr-sr-x. 4 root      liu1      32 5月  16 17:23 hw
-rw-r--r--. 1 root      root       0 5月  16 04:18 qwer
drwxr-xr-x. 2 root      root       6 5月  16 04:14 1.txt
-rw-r--r--. 1      1000 root       0 5月  13 00:47 4.test
-rw-r--r--. 1 root      root       0 5月  13 00:35 3.test
-r--r--r--. 1 root      root       0 5月  13 00:35 2.test
drwxr-xr-x. 3 root      root      42 5月  12 23:47 tset
-rw-r--r--. 1 root      root       0 5月  12 23:45 dirb

这个例子中,我们使用hongwei11用户去建立一个文件,-c是要执行什么内容,我们看到hongwei.123问你安创建成功,属主是hongwei11,。属组也是hongwei11.

 我们在举个例子:

root@localhost ~]# su - hongwei4
上一次登录:六 5月 19 18:01:05 CST 2018pts/0 上
su: 警告:无法更改到 /home/hongwei4 目录: 没有那个文件或目录
-bash-4.2$ pwd
/root
-bash-4.2$ ^C
-bash-4.2$ su - root
密码:
上一次登录:六 5月 19 18:14:06 CST 2018pts/0 上
[root@localhost ~]# id hongwei4
uid=1004(hongwei4) gid=1004(hongwei4) 组=1004(hongwei4)
[root@localhost ~]# mkdir /home/hongwei4
[root@localhost ~]# chown hongwei4:hongwei4 /home/hongwei4/
[root@localhost ~]# su - hongwei4
上一次登录:六 5月 19 18:14:22 CST 2018pts/0 上
-bash-4.2$ ls -la
总用量 4
drwxr-xr-x.  2 hongwei4 hongwei4    6 5月  19 18:19 .
drwxr-xr-x. 11 root     root     4096 5月  19 18:19 ..
-bash-4.2$ su - root
密码:
上一次登录:六 5月 19 18:17:29 CST 2018pts/0 上
[root@localhost ~]# ls -la
总用量 52
dr-xr-x---.  4 root root 4096 5月  16 19:41 .
dr-xr-xr-x. 17 root root 4096 5月   8 03:27 ..
drwxr-xr-x.  3 root root   45 5月  16 04:40 12
drwxr-xr-x.  2 root root    6 5月  12 23:17 34
-rw-------.  1 root root 1244 5月   8 03:28 anaconda-ks.cfg
-rw-------.  1 root root 4999 5月  19 06:13 .bash_history
-rw-------.  1 root root 7081 5月  16 17:09 .bash_history.bak
-rw-r--r--.  1 root root   18 12月 29 2013 .bash_logout
-rw-r--r--.  1 root root  176 12月 29 2013 .bash_profile
-rw-r--r--.  1 root root  176 12月 29 2013 .bashrc
-rw-r--r--.  1 root root  100 12月 29 2013 .cshrc
-rw-------.  1 root root   67 5月  11 16:40 .lesshst
-rw-r--r--.  1 root root  129 12月 29 2013 .tcshrc
lrwxrwxrwx.  1 root root   12 5月  16 18:08 yum.log -> /tmp/yum.log
[root@localhost ~]# ls /etc/skel/
[root@localhost ~]# ls -la /etc/skel/
总用量 24
drwxr-xr-x.  2 root root   59 5月   8 03:15 .
drwxr-xr-x. 77 root root 8192 5月  19 18:03 ..
-rw-r--r--.  1 root root   18 11月 20 2015 .bash_logout
-rw-r--r--.  1 root root  193 11月 20 2015 .bash_profile
-rw-r--r--.  1 root root  231 11月 20 2015 .bashrc
[root@localhost ~]# cp /etc/skel/.bash* /home/hongwei4/
[root@localhost ~]# chown -R hongwei4:hongwei4 !$
chown -R hongwei4:hongwei4 /home/hongwei4/
[root@localhost ~]# su - hongwei4
上一次登录:六 5月 19 18:21:07 CST 2018pts/0 上
[hongwei4@localhost ~]$ 


上面的例子中,我们切换到hongwei4用户,发现跟进去root用户不一样,没有前缀,这是因为我们没有用户hongwei4的用户家目录,因为root用户下会有.bash开头的文件,我们可以把root用户的.bash文件复制一份到hongwei4家目录下面去。这时我们创建一个用户hongwei4家目录,更改一下用户的所属主,所属组。然后我们进入到root用户ls -la /etc/skel/下,把以.bash开头的文件复制到用户家目录下面去,然后在更改用户hongwei4的所属组,所属主。然后在切换到用户hongwei4下,发现用户hongwei4前面有个前缀。

 3.8 sudo命令

用su可以切换用户身份,而且每个普通用户都能切换到root身份。如果某个用户不小心泄露了root密码,那就非常不安全了,为了改进这个问题,linux系统工程师设计了sudo命令,使用sudo命令执行一个只有root才能执行命令是可以办到的,但是需要输入密码,这个密码并不是root的密码,而是用户自己的密码,默认情况下,只有root用户能使用sudo命令,普通用户想要使用sudo。是需要root预先设定的,我们可以使用visudo命令编辑相关的配置文件/etc/sudoers.如果没有visudo这个命令,请使用命令yum install -y sudo安装。

sudo是让普通用户临时拥有root用户的身份去执行命令。

默认的root支持sudo,是因为这个文件中有一行root ALL=(ALL)ALL。在该行下面加入hongwei6 ALL =(ALL) ALL,就可以让hongwei6用户拥有sudo权限,从左到右,第一段hongwei6为一个用户,指定让那个用户有sudo权限,第二段ALL=(ALL),比较难理解,左边的ALL指的是所有的主机,右边的ALL指的是获取那个用户的身份,第二段几乎不用配置,第三段设定可以使用sudo的命令有那些。我们先看配置文件:

[root@localhost ~]# visudo

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## 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     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
"/etc/sudoers.tmp" 118L, 4188C

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       ls,mv,cat

我们输入visudo命令之后再这一行root的下面这一行输入test    ALL=(ALL)       ls,mv,cat,就是说让普通用户临时拥有root权限是执行ls,mv,cat命令。输入完之后esc退出,然后:wq保存退出。

Connecting to 192.168.139.128:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Last login: Sun May 20 19:49:08 2018
[root@localhost ~]# visudo
visudo:>>> /etc/sudoers:syntax error 在行 99 附近<<<
现在做什么?
选项有:
  重新编辑 sudoers 文件(e)
  退出,不保存对 sudoers 文件的更改(x)
  退出并将更改保存到 sudoers 文件(危险!)(Q)

这个时候它提示报错了在99行附近,提示之后我们按下回车,我们按e,重新编辑一下这个文件。怎么看是90几行,使用命令:set nu 可以查看行数,执行:set nu 如下

E325: ATTENTION
Found a swap file by the name "/etc/.sudoers.tmp.swp"
      1 :## Sudoers allows particular users to run various commands as
      2 ## the root user, without needing the root password.
      3 ##
      4 ## Examples are provided at the bottom of the file for collections
      5 ## of related commands, which can then be delegated out to particular
      6 ## users or groups.
      7 ##
      8 ## This file must be edited with the 'visudo' command.
      9 
     10 ## Host Aliases
     11 ## Groups of machines. You may prefer to use hostnames (perhaps using
     12 ## wildcards for entire domains) or IP addresses instead.
     13 # Host_Alias     FILESERVERS = fs1, fs2
     14 # Host_Alias     MAILSERVERS = smtp, smtp2
     15 
     16 ## User Aliases
     17 ## These aren't often necessary, as you can use regular groups
     18 ## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
:set nu

88 ## Next comes the main part: which users can run what software on
     89 ## which machines (the sudoers file can be shared between multiple
     90 ## systems).
     91 ## Syntax:
     92 ##
     93 ##      user    MACHINE=COMMANDS
     94 ##
     95 ## The COMMANDS section may have other options added to it.
     96 ##
     97 ## Allow root to run any commands anywhere
     98 root    ALL=(ALL)       ALL
     99 test    ALL=(ALL)       /usr/bin/ls,/usr/bin/mv,/usr/bin/cat
因为之前我们用的是单纯的命令ls,mv,cat,是不对的,需要使用绝对路径,然后修改之后esc退出,在:wq保存退出。

现在做什么?
选项有:
  重新编辑 sudoers 文件(e)
  退出,不保存对 sudoers 文件的更改(x)
  退出并将更改保存到 sudoers 文件(危险!)(Q)

现在做什么?e
[root@localhost ~]# 

这个时候看到没有报错。

[root@localhost ~]# su - test
上一次登录:日 5月 20 20:25:48 CST 2018pts/0 上
[test@localhost ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够

我们切换到test用户,然后去ls /root/提示权限是不够的。

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

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

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

[sudo] test 的密码:
12  34    anaconda-ks.cfg  yum.log

第一执行sudo的命令提示输入用户的密码。

[test@localhost ~]$ ls /root/
ls: 无法打开目录/root/: 权限不够
[test@localhost ~]$ sudo /usr/bin/ls /root/
12  34    anaconda-ks.cfg  yum.log

第一次我们执行ls /root/是提示权限不够的,使用sudo就可以查看了。

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
test    ALL=(ALL)       NOPASSWD: /usr/bin/ls,/usr/bin/mv,/usr/bin/cat
## 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

上面例子中我们需要输入密码才能进入,也可以设置不需要输入密码,只需要在第三行前面加上NOPASSWD;就可以了。示例如下:

[root@localhost ~]# su - test
上一次登录:日 5月 20 20:32:38 CST 2018pts/0 上
[test@localhost ~]$ 

visudo还有很多用法,比如Alisas。示例如下:

# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
Cmnd_Alias TEST_CMD = /usr/bin/ls, /usr/bin/mv, /usr/bin/cat
## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Allow root to run any commands anywhere 
root    ALL=(ALL)       ALL
test    ALL=(ALL)       TEST_CMD
## 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

:wq
[test@localhost ~]$ sudo /usr/bin/ls /root
12  34    anaconda-ks.cfg  yum.log
在上面例子中我们模仿Alias的用法写一个。TEST_CMD,然后在ALL的第三行写成同样的,我们看到在sudo /usr/bin/ls /root,是成功的。

 3.9 限制root远程登录

很多时候我们登录linux或者服务器都是远程登录,这样有时会很危险。我们可以设置root远程登录。

我们进入修改的配置文件 vi /etc/ssh/sshd_config 这个命令为ssh服务的配置文件。我们用/root找到PermitRootLogin 把前面的#号去掉,yes改为no 不允许root登录。

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#RSAAuthentication yes
#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys
 

然后我们需要重启网络服务,systemctl restart sshd.service

转载于:https://my.oschina.net/u/3851487/blog/1813801

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值