linux下创建用户
1、添加ftp用户
useradd ftpname -d /home/ftp
passwd ftppwd
以下操作都以root权限进行:
service vsftpd start 启动Linux自带的FTP服务
2. 添加普通用户
useradd nagios –d /usr/local/nagios
chown nagios.nagios /usr/local/nagios
将用户切换到nagios 用户,添加nagios的访问用户:
su nagios
htpasswd –c /usr/local/nagios/etc/htpasswd.users nagiosadmin
系统会提示输入两次密码,例如两次输入nagios。
注: 这是第一次创建用户,需要“-c”选项,表示创建一个存放用户名和密码的文件,当再次添加用户或修改密码时不用“-c”选项。
添加新的用户账号使用useradd命令,其语法如下:
useradd 选项 用户名
其中各选项含义如下:
-c comment 指定一段注释性描述。
-d 目录 指定用户主目录,如果此目录不存在,则同时使用-m选项,可以创建主目录。
-g 用户组 指定用户所属的用户组。
-G 用户组,用户组 指定用户所属的附加组。
-s Shell文件 指定用户的登录Shell。
-u 用户号 指定用户的用户号,如果同时有-o选项,则可以重复使用其他用户的标识号。
用户名 指定新账号的登录名。
例如:
# useradd –d /usr/sam -m sam
此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录)。
# useradd -s /bin/sh -g group –G adm,root gem
此命令新建了一个用户gem,该用户的登录Shell是/bin/sh,它属于group用户组,同时又属于adm和root用户组,其中group用户组是其主组。
增加用户账号就是在/etc/passwd文件中为新用户增加一条记录,同时更新其他系统文件如/etc/shadow, /etc/group等。这几个文件的内容在后面会做详细介绍。
Linux提供了集成的系统管理工具userconf,它可以用来对用户账号进行统一管理。
如果一个用户的账号不再使用,可以从系统中删除。删除用户账号就是要将/etc/passwd等系统文件中的该用户记录删除,必要时还删除用户的主目录。删除一个已有的用户账号使用userdel命令,其格式如下:
userdel 选项 用户名
常用的选项是-r,它的作用是把用户的主目录一起删除。
例如:
# userdel sam
此命令删除用户sam在系统文件中(主要是/etc/passwd, /etc/shadow, /etc/group等)的记录,同时删除用户的主目录。
修改用户账号就是根据实际情况更改用户的有关属性,如用户号、主目录、用户组、登录Shell等。
修改已有用户的信息使用usermod命令,其格式如下:
usermod 选项 用户名
常用的选项包括-c, -d, -m, -g, -G, -s, -u以及-o等,这些选项的意义与useradd命令中的选项一样,可以为用户指定新的资源值。另外,有些系统可以使用如下选项:
-l 新用户名
这个选项指定一个新的账号,即将原来的用户名改为新的用户名。
例如:
# usermod -s /bin/ksh -d /home/z –g developer sam
此命令将用户sam的登录Shell修改为ksh,主目录改为/home/z,用户组改为developer。
用户管理的一项重要内容是用户口令的管理。用户账号刚创建时没有口令,但是被系统锁定,无法使用,必须为其指定口令后才可以使用,即使是指定空口令。
指定和修改用户口令的Shell命令是passwd。超级用户可以为自己和其他用户指定口令,普通用户只能用它修改自己的口令。命令的格式为:
passwd 选项 用户名
可使用的选项:
-l 锁定口令,即禁用账号。
-u 口令解锁。
-d 使账号无口令。
-f 强迫用户下次登录时修改口令。
如果默认用户名,则修改当前用户的口令。
例如,假设当前用户是sam,则下面的命令修改该用户自己的口令:
$ passwd
Old password:******
New password:*******
Re-enter new password:*******
如果是超级用户,可以用下列形式指定任何用户的口令:
# passwd sam
New password:*******
Re-enter new password:*******
普通用户修改自己的口令时,passwd命令会先询问原口令,验证后再要求用户输入两遍新口令,如果两次输入的口令一致,则将这个口令指定给用户;而超级用户为用户指定口令时,就不需要知道原口令。
为了系统安全起见,用户应该选择比较复杂的口令,例如最好使用8位长的口令,口令中包含有大写、小写字母和数字,并且应该与姓名、生日等不相同。
为用户指定空口令时,执行下列形式的命令:
# passwd -d sam
此命令将用户sam的口令删除,这样用户sam下一次登录时,系统就不再询问口令。
passwd命令还可以用-l(lock)选项锁定某一用户,使其不能登录,例如:
# passwd -l sam
用户登录过程
1) 使用tty1~tty7终端机提供的login接口,输入账号和密码
2) 读取账号信息文件/etc/passwd,查看账号是否存在,若存在则读取UID、GID、宿主目录、shell目录,进行下一步(早期的UNIX系统密码也在passwd文件中,后来出于安全方面的考虑,将密码数据存放到/etc/shadow文件中了)
3) 读取密码信息文件/etc/shadow,根据用户名验证密码是否一致,若一致则进入shell执行阶段。
账号信息文件/etc/passwd
/etc/passwd文件是系统能够识别用户的一份清单。在用户登录期间,系统查询这个文件,确定用户的UID并验证用户的口令(早期的密码保存在passwd的第二个字段中,后来出于安全方面的考虑,将密码信息单独保存在/etc/shadow文件中)。/etc/passwd文件的权限为644,所有者和所属组为root。这个文件中的每一行都代表一个用户,它包含7个由冒号分割的字段:
root:x:0:0:test:/root:/bin/bash
登录名:密码或占位符(x):UID:GID:GECOS字段:主目录:登录shell
1) 登录名
用户名必须是唯一的,长度一般不超过32个字符。如果使用了NIS系统,登录名的长度需要限制在8个字符以内。用户名大小写敏感。
2) 密码
早期的UNIX系统的密码存放在这个字段上,但是由于所有的程序都能读取passwd文件,这样很容易造成安全隐患,因此后来就将加密后的口令放在/etc/shadow文件中了。
如果通过手工编辑/etc/passwd文件来创建一个账号,那么要在加密口令字段添加一个星号或者一个占位符x,星号可以防止在设置一个真实的口令之前发生未经授权使用该账号的情况,如果该字段为空则不用口号就可以访问该账号,占位符x会去/etc/shadow文件中读取口令信息。
3) UID
UID是32位的无符号整数。多个账号可以有相同的UID,而一个账号只能有一个UID。比较安全的用法是保持UID的唯一性,即一个特定的UID在每台计算机上都应该指的是相同登录名和同一个用户,可以避免工作组迁移时造成账号信息混乱。同时还要避免许多账号共用一个UID,因为共用一个UID虽然多个具有不同shell和口令的登录账户似乎比较方便,但这种设置会产生更多潜在的安全隐患。
4) GID
和UID类似,组的ID是一个32位的整数。GID 0是给超级用户root的组保留的,GID 1是名为“bin”的组,GID 2是“daemon”组。组在/etc/group文件中定义,/etc/passwd中的GID字段在登录时提供默认(或有效)GID,在判断访问权限时不是特别看重默认GID,而在创建新文件和新目录时才起作用,新文件一般由用户的有效组所有。新文件默认为父目录的组所有。
5) GECOS字段
GECOS字段通常用来记录每个用户的个人信息。最初GECOS字段是用来保存登录信息的。使用finger命令会按特定顺序来解释哪些用逗号隔开的GECOS选项。chsh命令可以让用户修改他们自己的GECOS信息。
6) 主目录
当用户登录之后,他们的shell就进入到自己的主目录中。root用户的主目录是/root。创建用户时,linux系统默认会为新用户创建宿主目录,默认宿主目录为/home/Username,并且将/etc/skel下的所有文件拷贝到用户的宿主目录。
如果把/etc/login.defs中的DEFAULT_HOME设为no,那么就会禁止没有主目录的用户登录。否则登录后用户会处在根目录下。
7) 登录shell
bash是默认的shell,如果/etc/passwd中没有指定一个登录shell,就会使用bash。用户可以使用chsh命令来改变自己所使用的shell,文件/etc/shells中包含了chsh命令允许用户选择使用的有效shell的列表。
密码文件 /etc/shadow
只用超级用户才可以读/etc/shadow,它用于保护加密口令的安全。还提供了无法从/etc/passwd得到的账号信息。有些发行版本采用的是隐藏口令系统,这时/etc/passwd文件中口令字段一定要包含一个x。
/etc/shadow文件的权限是400,所有者和所属组是root。
/etc/shadow中每个用户有一行信息,每行用冒号分隔为9个字段:
1) 登录名:与/etc/passwd中的登录名相同,联系用户在passwd和shadow中的记录
2) 加密的口令
3) 上次修改口令的时间
4) 两次修改口令指尖最少的天数
5) 两次修改口令指尖最多的天数
6) 提前多少天警告用户口令即将过期
7) 在口令过期之后多少天禁用账号
8) 账号过期的日期
9) 保留字段,目前为空
可以在/etc/login.defs文件中进行相关设置。
组文件/etc/group与/etc/gshadow
/etc/group文件记录了与组相关的信息。/etc/group的权限为644,所有者和所属组为root。
每一行代表了一个组,其中包含4个字段:
1) 组名
2) 加密的口令或者包含一个占位符x,表明有一个/etc/gshadow文件
3) GID号
4) 成员列表,用逗号隔开
有效用户组(effective group)与初始用户组(initial group)
在/etc/passwd里面第四段列出的GID为用户的“初始用户组”,当用户登录系统时,就用户这个组的相关权限。而一个用户不但拥有私有组,还可以用户附加组,这时对于已经存在的文件用于在两个组内都有权限,如果此时要创建一个新的文件或新目录,这个新文件是属于用户的私有组还是附加组呢?这就要查看当时用户的“有效用户组”了。
可以使用groups命令查看当前用户的有效用户组,使用newgrp命令切换“有效用户组”,你想要切换的用户组必须是你已经支持的用户组,newgrp切换有效用户组时,会以一个新用户组的shell来提供这个功能。newgrp – log in to a new group.
/etc/gshadow文件与/etc/shadow的概念类似,权限为400,拥有者和组为root,分为4个字段:
1) 用户组名
2) 密码列,如果是感叹号,则表示无合法密码,没有用户组管理员(QQ群管理员,非创建者)
3) 用户组的管理员账号
4) 该用户组的所属账号(与/etc/group内容相同)