2014年5月17日星期六

SQL Server 无法连接(Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

.net web程序运行时出错:

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)

1、查看原因是数据库没有启动,然后尝试启动数据库,无法启动并报错。

2、查看windows日志->应用程序日志,找到SQL Server的错误日志,可以看到错误日志EventID为17058。然后解决EventID:17058的问题。


出现错误:SQL Server默认实例(MSSQLSERVER)无法启动,错误代码:17058


日志错误信息:
initerrlog: Could not open error log file 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG'. Operating system error = 5(Access is denied.).

The event ID in the application log is 17058. Also the following error message appears in the system log 

The SQL Server (MSSQLSERVER) service terminated with service-specific error 17058 (0x42A2).

分析原因:安装AD后,系统改为使用域用户登陆,原先安装SQL时设置的“本地用户”信息已经修改,当前(域)用户没有权限访问MSSQLSERVER实例文件夹或整个SQL文件夹

解决方法:
1、打开“服务”,找到SQL Server(MSSQLSERVER)服务(或设置实例所对应的服务),查看属性,在“登陆”标签中选择“本地系统账户”


2、为保险起见,进行这步操作:打开SQL Server Configuration Manager(SQL Server配置管理器),在SQL Server Service(SQL Server服务)中找到对应实例(名称和“服务”中的名称相同)。在“登陆”标签中选择“内置账户”,并选择“Local System”(全其他如NETWORK SERVICE也可以,但要保证有权限)

3、启动SQL Server(MSSQLSERVER)服务。

4、如果还是出错(如126错误),那么进入SQL Server的安装目录,给整个安装目录分配NETWORK SERVICE及当前登录用户的权限,特别是实例所在目录,以及数据库文件相关目录,分配写权限。完成后再次启动服务。

结果:成功启动SQL Server(MSSQLSERVER)服务。

2014年5月11日星期日

ssh配置密钥登录

1、在你的mac端,使用ssh-keygen生成一对密钥,一对密钥包含公钥和私钥。
ssh-keygen命令使用:
ssh-keygen -t type -f output_keyfile 

我们可以给密钥起一个名字,因为可能出现不同的密钥登录不同服务器。如果不采用 -f 命名,默认名字为id。 

eg. ssh-keygen -t rsa -f mylinux
如果创建成功会在当前目录下生成 mylinux 和 mylinux.pub 两个文件。


2、在你的mac端,使用ssh-copy-id命令将公钥加入到远程主机的authorized_key上。(默认mac是没有ssh-copy-id命令)。

添加命令如:
ssh-copy-id -i mylinux.pub ywang@10.211.55.4

authorized_key位于你要登录的远程服务器的用户根目录的.ssh文件夹内,如果没有.ssh文件夹,会自动生成相应的文件夹和文件。



3、最后,在你的mac端,直接使用 ssh -i mylinux ywang@10.211.55.4就可以登录,如果密钥有passpharse,会提示你输入。


4、再最后,我不想在登录时候还要指定密钥是什么,想直接使用ssh ywang@10.211.55.4登录,这时候需要配置mac端的 .ssh/config 文件。

添加配置如:
Host 10.211.55.4
User ywang
Port 22
CheckHostIP yes

IdentityFile ~/.ssh/mylinux

这样ssh会自动搜索配置文件,根据不同的Host和User使用不同的密钥文件登录。

2014年5月7日星期三

ssh的scp

scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。

用法

传送文件到远程服务器
scp -P 2222 /home/filename root@192.168.1.2:/root/filename

获取远程服务器文件
scp -P 2222 root@192.168.1.2:/root/filename /home/filename

  1. 端口大写P为参数,2222 表示更改SSH端口后的端口,如果没有更改SSH端口可以不用添加该参数。 
  2. /home/filename表示本地上准备上传文件的路径和文件名。
  3. root@ 192.168.1.2 表示使用root用户登录远程服务器192.168.1.2
  4. :/root/filename 表示保存在远程服务器上目录和文件名。

2014年5月5日星期一

useradd 与 adduser

在Ubuntu中创建新用户,通常会用到两个命令:useradd和adduser。虽然作用一样,但用法却不尽相同:

1. 使用useradd时,如果后面不添加任何参数选项,例如:#sudo useradd test创建出来的用户将是默认“三无”用户:一无Home Directory,二无密码,三无系统Shell。

2. 使用adduser时,创建用户的过程更像是一种人机对话,系统会提示你输入各种信息,然后会根据这些信息帮你创建新用户。

useradd是一个ELF可执行程序

useradd会添加用户名,并创建和用户名相同的组名,但它并不在/home目录下创建基于用户名的目录,也不提示创建新的密码。

-b, –base-dir BASE_DIR 指定home目录的base目录

-d, –home-dir HOME_DIR 指定home目录

-g, –gid GROUP 指定gid

-l, –no-log-init do not add the user to the lastlog and

faillog databases

不要把用户添加到lastlog和failog中, 这个用户的登录记录不需要记载

-M, –no-create-home 不要建立home目录

-p, –password PASSWORD 指定新用户的密码

-r, –system 建立一个系统帐号

-s, –shell SHELL 指定shell

adduser -m -d /usr/system -s /bin/bash -p passwd system

adduser是一个perl脚本, 可以交互式地设定一些用户参数

问题:

adduser的-p 参数 并不能shadow密码

/usr/sbin/usermod 与 useradd的参数很类似

usermod –password PASSWORD username

总结上来讲,在Ubuntu中,adduser更适合初级使用者,因为不用去记那些繁琐的参数选项,只要跟着系统的提示一步一步进行下去就行,缺点就是整个创建过程比较复杂而漫长;而useradd比较适合有些高阶经验的使用者,往往一行命令加参数就能解决很多问题,所以创建起来十分方便。

OpenSSH配置文件

工作时电脑经常会存储不同的key,并且使用不同的用户登录linux系统。如:

ssh name@123.123.1.1
ssh user@123.122.1.145

解决方案:在~/.ssh/建立config文件(600权限)

Host *
User www
Port 22
CheckHostIP no
Compression yes
ForwardAgent yes

Host 114.80.119.*
User name
Port 22
IdentityFile ~/.ssh/mylinux


一般不需要修改OpenSSH客户端配置文件。对于给定用户,共有两个配置文件,分别是~/.ssh/config(用户专用)和/etc/ssh/ssh_config(全局共享)。要按照该顺序读取这些文件,对于给定的某个参数,它使用的是读取过程中发现的第一个配置。用户可以通过以下方式将全局参数设置覆盖掉:在自己的配置文件中设置同样的参数。在ssh或scp命令行上给出的参数的优先级要高于这两个文件中所设置的参数的优先级。

用户的~/.ssh/config文件必须由该用户所有(他是目录"~/"的所有者),并且除了所有者之外任何人都不能写入该文件。否则客户端就会给出一条错误消息然后退出。这个文件的模式通常被设为600,这是因为除了它的所有者之外任何人都没有理由能够去读取它。

这些配置文件中的配置行包含着声明,这些声明均以某个关键字(不区分大小写)开头,后面是空白,最后是参数(区分大小写)。


可以使用关键字Host来使声明只作用于特定的系统。Host声明作用于它与下一个Host声明之间的所有配置行。在主机名中,可以使用通配符*和?。

Host hostnames

将下面的声明(直到下一条Host声明)都指定为只适用于hostnames。hostnames采用的格式应该与在命令行上所用的格式一样,而且也能够包含通配符*和?。单个*指定所有主机。

User name

指定登录系统时所用的用户名。用Host声明来指定系统。该选项意味着,在远程系统上登录时,如果使用的用户名不同于在本地系统上登录所用的用户名,那么不必在命令行上输入用户名。

CheckHostIP yes|no

如果将其设置为yes(默认值),那么除了主机名之外,还可以采用IP地址来识别known_hosts文件中的某个系统。若设置为no,则只能使用主机名。

StrictHostKeyChecking yes | no | ask

决定OpenSSH是否将主机密钥添加到用户的known_hosts文件中以及如何添加。如果设置为ask(默认值),那么在连接新系统时会询问是否添加主机密钥;如果设置为no,就会自动添加主机密钥;如果设置为yes,就要求手工添加主机密钥。若将参数设置yes或ask,则当某系统的主机密钥发生改变之后,OpenSSH会拒绝连接到该系统。对于安全性要求较高的系统,请将此参数设置为yes或ask。

HostbasedAuthentication yes | no

若设置为yes,则尝试着进行rhosts身份验证。对于安全要求更高的系统,请将其设置为no(默认值)。

HostKeyAlgorithms algorithms

其中algorithms是一个由逗号隔开的算法列表,客户端按照优先级顺序依次使用这些算法。从ssh-rsa或ssh-dss中选择算法(默认值为"ssh-rsa, ssh-dss")。

ForwardX11 yes|no

如果设置为yes,则自动通过一条安全通道以不可信模式来转发X11连接,并设置shell变量DISPLAY。也可以在命令行上使用选项"-X"以不可信模式重定向X11连接。这个参数的默认值是no。要想让X11转发起作用,还必须将服务器上的/etc/sshd_config文件中的X11Forwarding设置为yes。更多信息请参见1.6节的"X11转发"部分。

ForwardX11Trusted yes | no

如果设置为yes,那么自动通过一条安全通道以可信模式来转发X11连接,并设置shell变量DISPLAY。也可以在命令行上使用选项"-Y"以不可信模式重定向X11连接。这个参数的默认值是no,但是Red Hat Linux将其设置为yes。要想让X11转发起作用,还必须将服务器上的/etc/sshd_config文件中的X11Forwarding设置为yes。更多信息请参见1.6节的"X11转发"部分。

TCPKeepAlive yes | no

如果设置为yes(默认值),就定期检查连接是否存活。如果服务器崩溃或者由于其他原因导致连接死掉,那么这种检查将会导致ssh或scp连接中断,即便只是暂时的。若将这个参数设置为no,则会导致客户端不去检查连接是否存活。

这项声明用到了TCP keepalive选项,它不可加密,并且容易受到IP欺骗(IP Spoofing)。如果希望采用能够防止IP欺骗的替代选项,可以采用基于服务器的相关技术,请参见1.4.6节的"ClientAliveInterval"部分。



2014年4月28日星期一

OpenSSH sshd进程

sshd服务是OpenSSH的守护进程。
sshd就是ssh daemon。
此服务附带的工具程序可以取代rlogin和rsh,在两台会话的主机间通过非安全的Internet建立起安全的加密连接。sshd监听来自客户端的连接请求,并在接收到请求时fork一个子进程;此子进程将负责处理密钥交换、加密、认证、命令执行及数据传输等。可以使用命令行选项或者配置文件来配置启动sshd,但命令行中指定的选项将优先于配置文件中的相同选项。

-4 强制sshd仅接收来自IPv4格式地址的请求;

-6 强制sshd仅接收来自IPv6格式地址的请求;

-b 指定ssh v1中服务器密钥的长度位数;

-D 此选项只是用来监视sshd的启动状态,在附加此选项时,sshd不会作为一个守护进程启动;

-d 此选项将启动调试模式;sshd服务的启动状态会在前台显示,并把详细的调试信息输出至日志文件;此时, sshd不会fork新的子进程,因此仅仅能接受一个连接请求。此先项主要用来调试sshd;

-e 输出错误信息到日志文件,不包括正常的调试信息;

-f 此选项后接指定的配置文件;默认为/etc/ssh/sshd_config;

-g 此选项后跟一个时间期限,默认单位是秒,用来为客户端认证期间提供一个可以等待的期限;如果客户端在此指定期限内认证错误,sshd将断开连接并退出;0表示无时间限制;

-h 此选项后跟一个主机密钥文件,用来指定一个sshd启动时读取的主机密钥文件;在以非root身份启动sshd时必须指定此选项(因为默认的key文件只有root具有读权限);ssh v1默认的key文件为/etc/ssh/ssh_host_key,sshd v2默认的key为/etc/ssh/ssh_host_rsa_key以及/etc/ssh/ssh_host_dsa_key;可以为不同版本的协议及不同的密钥算法指定不同的key文件;

-i 此选项用来指定通过inetd守护进程启动sshd;sshd需要生成服务端密钥才能接受客户端的请求,这将需要大约10秒钟的时间,如果每个请求都重新生成一次密钥的话,客户端将不得不等待较长的时间,因此,默认情况下是不使用inet方式启动sshd的;如果使用较短长度的密钥,此选项将是一个颇富弹性的选择;

-k 此选项后跟一个时间期限,用来为ssh v1指定一个重新生成服务端key的时间间隔(默认为一个小时);如此频繁的生成密钥的目的在于不必存储密钥,因此,超过了一个小时后恢复通讯期间加密的数据几乎是不可能的,哪怕机器被攻入亦或被占据,这将在很大程度上提高了安全性;0表示不重新生成密钥;

-o 用来为配置文件指定一个新的可用选项;

-p 指定sshd服务监听的端口(默认是22),可以同时指定多个端口;如果使用此选项,则会忽略配置文件中指定的端口;
-q 安静模式,此种情况下将不会产生任何系统日志;正常情况下,服务启动、认证以及每一次终端登录都会被记录;

-t 测试模式,仅用来检查配置文件的正确性及密钥是否健壮;此选项多用在配置文件改动时;

六、sshd相关的文件详细说明

~/.hushlogin
如果配置文件中分别启用了PrintLastLog和PrintMotd选项,则此文件可以用来在屏幕显示前一次的登录时间以及/etc/motd的内容。但不会显示Banner选项指定的banner。

~/.rhosts
此文件主要用来实现主机间的认证。如果你的主机上有些用户的主目录位于NFS文件系统上,则必需把这个文件的权限置为全局可读,因为sshd进程将以root的身份读取此文件。此外,此文件属主必须为相关用户,且其他任何用户均不能具有写权限。一般推荐的权限为600。

~/.ssh/authorized_keys
此文件存储的是用户的公钥,当其远程登录时可以用此公钥为其进行认证。公钥信息并非要求高度安全性的文件,但仍推荐将其权限置为700。如果此文件、~/.ssh目录或者此用户的主目录能被其他用户读取,则此文件将可能被其他非授权用户修改或置换。
此种情况下,除非在主配置文件中把StrictModes的值置为"no",否则sshd将不允许使用此文件。

~/.ssh/environment
如果此文件存在,将会在用户登录时读入用户的环境。它只能包含空行、以"#"开头的注释行以及形如“name=value”赋值行,推荐权限为600。默认情况下此功能是禁止的,可以通过PermitUserEnviroment选项开启。

~/.ssh/known_hosts
用户曾成功登入过的主机的host key都将存放于此文件,但不包括系统间已经互相成功认证的主机host key,只能让root和属主具有读写权限。

~/.ssh/rc
此文件用来在用户的主目录不能正常访问前初始化用户的登录环境,其权限应该为600。

/etc/host.equiv
用于主机间的认证,只能让root用户可写。

/etc/nologin
如果这个文件存在,sshd将拒绝除root用户外的任何其他用户登录。在任何用户在尝试登录时,此文件都将被显示,但所有非root用户将被拒绝。此文件应该是全局可读的。

/etc/ssh/ssh_known_hosts
存入系统级别的互相认证时已知主机的host key。这个文件需要管理员手动配置,可以将已知主机的公钥存入于此文件。此文件只能为root或属主读写,但应该是全局可读的。

/etc/ssh/ssh_host_key
/etc/ssh/ssh_host_dsa_key
/etc/ssh/ssh_host_rsa_key
以上三个文件用来存放主机密钥的私钥部分,它们的属主只能为root用户,只能被root用户读取,不能为其他任何用户访问。如果其他用户可以读取此文件,则sshd将不能启动。

/etc/ssh/ssh_host_key.pub
/etc/ssh/ssh_host_dsa_key.pub
/etc/ssh/ssh_host_rsa_key.pub
以上三个文件用来存放主机密钥的公钥部分,它们应该是全局可读的,但只有root用户可写。它们分别对应相应的私钥文件。这些文件并没有什么实际用途,仅仅是用来为用户认证登录提供便利,因此常被copy至其它可信的主机中。可以使用ssh-keygen来生成这些文件。

/etc/ssh/sshd_config
sshd的主配置文件;

2014年4月26日星期六

SSH、OpenSSH 使用和配置

SSH是一种网络协议,用于计算机之间的加密登录。

OpenSSH是SSH协议的免费开源实现。SSH协议族可以用来进行远程控制,或在计算机之间传送文件。而实现此功能的传统方式,如telnet(终端仿真协议)、 rcp ftp、 rlogin、rsh都是极为不安全的,并且会使用明文传送密码。

OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控件和文件传输过程中的数据,并由此来代替原来的类似服务。

  1. ssh分为openssh-client和openssh-server
  2. ssh登录命令:ssh [-p port] [user@]hostname
  3. 如果修改过登录端口,需要添加端口 ssh -p 12345 root@x.x.x.x
  4. 我们需要安装ssh-server用于远程用户的ssh登录,ubuntu可以apt-get install openssh-server,然后查看sshd进程是否启动 ps -e|grep sshd,如果启动则远程用户可以通过ssh登录了。

ssh配置文件 /etc/ssh/sshd_config

  1. 可以修改ssh登录端口,默认端口22,改端口可以防止被端口扫描
  2. 可以禁止root登录,permitRootLogin no
  3. 可以禁止密码登录
  4. LoginGraceTime 20,意思为:通过sshd登陆服务器后,必须在出现操作提示符20秒内登陆,只要超时,sshd会自动切断连接。
  5. PermitRootLogin without-password,意思为:禁止root帐户使用用户名+密码认证方式登陆,只能使用公共密钥方式登陆。
  6. PasswordAuthentication no,意思为:禁止使用用户名+密码认证方式登陆,只能使用公共密钥方式登陆。
  7. LogLevel VERBOSE,意思为:在日志中记录更多的有关登陆成功和登陆失败的信息。

ssh重启

  1. service ssh restart
  2. /etc/init.d/ssh restart

ssh的log文件保存在/var/log/auth.log


ssh允许和拒绝用户和用户组
  1. DenyUsers, AllowUsers, DenyGroups, and AllowGroups
  2. DenyUsers aaa,拒绝aaa用户登录
  3. AllowGroups groupname,groupname为系统用户的组,此keyword设置只能该组的用户登录