唉!学linux实在有有点天赋不足啊!!!
linux用户分类
root 用户:系统唯一,是真实的,可以登录系统,可以操作系统任何文件和命令,拥有最高权限;
虚拟用户:这类用户也被称之为伪用户或假用户,与真实用户区分开来,这类用户不具有登录系统的能力,但却是系统运行不可缺少的用户,比如bin、daemon、adm、ftp、mail等;这类用户都系统自身拥有的,而非后来添加的,当然我们也可以添加虚拟用户;
普通用户:这类用户能登录系统,但只能操作自己家目录的内容;权限有限;这类用户都是系统管理员自行添加的;
在使用adduser命令时,它会添加这个用户名,并创建和用户名名称相同的组名,并把这个用户名添加到自己的组里去,并在/home目录下创建和用户名同名的目录,并拷贝/etc/skel目录下的内容到/home/用户名/的目录下,并提示输入密码,并提示填写相关这个用户名的信息。用adduser命令创建的是一个系统用户,可以用这个用户名来登陆系统。删除用户用命令userdel -r testname。
guanfei@guanfei-desktop:~$ sudo adduser testname 正在添加用户"testname"... 正在添加新组"testname" (1001)... 正在添加新用户"testname" (1001) 到组"testname"... 创建主目录"/home/testname"... 正在从"/etc/skel"复制文件... 输入新的 UNIX 密码: 重新输入新的 UNIX 密码: passwd:已成功更新密码 Changing the user information for testname Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: 这个信息是否正确? [Y/n] y
在使用命令useradd时,它会添加这个用户名,并创建和用户名相同的组名,但它并不在/home目录下创建基于用户名的目录,也不提示创建新的密码。用useradd命令创建的是一个普通用户,不能用这个用户名来登陆系统。删除用命令userdel myadmin。
建工作组
groupadd test //新建test工作组
给已有的用户增加工作组
usermod -G groupname username
查看当前用户的工作组:groups,会显示出该用户所有的工作组
guanfei@guanfei-desktop:~$ groups guanfei adm dialout cdrom plugdev lpadmin admin sambashare
其中第一个为有效用户组。
一个用户所拥有的所有用户组可以分为两种:
一是初始用户组,即在/etc/passwd中定义的GID的用户组,用户在一登录的时候就会主动取得,不用在/etc/group中写入
二是非初始用户组,需要在/etc/group中找到users哪一行,将用户帐号加入。
在用户去建立一个文件或目录的时候,新文件或目录的拥有组是当前有效用户组,及通过groups命令显示在第一个的用户组。可以通过newgrp adm命令切换当前有效组为adm。
可以去调整用户账户的信息,包括帐号说明,帐号家目录,group,shell文件,是否冻结等等。
例:
usermod -c "hello world!" guanfei //调整账户说明,即修改/etc/passwd中的对应列的值 usermod -L guanfei //冻结该账户,即在/etc/shadow中加入密码栏中加入感叹号 usermod -U guanfei //解冻 usermod -d /home/hello guanfei //修改家目录,即对应的/etc/shadow中对应列的值
...
passwd -l username //冻结账户 passwd -u username //解冻
...
su:切换到root身份,需要输入root密码,但是环境变量使用当前用户的环境变量 su -:切换到root身份,需要输入root密码,但是环境变量重新去读取root的配置 su - -c "head /etc/shadow":仅以root身份执行一次代码,环境变量采用root的,因为是su - su -l username:切换到username,环境变量采用username的 su -m username:切换到username,环境变量使用原来的。
缺点,切换的时候需要切换到用户的密码,不安全
sudo命令执行:首先系统去找/etc/sudoers文件,判断用户是否有执行的权限,确认有执行sudo的权限后要求输入用户自己的密码,密码输入成功,则继续执行相应的操作。//注:是输入自己的密码
Defaults env_reset root ALL=(ALL) ALL %sudo ALL=(ALL) ALL %admin ALL=(ALL) ALL guanfei ALL=NOPASSWD:ALL
root ALL=(ALL) ALL的意思是:
root用户,不论来自哪里,都可以变换成为linux本机上的任何用户执行所用命令
如果(ALL)变成(WWW),则意味着只能变成WWW的身份,如果写成root ALL=ALL,则默认仅能进行root身份的切换。
如果想直接对一个用户组进行设置,则可以写为:%root ALL=(ALL) ALL,表示root用户组内的所有帐号都按照这个设置来。
如果希望在转换身份的时候不想输入密码,则设置为:guanfei ALL=(ALL)NOPASSWD:ALL
可以通过User_Alias和Cmnd_Alias去对一些用户或者操作设置别名,例:
User_Alias USER = vbird, dmtsai Cmnd_Alias DNSCMD = /etc/init.d/named,/usr/bin/vim USER ALL = DNSCMD
用法:id [选项]... [用户名] 显示指定用户或当前用户(当未指定用户时)的用户与组信息。 -a 忽略,仅为与其他版本相兼容而设计 -Z, --context 仅显示当前用户的安全环境 -g, --group 仅显示有效的用户组ID -G, --groups 显示所有组的ID -n, --name 显示组名称而非数字,不与-ugG 一起使用 -r, --real 显示真实ID 而非有效ID,与-ugG 一起使用 -u, --user 仅显示有效用户ID --help 显示此帮助信息并退出 --version 显示版本信息并退出 guanfei@guanfei-desktop:/etc/skel$ id guanfei uid=1000(guanfei) gid=1000(guanfei) 组=1000(guanfei),4(adm),20(dialout),24(cdrom),46(plugdev),105(lpadmin),119(admin),122(sambashare)
对应文件内容及含义分析如下:
账户名称 | 密码 | 用户ID | 组ID | 描述信息 | 用户根目录 | 用户登录shell |
root | x | 0 | 0 | root | /root | /bin/bash |
guanfei | x | 1000 | 1000 | guanfei,,, | /home/guanfei | /bin/bash |
帐号名称:帐号名称由于对应用户ID,这个是系统默认用户root超级管理员,在同一个系统帐号名称是唯一的,长度根据不同的linux系统而定,一般是8位。
密码:由于系统中还有一个/etc/shadow文件用于存放加密后的口令,所以在这里这一项是"x"来表示,如果用户没有设置口令,则该项为空。
用户ID:这个是系统内部用于来识别不同的用户的,不同的用户识别码不同,其中用户ID有以下几种:
0代表系统管理员,如果你想建立一个系统管理员的话,可以建立一个普通帐户,然后将该账户的用户ID改为0即可。
1-500系统预留的ID,500以上是普通用户使用。
组ID:其实这个和用户ID差不多,用来规范群组,他与/etc/group有关。
描述信息:这个字段几乎没有什么作用,只是用来解释这个帐号的意义。
用户根目录:就是用户登录系统的起始目录,用户登录系统后将首先进入该目录。root用户默认的是/root,普通用户的是/home/用户名。
用户登录shell:就是用户登录系统时使用的shell,关于shell我们会在以后专门的研究一下。
需要已root权限才能够读到
帐户名称 | 密码 | 上次改动密码的日期 | 密码不可被改动的天数 | 密码过期时间 |
密码的过期警告时间 |
密码过期,系统自动禁用账户天数 | 该账户被禁用的天数 |
root | ! | 14797 | 0 | 99999 | 7 | ||
guanfei | $6$eoDlMbZq$5Z5nkeO9M | 14797 | 0 | 99999 | 7 |
帐户名称:和passwd对应,和passwd的意思相同。
密码:这才是真正的密码,并且已经加密过了,只能看到一些特殊符号。需要注意的是这些密码很难破解,但是不等于不能。还有密码栏的第一个字符为"*"或者"!"表示这个用户不用来登录,如果那个用户不想让他登录了,可以在他前面加个星。
上次改动密码的日期:这段记录了改动密码的最后日期,为什么是13798呢?这是因为linux计算日期的方法是以1970年1月1日作为1,1971年1月1日就是366,依次类推到我修改密码的日期表示为13798了。
密码不可被改动的天数:
密码过期天数:由于害怕密码被人盗取而危害到整个系统的安全,所以安排了这个字段,你必须在这个时间内重新修改密码,否则这个帐号将暂时失效。上面的99999,表示密码不需要重新输入,最好设定一段时间修改密码。确保系统安全。
密码变更期期限快到前的警告期:当帐号的密码失效期限快到时,系统依据这个字段的设定发出警告,提醒用户"再过n天您的密码将过期,请尽快重新设定密码。默认的是七天。
帐号失效期:如果用户过了警告期没有重新输入密码,使得密码失效,而该用户在这个字段限定的时间内又没有向管理员反映,让帐号重新启用,那么这个帐号将暂时失效。
保留:最后一个字段是保留的,看以后有没有新功能加入。
群组名称 | 群组密码 | 群组ID | 支持帐号的名称 |
root | x | 0 | |
adm | x | 4 | guanfei |
群组名称:就是群组的名称了。
群组密码:通常不需设定,因为我们很少使用群组登录。不过这个密码也被记录在/etc/gshadow中了。
群组ID:也就是组ID了。
支持帐号的名称:这个群组的所有帐号。如果你想让用户qiuri也属于root这个群组,就在第一行最后加上",qiuri"注意添加的时候没有空格。
通常不会用,不研究。
现在我电脑上的这个文件中只有这一行有效的配置。
SHELL=/bin/sh
可能出现的情况
# useradd defaults file GROUP=100 HOME=/home 注:把用户的家目录建在/home中; INACTIVE=-1 注:是否启用帐号过期停权,-1表示不启用; EXPIRE= 注:帐号终止日期,不设置表示不启用; SHELL=/bin/bash 注:所用SHELL的类型; SKEL=/etc/skel 注: 默认添加用户的目录默认文件存放位置;也就是说,当我们用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的;
guanfei@guanfei-desktop:/etc/skel$ ls -la 总用量 32 drwxr-xr-x 2 root root 4096 2010-04-27 18:51 . drwxr-xr-x 142 root root 12288 2010-08-23 19:53 .. -rw-r--r-- 1 root root 220 2010-04-19 09:51 .bash_logout -rw-r--r-- 1 root root 3103 2010-04-19 09:51 .bashrc -rw-r--r-- 1 root root 179 2010-03-26 20:31 examples.desktop -rw-r--r-- 1 root root 675 2010-04-19 09:51 .profile
/etc/skel 目录下的文件,一般是我们用useradd 和adduser 命令添加用户(user)时,系统自动复制到新添加用户(user)的家目录下;如果我们通过修改 /etc/passwd 来添加用户时,我们可以自己创建用户的home目录,然后把/etc/skel 下的文件复制到用户的家目录下,然后要用chown 来改变新用户家目录的属主;
/etc/login.defs 文件是当创建用户时的一些规划,比如创建用户时,是否需要家目录,UID和GID的范围;用户的期限等等,这个文件是可以通过root来定义的.
MAIL_DIR /var/mail 注:创建用户时,要在目录/var/spool/mail中创建一个用户mail文件; FAILLOG_ENAB yes LOG_UNKFAIL_ENAB no LOG_OK_LOGINS no SYSLOG_SU_ENAB yes SYSLOG_SG_ENAB yes FTMP_FILE /var/log/btmp SU_NAME su HUSHLOGIN_FILE .hushlogin ENV_SUPATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ENV_PATH PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games TTYGROUP tty TTYPERM 0600 ERASECHAR 0177 KILLCHAR 025 PASS_MAX_DAYS 99999 PASS_MIN_DAYS 0 PASS_WARN_AGE 7 UID_MIN 1000 UID_MAX 60000 GID_MIN 1000 GID_MAX 60000 LOGIN_RETRIES 5 LOGIN_TIMEOUT 60 CHFN_RESTRICT rwh DEFAULT_HOME yes 注:是否创用户家目录,要求创建 ENCRYPT_METHOD SHA512