Linux入门进阶第五天——用户管理(帐号管理 )下

一、身份切换

  为了避免 rm -rf /* 的悲剧发生,平时使用时,尽量使用一般帐号!需要环境设置等必要时才使用root

  1.su命令

    一般地,推荐使用su - / su - username的形式来切换用户(防止环境变量的混乱)

   为了方便下文的操作,创建测试账户:cc,密码为 c20171218#

su [-lm] [-c 指令] [username]
选项与参数:
- :单纯使用 - 如“ su - ”代表使用 login-shell 的变量文件读取方式来登陆系统;
若使用者名称没有加上去,则代表切换为 root 的身份。
-l :与 - 类似,但后面需要加欲切换的使用者帐号!也是 login-shell 的方式。
-m :-m 与 -p 是一样的,表示“使用目前的环境设置,而不读取新使用者的配置文件”
-c :仅进行一次指令,所以 -c 后面可以加上指令喔!

  完整的su切换用户命令,参考http://linux.51yip.com/search/su

  相关实例:

范例一:假设你原本是 dmtsai 的身份,想要使用 non-login shell 的方式变成 root
[dmtsai@study ~]$ su <==注意提示字符,是 dmtsai 的身份喔!
Password: <==这里输入 root 的密码喔!
[root@study dmtsai]# id <==提示字符的目录是 dmtsai 喔!
uid=0(root) gid=0(root) groups=0(root) context=unconf.... <==确实是 root 的身份!
[root@study dmtsai]# env | grep 'dmtsai'
USER=dmtsai <==竟然还是 dmtsai 这家伙!
PATH=...:/home/dmtsai/.local/bin:/home/dmtsai/bin <==这个影响最大!
MAIL=/var/spool/mail/dmtsai <==收到的 mailbox 是 vbird1
PWD=/home/dmtsai <==并非 root 的主文件夹
LOGNAME=dmtsai
# 虽然你的 UID 已经是具有 root 的身份,但是看到上面的输出讯息吗?
# 还是有一堆变量为原本 dmtsai 的身份,所以很多数据还是无法直接利用。
#

尤其是我们之前谈过很多次的 PATH 这个变量,由于没有改
变成为 root 的环境, 因此很多 root 惯用的指令就只能使用绝对路径来执行咯。


[root@study dmtsai]# exit <==这样可以离开 su 的环境!

  关于此例子中的login shell non login shell,可以参考http://blog.sina.com.cn/s/blog_59c0a56201016im6.html

                              http://blog.csdn.net/wang_xijue/article/details/46820043

  识别非login的shell方法还是执行#echo $0命令,得到的结果如果没有'-'前缀,即为非login的。

范例二:使用 login shell 的方式切换为 root 的身份并观察变量
[dmtsai@study ~]$ su -
Password: <==这里输入 root 的密码喔!
[root@study ~]# 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
# 了解差异了吧?下次变换成为 root 时,记得最好使用 su - 喔!
[root@study ~]# exit <==这样可以离开 su 的环境!
范例三:执行一次root操作后回到本帐号
[dmtsai@study ~]$ su - -c "head -n 3 /etc/shadow"

  2.sudo命令

  su的缺点很明显了:需要知道root的密码,这是非常不好的,于是,sudo便应运而生了!

  而且仅有规范到 /etc/sudoers 内的用户才能够执行 sudo 这个指令

sudo [-b] [-u 新使用者帐号]
选项与参数:
-b :将后续的指令放到背景中让系统自行执行,而不与目前的 shell 产生影响
-u :后面可以接欲切换的使用者,若无此项则代表切换身份为 root 。

  相关实例:

范例一:你想要以 sshd 的身份在 /tmp 下面创建一个名为 mysshd 的文件
[root@study ~]# sudo -u sshd touch /tmp/mysshd
[root@study ~]# ll /tmp/mysshd
-rw-r--r--. 1 sshd sshd 0 Jul 21 23:37 /tmp/mysshd
# 特别留意,这个文件的权限是由 sshd 所创建的情况喔!
范例二:你想要以 vbird1 的身份创建 ~vbird1/www 并于其中创建 index.html 文件
[root@study ~]# sudo -u vbird1 sh -c <u>"mkdir ~vbird1/www; cd ~vbird1/www; </u>
> <u>echo 'This is index.html file' > index.html"</u>
[root@study ~]# ll -a ~vbird1/www
drwxr-xr-x. 2 vbird1 vbird1 23 Jul 21 23:38 .
drwx------. 6 vbird1 vbird1 4096 Jul 21 23:38 ..
-rw-r--r--. 1 vbird1 vbird1 24 Jul 21 23:38 index.html
# 要注意,创建者的身份是 vbird1 ,且我们使用 sh -c "一串指令" 来执行的!

    sudo 执行的重点是:“能否使用 sudo 必须要看 /etc/sudoers 的设置值, 而可使用sudo 者是通过输入使用者自己的密码来执行后续的指令串”喔!由于能否使用与 /etc/sudoers有关, 所以我们当然要去编辑 sudoers 文件啦!不过,因为该文件的内容是有一定的规范的,因此直接使用 vi 去编辑是不好的。 此时,我们得要通过 visudo 去修改这个文件喔!

  1.单一使用者可进行 root 所有指令

     直接修改/etc/sudoers

      注意文件的格式如下:    

用户名  主机名=(可切换到的用户身份)  权限和命令

①         ②                ③                     ④

[root@study ~]# visudo
....(前面省略)....
root ALL=(ALL) ALL     #找到这一行,大约在 98 行左右
vbird1 ALL=(ALL) ALL  #这一行是你要新增的!

  利用 wheel 群组以及免密码的功能处理 visudo

[root@study ~]# visudo <==同样的,请使用 root 先设置
....(前面省略)....
%wheel ALL=(ALL) ALL <==大约在 106 行左右,请将这行的 # 拿掉!
# 在最左边加上 % ,代表后面接的是一个“群组”之意!改完请储存后离开
[root@study ~]# usermod -a -G wheel pro1 <==将 pro1 加入 wheel 的支持

  当然,wheel群组名称是可以自定义的!使用id username即可看到是否成功加入啦!

  免密码处理

[root@study ~]# visudo <==同样的,请使用 root 先设置
....(前面省略)....
%wheel ALL=(ALL) NOPASSWD: ALL <==大约在 109 行左右,请将 # 拿掉!
# 在最左边加上 % ,代表后面接的是一个“群组”之意!改完请储存后离开

  2.限制使用——只能使用部分指令!

[root@study ~]# visudo <==注意是 root 身份
myuser1 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root

  在设置值中加上惊叹号“ ! ”代表“不可执行”的意思。因此上面这一行会变成:可以执行“passwd 任意字符”,但是“ passwd ”与“ passwd root ”这两个指令例外! 如此一来 myuser1 就无法改变 root 的密码了!这样这位使用者可以具有 root 的能力帮助你修改其他用户的密码,而且也不能随意改变 root 的密码!很有用处的!

  并且,可以通过别名批量处理:

[root@study ~]# visudo <==注意是 root 身份
User_Alias ADMPW = pro1, pro2, pro3, myuser1, myuser2
Cmnd_Alias ADMPWCOM = !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
ADMPW ALL=(root) ADMPWCOM  #注意需要大写!

 二、使用者讯息传递

  1.查询使用者——w,who,last,lastlog

w命令用于显示已经登陆系统的用户列表
来自: http://man.linuxde.net/w
who命令是显示目前登录系统的用户信息。
来自: http://man.linuxde.net/who
last命令用于显示用户最近登录信息。
来自: http://man.linuxde.net/last
lastlog命令用于显示系统中所有用户最近一次登录信息。
来自: http://man.linuxde.net/lastlog

  更多命令使用详细,参考相关手册

  2.使用者对谈——write,mesg,wall

[root@study ~]# write 使用者帐号 [使用者所在终端接口]
[root@study ~]# who
vbird1 tty3 2015-07-22 01:55 <==有看到 vbird1 在线上
root tty4 2015-07-22 01:56
[root@study ~]# write vbird1 pts/2
Hello, there:
Please don't do anything wrong... <==这两行是 root 写的信息!
# 结束时,请按下 [crtl]-d 来结束输入。此时在 vbird1 的画面中,会出现:
Message from root@study.centos.vbird on tty4 at 01:57 ...
Hello, there:
Please don't do anything wrong...
EOF

   3.邮件使用——mail

  待补充

原文地址:https://www.cnblogs.com/jiangbei/p/8059525.html