1 | /etc/passwd |
1 /etc/passwd 和 /etc/shadow
☑ 注意: 修改/etc/passwd
中的帐号信息会导致文档属性无法显示拥有者的姓名,取而代之的是UID。
1.1 /etc/passwd
1.2 /etc/shadow
1.3 找回丢失的密码
2 改变默认 home 目录
通过修改/etc/passwd
第7栏的信息来改变默认home目录(usermod),对我个人很实用;或者通过修改第8栏给用户一个登录后的默认sheel。
3 /sbin/nologin
/sbin/nologin
这个sheel可以让用户在不获得sheel环境,可以用来做为纯pop邮件帐号
4 关于群组
有效群组,与初始群组,groups,newgrp
4.1 /etc/group
1 | $ useradd -m yxl # 创建行用户yxl并自动生成主目录/home/yxl(普通用户) |
4.2 实战
默认方式建立用户
1 | $ useradd vbird1 |
-u /-g
1 | $ useradd -u 700 -g users vbird2 # 初始群组为users,初始UID为700,建立用户vird2 |
-c,-r
1 | $ useadd -r bird3 # 创建系统账号,不会主动建立家目录 |
4.useradd参考档
查看useradd的默认情况
1 | GROUP=100 |
5.UID/GID默认参考档:/etc/login.defs
5.使用standard input建立用户的密码
1 | $ sudo echo "truman" | passwd --stdin vbird1 |
6. passwd命令
1 | passwd |
1 | $ sudo passwd -S yxl # 查看yxl的帐号情况 |
7.chage命令
1 | $ sudo chage -l yxl # 查看yxl的详细密码属性信息(比passwd -S好用多了) |
案例1
给别人一个初始密码,当该用户登录时必须修改密码,否则无法登录
1 | $ sudo useradd nemo |
8.usermod
案例一: 修改yxl的说明栏
1 | $ sudo usermod -c "MyGirl" yxl |
案例二:设置yxl的密码在2100年失效
1 | $ sudo usermod -e "2100-01-01" yxl |
案例三:给已经创建的nemo账户一个home目录
1 | $ ll -d ~nemo |
9 userdel
☑ 注意:如果只是暂时不想让该用户存在,可以考虑将密码帐号有效剩余天数(/etc/shadow
)设为0或者passwd -d username
删掉密码。只有确定可以完全清楚哦某个账户时 才考虑userdel.
1 | $ find / -user vbird1 # 全盘查找属于vbird1的档案 |
10 finger
案例一
1 | $ finger anderson # 观察anderson帐号相关属性 |
案例二
建立自己的计划档
1 | $ echo "I will go to BeiJIng the day after tomorrow." > ~.plan # 不知道为什么我的机器上没有~/.plan ~./project ~/.pgpkey |
案例三
目前登录的用户与登录时间
1 | $ finger |
11 chfn: 修改/添加个人属性信息
12 chsh :change sheel
案例一
用anderson的身份列出系统上所有合法的sheel,并制定/bin/sh为自己的sheel
1 | $ chsh -l <==> $ cat /etc/shells # ubuntu上没有-l 参数 |
案例二
修改当前用户的shell
1 | $ chsh -s /bin/rbash;grep anderson /etc/passwd |
13 id
查看某人或自己的UID/GID等信息,还可以用来判断有没有某个用户
1 | $ id <==> $ who am i | id # 查看当前用户的信息 |
14.groupadd, groupmod, groupdel, gpaasswd
groupadd
案例一: 新建一个群组
1 | $sudo groupadd webteam |
groupmod
☑ 注意:不要随便更改GID
案例二:将案例一新建的webeam组名改为myteam,GID改为
1 | $ sudo groupmod -g 139 -n myteam webteam |
groupdel
☑ 注意:如果该组中还有其他帐号则无法顺利删除(可以先更改帐号的GID或者删除那个帐号)
案例三:删除刚刚建立的群组
1 | $ sudo groupdel myteam |
gpasswd
案例四:建立一个新的群组myteam,交给yxl管理(群组管理员)
1 | $ sudo groupadd -g 139 myteam # 建立群组myteam,GID为139(勤人坡) |
帐号管理实战
案例一
新建一个群组mathwebteam,然后提供一个项目的开发目录,帐号信息如下
帐号 | 帐号备注 | 支援次要群组 | 是否可以登录主机 | passwd |
---|---|---|---|---|
neo | the boss | mathwebteam | yes | truman |
xk | the crew | mathwebteam | yes | truman |
yl | the crew | no | no | truman |
一:建立群组
1 | $ sudo groupadd mathwebteam |
二:建立帐号
1 | $ sudo useradd -G mathwebteam -c "the caption" neo |
三:给帐号设置密码
1 | $ sudo passwd neo |
四:建立项目目录
1 | $ sudo mkdir /srv/project |
五:让anderson具备对/srv/project rx的权限(acl应用)
测试yl能否进入/srv/project
1 | $ su anderson # 切换 |
15 acl(access control list)
15.1 查看我的机器是否支持acl
1 | $ mount | grep acl # 我的ubuntu没有查到任何信息 |
如果不支持可以执行以下命令使系统的文件系统支持:
1 | $ sudo mount -o remount,acl / |
15.2 acl的使用技巧
案例一
在 test 中创建一个文档 acl_test1 并使用 setfacl对acl_test1 的权限进行设置
1 | $ mkdir /home/anderson/test |
针对有效权限mask的设置
1 | $ setf -m m:r acl_test1 # 针对acl_test1设置mask(权限上限)为r,这样acl设置最高权限只有r |
15.3 帐号的切换
15.3.1 su
1 | $ su # 切换为root账户,变量设定方式为no-login shell,环境变量不会改变(还是原来的用户的变量环境) |
15.3.2 sudo
1 | $ sudo -u yxl touch /home/yxl/sudotest # 使用yxl帐号建立sudotest |
15.3.3 visudo和/etc/sudoers
案例一:让 yxl 可以通过 sudo 切换为 root ,限制仅可以使用 passwd 帮助 anderson 修改帐号的密码,但不能修改 anderson 的密码
1 | $ sudo visudo |
案例二:针对案例一优化,以一种更加有弹性更易扩展维护的方式设置[1-23]
1 | $ sudo visudo |
案例三:sudo 搭配 su 实现普通帐号在不知道 root 密码的情况下使用 root 身份进行工作(sudo su -)
☑ 注意:仅在这些帐号您都十分信任的情况下
1 | $ sudo visudo |
15.4 用户的特殊shell与PAM模块
15.4.1 nologin shell
我的 ubuntu 的 nologin shell 为 /usr/sbin/nologin,而且我没在 /etc/下找到 nologin.txt ,新建了一个也不起作用。
15.4.2 passwd呼叫PAM接口的过程
以下的学习平台更换为centos 6.4 on vmware 10.0.1
15.4.3 PAM控制旗标所造成的回报流程
15.4.4 centos 6的PAM预设档案(相关配置文件)
1 | /etc/pam.d/login # 登入系统执行的pam验证流程 |
15.4.5 pam模块
1 | $ ll /usr/share/doc/pam-1.1.1/txts/ # txts底下每个README文件对应一个模块 |
常用模块介绍
pam_security.so
pam_nologin.so
pam_selinux.so
pam_console.so
pam_loginuid.so
pam_env.so
pam_unix.so
pam_cracklib.so
pam_limits.so
案例
为什么root无法以telnet远程登录系统,但是却可以使用ssh直接登入?
15.4.5 pam验证机制流程
15.4.6 其它pam相关档案及其设定
/etc/security/limits.conf
通过对该档案的设置实现对用户的限制(ulimit)
案例一:用户user1只能建立的档案总大小100m以内,而且大于90时会警告[1-30]
1 | $ sudo vim /etc/security/limits.conf |
案例二:限制pro1这个群组,每次仅能有一个用户登入系统(maxlogins)
1 | $ sudo vim /etc/security/limits.conf |
☑ 注意
- 设定完成即生效
- 程序呼叫pam是才会设定,因此对已经登录的用户无效
/var/log/secure
无法登陆等错误会被记录在这个档案,当发生各种登陆错误时可以到这里看看问题点。
以下的学习平台更换为ubuntu13.10
15.5 linux主机上的用户信息传递
15.5.1 查询使用者 w,who,last,laslog
1 | $ w # 查看已经登入系统的用户(信息更加详细,可读性稍差) |
15.5.2 不同账号之间对话 write,mesg,wall
案例一:打开两个终端,向另一个终端上的自己发送信息:hi,don’t do anything stuipid!
1 | $ who # 查看当前所在登录的用户及其登录的终端 |
15.5.3 邮件信箱 mail
☑ 注意:理论上应该有/home/anderson/mbox(阅读后q退出的邮件的位置)
1 | $ user -D # 发现我的系统建立用户帐号时不会自动创建邮箱 |
案例一:向yxl发邮件信息,主题:nice to meet you
第一种方式:终端输入stdin
1
2
3
4$ mail yxl -s "nice to meet you"
Hello,Ms Yi.Nice to meet you.YOu are so nice.
. # 最后一行输入小数点代表结束输入
Cc: # 抄送 不需要的话直接Enter
第二种方式:数据流重导向
1 | $ mail yxl -s "nice to meet you" < ~.bashrc ----将~.bashrc发给yxl |
案例二:写一封邮件~/mailtest重导向发给自己并查阅后离开
1 | $ mail -s "what's up" anderson < ~.bashrc |
几个常见的指令:h d s x q
15.6 手动建立帐号
15.6.1 帐号检查工具
1 | $ sudo pwck # 检查/etc/passwd ,/etc/shadow的字段错误以及帐号家目录是否存在等 |
15.6.2 帐号建立
以下的学习平台更换为centos 6 on vmware10.0.1
案例一:手动建立帐号nobody,所在群组nobodyteam
1 | # 一:建立群组并同步 |
案例二:大量建立账号脚本
第一种:通过编辑好的记录账号名文件结合脚本创建(适合没有规律的账户名)
第二种:通过脚本自动生成账号内容并建立 (适合有规律的账号名)
1 | #/bin/bash |
案例三:将服务器账号分开管理,分为单纯邮件使用与可登入系统账号两种。其中若为纯邮件使用者,将该账号加入mail为初始群组,切此账号不可使用bash等sheel登入系统。若为可登入账号,将该账号加入youcan这个次要群组。
第一步:查看群组是否已经存在
1 | $ grep mail /etc/group |
第二步:简历三个纯邮件账号
1 | $ vim popuser.sh |
第三步:建立一般登陆账号
1 | $ vim loginuser.sh |
第四步:执行
1 | $ sh popuser.sh;sh loginuser.sh |