finger 查看用户信息工具
chfn 更改用户信息工具
id 查看用户的UID、GID及所归属的用户组
su 用户切换工具
sudo sudo 是通过另一个用户来执行命令(execute a command as another user),su 是用来切换用户,然后通过切换到的用户来完成相应的任务,但sudo 能后面直接执行命令,比如sudo 不需要root 密码就可以执行root 赋与的执行只有root才能执行相应的命令;但得通过visudo 来编辑/etc/sudoers来实现;
visudo visodo 是编辑 /etc/sudoers 的命令;也可以不用这个命令,直接用vi 来编辑 /etc/sudoers 的效果是一样的;
用户身份信息的查看
先来看个例子
[root@yufei ~]# finger -s root
Login Name Tty Idle Login Time Office Office Phone
root root pts/0 Jan 11 13:45 (192.168.6.1)
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Tue Jan 11 13:45 (CST) on pts/0 from 192.168.6.1
No mail.
No Plan.
注:这里的Plan不是计划任务,你可以理解成用户的日程安排等等。这个其实就是用户家目录里面的.plan文件里面的内容。看下面的演示。
[root@yufei ~]# echo “I will study RHEL6 during this year.” > ~/.plan
[root@yufei ~]# finger -l root
Login: root Name: root
Directory: /root Shell: /bin/bash
On since Tue Jan 11 13:45 (CST) on pts/0 from 192.168.6.1
No mail.
Plan:
I will study RHEL6 during this year.
chfn #可以理解成change finger
[root@yufei ~]# chfn –help
Usage: chfn [ -f full-name ] [ -o office ] [ -p office-phone ] [ -h home-phone ] [ --help ] [ --version ]
看个例子就明白了
[root@yufei ~]# chfn -f adminstrator
Changing finger information for root.
Finger information changed.
[root@yufei ~]# finger -l root
Login: root Name: adminstrator
Directory: /root Shell: /bin/bash
On since Tue Jan 11 13:45 (CST) on pts/0 from 192.168.6.1
No mail.
Plan:
I will study RHEL6 during this year.
在Name:后面就有了刚才加入的信息了,很简单啊。
1、如果chfn后面不加任何的参数,那么系统会一个个来提示你输入,默认的情况就直接回车,看官自己试一下吧。
2、这个命令也是在我们的/etc/passwd中的第五个字段中增加了相应的内容并用,号分开而已。
[root@yufei ~]# chsh –help
Usage: chsh [ -s shell ] [ --list-shells ] [ --help ] [ --version ] [ username ]
是不是一看就明白了。这里就不给大家来例子了,我相信大家也都能看懂。
[root@yufei ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
可以查看用户的UID、GID和他所在的其它用户组groups,还包括了我们后面会讲到的SELinux。
注:这个命令的参数有几个,不过,不需要记啊,不带参数的时候,把所有的信息全部列出来了。
用户的身份切换
所以说,一般在进行系统管理的时候,是用一般的帐户,还非ROOT帐户,只有在只能由ROOT来操作的时候,才切换成ROOT。这也是平时的一个好习惯。
有时候,我们在安装软件的时候也需要一般的用户来执行。
因此,我们需要用到用户身份的切换。
su - 直接将身份变成root,前提是需要知道root的密码
sudo 命令 执行root的命令,但sudo需要事先设定。sudo只需要输入用户自己的密码就能执行命令
su的用法
- :代表用某个用户在登陆时候的环境变量登陆系统。
若后面没有加任何的用户的话,则代表切换为root的身份。
-l:和-是一样的意思
-m: 正好与上面的-相反,使用目前用户的环境变量,而不切换到新用户的环境变量
-p: 和-m是一样的意思
-c: 只执行一次命令
注:我们最常用的就是一个”-”和不带”-”的参数。-c使用的时机也是相对比较多的。
我们来看个例子
先从root用户切换到一般的用户
[root@yufei ~]# pwd
/root
[root@yufei ~]# su yufei
[yufei@yufei root]$ pwd
/root
注意上面的状态,用户的名字是yuifei,所在的目录是/root目录,也就是root用户的家目录。这就是没有带”-”参数的状况,没有更换成我们用户自己的环境变量。
我们来看看yufei用户的环境变量
[yufei@yufei root]$ env |grep yufei
HOSTNAME=yufei.opsers.org
USER=yufei
HOME=/home/yufei
LOGNAME=yufei
那下面我们返回root用户的状态
[yufei@yufei root]$ exit
exit
[root@yufei ~]#
这时候就回到了root的状态了。
[root@yufei ~]# su – yufei
[yufei@yufei ~]$ pwd
/home/yufei
[yufei@yufei ~]$
这里发生了明显的变化,已经切换到用户的家目录了。当然他的环境变量也了之生效了!
[yufei@yufei ~]$ env |grep yufei
HOSTNAME=yufei.opsers.org
USER=yufei
MAIL=/var/spool/mail/yufei
PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/yufei/bin
PWD=/home/yufei
HOME=/home/yufei
LOGNAME=yufei
这个和上面的明显不同,PATH这个是最重要的环境变量啊!
[yufei@yufei ~]$ su
Password:
[root@yufei yufei]# env |grep root
HOME=/root
虽然已经换成了root用户的身份,但是root的环境变量没有生效,很多命令是不能被执行的。普通用户换成root用户的时候需要输入root用户的密码的。
[root@yufei yufei]# su -
[root@yufei ~]# env |grep root
USER=root
MAIL=/var/spool/mail/root
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
HOME=/root
LOGNAME=root
XAUTHORITY=/root/.xauthHE4blf
上面为什么没有输入root密码呢?因为我已经切换成了root用户,只是环境变量没有生效,再执行一次su -就把root用户的环境变量给生效了。
我们知道,普通用户是看不到/etc/shadow的。下面我们就来用-c这个参数来实现普通用户执行root用户权限命令。
[yufei@yufei ~]$ tail -n 3 /etc/shadow
tail: cannot open `/etc/shadow’ for reading: Permission denied
[yufei@yufei ~]$ su -c “tail -n 3 /etc/shadow”
Password:
opser_1:$6$cIFPSKDr$rQV1fCHYfpUBSqgtpUGcO5A.Wp0feoaMxAQn9QgBWTW7outyIsSN6baVCxhlfAnCZD0GDfDWiaV/UWHFgKuqx/:14981:0:99999:7::15006:
test_user1:$6$EL8UBf7P$gZL3N9GJDL6JhBJnwTZYyiOO8d2zu7Ti9B5eDTP7Hb17AT6Xe4/BuiNVBszO/UoycYIBZZygIH3oA3aKDOSA11:14982:0:99999:7:::
test_user2:$6$tTs0BG90$7LLaUwF9pP/g0h4/IPAwH1x4JE.rSXjYP/wbUq2kxPsXM4/7AaniQdi6G85QIfH6.cspo7OTutqPZblbRUUVT/:14982:0:99999:7:::
[yufei@yufei ~]$
最后yufei用户的身份还是没有变的,但我们已经看到了不该看的内容了,前提是,你要知道root用户的密码,这个就是su最大的缺点。为了弥补这个不足,于是就有了另外一个命令,那就是sudo。我们在前面也说过 ,这个sudo只需要知道用户自己的密码,这样要安全很多。下面就来看看这个sudo的使用吧!
sudo的用法
-u 后面接切换的用户,如果没有带用户,则默认为root用户。他的目的就是使用-u后面的用户身份。
-s 后面接想要执行的shell
[root@yufei ~]# ls -l /home/yufei/file
-rw-r–r–. 1 yufei yufei 0 Jan 12 11:20 /home/yufei/file
虽然我是用root用户创建的文件,但通过sudo -u,使得root用户创建的文件权限和所有者发生了改变
[root@yufei ~]# ls -l /home/yufei/file*
-rw-r–r–. 1 yufei yufei 0 Jan 12 11:20 /home/yufei/file
-rw-r–r–. 1 root root 0 Jan 12 11:21 /home/yufei/file1
这个关于文件权限的问题,后面再来学习。
下面我们用普通用户执行sudo命令
第一次会给个提示(略过),不过没有关系,再执行一次就OK了,
[yufei@yufei ~]$ sudo -s “touch file2″
[sudo] password for yufei:
yufei is not in the sudoers file. This incident will be reported.
我们通过man sudo会发现/etc/sudoers是需要自己来配置的。
这个文件的配置可以有两种方法,一是能vi/vim,二是用visudo,其实这个visudo就是调用了vi来编辑这个文件而已,但这个visudo还会检测你编辑的语法是否正确。所以建议大家用visudo
我们来看看这个文件的内容
sudo用户执行root用户所有命令
[root@yufei ~]# visudo
……
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
……
root ALL=(ALL) ALL
可以使用sudo命令的用户 主机=可切换的身份 可以执行的命令
注:
1、这个命令必需是绝对路径
2、visudo只能由root来执行
yufei ALL=(ALL) ALL
保存退出后,我们来看效果
[root@yufei ~]# su – yufei
[yufei@yufei ~]$ tail -n 3 /etc/shadow
tail: cannot open `/etc/shadow’ for reading: Permission denied
[yufei@yufei ~]$ sudo tail -n 3 /etc/shadow
[sudo] password for yufei:
opser_1:$6$cIFPSKDr$rQV1fCHYfpUBSqgtpUGcO5A.Wp0feoaMxAQn9QgBWTW7outyIsSN6baVCxhlfAnCZD0GDfDWiaV/UWHFgKuqx/:14981:0:99999:7::15006:
test_user1:$6$EL8UBf7P$gZL3N9GJDL6JhBJnwTZYyiOO8d2zu7Ti9B5eDTP7Hb17AT6Xe4/BuiNVBszO/UoycYIBZZygIH3oA3aKDOSA11:14982:0:99999:7:::
test_user2:$6$tTs0BG90$7LLaUwF9pP/g0h4/IPAwH1x4JE.rSXjYP/wbUq2kxPsXM4/7AaniQdi6G85QIfH6.cspo7OTutqPZblbRUUVT/:14982:0:99999:7:::
yufei这个用户原本没有权限查看shadow的,但通过sudo后,就能查看这个文件了,就是因为我们给了yufei这个相应的权限。
注:
1、用sudo的时候,需要输入用户本身的密码哦,而不是root的密码。
2、你要给某个用户设置这么大的权限,你要确保这个用户对你的机子,不会造成损失
sudo用户组执行root的命令
[root@yufei ~]# visudo
……
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
……
这里面的wheel就是一个用户组,我们可以把用户先加入到这个组,然后再把配置文件改成如下
%wheel ALL=(ALL) ALL
也就是把前面的#号去掉
这个操作自己来实践,顺便可以回顾一下我们前面讲的内容!
这些操作,都需要输入用户自己的密码,能不能不让用户输入密码呢?当然可以,就在
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
的下面,
## Same thing without a password
# %wheel ALL=(ALL) NOPASSWD: ALL
我们只要把上面的ALL前面加个NOPASSWD:就能实现了。
限制sudo用户执行命令
其实那个文件中就有例子,我们也来看看
[root@yufei ~]# visudo
加入下面一行
yufei ALL=(ALL) NOPASSWD: /sbin/shutdown
进入测试
[root@yufei ~]# su – yufei
[yufei@yufei ~]$ shutdown -r now
shutdown: Need to be root
提示需要用root用户来执行
[yufei@yufei ~]$ sudo shutdown -r now
(/dev/pts/0) at 15:49 …
[yufei@yufei ~]$
Connection closed by foreign host.
看到了吧,没有输入密码,普通用户同样可以执行我们的重新启动命令。
我们先在sudo配置文件中加入下面的内容
yufei ALL=(ALL) NOPASSWD:/usr/bin/passwd
下面切换成yufei用户,通过sudo来执行passwd命令,
[yufei@yufei ~]$ sudo passwd
Changing password for user root.
你会发现,这里是改root的用户密码,如果普通用户把你的root密码改掉了,那么你不就怀具了啊!为了避免这样的情况发生,我们可以通过下面这样来限制。
yufei ALL=(ALL) NOPASSWD:/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd,!/usr/bin/passwd root
上面的意思就是,让yufei这个用户可以执行/usr/bin/passwd [A-Za-z]*(也就是可以修改其他所有人的命令)。但是不能执行/usr/bin/passwd和/usr/bin/passwd root这两个命令。
如果你再执行一次的话,就会出现下面的提示
[yufei@yufei ~]$ sudo passwd
Sorry, user yufei is not allowed to execute ‘/usr/bin/passwd’ as root on yufei.opsers.org.
通过别名配置sudo的配置文件
User_Alias
Host_Alias
Cmnd_Alias
这三个别名的格式在文件中已经有例子,也很清楚。我们通过下面的例子来给大家做个演示。
[root@yufei ~]# visudo
增加下面三行
User_Alias ADMPWD = user1,user2,user3
Cmnd_Alias ADMCMD = /usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd,!/usr/bin/passwd root
ADMPWD ALL=(root) ADMCMD
1、上面的user1,user2,user3都要是系统上面的用户。
2、别名后面接的是大写的别名,等号后面是别名里面的内容。
3、增加别名后,要配置别我能干什么或不能干什么,就像第三句一样。
4、两次执行sudo的间隔在五分钟之内,第二次就无需输入密码。
sudo+su的组合使用
同样是编辑sudo的配置文件
[root@yufei ~]# visudo
加入下面的内容
yufei ALL=(root) /bin/su -
这样就能让在不泄露root密码的情况下,通过sudo使普通用户能切换到root用户了。
[root@yufei ~]# su – yufei
[yufei@yufei ~]$ sudo su -
[sudo] password for yufei:
[root@yufei ~]#
看到[root@yufei ~]# 这个就知道,我们已经成功了!