We consider the problem of reaching agreement in a distributed message-passing system prone to crash failures. Crashes are generated by Constrained adversaries - a Weakly-Adaptive adversary, who has to fix, in advance, the set of f crash-prone processes, and a k-Chain-Ordered adversary, who orders all the processes into k disjoint chains and has to follow this order when crashing them. Apart from these constraints, both of them may crash processes in an adaptive way at any time. While commonly used Strongly-Adaptive adversaries model attacks and Non-Adaptive ones - pre-defined faults, Constrained adversaries model more realistic scenarios when there are fault-prone dependent processes, e.g., in hierarchical or dependable software/hardware systems. In this view, our approach helps to understand better the crash-tolerant consensus in more realistic executions. We propose time-efficient consensus algorithms against such adversaries. We complement our algorithmic results with (almost) tight lower bounds, and extend the one for Weakly-Adaptive adversaries to hold also for (syntactically) weaker Non-Adaptive adversaries. Together with the consensus algorithm against Weakly-Adaptive adversaries (which automatically translates to the Non-Adaptive adversaries), these results extend the state-of-the-art of the popular class of Non-Adaptive adversaries, in particular, the result of Chor, Meritt and Shmoys , and prove separation gap between Constrained adversaries (including Non-Adaptive ones) and Strongly-Adaptive adversaries, analyzed by Bar-Joseph and Ben-Or  and others.