1.su命令
Linux su命令用于变更为其他使用者的身份,除 root 外,需要键入该使用者的密码。
使用权限:所有使用者。
命令格式:su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
可用选项:
-f 或 --fast 不必读启动档(如 csh.cshrc 等),仅用于 csh 或 tcsh
-m -p 或 --preserve-environment 执行 su 时不改变环境变数
-c command 或 --command=command 变更为帐号为 USER 的使用者并执行指令(command)后再变回原来使用者
-s shell 或 --shell=shell 指定要执行的 shell (bash csh tcsh 等),预设值为 /etc/passwd 内的该使用者(USER) shell
--help 显示说明文件
--version 显示版本资讯
- -l 或 --login 这个参数加了之后,就好像是重新 login 为该使用者一样,大部份环境变数(HOME SHELL USER等等)都是以该使用者(USER)为主,并且工作目录也会改变,如果没有指定 USER ,内定是 root
USER 欲变更的使用者帐号
ARG 传入新的 shell 参数
例1:su与su -的区别
su与su -的最大不同就在与,su只是切换了用户的身份,但是目录并未切换;
su -在切换用户身份的同时,目录也将切换。
[root@test_01 ~]# su user2
[user2@test_01 root]$ pwd
/root
[root@test_01 ~]# su - user2
上一次登录:三 11月 1 22:55:42 CST 2017pts/0 上
[user2@test_01 ~]$ pwd
/home/user2
例2:-c选项切换身份运行命令
[root@test_01 ~]# su -c "touch /tmp/test01/2.txt" user2
[root@test_01 ~]# ls -l /tmp/test01
总用量 8
-rwxrwxrwx. 2 wennan root 17 11月 1 22:35 1.txt
-rw-r--r--. 1 user2 test_group 0 11月 1 22:41 2.txt
-rwxrwxrwx. 2 wennan root 17 11月 1 22:35 hardlink_1.txt
lrwxrwxrwx. 1 root test_group 17 10月 27 00:31 softlink_1.txt -> /tmp/test01/1.txt
-rw-r--r--. 1 root root 0 10月 26 22:52 test01.txt
-rw-r--r--. 1 root test_group 0 10月 26 22:53 test02.txt
[root@test_01 ~]# id user2
uid=1020(user2) gid=1003(group_1) 组=1003(group_1)
[root@test_01 ~]# ls -ld /tmp/test01
dr-x--Srwx. 2 root test_group 112 11月 1 22:41 /tmp/test01
由上例可见,切换身份运行touch命令后,2.txt文件的所属主为user2。需要注意的是,上例中2.txt所属组为test_group而并非user2的属组group_1,这是因为目录被赋予了setgid。
※当用户密码被锁定或者家目录不存在的时候,无法正常切换用户,此时需要做以下操作:
①为该用户创建家目录
②将/etc/skel/下的.bash文件拷贝至该用户家目录下
③更改该家目录及其下文件的属主属组
2.sudo命令
sudo命令用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
配置sudo必须通过编辑/etc/sudoers文件,而且只有超级用户才可以修改它,还必须使用visudo编辑。之所以使用visudo有两个原因,一是它能够防止两个用户同时修改它;二是它也能进行有限的语法检查。所以,即使只有你一个超级用户,你也最好用visudo来检查一下语法。 visudo默认的是在vi里打开配置文件,用vi来修改文件。我们可以在编译时修改这个默认项。visudo不会擅自保存带有语法错误的配置文件,它会提示你出现的问题,并询问该如何处理。
例子:在sudoers文件中加入wennan,并限制wennan用户只能以root身份运行ls 和mv两个命令
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
wennan ALL=(ALL) /usr/bin/ls, /usr/bin/mv
wennan用户正常运行ls,但是无法通过sudo以root权限运行cat命令
[wennan@test_01 ~]$ sudo ls /root
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others.
#2) Think before you type.
#3) With great power comes great responsibility.
[sudo] password for wennan:
anaconda-ks.cfg authorized_keys
[wennan@test_01 ~]$ sudo cat /root/authorized_key
对不起,用户 wennan 无权以 root 的身份在 test_01 上执行 /bin/cat /root/authorized_key。
设置NOPASSWD可以在使用sudo的时候不再输入密码
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
wennan ALL=(ALL) NOPASSWD: /usr/bin/ls, /usr/bin/mv
[wennan@test_01 ~]$ sudo ls /root
anaconda-ks.cfg authorized_keys
3.限制root远程登录
编辑/etc/ssh/sshd_config文件可有限制root用户登录
#LoginGraceTime 2m
#PermitRootLogin yes → PermitRootLogin no
#StrictModes yes
将文件中的#PermitRootLogin yes修改为PermitRootLogin no即可实现。